@lokascript/i18n 2.7.2 → 2.8.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.
Files changed (60) hide show
  1. package/README.md +1 -1
  2. package/dist/browser.cjs +649 -180
  3. package/dist/browser.cjs.map +1 -1
  4. package/dist/browser.d.cts +2 -2
  5. package/dist/browser.d.ts +2 -2
  6. package/dist/browser.js +649 -180
  7. package/dist/browser.js.map +1 -1
  8. package/dist/dictionaries/index.cjs +370 -174
  9. package/dist/dictionaries/index.cjs.map +1 -1
  10. package/dist/dictionaries/index.js +370 -174
  11. package/dist/dictionaries/index.js.map +1 -1
  12. package/dist/index.cjs +649 -180
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +35 -35
  15. package/dist/index.d.ts +35 -35
  16. package/dist/index.js +649 -180
  17. package/dist/index.js.map +1 -1
  18. package/dist/lokascript-i18n.min.js +1 -1
  19. package/dist/lokascript-i18n.min.js.map +1 -1
  20. package/dist/lokascript-i18n.mjs +678 -175
  21. package/dist/lokascript-i18n.mjs.map +1 -1
  22. package/dist/plugins/vite.cjs +370 -174
  23. package/dist/plugins/vite.cjs.map +1 -1
  24. package/dist/plugins/vite.js +370 -174
  25. package/dist/plugins/vite.js.map +1 -1
  26. package/dist/plugins/webpack.cjs +370 -174
  27. package/dist/plugins/webpack.cjs.map +1 -1
  28. package/dist/plugins/webpack.js +370 -174
  29. package/dist/plugins/webpack.js.map +1 -1
  30. package/dist/{transformer-DM7iplCU.d.cts → transformer--W46PGaW.d.cts} +8 -0
  31. package/dist/{transformer-BA8YX9u1.d.ts → transformer-FU06J6kG.d.ts} +8 -0
  32. package/package.json +7 -9
  33. package/src/dictionaries/ar.ts +20 -15
  34. package/src/dictionaries/bn.ts +10 -5
  35. package/src/dictionaries/de.ts +20 -8
  36. package/src/dictionaries/es.ts +10 -5
  37. package/src/dictionaries/fr.ts +15 -6
  38. package/src/dictionaries/he.ts +4 -0
  39. package/src/dictionaries/hi.ts +3 -2
  40. package/src/dictionaries/id.ts +31 -16
  41. package/src/dictionaries/it.ts +11 -4
  42. package/src/dictionaries/ja.ts +23 -15
  43. package/src/dictionaries/ko.ts +10 -5
  44. package/src/dictionaries/ms.ts +4 -1
  45. package/src/dictionaries/pl.ts +12 -5
  46. package/src/dictionaries/pt.ts +10 -5
  47. package/src/dictionaries/qu.ts +30 -19
  48. package/src/dictionaries/ru.ts +5 -2
  49. package/src/dictionaries/sw.ts +29 -14
  50. package/src/dictionaries/th.ts +5 -2
  51. package/src/dictionaries/tl.ts +4 -1
  52. package/src/dictionaries/tr.ts +24 -16
  53. package/src/dictionaries/uk.ts +5 -2
  54. package/src/dictionaries/vi.ts +23 -17
  55. package/src/dictionaries/zh.ts +24 -9
  56. package/src/grammar/grammar.test.ts +152 -0
  57. package/src/grammar/profiles/index.ts +316 -1
  58. package/src/grammar/transformer.ts +64 -1
  59. package/src/new-languages.test.ts +9 -3
  60. package/src/positional-keyword-drift.test.ts +6 -19
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/parser/create-provider.ts","../src/dictionaries/es.ts","../src/parser/es.ts","../src/dictionaries/ja.ts","../src/parser/ja.ts","../src/dictionaries/fr.ts","../src/parser/fr.ts","../src/dictionaries/de.ts","../src/parser/de.ts","../src/dictionaries/ar.ts","../src/parser/ar.ts","../src/dictionaries/ko.ts","../src/parser/ko.ts","../src/dictionaries/zh.ts","../src/parser/zh.ts","../src/dictionaries/tr.ts","../src/parser/tr.ts","../src/dictionaries/id.ts","../src/parser/id.ts","../src/dictionaries/qu.ts","../src/parser/qu.ts","../src/dictionaries/sw.ts","../src/parser/sw.ts","../src/dictionaries/pt.ts","../src/parser/pt.ts","../src/dictionaries/it.ts","../src/parser/it.ts","../src/dictionaries/vi.ts","../src/parser/vi.ts","../src/dictionaries/pl.ts","../src/parser/pl.ts","../src/dictionaries/ru.ts","../src/parser/ru.ts","../src/dictionaries/uk.ts","../src/parser/uk.ts","../src/dictionaries/hi.ts","../src/parser/hi.ts","../src/dictionaries/bn.ts","../src/parser/bn.ts","../src/dictionaries/th.ts","../src/parser/th.ts","../src/dictionaries/ms.ts","../src/parser/ms.ts","../src/dictionaries/tl.ts","../src/parser/tl.ts","../src/dictionaries/he.ts","../src/parser/he.ts","../src/parser/locale-manager.ts","../src/dictionaries/en.ts","../src/grammar/types.ts","../src/grammar/profiles/index.ts","../src/grammar/direct-mappings.ts","../src/dictionaries/index.ts","../src/types.ts","../src/grammar/transformer.ts"],"names":["en","es","ja","ko","zh","fr","de","ar","tr","id","pt","qu","sw","it","vi","pl","bn","th","ms","tl","he","normalizedIndents","result","translated","parts"],"mappings":"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","file":"browser.cjs","sourcesContent":["// packages/i18n/src/constants.ts\n\n/**\n * Shared Constants for i18n Package\n *\n * Centralizes keyword definitions to eliminate duplication across\n * transformer.ts, create-provider.ts, and other modules.\n */\n\nimport type { SemanticRole } from './grammar/types';\n\n// =============================================================================\n// English Modifier → Semantic Role Mappings\n// =============================================================================\n\n/**\n * Maps English modifier keywords to their semantic roles.\n * Used by both the grammar transformer and keyword provider.\n */\nexport const ENGLISH_MODIFIER_ROLES: Readonly<Record<string, SemanticRole>> = {\n to: 'destination',\n into: 'destination',\n from: 'source',\n with: 'style',\n by: 'quantity',\n as: 'method',\n on: 'event',\n over: 'duration',\n for: 'duration',\n} as const;\n\n/**\n * Maps a command verb to its **primary** semantic role — the role of the\n * command's first/leading argument when no explicit modifier keyword marks it.\n *\n * The generic argument parser in the transformer defaults the first unmarked\n * argument to `patient`, which is correct for the majority of commands\n * (`toggle .x`, `add .x`, …) but wrong for commands whose leading argument is a\n * non-patient — e.g. `wait <duration>`. Marking a duration as a patient emits a\n * spurious object-marker in the target language (Chinese `等待 把 1s`, ungrammatical;\n * Japanese `1s を 待つ`; Korean `1s 를 대기`), which the semantic parser then fails to\n * match — dropping the command.\n *\n * Only commands whose primary role is **not** `patient` are listed here (the\n * `patient` default already covers the rest). Mirrors the `primaryRole` field of\n * the semantic package's command schemas (`@lokascript/semantic`); kept in sync by\n * `schema-alignment.test.ts` so this local copy can't drift without the bundle\n * having to pull in the whole semantic graph.\n *\n * @see packages/i18n/src/schema-alignment.test.ts\n * @see docs-internal/ZH_BLOCK_BODY_SCOPE.md (#1 — transformer role model)\n */\nexport const COMMAND_PRIMARY_ROLES: Readonly<Record<string, SemanticRole>> = {\n set: 'destination',\n on: 'event',\n trigger: 'event',\n send: 'event',\n wait: 'duration',\n fetch: 'source',\n get: 'source',\n if: 'condition',\n unless: 'condition',\n while: 'condition',\n repeat: 'loopType',\n go: 'destination',\n scroll: 'destination',\n tell: 'destination',\n default: 'destination',\n swap: 'destination',\n // morph deliberately absent: its schema primaryRole is `patient` (the\n // element being morphed — aligned with the transformer's patient marking\n // in the session-9 role-layout swap), and patient is the default.\n bind: 'destination',\n} as const;\n\n/**\n * English modifier keywords (derived from ENGLISH_MODIFIER_ROLES)\n */\nexport const ENGLISH_MODIFIERS: Set<string> = new Set([\n 'to',\n 'from',\n 'into',\n 'with',\n 'at',\n 'in',\n 'of',\n 'as',\n 'by',\n 'before',\n 'after',\n 'without',\n]);\n\n// =============================================================================\n// English Commands\n// =============================================================================\n\n/**\n * English commands - the canonical set that the runtime understands.\n */\nexport const ENGLISH_COMMANDS: Set<string> = new Set([\n 'add',\n 'append',\n 'async',\n 'beep',\n 'blur', // v0.9.90 phase 1\n 'break',\n 'breakpoint', // v0.9.90 phase 1\n 'call',\n 'clear', // v0.9.90 phase 1\n 'close', // v0.9.90 phase 1\n 'continue',\n 'decrement',\n 'default',\n 'empty', // v0.9.90 phase 1\n 'exit',\n 'fetch',\n 'focus', // v0.9.90 phase 1\n 'for',\n 'get',\n 'go',\n 'halt',\n 'hide',\n 'if',\n 'increment',\n 'install',\n 'js',\n 'log',\n 'make',\n 'measure',\n 'morph',\n 'open', // v0.9.90 phase 1\n 'pick',\n 'process',\n 'push',\n 'put',\n 'remove',\n 'render',\n 'repeat',\n 'replace',\n 'reset', // v0.9.90 phase 1\n 'return',\n 'select', // v0.9.90 phase 1\n 'send',\n 'set',\n 'settle',\n 'show',\n 'swap',\n 'take',\n 'tell',\n 'throw',\n 'toggle',\n 'transition',\n 'trigger',\n 'unless',\n 'wait',\n // v2.x reactive + realtime + service-worker DSL commands\n 'live',\n 'bind',\n 'eventsource',\n 'socket',\n 'worker',\n 'intercept',\n]);\n\n// =============================================================================\n// English Keywords (Non-Commands)\n// =============================================================================\n\n/**\n * English keywords that are not commands.\n */\nexport const ENGLISH_KEYWORDS: Set<string> = new Set([\n // Flow control\n 'then',\n 'else',\n 'end',\n 'and',\n 'or',\n 'not',\n // Conditionals\n 'if',\n 'unless',\n // Loops\n 'for',\n 'while',\n 'until',\n 'forever',\n 'times',\n 'each',\n 'index',\n // Prepositions\n 'in',\n 'to',\n 'from',\n 'into',\n 'with',\n 'without',\n 'of',\n 'at',\n 'by',\n // Conversion\n 'as',\n // Comparison\n 'matches',\n 'contains',\n 'is',\n 'exists',\n // Events\n 'on',\n 'when',\n 'every',\n 'event',\n // Definitions\n 'init',\n 'def',\n 'behavior',\n // Scope\n 'global',\n 'local',\n // Articles\n 'the',\n 'a',\n 'an',\n 'first',\n 'last',\n // Position\n 'start',\n 'before',\n 'after',\n]);\n\n// =============================================================================\n// Universal English Keywords (DOM/HTML Standards)\n// =============================================================================\n\n/**\n * English keywords that should always be recognized, even in non-English locales.\n * These are HTML/DOM standard terms that developers worldwide use.\n */\nexport const UNIVERSAL_ENGLISH_KEYWORDS: Set<string> = new Set([\n // DOM events (HTML spec)\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'keydown',\n 'keyup',\n 'keypress',\n 'focus',\n 'blur',\n 'change',\n 'input',\n 'submit',\n 'reset',\n 'load',\n 'unload',\n 'resize',\n 'scroll',\n 'touchstart',\n 'touchend',\n 'touchmove',\n 'touchcancel',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'contextmenu',\n 'wheel',\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n // Common abbreviations\n 'ms',\n 's',\n]);\n\n// =============================================================================\n// Logical Keywords\n// =============================================================================\n\n/**\n * English logical operator keywords.\n */\nexport const ENGLISH_LOGICAL_KEYWORDS: Set<string> = new Set([\n 'and',\n 'or',\n 'not',\n 'is',\n 'exists',\n 'matches',\n 'contains',\n 'then',\n 'else',\n]);\n\n// =============================================================================\n// Value Keywords\n// =============================================================================\n\n/**\n * English value keywords.\n */\nexport const ENGLISH_VALUE_KEYWORDS: Set<string> = new Set([\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'it',\n 'me',\n 'my',\n 'result',\n]);\n\n// =============================================================================\n// Expression Keywords\n// =============================================================================\n\n/**\n * English expression keywords - positional, traversal, and string operations.\n */\nexport const ENGLISH_EXPRESSION_KEYWORDS: Set<string> = new Set([\n // Positional\n 'first',\n 'last',\n 'next',\n 'previous',\n 'prev',\n 'at',\n 'random',\n // DOM traversal\n 'closest',\n 'parent',\n 'children',\n 'within',\n // Emptiness/existence\n 'no',\n 'empty',\n 'some',\n // String operations (multi-word)\n 'starts with',\n 'ends with',\n]);\n\n// =============================================================================\n// Conditional Keywords\n// =============================================================================\n\n/**\n * Conditional keywords across languages (for statement type identification).\n * Includes 'when'/'where' conditional modifiers and their translations.\n */\nexport const CONDITIONAL_KEYWORDS: Set<string> = new Set([\n // English\n 'if',\n 'unless',\n 'when',\n 'where',\n // Japanese\n 'もし',\n '時に',\n 'ときに',\n 'どこで',\n // Chinese\n '如果',\n '当',\n // Arabic\n 'إذا',\n 'عندما',\n 'حيث',\n // Spanish\n 'si',\n 'cuando',\n 'donde',\n // German\n 'wenn',\n 'wann',\n 'wo',\n // French\n 'quand',\n 'lorsque',\n 'où',\n // Portuguese\n 'quando',\n 'onde',\n // Turkish\n 'eğer',\n 'zaman',\n 'nerede',\n // Indonesian\n 'ketika',\n 'saat',\n 'dimana',\n // Korean\n '때',\n '어디서',\n // Quechua\n 'maypi',\n // Swahili\n 'wakati',\n 'wapi',\n]);\n\n/**\n * \"Then\" keywords across languages (for conditional parsing).\n */\nexport const THEN_KEYWORDS: Set<string> = new Set([\n 'then',\n 'それから',\n '那么',\n 'ثم',\n 'entonces',\n 'alors',\n 'dann',\n 'sonra',\n 'lalu',\n 'chayqa',\n 'kisha',\n]);\n","// packages/i18n/src/parser/create-provider.ts\n\nimport type { Dictionary } from '../types';\nimport type { KeywordProvider, KeywordProviderOptions } from './types';\nimport {\n ENGLISH_COMMANDS,\n ENGLISH_KEYWORDS,\n ENGLISH_MODIFIERS,\n ENGLISH_LOGICAL_KEYWORDS,\n ENGLISH_VALUE_KEYWORDS,\n ENGLISH_EXPRESSION_KEYWORDS,\n UNIVERSAL_ENGLISH_KEYWORDS,\n} from '../constants';\n\n/**\n * Creates a KeywordProvider from a dictionary.\n *\n * The provider creates reverse mappings (locale → English) for fast\n * resolution during parsing.\n *\n * @example\n * ```typescript\n * import { es } from '../dictionaries/es';\n * export const esKeywords = createKeywordProvider(es, 'es');\n * ```\n */\nexport function createKeywordProvider(\n dictionary: Dictionary,\n locale: string,\n options: KeywordProviderOptions = {}\n): KeywordProvider {\n const { allowEnglishFallback = true } = options;\n\n // Build reverse maps: locale keyword → English canonical\n const reverseCommands = new Map<string, string>();\n const reverseModifiers = new Map<string, string>();\n const reverseEvents = new Map<string, string>();\n const reverseLogical = new Map<string, string>();\n const reverseTemporal = new Map<string, string>();\n const reverseValues = new Map<string, string>();\n const reverseAttributes = new Map<string, string>();\n const reverseExpressions = new Map<string, string>();\n const reverseAll = new Map<string, string>();\n\n // Forward maps: English → locale keyword\n const forwardAll = new Map<string, string>();\n\n // Build reverse mappings from dictionary\n // Note: reverseAll uses priority - first category to claim a locale word wins\n function buildReverseMap(\n category: Record<string, string>,\n reverseMap: Map<string, string>,\n priority: boolean = false\n ): void {\n for (const [english, localeWord] of Object.entries(category)) {\n const normalizedLocale = localeWord.toLowerCase();\n reverseMap.set(normalizedLocale, english.toLowerCase());\n // Only set in reverseAll if not already claimed (priority) or if this is a priority category\n if (priority || !reverseAll.has(normalizedLocale)) {\n reverseAll.set(normalizedLocale, english.toLowerCase());\n }\n forwardAll.set(english.toLowerCase(), localeWord.toLowerCase());\n }\n }\n\n // Build all reverse maps\n // Priority order: commands first (highest priority for parsing), then logical, events, values\n // This ensures 'en' (Spanish) → 'on' (command) rather than 'in' (modifier)\n if (dictionary.commands) {\n buildReverseMap(dictionary.commands, reverseCommands, true);\n }\n if (dictionary.logical) {\n buildReverseMap(dictionary.logical, reverseLogical, true);\n }\n if (dictionary.events) {\n buildReverseMap(dictionary.events, reverseEvents);\n }\n if (dictionary.values) {\n buildReverseMap(dictionary.values, reverseValues);\n }\n if (dictionary.temporal) {\n buildReverseMap(dictionary.temporal, reverseTemporal);\n }\n // Modifiers last (lowest priority) - they often conflict with commands\n if (dictionary.modifiers) {\n buildReverseMap(dictionary.modifiers, reverseModifiers);\n }\n if (dictionary.attributes) {\n buildReverseMap(dictionary.attributes, reverseAttributes);\n }\n if (dictionary.expressions) {\n buildReverseMap(dictionary.expressions, reverseExpressions);\n }\n\n // Collect all locale commands and keywords for completions\n const localeCommands = new Set(reverseCommands.keys());\n const allLocaleKeywords = new Set(reverseAll.keys());\n\n // Add English keywords/commands if fallback is enabled\n if (allowEnglishFallback) {\n for (const cmd of ENGLISH_COMMANDS) {\n localeCommands.add(cmd);\n }\n for (const kw of ENGLISH_KEYWORDS) {\n allLocaleKeywords.add(kw);\n }\n for (const kw of UNIVERSAL_ENGLISH_KEYWORDS) {\n allLocaleKeywords.add(kw);\n }\n }\n\n return {\n locale,\n\n resolve(token: string): string | undefined {\n const normalized = token.toLowerCase();\n\n // Check if it's a locale keyword\n const english = reverseAll.get(normalized);\n if (english !== undefined) {\n return english;\n }\n\n // If English fallback is enabled, check if it's already English\n if (allowEnglishFallback) {\n if (ENGLISH_COMMANDS.has(normalized) || ENGLISH_KEYWORDS.has(normalized)) {\n return normalized;\n }\n // Universal keywords (DOM events, etc.) pass through\n if (UNIVERSAL_ENGLISH_KEYWORDS.has(normalized)) {\n return normalized;\n }\n }\n\n return undefined;\n },\n\n isCommand(token: string): boolean {\n const normalized = token.toLowerCase();\n\n // Check locale commands\n if (reverseCommands.has(normalized)) {\n return true;\n }\n\n // Check English commands if fallback enabled\n if (allowEnglishFallback && ENGLISH_COMMANDS.has(normalized)) {\n return true;\n }\n\n return false;\n },\n\n isKeyword(token: string): boolean {\n const normalized = token.toLowerCase();\n\n // Check locale keywords (modifiers, logical, temporal, values)\n if (\n reverseModifiers.has(normalized) ||\n reverseLogical.has(normalized) ||\n reverseTemporal.has(normalized) ||\n reverseValues.has(normalized)\n ) {\n return true;\n }\n\n // Check English keywords if fallback enabled\n if (allowEnglishFallback && ENGLISH_KEYWORDS.has(normalized)) {\n return true;\n }\n\n return false;\n },\n\n isEvent(token: string): boolean {\n const normalized = token.toLowerCase();\n\n // Check locale events\n if (reverseEvents.has(normalized)) {\n return true;\n }\n\n // Universal English events always accepted\n if (UNIVERSAL_ENGLISH_KEYWORDS.has(normalized)) {\n return true;\n }\n\n return false;\n },\n\n isModifier(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseModifiers.has(normalized) ||\n (allowEnglishFallback && ENGLISH_MODIFIERS.has(normalized))\n );\n },\n\n isLogical(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseLogical.has(normalized) ||\n (allowEnglishFallback && ENGLISH_LOGICAL_KEYWORDS.has(normalized))\n );\n },\n\n isValue(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseValues.has(normalized) ||\n (allowEnglishFallback && ENGLISH_VALUE_KEYWORDS.has(normalized))\n );\n },\n\n isExpression(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseExpressions.has(normalized) ||\n (allowEnglishFallback && ENGLISH_EXPRESSION_KEYWORDS.has(normalized))\n );\n },\n\n getCommands(): string[] {\n return Array.from(localeCommands);\n },\n\n getKeywords(): string[] {\n return Array.from(allLocaleKeywords);\n },\n\n toLocale(englishKeyword: string): string | undefined {\n return forwardAll.get(englishKeyword.toLowerCase());\n },\n };\n}\n\n/**\n * Creates a default English-only keyword provider.\n * This is used when no locale is specified.\n */\nexport function createEnglishProvider(): KeywordProvider {\n return {\n locale: 'en',\n\n resolve(token: string): string | undefined {\n const normalized = token.toLowerCase();\n if (\n ENGLISH_COMMANDS.has(normalized) ||\n ENGLISH_KEYWORDS.has(normalized) ||\n UNIVERSAL_ENGLISH_KEYWORDS.has(normalized)\n ) {\n return normalized;\n }\n return undefined;\n },\n\n isCommand(token: string): boolean {\n return ENGLISH_COMMANDS.has(token.toLowerCase());\n },\n\n isKeyword(token: string): boolean {\n return ENGLISH_KEYWORDS.has(token.toLowerCase());\n },\n\n isEvent(token: string): boolean {\n return UNIVERSAL_ENGLISH_KEYWORDS.has(token.toLowerCase());\n },\n\n isModifier(token: string): boolean {\n return ENGLISH_MODIFIERS.has(token.toLowerCase());\n },\n\n isLogical(token: string): boolean {\n return ENGLISH_LOGICAL_KEYWORDS.has(token.toLowerCase());\n },\n\n isValue(token: string): boolean {\n return ENGLISH_VALUE_KEYWORDS.has(token.toLowerCase());\n },\n\n isExpression(token: string): boolean {\n return ENGLISH_EXPRESSION_KEYWORDS.has(token.toLowerCase());\n },\n\n getCommands(): string[] {\n return Array.from(ENGLISH_COMMANDS);\n },\n\n getKeywords(): string[] {\n return Array.from(ENGLISH_KEYWORDS);\n },\n\n toLocale(_englishKeyword: string): string | undefined {\n // English provider returns the keyword as-is\n return _englishKeyword.toLowerCase();\n },\n };\n}\n\n// Re-export the English keyword sets from constants for use in core\nexport {\n ENGLISH_COMMANDS,\n ENGLISH_KEYWORDS,\n ENGLISH_MODIFIERS,\n ENGLISH_LOGICAL_KEYWORDS,\n ENGLISH_VALUE_KEYWORDS,\n ENGLISH_EXPRESSION_KEYWORDS,\n UNIVERSAL_ENGLISH_KEYWORDS,\n} from '../constants';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const es: Dictionary = {\n commands: {\n on: 'en',\n tell: 'decir',\n trigger: 'disparar',\n send: 'enviar',\n take: 'tomar',\n put: 'poner',\n set: 'establecer',\n get: 'obtener',\n add: 'agregar',\n remove: 'quitar',\n toggle: 'alternar',\n hide: 'ocultar',\n show: 'mostrar',\n if: 'si',\n unless: 'menos',\n repeat: 'repetir',\n for: 'para',\n while: 'mientras',\n until: 'hasta',\n continue: 'continuar',\n break: 'romper',\n halt: 'detener',\n wait: 'esperar',\n fetch: 'buscar',\n call: 'llamar',\n return: 'retornar',\n make: 'hacer',\n log: 'registrar',\n throw: 'lanzar',\n catch: 'atrapar',\n measure: 'medir',\n transition: 'transición',\n increment: 'incrementar',\n decrement: 'decrementar',\n default: 'predeterminar',\n go: 'ir',\n pushUrl: 'pushUrl',\n replaceUrl: 'reemplazarUrl',\n copy: 'copiar',\n pick: 'escoger',\n beep: 'pitido',\n js: 'js',\n async: 'asíncrono',\n render: 'renderizar',\n swap: 'intercambiar',\n morph: 'transformar',\n settle: 'estabilizar',\n append: 'anexar', // profile primary; 'añadir' is add's word (parsed as add)\n exit: 'salir',\n install: 'instalar',\n breakpoint: 'punto-interrupción',\n clear: 'limpiar',\n close: 'cerrar',\n open: 'abrir',\n select: 'seleccionar',\n clone: 'clonar',\n prepend: 'anteponer',\n },\n\n modifiers: {\n to: 'a',\n from: 'de',\n into: 'en',\n with: 'con',\n at: 'en',\n in: 'en',\n of: 'de',\n as: 'como',\n by: 'por',\n before: 'antes',\n after: 'después',\n over: 'sobre',\n under: 'bajo',\n between: 'entre',\n through: 'través',\n without: 'sin',\n },\n\n events: {\n click: 'clic',\n dblclick: 'dobleclic',\n mousedown: 'ratónabajo',\n mouseup: 'ratónarriba',\n mouseenter: 'ratónentrar',\n mouseleave: 'ratónsalir',\n mouseover: 'ratónencima',\n mouseout: 'ratónfuera',\n mousemove: 'ratónmover',\n keydown: 'teclaabajo',\n keyup: 'teclaarriba',\n keypress: 'teclapresar',\n focus: 'enfocar',\n blur: 'desenfocar',\n change: 'cambiar',\n input: 'entrada',\n submit: 'enviar',\n reset: 'reiniciar',\n load: 'cargar',\n unload: 'descargar',\n resize: 'redimensionar',\n scroll: 'desplazar',\n touchstart: 'toqueempezar',\n touchend: 'toqueterminar',\n touchmove: 'toquemover',\n touchcancel: 'toquecancelar',\n },\n\n logical: {\n when: 'cuando',\n where: 'donde',\n and: 'y',\n or: 'o',\n not: 'no',\n is: 'es',\n exists: 'existe',\n matches: 'coincide',\n contains: 'contiene',\n includes: 'incluye',\n equals: 'iguala',\n has: 'tiene',\n have: 'tengo',\n then: 'entonces',\n else: 'sino',\n otherwise: 'delocontrario',\n end: 'fin',\n live: 'vivo',\n changes: 'cambia',\n },\n\n temporal: {\n seconds: 'segundos',\n second: 'segundo',\n milliseconds: 'milisegundos',\n millisecond: 'milisegundo',\n minutes: 'minutos',\n minute: 'minuto',\n hours: 'horas',\n hour: 'hora',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'verdadero',\n false: 'falso',\n null: 'nulo',\n undefined: 'indefinido',\n it: 'ello',\n its: 'su',\n me: 'yo',\n my: 'mi',\n you: 'tu',\n your: 'tu',\n yourself: 'ti mismo',\n myself: 'yo mismo',\n element: 'elemento',\n target: 'objetivo',\n detail: 'detalle',\n event: 'evento',\n window: 'ventana',\n document: 'documento',\n body: 'cuerpo',\n result: 'resultado',\n value: 'valor',\n },\n\n attributes: {\n class: 'clase',\n classes: 'clases',\n style: 'estilo',\n styles: 'estilos',\n attribute: 'atributo',\n attributes: 'atributos',\n property: 'propiedad',\n properties: 'propiedades',\n },\n\n expressions: {\n first: 'primero',\n last: 'último',\n next: 'siguiente',\n previous: 'anterior',\n prev: 'ant',\n at: 'en',\n random: 'aleatorio',\n closest: 'cercano',\n parent: 'padre',\n children: 'hijos',\n within: 'dentro',\n no: 'ningún',\n empty: 'vacío',\n some: 'algún',\n 'starts with': 'empieza con',\n 'ends with': 'termina con',\n 'ignoring case': 'ignorando mayúsculas',\n 'sorted by': 'ordenado por',\n 'mapped to': 'transformado a',\n 'split by': 'dividido por',\n 'joined by': 'unido por',\n },\n};\n","// packages/i18n/src/parser/es.ts\n\nimport { es } from '../dictionaries/es';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Spanish keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Spanish:\n * - `en clic alternar .active` → parses as `on click toggle .active`\n * - `si verdadero entonces registrar \"hola\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `en click alternar .active` also works (Spanish `en` + English `click`)\n *\n * @example\n * ```typescript\n * import { esKeywords } from '@lokascript/i18n/parser/es';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: esKeywords });\n * parser.parse('en clic alternar .active');\n * ```\n */\nexport const esKeywords: KeywordProvider = createKeywordProvider(es, 'es', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { es as esDictionary } from '../dictionaries/es';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ja: Dictionary = {\n commands: {\n on: 'で',\n tell: '伝える',\n trigger: '引き金',\n send: '送る',\n take: '取る',\n put: '置く',\n set: '設定',\n get: '取得',\n add: '追加',\n remove: '削除',\n toggle: '切り替え',\n hide: '隠す',\n show: '表示',\n if: 'もし',\n unless: 'ない限り', // not でなければ — leading で particle shatters the marker\n repeat: '繰り返し',\n for: 'ために',\n while: 'の間',\n until: 'まで',\n continue: '続ける',\n break: '中断',\n halt: '停止',\n wait: '待つ',\n fetch: 'フェッチ',\n call: '呼び出し',\n return: '戻る',\n make: '作る',\n log: '記録',\n throw: '投げる',\n catch: '捕まえる',\n measure: '測定',\n transition: '遷移',\n increment: '増加',\n decrement: '減少',\n default: '既定',\n go: '移動',\n pushUrl: 'URLプッシュ',\n replaceUrl: 'URL置換',\n copy: 'コピー',\n pick: '選択',\n beep: 'ビープ',\n js: 'JS実行',\n async: '非同期',\n render: '描画',\n swap: '交換',\n morph: '変形',\n settle: '安定',\n append: '末尾追加',\n // 終了 → 退出: realigned to the semantic profile primary (ja.ts `exit: 退出`).\n // 終了 was the historic exit/end collision word (see isEndKeyword's ja note);\n // rendered as 終了 it tokenized as a plain identifier, so a guard-clause\n // `exit` inside `if … end` never parsed (behavior-sortable ja).\n exit: '退出',\n install: 'インストール',\n breakpoint: 'ブレークポイント',\n clear: 'クリア',\n close: '閉じる',\n open: '開く',\n select: '選択',\n clone: '複製',\n prepend: '先頭追加',\n socket: 'ソケット',\n },\n\n modifiers: {\n to: 'に',\n from: 'から',\n into: 'へ',\n with: 'と',\n at: 'で',\n in: 'の中',\n of: 'の',\n as: 'として',\n by: 'によって',\n before: '前に',\n after: '後に',\n over: '上に',\n under: '下に',\n between: '間に',\n through: '通して',\n without: 'なしで',\n },\n\n events: {\n click: 'クリック',\n dblclick: 'ダブルクリック',\n mousedown: 'マウス押下',\n mouseup: 'マウス解放',\n mouseenter: 'マウス入る',\n mouseleave: 'マウス離れる',\n mouseover: 'マウス上',\n mouseout: 'マウス外',\n mousemove: 'マウス移動',\n keydown: 'キー押下',\n keyup: 'キー解放',\n keypress: 'キー押す',\n focus: 'フォーカス',\n blur: 'ぼかし',\n change: '変更',\n input: '入力',\n submit: '送信',\n reset: 'リセット',\n load: '読み込み',\n unload: '読み込み解除',\n resize: 'サイズ変更',\n scroll: 'スクロール',\n touchstart: 'タッチ開始',\n touchend: 'タッチ終了',\n touchmove: 'タッチ移動',\n touchcancel: 'タッチキャンセル',\n },\n\n logical: {\n when: '時',\n where: 'どこ',\n and: 'そして',\n or: 'または',\n not: 'ではない',\n is: 'である',\n exists: '存在する',\n matches: '一致する',\n contains: '含む',\n includes: '含める',\n equals: '等しい',\n has: 'ある',\n have: 'ある',\n then: 'それから',\n else: 'そうでなければ',\n otherwise: 'そうでなければ',\n end: '終わり',\n live: 'ライブ',\n bind: 'バインド',\n changes: '変わったら',\n },\n\n temporal: {\n seconds: '秒',\n second: '秒',\n milliseconds: 'ミリ秒',\n millisecond: 'ミリ秒',\n minutes: '分',\n minute: '分',\n hours: '時間',\n hour: '時間',\n ms: 'ms',\n s: '秒',\n min: '分',\n h: '時',\n },\n\n values: {\n true: '真',\n false: '偽',\n null: 'null',\n undefined: '未定義',\n it: 'それ',\n its: 'その',\n me: '私',\n my: '私の',\n you: 'あなた',\n your: 'あなたの',\n yourself: 'あなた自身',\n myself: '私自身',\n element: '要素',\n target: '対象',\n detail: '詳細',\n event: 'イベント',\n window: 'ウィンドウ',\n document: 'ドキュメント',\n body: 'ボディ',\n result: '結果',\n value: '値',\n },\n\n attributes: {\n class: 'クラス',\n classes: 'クラス群',\n style: 'スタイル',\n styles: 'スタイル群',\n attribute: '属性',\n attributes: '属性群',\n property: 'プロパティ',\n properties: 'プロパティ群',\n },\n\n expressions: {\n first: '最初',\n last: '最後',\n next: '次',\n previous: '前',\n prev: '前',\n at: 'で',\n random: 'ランダム',\n closest: '最も近い',\n parent: '親',\n children: '子',\n within: '以内',\n no: 'ない',\n empty: '空',\n some: 'いくつか',\n 'starts with': 'で始まる',\n 'ends with': 'で終わる',\n 'ignoring case': '大文字小文字を無視',\n 'sorted by': 'でソート',\n 'mapped to': 'に変換',\n 'split by': 'で分割',\n 'joined by': 'で結合',\n },\n};\n","// packages/i18n/src/parser/ja.ts\n\nimport { ja } from '../dictionaries/ja';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Japanese keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Japanese:\n * - `クリック で 切り替え .active` → parses as `on click toggle .active`\n * - `もし 真 それから 記録 \"こんにちは\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `click で 切り替え .active` also works (English `click` + Japanese `で`, `切り替え`)\n *\n * Japanese is a useful test case because:\n * - SOV word order (subject-object-verb) vs English SVO\n * - No articles (a, an, the)\n * - Unicode characters (tests tokenizer robustness)\n *\n * @example\n * ```typescript\n * import { jaKeywords } from '@lokascript/i18n/parser/ja';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: jaKeywords });\n * parser.parse('クリック で 切り替え .active');\n * ```\n */\nexport const jaKeywords: KeywordProvider = createKeywordProvider(ja, 'ja', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { ja as jaDictionary } from '../dictionaries/ja';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const fr: Dictionary = {\n commands: {\n on: 'sur',\n tell: 'dire',\n trigger: 'déclencher',\n send: 'envoyer',\n take: 'prendre',\n put: 'mettre',\n set: 'définir',\n get: 'obtenir',\n add: 'ajouter',\n remove: 'supprimer',\n toggle: 'basculer',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'défocaliser',\n hide: 'cacher',\n show: 'montrer',\n if: 'si',\n unless: 'saufsi',\n repeat: 'répéter',\n for: 'pour',\n while: 'tantque',\n until: 'jusquà',\n continue: 'continuer',\n break: 'arrêter',\n halt: 'stopper',\n wait: 'attendre',\n fetch: 'récupérer',\n call: 'appeler',\n return: 'retourner',\n make: 'créer',\n log: 'enregistrer',\n throw: 'lancer',\n catch: 'attraper',\n measure: 'mesurer',\n transition: 'transition',\n increment: 'incrémenter',\n decrement: 'décrémenter',\n default: 'défaut',\n go: 'aller',\n pushUrl: 'pousserUrl',\n replaceUrl: 'remplacerUrl',\n copy: 'copier',\n pick: 'choisir',\n beep: 'bip',\n js: 'js',\n async: 'asynchrone',\n render: 'rendu',\n swap: 'échanger',\n morph: 'transformer',\n settle: 'stabiliser',\n append: 'annexer', // profile primary; 'ajouter' is add's word (parsed as add)\n exit: 'sortir',\n install: 'installer',\n breakpoint: 'point-arrêt',\n clear: 'effacer',\n close: 'fermer',\n open: 'ouvrir',\n select: 'sélectionner',\n clone: 'cloner',\n prepend: 'préfixer',\n focus: 'focaliser',\n },\n\n modifiers: {\n to: 'à',\n from: 'de',\n into: 'dans',\n with: 'avec',\n at: 'à',\n in: 'en',\n of: 'de',\n as: 'comme',\n by: 'par',\n before: 'avant',\n after: 'après',\n over: 'sur',\n under: 'sous',\n between: 'entre',\n through: 'à travers',\n without: 'sans',\n },\n\n events: {\n click: 'clic',\n dblclick: 'doubleclic',\n mousedown: 'sourisappuyée',\n mouseup: 'sourisrelâchée',\n mouseenter: 'sourisentrer',\n mouseleave: 'sourissortir',\n mouseover: 'sourissur',\n mouseout: 'sourisdehors',\n mousemove: 'sourisbouger',\n keydown: 'toucheappuyée',\n keyup: 'toucherelâchée',\n keypress: 'touchepressée',\n focus: 'focus',\n blur: 'flou',\n change: 'changer',\n input: 'saisie',\n submit: 'soumettre',\n reset: 'réinitialiser',\n load: 'charger',\n unload: 'décharger',\n resize: 'redimensionner',\n scroll: 'défiler',\n touchstart: 'touchercommencer',\n touchend: 'toucherfin',\n touchmove: 'toucherbouger',\n touchcancel: 'toucherannuler',\n },\n\n logical: {\n when: 'quand',\n where: 'où',\n and: 'et',\n or: 'ou',\n not: 'non',\n is: 'est',\n exists: 'existe',\n matches: 'correspond',\n contains: 'contient',\n includes: 'inclut',\n equals: 'égale',\n has: 'a',\n have: 'ai',\n then: 'alors',\n else: 'sinon',\n otherwise: 'autrement',\n end: 'fin',\n live: 'vif',\n changes: 'change',\n },\n\n temporal: {\n seconds: 'secondes',\n second: 'seconde',\n milliseconds: 'millisecondes',\n millisecond: 'milliseconde',\n minutes: 'minutes',\n minute: 'minute',\n hours: 'heures',\n hour: 'heure',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'vrai',\n false: 'faux',\n null: 'nul',\n undefined: 'indéfini',\n it: 'ça',\n its: 'son',\n me: 'moi',\n my: 'mon',\n you: 'tu',\n your: 'ton',\n yourself: 'toi-même',\n myself: 'moi-même',\n element: 'élément',\n target: 'cible',\n detail: 'détail',\n event: 'événement',\n window: 'fenêtre',\n document: 'document',\n body: 'corps',\n result: 'résultat',\n value: 'valeur',\n },\n\n attributes: {\n class: 'classe',\n classes: 'classes',\n style: 'style',\n styles: 'styles',\n attribute: 'attribut',\n attributes: 'attributs',\n property: 'propriété',\n properties: 'propriétés',\n },\n\n expressions: {\n first: 'premier',\n last: 'dernier',\n next: 'suivant',\n previous: 'précédent',\n prev: 'préc',\n at: 'à',\n random: 'aléatoire',\n closest: 'proche',\n parent: 'parent',\n children: 'enfants',\n within: 'dans',\n no: 'aucun',\n empty: 'vide',\n some: 'quelques',\n 'starts with': 'commence par',\n 'ends with': 'finit par',\n 'ignoring case': 'en ignorant la casse',\n 'sorted by': 'trié par',\n 'mapped to': 'transformé en',\n 'split by': 'divisé par',\n 'joined by': 'joint par',\n },\n};\n","// packages/i18n/src/parser/fr.ts\n\nimport { fr } from '../dictionaries/fr';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * French keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in French:\n * - `sur clic basculer .active` → parses as `on click toggle .active`\n * - `si vrai alors enregistrer \"bonjour\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `sur click basculer .active` also works (French `sur` + English `click`)\n *\n * @example\n * ```typescript\n * import { frKeywords } from '@lokascript/i18n/parser/fr';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: frKeywords });\n * parser.parse('sur clic basculer .active');\n * ```\n */\nexport const frKeywords: KeywordProvider = createKeywordProvider(fr, 'fr', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { fr as frDictionary } from '../dictionaries/fr';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const de: Dictionary = {\n commands: {\n on: 'bei',\n tell: 'sagen',\n trigger: 'auslösen',\n send: 'senden',\n take: 'nehmen',\n put: 'setzen',\n set: 'festlegen',\n get: 'erhalten',\n add: 'hinzufügen',\n remove: 'entfernen',\n toggle: 'umschalten',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'defokussieren',\n hide: 'verstecken',\n show: 'zeigen',\n // Align with the semantic German profile's `if` primary (`falls`). The previous\n // `wenn` collides with the profile's `when` keyword (German `wenn` = both\n // \"if\" and \"when\"), so a transformed `if` resolved to `when` and the conditional\n // wrapper never formed (`if`/`put` dropped). Same dict↔profile alignment as id\n // `toggle` / get-value. `when` is unaffected (separate dict entry).\n if: 'falls',\n unless: 'wennnicht',\n repeat: 'wiederholen',\n for: 'für',\n while: 'während',\n until: 'bis',\n continue: 'weiter',\n break: 'unterbrechen',\n halt: 'anhalten',\n wait: 'warten',\n fetch: 'abrufen',\n call: 'aufrufen',\n return: 'zurückgeben',\n make: 'erstellen',\n log: 'protokollieren',\n throw: 'werfen',\n catch: 'fangen',\n measure: 'messen',\n transition: 'übergang',\n increment: 'erhöhen',\n decrement: 'verringern',\n default: 'standard',\n go: 'gehen',\n pushUrl: 'urlHinzufügen',\n replaceUrl: 'urlErsetzen',\n copy: 'kopieren',\n pick: 'auswählen',\n beep: 'piepton',\n js: 'js',\n async: 'asynchron',\n render: 'rendern',\n swap: 'tauschen',\n morph: 'verwandeln',\n settle: 'stabilisieren',\n append: 'anhängen',\n exit: 'beenden',\n install: 'installieren',\n breakpoint: 'haltepunkt',\n clear: 'bereinigen', // löschen is a remove alternative in the profile\n close: 'schließen',\n open: 'öffnen',\n select: 'auswählen',\n clone: 'klonen',\n prepend: 'voranstellen',\n focus: 'fokussieren',\n },\n\n modifiers: {\n to: 'zu',\n from: 'von',\n into: 'in',\n with: 'mit',\n at: 'bei',\n in: 'in',\n of: 'von',\n as: 'als',\n by: 'durch',\n before: 'vor',\n after: 'nach',\n over: 'über',\n under: 'unter',\n between: 'zwischen',\n through: 'durch',\n without: 'ohne',\n },\n\n events: {\n click: 'klick',\n dblclick: 'doppelklick',\n mousedown: 'mausunten',\n mouseup: 'mausoben',\n mouseenter: 'mauseintreten',\n mouseleave: 'mausverlassen',\n mouseover: 'mausüber',\n mouseout: 'maushinaus',\n mousemove: 'mausbewegen',\n keydown: 'tasteunten',\n keyup: 'tasteoben',\n keypress: 'tastedrücken',\n focus: 'fokus',\n blur: 'unscharf',\n change: 'ändern',\n input: 'eingabe',\n submit: 'absenden',\n reset: 'zurücksetzen',\n load: 'laden',\n unload: 'entladen',\n resize: 'größeändern',\n scroll: 'scrollen',\n touchstart: 'berührungstart',\n touchend: 'berührungend',\n touchmove: 'berührungbewegen',\n touchcancel: 'berührungabbrechen',\n },\n\n logical: {\n when: 'wenn',\n where: 'wo',\n and: 'und',\n or: 'oder',\n not: 'nicht',\n is: 'ist',\n exists: 'existiert',\n matches: 'passt',\n contains: 'enthält',\n includes: 'beinhaltet',\n equals: 'gleicht',\n has: 'hat',\n have: 'habe',\n then: 'dann',\n else: 'sonst',\n otherwise: 'andernfalls',\n end: 'ende',\n live: 'live',\n changes: 'ändert',\n },\n\n temporal: {\n seconds: 'sekunden',\n second: 'sekunde',\n milliseconds: 'millisekunden',\n millisecond: 'millisekunde',\n minutes: 'minuten',\n minute: 'minute',\n hours: 'stunden',\n hour: 'stunde',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'std',\n },\n\n values: {\n true: 'wahr',\n false: 'falsch',\n null: 'null',\n undefined: 'undefiniert',\n it: 'es',\n its: 'sein',\n me: 'ich',\n my: 'mein',\n you: 'du',\n your: 'dein',\n yourself: 'dich selbst',\n myself: 'ich selbst',\n element: 'element',\n target: 'ziel',\n detail: 'detail',\n event: 'ereignis',\n window: 'fenster',\n document: 'dokument',\n body: 'körper',\n result: 'ergebnis',\n value: 'wert',\n },\n\n attributes: {\n class: 'klasse',\n classes: 'klassen',\n style: 'stil',\n styles: 'stile',\n attribute: 'attribut',\n attributes: 'attribute',\n property: 'eigenschaft',\n properties: 'eigenschaften',\n },\n\n expressions: {\n first: 'erste',\n last: 'letzte',\n next: 'nächste',\n previous: 'vorherige',\n prev: 'vorh',\n at: 'bei',\n random: 'zufällig',\n // `nächste` already serves `next` (line above). German `nächste` is\n // genuinely ambiguous (next/nearest), so emitting it for `closest` too\n // collided: the semantic tokenizer normalizes `nächste`→next (a deliberate\n // last-wins choice — see german.ts), and a closest reading is impossible to\n // recover. Use the unambiguous `nächstgelegene` (\"nearest-located\") for\n // closest so the two readings stay distinct end-to-end.\n closest: 'nächstgelegene',\n parent: 'elternteil',\n children: 'kinder',\n within: 'innerhalb',\n no: 'kein',\n empty: 'leer',\n some: 'einige',\n 'starts with': 'beginnt mit',\n 'ends with': 'endet mit',\n 'ignoring case': 'ohne Groß-/Kleinschreibung',\n 'sorted by': 'sortiert nach',\n 'mapped to': 'zugeordnet zu',\n 'split by': 'geteilt durch',\n 'joined by': 'verbunden mit',\n },\n};\n","// packages/i18n/src/parser/de.ts\n\nimport { de } from '../dictionaries/de';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * German keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in German:\n * - `bei klick umschalten .active` → parses as `on click toggle .active`\n * - `wenn wahr dann protokollieren \"hallo\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `bei click umschalten .active` also works (German `bei` + English `click`)\n *\n * German is a useful test case because:\n * - Compound words (Zusammensetzungen) are common\n * - Different word order in clauses (V2 in main, V-final in subordinate)\n * - Case system (nominative, accusative, dative, genitive)\n *\n * @example\n * ```typescript\n * import { deKeywords } from '@lokascript/i18n/parser/de';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: deKeywords });\n * parser.parse('bei klick umschalten .active');\n * ```\n */\nexport const deKeywords: KeywordProvider = createKeywordProvider(de, 'de', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { de as deDictionary } from '../dictionaries/de';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ar: Dictionary = {\n commands: {\n on: 'على',\n tell: 'أخبر',\n trigger: 'تشغيل',\n send: 'أرسل',\n take: 'خذ',\n put: 'ضع',\n set: 'اضبط',\n get: 'احصل',\n add: 'أضف',\n remove: 'احذف',\n toggle: 'بدل',\n hide: 'اخف',\n show: 'اظهر',\n if: 'إذا',\n // Single-token form: the semantic ar tokenizer splits the two-word `إلا إذا`\n // into `إلا` + `إذا`(if), which derails the `unless` block. `إلا` alone is the\n // conventional Arabic shorthand and matches the ar profile's unless keyword.\n unless: 'إلا',\n repeat: 'كرر',\n for: 'لكل',\n while: 'بينما',\n until: 'حتى',\n continue: 'واصل',\n break: 'توقف',\n halt: 'أوقف',\n wait: 'انتظر',\n fetch: 'احضر',\n call: 'استدع',\n return: 'ارجع',\n make: 'اصنع',\n log: 'سجل',\n throw: 'ارم',\n catch: 'التقط',\n measure: 'قس',\n transition: 'انتقال',\n increment: 'زِد',\n decrement: 'أنقص',\n default: 'افتراضي',\n go: 'اذهب',\n pushUrl: 'ادفع رابط',\n replaceUrl: 'استبدل رابط',\n copy: 'انسخ',\n pick: 'اختر',\n beep: 'صفّر',\n js: 'جافاسكربت',\n async: 'متزامن',\n render: 'ارسم',\n swap: 'استبدل', // profile primary; 'بدّل' is toggle's word (parsed as toggle)\n morph: 'حوّل',\n settle: 'استقر',\n append: 'ألحق',\n exit: 'اخرج',\n install: 'ثبّت',\n breakpoint: 'نقطة-توقف',\n clear: 'نظّف', // امسح is a remove alternative in the profile\n close: 'أغلق',\n open: 'افتح',\n select: 'اختر',\n clone: 'استنسخ',\n prepend: 'سبق',\n socket: 'مقبس',\n },\n\n modifiers: {\n to: 'إلى',\n from: 'من',\n into: 'في',\n with: 'مع',\n at: 'عند',\n in: 'في',\n of: 'من',\n as: 'كـ',\n by: 'بواسطة',\n before: 'قبل',\n after: 'بعد',\n over: 'فوق',\n under: 'تحت',\n between: 'بين',\n through: 'عبر',\n without: 'بدون',\n },\n\n events: {\n click: 'نقر',\n dblclick: 'نقر مزدوج',\n mousedown: 'فأرة أسفل',\n mouseup: 'فأرة أعلى',\n mouseenter: 'فأرة دخول',\n mouseleave: 'فأرة خروج',\n mouseover: 'فأرة فوق',\n mouseout: 'فأرة خارج',\n mousemove: 'فأرة تحرك',\n keydown: 'مفتاح أسفل',\n keyup: 'مفتاح أعلى',\n keypress: 'مفتاح ضغط',\n focus: 'تركيز',\n blur: 'ضبابية',\n change: 'تغيير',\n input: 'إدخال',\n submit: 'إرسال',\n reset: 'إعادة تعيين',\n load: 'تحميل',\n unload: 'إلغاء تحميل',\n resize: 'تغيير حجم',\n scroll: 'تمرير',\n touchstart: 'بداية لمس',\n touchend: 'نهاية لمس',\n touchmove: 'تحرك لمس',\n touchcancel: 'إلغاء لمس',\n },\n\n logical: {\n when: 'عندما',\n where: 'أين',\n and: 'و',\n or: 'أو',\n not: 'ليس',\n is: 'هو',\n exists: 'موجود',\n matches: 'يطابق',\n contains: 'يحتوي',\n includes: 'يشمل',\n equals: 'يساوي',\n has: 'لديه',\n have: 'لدي',\n then: 'ثم',\n else: 'وإلا',\n otherwise: 'خلاف ذلك',\n end: 'النهاية',\n live: 'حي',\n bind: 'اربط',\n changes: 'يتغير',\n },\n\n temporal: {\n seconds: 'ثوانِ',\n second: 'ثانية',\n milliseconds: 'ميلي ثانية',\n millisecond: 'ميلي ثانية',\n minutes: 'دقائق',\n minute: 'دقيقة',\n hours: 'ساعات',\n hour: 'ساعة',\n ms: 'م.ث',\n s: 'ث',\n min: 'د',\n h: 'س',\n },\n\n values: {\n true: 'صحيح',\n false: 'خطأ',\n null: 'فارغ',\n undefined: 'غير معرف',\n it: 'هو',\n its: 'له',\n me: 'أنا',\n my: 'لي',\n myself: 'نفسي',\n you: 'أنت',\n your: 'لك',\n yourself: 'نفسك',\n element: 'عنصر',\n target: 'هدف',\n detail: 'تفاصيل',\n event: 'حدث',\n window: 'نافذة',\n document: 'وثيقة',\n body: 'جسم',\n result: 'نتيجة',\n value: 'قيمة',\n },\n\n attributes: {\n class: 'فئة',\n classes: 'فئات',\n style: 'أسلوب',\n styles: 'أساليب',\n attribute: 'خاصية',\n attributes: 'خصائص',\n property: 'خاصية',\n properties: 'خصائص',\n },\n\n expressions: {\n first: 'أول',\n last: 'آخر',\n next: 'التالي',\n previous: 'السابق',\n prev: 'سابق',\n at: 'عند',\n random: 'عشوائي',\n closest: 'الأقرب',\n parent: 'والد',\n children: 'أطفال',\n within: 'داخل',\n no: 'لا يوجد',\n empty: 'فارغ',\n some: 'بعض',\n 'starts with': 'يبدأ بـ',\n 'ends with': 'ينتهي بـ',\n 'ignoring case': 'مع تجاهل الحالة',\n 'sorted by': 'مرتب حسب',\n 'mapped to': 'محول إلى',\n 'split by': 'مقسم بواسطة',\n 'joined by': 'مدموج بواسطة',\n },\n};\n","// packages/i18n/src/parser/ar.ts\n\nimport { ar } from '../dictionaries/ar';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Arabic keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Arabic:\n * - `على نقر بدل .active` → parses as `on click toggle .active`\n * - `إذا صحيح ثم سجل \"مرحبا\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `على click بدل .active` also works (Arabic `على` + English `click`)\n *\n * Arabic is a crucial test case because:\n * - Right-to-left (RTL) script\n * - Different character set (Unicode Arabic block)\n * - Space-separated words with diacritics\n * - Tests parser's Unicode handling robustly\n *\n * Note: The parser handles RTL text correctly because tokenization\n * is based on whitespace/operator boundaries, not visual direction.\n *\n * @example\n * ```typescript\n * import { arKeywords } from '@lokascript/i18n/parser/ar';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: arKeywords });\n * parser.parse('على نقر بدل .active');\n * ```\n */\nexport const arKeywords: KeywordProvider = createKeywordProvider(ar, 'ar', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { ar as arDictionary } from '../dictionaries/ar';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ko: Dictionary = {\n commands: {\n on: '에',\n tell: '말하다',\n trigger: '트리거',\n send: '보내다',\n take: '가져오다',\n put: '넣다',\n set: '설정',\n get: '얻다',\n add: '추가',\n remove: '제거',\n toggle: '토글',\n hide: '숨기다',\n show: '보이다',\n if: '만약',\n unless: '아니라면', // distinct from else `아니면` (line ~131) — was a homonym\n repeat: '반복',\n for: '각각', // profile's for word — 동안 is while (collision)\n while: '동안',\n until: '까지',\n continue: '계속',\n break: '중단',\n halt: '정지',\n wait: '대기',\n fetch: '가져오기',\n call: '호출',\n return: '반환',\n make: '만들다',\n log: '로그',\n throw: '던지다',\n catch: '잡다',\n measure: '측정',\n transition: '전환',\n increment: '증가',\n decrement: '감소',\n default: '기본값',\n go: '이동',\n pushUrl: 'URL푸시',\n replaceUrl: 'URL교체',\n copy: '복사',\n pick: '선택',\n beep: '비프',\n js: 'JS실행',\n async: '비동기',\n render: '렌더링',\n swap: '교환',\n morph: '변형',\n settle: '안정',\n append: '덧붙이다', // profile primary; '추가' is add's word (parsed as add)\n // 종료 → 나가기: realigned to the semantic profile primary (ko.ts `exit: 나가기`,\n // whose comment already flags the 종료 end-collision). Rendered as 종료 it\n // tokenized as a plain identifier, so a guard-clause `exit` never parsed.\n exit: '나가기',\n install: '설치',\n breakpoint: '중단점',\n clear: '지우기',\n close: '닫기',\n open: '열기',\n select: '선택',\n clone: '복제',\n prepend: '앞에추가',\n socket: '소켓',\n },\n\n modifiers: {\n to: '에',\n from: '에서',\n into: '으로',\n with: '와',\n at: '에',\n in: '안에',\n of: '의',\n as: '로',\n by: '에의해',\n before: '전에',\n after: '후에',\n over: '위에',\n under: '아래',\n between: '사이',\n through: '통해',\n without: '없이',\n },\n\n events: {\n click: '클릭',\n dblclick: '더블클릭',\n mousedown: '마우스다운',\n mouseup: '마우스업',\n mouseenter: '마우스엔터',\n mouseleave: '마우스리브',\n mouseover: '마우스오버',\n mouseout: '마우스아웃',\n mousemove: '마우스무브',\n keydown: '키다운',\n keyup: '키업',\n keypress: '키프레스',\n focus: '포커스',\n blur: '블러',\n change: '변경',\n input: '입력',\n submit: '제출',\n reset: '리셋',\n load: '로드',\n unload: '언로드',\n resize: '리사이즈',\n scroll: '스크롤',\n touchstart: '터치시작',\n touchend: '터치종료',\n touchmove: '터치이동',\n touchcancel: '터치취소',\n },\n\n logical: {\n when: '때',\n where: '어디',\n and: '그리고',\n or: '또는',\n not: '아니',\n is: '이다',\n exists: '존재',\n matches: '일치',\n contains: '포함',\n includes: '포함하다',\n equals: '같다',\n has: '있다',\n have: '있다',\n then: '그러면',\n else: '아니면',\n otherwise: '그렇지않으면',\n end: '끝',\n live: '라이브',\n bind: '바인드',\n changes: '변경되면',\n },\n\n temporal: {\n seconds: '초',\n second: '초',\n milliseconds: '밀리초',\n millisecond: '밀리초',\n minutes: '분',\n minute: '분',\n hours: '시간',\n hour: '시간',\n ms: 'ms',\n s: '초',\n min: '분',\n h: '시',\n },\n\n values: {\n true: '참',\n false: '거짓',\n null: '널',\n undefined: '정의안됨',\n it: '그것',\n its: '그것의',\n me: '나',\n my: '내',\n myself: '나자신',\n you: '너',\n your: '네',\n yourself: '너자신',\n element: '요소',\n target: '대상',\n detail: '세부',\n event: '이벤트',\n window: '창',\n document: '문서',\n body: '바디',\n result: '결과',\n value: '값',\n },\n\n attributes: {\n class: '클래스',\n classes: '클래스들',\n style: '스타일',\n styles: '스타일들',\n attribute: '속성',\n attributes: '속성들',\n property: '프로퍼티',\n properties: '프로퍼티들',\n },\n\n expressions: {\n first: '첫번째',\n last: '마지막',\n next: '다음',\n previous: '이전',\n prev: '이전',\n at: '에서',\n random: '무작위',\n closest: '가장가까운',\n parent: '부모',\n children: '자식',\n within: '이내',\n no: '없음',\n empty: '비어있는',\n some: '일부',\n 'starts with': '로시작',\n 'ends with': '로끝나는',\n 'ignoring case': '대소문자_무시',\n 'sorted by': '로_정렬',\n 'mapped to': '로_변환',\n 'split by': '로_분할',\n 'joined by': '로_결합',\n },\n};\n","// packages/i18n/src/parser/ko.ts\n\nimport { ko } from '../dictionaries/ko';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Korean keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Korean:\n * - `에 클릭 토글 .active` → parses as `on click toggle .active`\n * - `만약 참 그러면 로그 \"안녕하세요\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `에 click 토글 .active` also works (Korean `에` + English `click`)\n *\n * Korean is a useful test case because:\n * - SOV word order (Subject-Object-Verb)\n * - Hangul script (syllabic blocks)\n * - Agglutinative morphology with particles\n * - Tests parser's Unicode handling with Korean characters\n *\n * @example\n * ```typescript\n * import { koKeywords } from '@lokascript/i18n/parser/ko';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: koKeywords });\n * parser.parse('에 클릭 토글 .active');\n * ```\n */\nexport const koKeywords: KeywordProvider = createKeywordProvider(ko, 'ko', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { ko as koDictionary } from '../dictionaries/ko';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const zh: Dictionary = {\n commands: {\n on: '当',\n tell: '告诉',\n trigger: '触发',\n send: '发送',\n // `拿取` (the semantic zh profile's take primary), not `获取` — `获取` is the\n // profile's GET primary, so emitting it for take made `take …` parse as get\n // (take-class-from-siblings: phantom get, take dropped). Exposed by the get-zh-ba\n // pattern; same dict↔profile homonym family as pl get/fetch.\n take: '拿取',\n put: '放置',\n set: '设置',\n get: '获得',\n add: '添加',\n remove: '移除',\n toggle: '切换',\n hide: '隐藏',\n show: '显示',\n if: '如果',\n unless: '除非',\n repeat: '重复',\n for: '为',\n while: '当',\n until: '直到',\n continue: '继续',\n break: '中断',\n halt: '停止',\n wait: '等待',\n // 抓取 (zhuāqǔ, \"grab/scrape\") is the semantic zh profile's `fetch` primary;\n // 获取 (huòqǔ) is its `get` primary, so emitting 获取 here made the semantic\n // parser read a transformed `fetch` as `get`. See ZH_BLOCK_BODY_SCOPE.md #3.\n fetch: '抓取',\n call: '调用',\n return: '返回',\n make: '制作',\n log: '日志',\n throw: '抛出',\n catch: '捕获',\n measure: '测量',\n transition: '过渡',\n increment: '增加',\n decrement: '减少',\n default: '默认',\n go: '前往',\n pushUrl: '推送网址',\n replaceUrl: '替换网址',\n copy: '复制',\n pick: '选取',\n beep: '蜂鸣',\n js: 'JS执行',\n async: '异步',\n render: '渲染',\n swap: '交换',\n morph: '变形',\n settle: '稳定',\n append: '追加',\n exit: '退出',\n install: '安装',\n breakpoint: '断点',\n clear: '清除',\n close: '关闭',\n open: '打开',\n select: '选择',\n clone: '克隆',\n prepend: '前置',\n },\n\n modifiers: {\n to: '到',\n from: '从',\n into: '进入',\n with: '与',\n at: '在',\n in: '在',\n of: '的',\n as: '作为',\n by: '通过',\n before: '之前',\n after: '之后',\n over: '在上',\n under: '在下',\n between: '之间',\n through: '通过',\n without: '没有',\n },\n\n events: {\n click: '点击',\n dblclick: '双击',\n mousedown: '鼠标按下',\n mouseup: '鼠标抬起',\n mouseenter: '鼠标进入',\n mouseleave: '鼠标离开',\n mouseover: '鼠标悬停',\n mouseout: '鼠标移出',\n mousemove: '鼠标移动',\n keydown: '按键按下',\n keyup: '按键抬起',\n keypress: '按键',\n focus: '聚焦',\n blur: '失焦',\n change: '改变',\n input: '输入',\n submit: '提交',\n reset: '重置',\n load: '加载',\n unload: '卸载',\n resize: '调整大小',\n scroll: '滚动',\n touchstart: '触摸开始',\n touchend: '触摸结束',\n touchmove: '触摸移动',\n touchcancel: '触摸取消',\n },\n\n logical: {\n when: '当',\n where: '哪里',\n and: '和',\n or: '或',\n not: '非',\n is: '是',\n exists: '存在',\n matches: '匹配',\n contains: '包含',\n includes: '包括',\n equals: '等于',\n has: '有',\n have: '有',\n then: '那么',\n else: '否则',\n otherwise: '要不然',\n end: '结束',\n live: '实时',\n bind: '绑定',\n changes: '改变时',\n },\n\n temporal: {\n seconds: '秒',\n second: '秒',\n milliseconds: '毫秒',\n millisecond: '毫秒',\n minutes: '分钟',\n minute: '分钟',\n hours: '小时',\n hour: '小时',\n ms: '毫秒',\n s: '秒',\n min: '分',\n h: '时',\n },\n\n values: {\n true: '真',\n false: '假',\n null: '空',\n undefined: '未定义',\n it: '它',\n its: '它的',\n me: '我',\n my: '我的',\n myself: '我自己',\n you: '你',\n your: '你的',\n yourself: '你自己',\n element: '元素',\n target: '目标',\n detail: '详情',\n event: '事件',\n window: '窗口',\n document: '文档',\n body: '主体',\n result: '结果',\n value: '值',\n },\n\n attributes: {\n class: '类',\n classes: '类别',\n style: '样式',\n styles: '样式集',\n attribute: '属性',\n attributes: '属性集',\n property: '特性',\n properties: '特性集',\n },\n\n expressions: {\n first: '第一个',\n last: '最后一个',\n next: '下一个',\n previous: '上一个',\n prev: '上个',\n at: '在',\n random: '随机',\n closest: '最近的',\n parent: '父级',\n children: '子级',\n within: '之内',\n no: '没有',\n empty: '空的',\n some: '一些',\n 'starts with': '以开头',\n 'ends with': '以结尾',\n 'ignoring case': '忽略大小写',\n 'sorted by': '按_排序',\n 'mapped to': '映射为',\n 'split by': '按_分割',\n 'joined by': '用_连接',\n },\n};\n","// packages/i18n/src/parser/zh.ts\n\nimport { zh } from '../dictionaries/zh';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Chinese (Simplified) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Chinese:\n * - `当 点击 切换 .active` → parses as `on click toggle .active`\n * - `如果 真 那么 日志 \"你好\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `当 click 切换 .active` also works (Chinese `当` + English `click`)\n *\n * Chinese is a useful test case because:\n * - SVO word order (similar to English)\n * - Logographic script (Chinese characters)\n * - Isolating morphology (minimal inflection)\n * - Tests parser's Unicode handling with CJK characters\n * - Large developer population\n *\n * @example\n * ```typescript\n * import { zhKeywords } from '@lokascript/i18n/parser/zh';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: zhKeywords });\n * parser.parse('当 点击 切换 .active');\n * ```\n */\nexport const zhKeywords: KeywordProvider = createKeywordProvider(zh, 'zh', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { zh as zhDictionary } from '../dictionaries/zh';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const tr: Dictionary = {\n commands: {\n on: 'üzerinde',\n tell: 'söyle',\n trigger: 'tetikle',\n send: 'gönder',\n take: 'tut', // auditor: dict emitted a word the profile reads differently\n put: 'koy',\n set: 'ayarla',\n get: 'al',\n add: 'ekle',\n remove: 'kaldır',\n toggle: 'değiştir',\n hide: 'gizle',\n show: 'göster',\n if: 'eğer',\n unless: 'değilse',\n repeat: 'tekrarla',\n for: 'için',\n // `süresince` (the semantic tr profile's while primary), not `iken`: `iken`\n // is the profile's WHEN primary (logical.when below also emits it), so a\n // fronted repeat-while head tokenized as `when` and the condition dropped\n // wholesale. Same dict↔profile homonym disambiguation as pl get/pobierz.\n while: 'süresince',\n until: 'kadar',\n continue: 'devam',\n break: 'dur',\n halt: 'durdur',\n wait: 'bekle',\n fetch: 'getir',\n call: 'çağır',\n return: 'dön',\n make: 'yap',\n log: 'kaydet',\n throw: 'fırlat',\n catch: 'yakala',\n measure: 'ölç',\n transition: 'geçiş',\n increment: 'artır',\n decrement: 'azalt',\n default: 'varsayılan',\n go: 'git',\n pushUrl: 'urlEkle',\n replaceUrl: 'urlDeğiştir',\n copy: 'kopyala',\n pick: 'seç',\n beep: 'bip',\n js: 'js',\n async: 'asenkron',\n render: 'render',\n swap: 'takas',\n morph: 'dönüştür',\n settle: 'sabitlen',\n append: 'iliştir', // profile primary; 'ekle' is add's word (parsed as add)\n exit: 'çık',\n install: 'kur',\n breakpoint: 'kesme-noktası',\n clear: 'temizle',\n close: 'kapat',\n open: 'aç',\n select: 'seç',\n clone: 'klonla',\n prepend: 'başınaekle',\n socket: 'soket',\n },\n\n modifiers: {\n to: 'e',\n from: 'den',\n into: 'içine',\n with: 'ile',\n at: 'de',\n in: 'içinde',\n of: 'nin',\n as: 'olarak',\n by: 'tarafından',\n before: 'önce',\n after: 'sonra',\n over: 'üzerinde',\n under: 'altında',\n between: 'arasında',\n through: 'boyunca',\n without: 'olmadan',\n },\n\n events: {\n click: 'tıklama',\n dblclick: 'çift_tıklama',\n // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event\n // recognition (mousedown → \"bas\" / mouseup mis-captured). Mirrors the #535\n // ru/uk fuse + #510 resize fix.\n mousedown: 'farebas',\n mouseup: 'farebırak',\n mouseenter: 'fare_gir',\n mouseleave: 'fare_çık',\n mouseover: 'fare_üstü',\n mouseout: 'fare_dışı',\n mousemove: 'fare_hareket',\n keydown: 'tuş_bas',\n keyup: 'tuş_bırak',\n keypress: 'tuş_basım',\n focus: 'odak',\n blur: 'bulanık',\n change: 'değişim',\n input: 'giriş',\n submit: 'gönder',\n reset: 'sıfırla',\n load: 'yükle',\n unload: 'yükle_kaldır',\n resize: 'boyutlandırma',\n scroll: 'kaydır',\n touchstart: 'dokunma_başla',\n touchend: 'dokunma_bitir',\n touchmove: 'dokunma_hareket',\n touchcancel: 'dokunma_iptal',\n },\n\n logical: {\n when: 'iken',\n where: 'nerede',\n and: 've',\n or: 'veya',\n not: 'değil',\n is: 'dir',\n exists: 'var',\n matches: 'eşleşir',\n contains: 'içerir',\n includes: 'dahil',\n equals: 'eşittir',\n has: 'var',\n have: 'var',\n then: 'ardından',\n else: 'yoksa',\n otherwise: 'aksi_halde',\n end: 'son',\n live: 'canlı',\n changes: 'değiştiğinde',\n },\n\n temporal: {\n seconds: 'saniye',\n second: 'saniye',\n milliseconds: 'milisaniye',\n millisecond: 'milisaniye',\n minutes: 'dakika',\n minute: 'dakika',\n hours: 'saat',\n hour: 'saat',\n ms: 'ms',\n s: 's',\n min: 'dk',\n h: 'sa',\n },\n\n values: {\n true: 'doğru',\n false: 'yanlış',\n null: 'boş',\n undefined: 'tanımsız',\n it: 'o',\n its: 'onun',\n me: 'ben',\n my: 'benim',\n myself: 'kendim',\n you: 'sen',\n your: 'senin',\n yourself: 'kendin',\n element: 'öğe',\n target: 'hedef',\n detail: 'detay',\n event: 'olay',\n window: 'pencere',\n document: 'belge',\n body: 'gövde',\n result: 'sonuç',\n value: 'değer',\n },\n\n attributes: {\n class: 'sınıf',\n classes: 'sınıflar',\n style: 'stil',\n styles: 'stiller',\n attribute: 'özellik',\n attributes: 'özellikler',\n property: 'özellik',\n properties: 'özellikler',\n },\n\n expressions: {\n first: 'ilk',\n // 'son' is also the END keyword emission (block terminator), and the\n // parser's end-recognizers match it by value — so a positional `last`\n // emission of 'son' terminated the enclosing block mid-condition\n // (focus-trap's `eşleşir son <button/>` dropped the branch body; the sw\n // mwisho class). 'sonuncu' (\"the last one\") is unambiguous.\n last: 'sonuncu',\n next: 'sonraki',\n previous: 'önceki',\n prev: 'önc',\n at: 'de',\n random: 'rastgele',\n closest: 'enyakın',\n parent: 'ebeveyn',\n children: 'çocuklar',\n within: 'içinde',\n no: 'yok',\n empty: 'boş',\n some: 'bazı',\n 'starts with': 'ile başlar',\n 'ends with': 'ile biter',\n 'ignoring case': 'büyük küçük harf duyarsız',\n 'sorted by': 'göre sıralı',\n 'mapped to': 'ye dönüştürülmüş',\n 'split by': 'ile bölünmüş',\n 'joined by': 'ile birleştirilmiş',\n },\n};\n","// packages/i18n/src/parser/tr.ts\n\nimport { tr } from '../dictionaries/tr';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Turkish keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Turkish:\n * - `üzerinde tıklama değiştir .active` → parses as `on click toggle .active`\n * - `eğer doğru ise kaydet \"merhaba\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `üzerinde click değiştir .active` also works (Turkish `üzerinde` + English `click`)\n *\n * Turkish is a useful test case because:\n * - SOV word order (Subject-Object-Verb)\n * - Agglutinative morphology with suffixes\n * - Vowel harmony rules\n * - Latin script with special characters (ı, ğ, ş, ç, ö, ü)\n * - Tests parser's handling of extended Latin characters\n *\n * @example\n * ```typescript\n * import { trKeywords } from '@lokascript/i18n/parser/tr';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: trKeywords });\n * parser.parse('üzerinde tıklama değiştir .active');\n * ```\n */\nexport const trKeywords: KeywordProvider = createKeywordProvider(tr, 'tr', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { tr as trDictionary } from '../dictionaries/tr';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const id: Dictionary = {\n commands: {\n on: 'pada',\n tell: 'katakan',\n trigger: 'picu',\n send: 'kirim',\n take: 'ambil',\n put: 'taruh',\n set: 'atur',\n get: 'dapatkan',\n add: 'tambah',\n remove: 'hapus',\n toggle: 'alihkan',\n hide: 'sembunyikan',\n show: 'tampilkan',\n if: 'jika',\n unless: 'kecuali',\n repeat: 'ulangi',\n for: 'untuk',\n while: 'selama',\n until: 'sampai',\n continue: 'lanjutkan',\n break: 'hentikan',\n halt: 'berhenti',\n wait: 'tunggu',\n // profile primary; 'ambil' is take's word — emitting it for fetch made every\n // fetch parse as take once the fused take-event pattern came alive (the de\n // holen/abrufen bug class)\n fetch: 'muat',\n call: 'panggil',\n return: 'kembali',\n make: 'buat',\n log: 'catat',\n throw: 'lempar',\n catch: 'tangkap',\n measure: 'ukur',\n transition: 'transisi',\n // naikkan (raise), not tambahkan — tambahkan is the semantic profile's\n // `add` alternative, so emitting it made increment-counter parse as ADD\n // (the #373 collision family). naikkan is the profile's increment\n // alternative, pairing naturally with the decrement side.\n increment: 'naikkan',\n decrement: 'kurangi',\n default: 'bawaan',\n go: 'pergi',\n pushUrl: 'tambahUrl',\n replaceUrl: 'gantiUrl',\n copy: 'salin',\n pick: 'pilih',\n beep: 'bunyi',\n js: 'js',\n async: 'asinkron',\n render: 'olah', // auditor: dict emitted a word the profile reads differently\n swap: 'tukar',\n morph: 'ubah', // auditor: dict emitted a word the profile reads differently\n settle: 'stabilkan', // auditor: dict emitted a word the profile reads differently\n append: 'sisipkan', // profile primary; 'tambah_akhir' splits and is unrecognized\n exit: 'keluar',\n install: 'pasang',\n breakpoint: 'titik-henti',\n clear: 'bersihkan', // hapus is the remove PRIMARY in the profile\n close: 'tutup',\n open: 'buka',\n select: 'pilih',\n clone: 'klon',\n prepend: 'awali',\n },\n\n modifiers: {\n to: 'ke',\n from: 'dari',\n into: 'ke_dalam',\n with: 'dengan',\n at: 'di',\n in: 'dalam',\n of: 'dari',\n as: 'sebagai',\n by: 'oleh',\n before: 'sebelum',\n after: 'setelah',\n over: 'di_atas',\n under: 'di_bawah',\n between: 'antara',\n through: 'melalui',\n without: 'tanpa',\n },\n\n events: {\n click: 'klik',\n dblclick: 'klik_ganda',\n mousedown: 'tekan_mouse',\n mouseup: 'lepas_mouse',\n mouseenter: 'mouse_masuk',\n mouseleave: 'mouse_keluar',\n mouseover: 'mouse_atas',\n mouseout: 'mouse_luar',\n mousemove: 'gerak_mouse',\n keydown: 'tekan_tombol',\n keyup: 'lepas_tombol',\n keypress: 'pencet_tombol',\n focus: 'fokus',\n blur: 'blur',\n change: 'ubah',\n input: 'masukan',\n submit: 'kirim',\n reset: 'reset',\n load: 'muat',\n unload: 'bongkar',\n resize: 'ubah_ukuran',\n scroll: 'gulir',\n touchstart: 'mulai_sentuh',\n touchend: 'akhir_sentuh',\n touchmove: 'gerak_sentuh',\n touchcancel: 'batal_sentuh',\n },\n\n logical: {\n when: 'ketika',\n where: 'di_mana',\n and: 'dan',\n or: 'atau',\n not: 'bukan',\n is: 'adalah',\n exists: 'ada',\n matches: 'cocok',\n contains: 'berisi',\n includes: 'termasuk',\n equals: 'sama',\n has: 'punya',\n have: 'punya',\n then: 'lalu',\n else: 'lainnya',\n otherwise: 'sebaliknya',\n end: 'akhir',\n live: 'langsung',\n changes: 'berubah',\n },\n\n temporal: {\n seconds: 'detik',\n second: 'detik',\n milliseconds: 'milidetik',\n millisecond: 'milidetik',\n minutes: 'menit',\n minute: 'menit',\n hours: 'jam',\n hour: 'jam',\n ms: 'ms',\n s: 'd',\n min: 'mnt',\n h: 'j',\n },\n\n values: {\n true: 'benar',\n false: 'salah',\n null: 'kosong',\n undefined: 'tidak_terdefinisi',\n it: 'itu',\n its: 'miliknya',\n me: 'saya',\n my: 'saya punya',\n myself: 'saya sendiri',\n you: 'kamu',\n your: 'kamu punya',\n yourself: 'kamu sendiri',\n element: 'elemen',\n target: 'target',\n detail: 'detail',\n event: 'peristiwa',\n window: 'jendela',\n document: 'dokumen',\n body: 'badan',\n result: 'hasil',\n value: 'nilai',\n },\n\n attributes: {\n class: 'kelas',\n classes: 'kelas_kelas',\n style: 'gaya',\n styles: 'gaya_gaya',\n attribute: 'atribut',\n attributes: 'atribut_atribut',\n property: 'properti',\n properties: 'properti_properti',\n },\n\n expressions: {\n first: 'pertama',\n last: 'terakhir',\n next: 'berikutnya',\n previous: 'sebelumnya',\n prev: 'sblm',\n at: 'di',\n random: 'acak',\n closest: 'terdekat',\n parent: 'induk',\n children: 'anak_anak',\n within: 'dalam',\n no: 'tidak_ada',\n empty: 'kosong',\n some: 'beberapa',\n 'starts with': 'dimulai dengan',\n 'ends with': 'diakhiri dengan',\n 'ignoring case': 'abaikan kapital',\n 'sorted by': 'diurutkan berdasarkan',\n 'mapped to': 'dipetakan ke',\n 'split by': 'dipisah oleh',\n 'joined by': 'digabung oleh',\n },\n};\n","// packages/i18n/src/parser/id.ts\n\nimport { id } from '../dictionaries/id';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Indonesian (Bahasa Indonesia) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Indonesian:\n * - `pada klik ganti .active` → parses as `on click toggle .active`\n * - `jika benar lalu log \"Halo\"` → parses as `if true then log \"Hello\"`\n *\n * Indonesian is an SVO language with:\n * - Agglutinative morphology (prefixes/suffixes)\n * - No grammatical gender\n * - Prepositions (like English)\n * - Relatively simple syntax\n *\n * @example\n * ```typescript\n * import { idKeywords } from '@lokascript/i18n/parser/id';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: idKeywords });\n * parser.parse('pada klik ganti .active');\n * ```\n */\nexport const idKeywords: KeywordProvider = createKeywordProvider(id, 'id', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { id as idDictionary } from '../dictionaries/id';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const qu: Dictionary = {\n commands: {\n on: 'kaqpi',\n tell: 'niy',\n trigger: 'kichay',\n send: 'kachay',\n take: 'hapiy', // auditor: dict emitted a word the profile reads differently\n put: 'churay',\n // churay is the semantic qu profile's `put` primary; `set` is churanay. Emitting\n // churay for set made the semantic parser read a transformed `set` as `put`.\n // See ZH_BLOCK_BODY_SCOPE.md (#2 sweep — keyword realignment, cf. zh fetch).\n set: 'churanay',\n // Align with the semantic quechua profile's `get` primary (`taripay`); the\n // previous `chaskiy` had no profile entry, so the transformed `get` dropped\n // (get-value parsed degenerate). Same dict↔profile alignment as id `toggle`.\n get: 'taripay',\n add: 'yapay',\n remove: 'qichuy',\n toggle: 'tikray',\n hide: 'pakay',\n show: 'rikuchiy',\n if: 'sichus',\n unless: 'mana sichus', // spaced phrase (\"if not\"); `_` form split to `mana`+`sichus`(=if) at parse time\n repeat: 'kutipay',\n for: 'sapankaq', // profile's for word — rayku doubles as `by`\n // `kaykamaqa` (the semantic qu profile's while primary), not `kay_kaq`: the\n // `_` form is unknown to the profile (and `_` words split at parse time, cf.\n // qhipaman_yapay), so the fronted repeat-while head never formed a `while`\n // node — the condition dropped wholesale. Same dict↔profile alignment as\n // vi render / de abrufen.\n while: 'kaykamaqa',\n until: 'hayk_akama',\n continue: 'purichiy',\n break: 'p_akiy',\n halt: 'sayay',\n wait: 'suyay',\n fetch: 'apamuy',\n call: 'qayay',\n return: 'kutimuy',\n make: 'ruray',\n // qillqay is the semantic qu profile's `copy` primary; `log` is qillqakuy.\n // Emitting qillqay for log made the parser read every transformed log as\n // copy (log-value/log-element/get-value lossy) — same realign as set above.\n log: 'qillqakuy',\n throw: 'wikchuy',\n catch: 'hapsiy',\n measure: 'tupuy',\n // pasay, not tikray: the semantic qu profile's toggle keyword is\n // t'ikray/tikray, so a tikray render collided with toggle and the\n // transition command never anchored (sw kama precedent, #569).\n transition: 'pasay',\n increment: 'yapachiy',\n decrement: 'pisiyachiy',\n default: 'ñawpaq_kaq',\n go: 'riy',\n pushUrl: 'url_tanqay',\n replaceUrl: 'url_tikray',\n copy: 'qillqay',\n pick: 'akllay',\n beep: 'waqay',\n js: 'js',\n async: 'mana_suyaspa',\n render: 'rikurichiy', // auditor: dict emitted a word the profile reads differently\n swap: \"t'inkuy\", // profile primary; 'rantin_tikray' splits, 'tikray' is toggle's word\n morph: 'tukunay', // auditor: dict emitted a word the profile reads differently\n settle: 'tiyakuy', // auditor: dict emitted a word the profile reads differently\n append: 'qatichiy', // profile's append primary (single token); `qhipaman_yapay` `_`-split to qhipaman+yapay(=add) at parse time\n exit: 'lluqsiy',\n install: 'tarpuy',\n breakpoint: 'sayachinay',\n clear: 'pichay',\n close: 'wichqay',\n open: 'kichay',\n select: 'akllay',\n clone: 'kikinchay',\n prepend: 'ñawpachiy',\n socket: 'tinkina',\n },\n\n modifiers: {\n to: 'man',\n from: 'manta',\n into: 'ukupi',\n with: 'wan',\n at: 'pi',\n in: 'ukupi',\n of: 'pa',\n as: 'hina',\n by: 'rayku',\n before: 'ñawpaqpi',\n after: 'qhepapi',\n over: 'hawapi',\n under: 'urapi',\n between: 'chawpipi',\n through: 'pasaspa',\n without: 'mana',\n },\n\n events: {\n click: 'ñitiy',\n dblclick: 'iskay_ñitiy',\n // Fused (no `_`): the semantic tokenizer splits on `_` — and `rat_ñitiy` then\n // mis-captured as the `click` event (ñitiy→click). Mirrors the #535 ru/uk fuse.\n mousedown: 'ratñitiy',\n mouseup: 'rathuqariy',\n mouseenter: 'rat_yaykuy',\n mouseleave: 'rat_lluqsiy',\n mouseover: 'rat_hawapi',\n mouseout: 'rat_hawamanta',\n mousemove: 'rat_kuyuy',\n keydown: 'yupana_ñitiy',\n keyup: 'yupana_huqariy',\n keypress: 'yupana_ñitana',\n focus: 'qhaway',\n blur: 'paqariy',\n change: 'tikray',\n input: 'yaykuchiy',\n submit: 'kachay',\n reset: 'qallariy',\n load: 'apakuy',\n unload: 'urmay',\n resize: 'hatun_kay',\n scroll: 'kunray',\n touchstart: 'llamiy_qallay',\n touchend: 'llamiy_tukuy',\n touchmove: 'llamiy_kuyuy',\n touchcancel: 'llamiy_hark_ay',\n },\n\n logical: {\n when: 'maykama',\n where: 'maypi',\n and: 'chaymanta',\n or: 'utaq',\n not: 'mana',\n is: 'kanqa',\n exists: 'tiyan',\n matches: 'tupan',\n contains: 'ukupi_kan',\n includes: 'churasqa',\n equals: 'kikin',\n has: 'kachkan',\n have: 'kachkani',\n then: 'chayqa',\n // Align to the semantic profile's else word `manachus`. The old `mana_chayqa`\n // tokenized as `mana`(false) + `_` + `chayqa`(then) — no else keyword formed,\n // so qu conditionals never split their else branch. `manachus` is a single\n // token the profile-derived keyword map reads as `else` (dict↔profile align).\n else: 'manachus',\n otherwise: 'huk_kaqpi',\n end: 'tukuy',\n live: 'kawsay',\n changes: 'tukurikun',\n },\n\n temporal: {\n seconds: 'sikundukuna',\n second: 'sikundu',\n milliseconds: 'iskay_paqta_sikundukuna',\n millisecond: 'iskay_paqta_sikundu',\n minutes: 'minutukuna',\n minute: 'minutu',\n hours: 'horakuna',\n hour: 'hora',\n ms: 'ms',\n s: 's',\n min: 'm',\n h: 'h',\n },\n\n values: {\n true: 'cheqaq',\n false: 'llulla',\n null: 'chusaq',\n undefined: 'mana_riqsisqa',\n it: 'chay',\n its: 'chaypaq',\n me: 'noqa',\n my: 'noqaq',\n myself: 'noqa killa',\n you: 'qam',\n your: 'qampaq',\n yourself: 'qam killa',\n element: 'raku',\n target: 'punta',\n detail: 'sut_iy',\n event: 'ruway',\n window: 'k_iri',\n document: 'qillqa',\n body: 'kurku',\n result: 'lluqsiy',\n value: 'chanin',\n },\n\n attributes: {\n class: 'ayllu',\n classes: 'ayllukuna',\n style: 'sami',\n styles: 'samikuna',\n attribute: 'kaq',\n attributes: 'kaqkuna',\n property: 'kanay',\n properties: 'kanaykuna',\n },\n\n expressions: {\n first: 'ñawpaq',\n last: 'qhipa',\n next: 'qhipantin',\n previous: 'ñawpaqnin',\n prev: 'ñawpaq',\n at: 'pi',\n random: 'imaymanata',\n closest: 'kaylla',\n parent: 'mama_tayta',\n children: 'wawakuna',\n within: 'ukupi',\n no: 'mana_kanchu',\n empty: 'chusaq',\n some: 'wakin',\n 'starts with': 'qallarisqa wan',\n 'ends with': 'tukusqa wan',\n 'ignoring case': 'hatun-huchuy qillqata-saqiy',\n 'sorted by': 'niqpi ruwasqa',\n 'mapped to': 'kay kaqman',\n 'split by': 'rakisqa',\n 'joined by': 'huñusqa',\n },\n};\n","// packages/i18n/src/parser/qu.ts\n\nimport { qu } from '../dictionaries/qu';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Quechua (Runasimi) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Quechua:\n * - `ñitiy-pi yapay #count-ta` → parses as `on click increment #count`\n *\n * Quechua is an SOV language with:\n * - Agglutinative/polysynthetic morphology\n * - Extensive suffix system (case markers: -ta, -man, -pi, -manta, -wan)\n * - Postpositions (unlike Spanish which uses prepositions)\n * - Object-Verb word order\n * - Evidentiality markers (not used in hyperscript)\n *\n * The grammar transformer handles suffix joining via hyphen notation\n * (e.g., \"#count-ta\" attaches the accusative marker).\n *\n * @example\n * ```typescript\n * import { quKeywords } from '@lokascript/i18n/parser/qu';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: quKeywords });\n * parser.parse('ñitiy-pi yapay #count-ta');\n * ```\n */\nexport const quKeywords: KeywordProvider = createKeywordProvider(qu, 'qu', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { qu as quDictionary } from '../dictionaries/qu';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const sw: Dictionary = {\n commands: {\n on: 'kwenye',\n tell: 'ambia',\n trigger: 'chochea',\n send: 'tuma',\n take: 'chukua',\n put: 'weka',\n // weka is the semantic sw profile's `put` primary; `set` is seti. Emitting weka\n // for set made the semantic parser read a transformed `set` as `put`.\n // See ZH_BLOCK_BODY_SCOPE.md (#2 sweep — keyword realignment, cf. zh fetch).\n set: 'seti',\n get: 'pata',\n add: 'ongeza',\n remove: 'ondoa',\n toggle: 'badilisha',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'blur',\n hide: 'ficha',\n show: 'onyesha',\n if: 'kama',\n unless: 'isipokuwa',\n repeat: 'rudia',\n for: 'kwa',\n while: 'wakati',\n until: 'hadi',\n continue: 'endelea',\n break: 'vunja',\n halt: 'simama',\n wait: 'ngoja',\n fetch: 'leta',\n call: 'ita',\n return: 'rudi',\n make: 'tengeneza', // auditor: dict emitted a word the profile reads differently\n log: 'andika',\n throw: 'tupa',\n catch: 'shika',\n measure: 'pima',\n transition: 'mpito',\n increment: 'ongezeko',\n decrement: 'punguza',\n default: 'msingi',\n go: 'nenda',\n pushUrl: 'sukumaUrl',\n replaceUrl: 'badilishaUrl',\n copy: 'nakili',\n pick: 'chagua',\n beep: 'lia',\n js: 'js',\n async: 'sainkroni',\n render: 'chora',\n swap: 'badilishana',\n morph: 'geuza', // auditor: dict emitted a word the profile reads differently\n settle: 'tulia',\n append: 'ambatanisha', // profile primary; 'ongezaMwisho' is unrecognized\n exit: 'toka',\n install: 'sakinisha',\n breakpoint: 'nukta-simama',\n clear: 'safisha', // futa is a remove alternative in the profile\n close: 'funga',\n open: 'fungua',\n select: 'chagua',\n clone: 'nakili',\n prepend: 'tanguliza',\n focus: 'lenga',\n socket: 'soketi',\n },\n\n modifiers: {\n to: 'kwa',\n from: 'kutoka',\n into: 'ndani',\n with: 'na',\n at: 'katika',\n in: 'ndani',\n of: 'ya',\n // `kuwa` (\"to be/become\" — the conversion sense, cf. `badilisha kuwa`), not\n // `kama`: sw `kama` is the IF keyword (commands.if above and the semantic sw\n // profile's if primary), so emitting it for `as` grew a phantom `if` command\n // out of every transformed `as <Type>` tail (`kama JSON`, `kama Number`) when\n // the semantic parser split event-body statements. Same dict↔profile homonym\n // disambiguation as pl get/pobierz. The semantic fetch-sw pattern still\n // tolerates hand-written `kama` in as-marker position.\n as: 'kuwa',\n by: 'na',\n before: 'kabla',\n after: 'baada',\n over: 'juu',\n under: 'chini',\n between: 'kati',\n through: 'kupitia',\n without: 'bila',\n },\n\n events: {\n click: 'bonyeza',\n dblclick: 'bonyeza_mara_mbili',\n mousedown: 'panya_shuka',\n mouseup: 'panya_juu',\n mouseenter: 'panya_ingia',\n mouseleave: 'panya_toka',\n mouseover: 'panya_juu',\n mouseout: 'panya_nje',\n mousemove: 'panya_sogea',\n keydown: 'kitufe_shuka',\n keyup: 'kitufe_juu',\n keypress: 'kitufe_bonyeza',\n focus: 'zingatia',\n blur: 'poteza_macho',\n change: 'badilisha',\n input: 'ingizo',\n submit: 'wasilisha',\n reset: 'weka_upya',\n load: 'pakia',\n unload: 'shuka',\n resize: 'badilisha_ukubwa',\n scroll: 'sogeza',\n touchstart: 'gusa_anza',\n touchend: 'gusa_mwisho',\n touchmove: 'gusa_sogea',\n touchcancel: 'gusa_ghairi',\n },\n\n logical: {\n when: 'wakati',\n where: 'wapi',\n and: 'na',\n or: 'au',\n not: 'si',\n is: 'ni',\n exists: 'ipo',\n matches: 'inafanana',\n contains: 'ina',\n includes: 'pamoja',\n equals: 'sawa',\n has: 'ana',\n have: 'nina',\n then: 'kisha',\n else: 'sivyo',\n otherwise: 'vinginevyo',\n end: 'mwisho',\n live: 'mubashara',\n changes: 'inabadilika',\n },\n\n temporal: {\n seconds: 'sekunde',\n second: 'sekunde',\n milliseconds: 'millisekunde',\n millisecond: 'millisekunde',\n minutes: 'dakika',\n minute: 'dakika',\n hours: 'masaa',\n hour: 'saa',\n ms: 'ms',\n s: 's',\n min: 'dk',\n h: 'sa',\n },\n\n values: {\n true: 'kweli',\n false: 'uongo',\n null: 'tupu',\n undefined: 'haijafafanuliwa',\n it: 'hiyo',\n its: 'yake',\n me: 'mimi',\n my: 'yangu',\n myself: 'mimi mwenyewe',\n you: 'wewe',\n your: 'yako',\n yourself: 'wewe mwenyewe',\n element: 'kipengele',\n target: 'lengo',\n detail: 'maelezo',\n event: 'tukio',\n window: 'dirisha',\n document: 'hati',\n body: 'mwili',\n result: 'matokeo',\n value: 'thamani',\n },\n\n attributes: {\n class: 'darasa',\n classes: 'madarasa',\n style: 'mtindo',\n styles: 'mitindo',\n attribute: 'sifa',\n attributes: 'sifa',\n property: 'mali',\n properties: 'mali',\n },\n\n expressions: {\n first: 'kwanza',\n // 'mwisho' is the END keyword (block terminator) — the tokenizer's keyword\n // map is last-wins, so a positional `last` emission of 'mwisho' reads as\n // `end` and terminates the enclosing block mid-condition (focus-trap's\n // `… inafanana mwisho <button/>` dropped the whole branch body). Emit the\n // concatenated adjective form instead (wa mwisho — the saufsi/wennnicht/\n // enyakın single-token class); the tokenizer reads it as `last`.\n last: 'wamwisho',\n next: 'ijayo',\n previous: 'iliyopita',\n prev: 'awali',\n at: 'katika',\n random: 'nasibu',\n // Natural Swahili: `karibu` (\"near/close\") is the ordinary word and already\n // maps to closest. The earlier `karibu_zaidi` (\"nearer\") underscore-split to\n // karibu/_/zaidi (the stray `_ zaidi` broke positional capture); the fused\n // `karibuzaidi` parsed but isn't real Swahili. `karibu` alone is both natural\n // and correct (the sw tokenizer is single-word-only, so a spaced `karibu\n // zaidi` would strand `zaidi` regardless).\n closest: 'karibu',\n parent: 'mzazi',\n children: 'watoto',\n within: 'ndani_ya',\n no: 'hakuna',\n empty: 'tupu',\n some: 'baadhi',\n 'starts with': 'huanza na',\n 'ends with': 'huisha na',\n 'ignoring case': 'puuza herufi kubwa ndogo',\n 'sorted by': 'kupangwa kwa',\n 'mapped to': 'kubadilishwa kuwa',\n 'split by': 'kugawanywa kwa',\n 'joined by': 'kuunganishwa kwa',\n },\n};\n","// packages/i18n/src/parser/sw.ts\n\nimport { sw } from '../dictionaries/sw';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Swahili (Kiswahili) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Swahili:\n * - `kwenye bonyeza badilisha .active` → parses as `on click toggle .active`\n * - `kama kweli basi andika \"Habari\"` → parses as `if true then log \"Hello\"`\n *\n * Swahili is an SVO Bantu language with:\n * - Agglutinative verb morphology\n * - Noun class system (simplified for hyperscript keywords)\n * - Prepositions (unlike many other African languages)\n * - Subject-verb agreement (not relevant for hyperscript)\n *\n * Swahili is widely spoken in East Africa and serves as a lingua franca\n * for millions of speakers.\n *\n * @example\n * ```typescript\n * import { swKeywords } from '@lokascript/i18n/parser/sw';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: swKeywords });\n * parser.parse('kwenye bonyeza badilisha .active');\n * ```\n */\nexport const swKeywords: KeywordProvider = createKeywordProvider(sw, 'sw', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { sw as swDictionary } from '../dictionaries/sw';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const pt: Dictionary = {\n commands: {\n on: 'em',\n tell: 'dizer',\n trigger: 'disparar',\n send: 'enviar',\n take: 'pegar',\n put: 'colocar',\n set: 'definir',\n get: 'obter',\n add: 'adicionar',\n remove: 'remover',\n toggle: 'alternar',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'desfocar',\n hide: 'esconder',\n show: 'mostrar',\n if: 'se',\n unless: 'salvo', // a_menos splits at _ in the pt extractor (see profile)\n repeat: 'repetir',\n for: 'para',\n while: 'enquanto',\n until: 'até',\n continue: 'continuar',\n // un-crossed: the profile/tokenizer read parar=halt, interromper=break\n break: 'interromper',\n halt: 'parar',\n wait: 'esperar',\n fetch: 'buscar',\n call: 'chamar',\n return: 'retornar',\n make: 'fazer',\n log: 'registrar',\n throw: 'lançar',\n catch: 'capturar',\n measure: 'medir',\n transition: 'transição',\n increment: 'incrementar',\n decrement: 'decrementar',\n default: 'padrão',\n go: 'ir',\n pushUrl: 'pushUrl',\n replaceUrl: 'substituirUrl',\n copy: 'copiar',\n pick: 'escolher',\n beep: 'apitar',\n js: 'js',\n async: 'assíncrono',\n render: 'renderizar',\n swap: 'trocar',\n morph: 'transformar',\n settle: 'estabilizar',\n append: 'anexar',\n exit: 'sair',\n install: 'instalar',\n breakpoint: 'ponto-interrupção',\n clear: 'limpar',\n close: 'fechar',\n open: 'abrir',\n select: 'selecionar',\n clone: 'clonar',\n prepend: 'preceder',\n focus: 'focar',\n socket: 'soquete',\n },\n\n modifiers: {\n to: 'para',\n from: 'de',\n into: 'em',\n with: 'com',\n at: 'em',\n in: 'dentro',\n of: 'de',\n as: 'como',\n by: 'por',\n before: 'antes',\n after: 'depois',\n over: 'sobre',\n under: 'sob',\n between: 'entre',\n through: 'através',\n without: 'sem',\n },\n\n events: {\n click: 'clique',\n dblclick: 'duploClique',\n mousedown: 'mouseBaixo',\n mouseup: 'mouseCima',\n mouseenter: 'mouseEntrar',\n mouseleave: 'mouseSair',\n mouseover: 'mouseSobre',\n mouseout: 'mouseFora',\n mousemove: 'mouseMover',\n keydown: 'teclaBaixo',\n keyup: 'teclaCima',\n keypress: 'teclaPressionar',\n focus: 'foco',\n blur: 'desfoque',\n change: 'mudança',\n input: 'entrada',\n submit: 'envio',\n reset: 'reiniciar',\n load: 'carregar',\n unload: 'descarregar',\n resize: 'redimensionar',\n scroll: 'rolar',\n touchstart: 'toqueInício',\n touchend: 'toqueFim',\n touchmove: 'toqueMover',\n touchcancel: 'toqueCancelar',\n },\n\n logical: {\n when: 'quando',\n where: 'onde',\n and: 'e',\n or: 'ou',\n not: 'não',\n is: 'é',\n exists: 'existe',\n matches: 'corresponde',\n contains: 'contém',\n includes: 'inclui',\n equals: 'igual',\n has: 'tem',\n have: 'tenho',\n then: 'então',\n else: 'senão',\n otherwise: 'caso_contrário',\n end: 'fim',\n live: 'vivo',\n changes: 'muda',\n },\n\n temporal: {\n seconds: 'segundos',\n second: 'segundo',\n milliseconds: 'milissegundos',\n millisecond: 'milissegundo',\n minutes: 'minutos',\n minute: 'minuto',\n hours: 'horas',\n hour: 'hora',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'verdadeiro',\n false: 'falso',\n null: 'nulo',\n undefined: 'indefinido',\n it: 'isso',\n its: 'seu',\n me: 'eu',\n my: 'meu',\n myself: 'eu mesmo',\n you: 'você',\n your: 'seu',\n yourself: 'você mesmo',\n element: 'elemento',\n target: 'alvo',\n detail: 'detalhe',\n event: 'evento',\n window: 'janela',\n document: 'documento',\n body: 'corpo',\n result: 'resultado',\n value: 'valor',\n },\n\n attributes: {\n class: 'classe',\n classes: 'classes',\n style: 'estilo',\n styles: 'estilos',\n attribute: 'atributo',\n attributes: 'atributos',\n property: 'propriedade',\n properties: 'propriedades',\n },\n\n expressions: {\n first: 'primeiro',\n last: 'último',\n next: 'próximo',\n previous: 'anterior',\n prev: 'ant',\n at: 'em',\n random: 'aleatório',\n closest: 'maispróximo',\n parent: 'pai',\n children: 'filhos',\n within: 'dentro',\n no: 'nenhum',\n empty: 'vazio',\n some: 'algum',\n 'starts with': 'começa com',\n 'ends with': 'termina com',\n 'ignoring case': 'ignorando maiúsculas',\n 'sorted by': 'ordenado por',\n 'mapped to': 'mapeado para',\n 'split by': 'dividido por',\n 'joined by': 'unido por',\n },\n};\n","// packages/i18n/src/parser/pt.ts\n\nimport { pt } from '../dictionaries/pt';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Portuguese (Português) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Portuguese:\n * - `em clique alternar .active` → parses as `on click toggle .active`\n * - `se verdadeiro então registrar \"Olá\"` → parses as `if true then log \"Hello\"`\n *\n * Portuguese is an SVO language with:\n * - High mutual intelligibility with Spanish\n * - Prepositions (like English and Spanish)\n * - Gender agreement (simplified for hyperscript)\n * - Fusional morphology\n *\n * Direct translation is supported between Portuguese and Spanish,\n * avoiding the English pivot for more natural translations.\n *\n * @example\n * ```typescript\n * import { ptKeywords } from '@lokascript/i18n/parser/pt';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: ptKeywords });\n * parser.parse('em clique alternar .active');\n * ```\n */\nexport const ptKeywords: KeywordProvider = createKeywordProvider(pt, 'pt', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { pt as ptDictionary } from '../dictionaries/pt';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const it: Dictionary = {\n commands: {\n on: 'su',\n tell: 'dire',\n trigger: 'scatenare',\n send: 'inviare',\n take: 'prendere',\n put: 'mettere',\n set: 'impostare',\n get: 'ottenere',\n add: 'aggiungere',\n remove: 'rimuovere',\n toggle: 'commutare',\n hide: 'nascondere',\n show: 'mostrare',\n if: 'se',\n unless: 'salvo',\n repeat: 'ripetere',\n for: 'per',\n while: 'mentre',\n until: 'fino',\n continue: 'continuare',\n break: 'interrompere',\n halt: 'fermare',\n wait: 'aspettare',\n fetch: 'recuperare',\n call: 'chiamare',\n return: 'ritornare',\n make: 'fare',\n log: 'registrare',\n throw: 'lanciare',\n catch: 'catturare',\n measure: 'misurare',\n transition: 'transizione',\n increment: 'incrementare',\n decrement: 'decrementare',\n default: 'predefinito',\n go: 'andare',\n pushUrl: 'pushUrl',\n replaceUrl: 'sostituireUrl',\n copy: 'copiare',\n pick: 'scegliere',\n beep: 'beep',\n js: 'js',\n async: 'asincrono',\n render: 'renderizzare',\n swap: 'scambiare',\n morph: 'trasformare',\n settle: 'stabilizzare',\n append: 'accodare', // profile primary; 'aggiungere' is add's word (parsed as add)\n exit: 'uscire',\n install: 'installare',\n breakpoint: 'punto-interruzione',\n clear: 'cancellare',\n close: 'chiudere',\n open: 'aprire',\n select: 'selezionare',\n clone: 'clonare',\n prepend: 'anteporre',\n // profile primary; without a commands entry the transformer fell back to\n // the EVENTS noun 'fuoco', which generated focus patterns can't match\n focus: 'focalizzare',\n },\n\n modifiers: {\n to: 'a',\n from: 'da',\n into: 'in',\n with: 'con',\n at: 'a',\n in: 'in',\n of: 'di',\n as: 'come',\n by: 'per',\n before: 'prima',\n after: 'dopo',\n over: 'sopra',\n under: 'sotto',\n between: 'tra',\n through: 'attraverso',\n without: 'senza',\n },\n\n events: {\n click: 'clic',\n dblclick: 'doppioclic',\n mousedown: 'mousegiù',\n mouseup: 'mousesu',\n mouseenter: 'mouseentra',\n mouseleave: 'mouseesce',\n mouseover: 'mousesopra',\n mouseout: 'mousefuori',\n mousemove: 'mousemuovi',\n keydown: 'tastogiù',\n keyup: 'tastosu',\n keypress: 'tastopremi',\n focus: 'fuoco',\n blur: 'sfuocatura',\n change: 'cambio',\n input: 'input',\n submit: 'invio',\n reset: 'reset',\n load: 'carica',\n unload: 'scarica',\n resize: 'ridimensiona',\n scroll: 'scorrimento',\n touchstart: 'toccoinizia',\n touchend: 'toccofine',\n touchmove: 'toccomuovi',\n touchcancel: 'toccoannulla',\n },\n\n logical: {\n when: 'quando',\n where: 'dove',\n and: 'e',\n or: 'o',\n not: 'non',\n is: 'è',\n exists: 'esiste',\n matches: 'corrisponde',\n contains: 'contiene',\n includes: 'include',\n equals: 'uguale',\n has: 'ha',\n have: 'ho',\n then: 'allora',\n else: 'altrimenti',\n otherwise: 'altrimenti',\n end: 'fine',\n live: 'vivo',\n changes: 'cambia',\n },\n\n temporal: {\n seconds: 'secondi',\n second: 'secondo',\n milliseconds: 'millisecondi',\n millisecond: 'millisecondo',\n minutes: 'minuti',\n minute: 'minuto',\n hours: 'ore',\n hour: 'ora',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'vero',\n false: 'falso',\n null: 'nullo',\n undefined: 'indefinito',\n it: 'esso',\n its: 'suo',\n me: 'io',\n my: 'mio',\n you: 'tu',\n your: 'tuo',\n yourself: 'te stesso',\n myself: 'me stesso',\n element: 'elemento',\n target: 'obiettivo',\n detail: 'dettaglio',\n event: 'evento',\n window: 'finestra',\n document: 'documento',\n body: 'corpo',\n result: 'risultato',\n value: 'valore',\n },\n\n attributes: {\n class: 'classe',\n classes: 'classi',\n style: 'stile',\n styles: 'stili',\n attribute: 'attributo',\n attributes: 'attributi',\n property: 'proprietà',\n properties: 'proprietà',\n },\n\n expressions: {\n first: 'primo',\n last: 'ultimo',\n next: 'prossimo',\n previous: 'precedente',\n prev: 'prec',\n at: 'a',\n random: 'casuale',\n closest: 'vicino',\n parent: 'genitore',\n children: 'figli',\n within: 'dentro',\n no: 'nessun',\n empty: 'vuoto',\n some: 'qualche',\n 'starts with': 'inizia con',\n 'ends with': 'finisce con',\n 'ignoring case': 'ignorando maiuscole',\n 'sorted by': 'ordinato per',\n 'mapped to': 'trasformato in',\n 'split by': 'diviso per',\n 'joined by': 'unito per',\n },\n};\n","import { it } from '../dictionaries/it';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const itKeywords: KeywordProvider = createKeywordProvider(it, 'it', {\n allowEnglishFallback: true,\n});\n\nexport { it as itDictionary } from '../dictionaries/it';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const vi: Dictionary = {\n commands: {\n on: 'khi',\n tell: 'nói với',\n trigger: 'kích hoạt',\n send: 'gửi',\n take: 'lấy',\n put: 'đặt',\n set: 'gán',\n get: 'lấy giá trị',\n add: 'thêm',\n remove: 'xóa',\n toggle: 'chuyển đổi',\n hide: 'ẩn',\n show: 'hiển thị',\n if: 'nếu',\n unless: 'trừ khi',\n repeat: 'lặp lại',\n for: 'với mỗi',\n while: 'trong khi',\n until: 'cho đến khi',\n continue: 'tiếp tục',\n break: 'dừng',\n halt: 'dừng lại',\n wait: 'chờ',\n fetch: 'tải',\n call: 'gọi',\n return: 'trả về',\n make: 'tạo',\n log: 'in ra',\n throw: 'ném',\n catch: 'bắt',\n measure: 'đo lường',\n transition: 'chuyển tiếp',\n increment: 'tăng',\n decrement: 'giảm',\n default: 'mặc định',\n go: 'đi đến',\n pushUrl: 'pushUrl',\n replaceUrl: 'thayThếUrl',\n copy: 'sao chép',\n pick: 'chọn',\n beep: 'beep',\n js: 'js',\n async: 'bất đồng bộ',\n render: 'kết xuất', // distinct from `show` (was `hiển thị`, which collides with show: the semantic profile reads `hiển thị` as show, `kết xuất` as render)\n swap: 'hoán đổi',\n morph: 'biến đổi',\n settle: 'ổn định',\n append: 'nối',\n exit: 'thoát',\n focus: 'tập trung',\n blur: 'mất tập trung',\n init: 'khởi tạo',\n behavior: 'hành vi',\n install: 'cài đặt',\n clone: 'sao chép',\n prepend: 'thêm đầu',\n else: 'không thì',\n breakpoint: 'điểm-dừng',\n clear: 'tẩy', // xóa is the remove PRIMARY in the profile\n close: 'đóng',\n open: 'mở',\n select: 'chọn',\n },\n\n modifiers: {\n into: 'vào',\n before: 'trước',\n after: 'sau',\n then: 'rồi',\n end: 'kết thúc',\n from: 'từ',\n to: 'đến',\n with: 'với',\n as: 'như',\n by: 'bởi',\n on: 'trên',\n in: 'trong',\n at: 'tại',\n of: 'của',\n between: 'giữa',\n the: '',\n times: 'lần',\n },\n\n events: {\n click: 'nhấp',\n dblclick: 'nhấp đúp',\n input: 'nhập',\n change: 'thay đổi',\n submit: 'gửi',\n keydown: 'phím xuống',\n keyup: 'phím lên',\n keypress: 'nhấn phím',\n mouseover: 'chuột vào',\n mouseout: 'chuột ra',\n mouseenter: 'chuột vào',\n mouseleave: 'chuột rời',\n focus: 'tập trung',\n blur: 'mất tập trung',\n reset: 'đặt-lại',\n load: 'tải',\n scroll: 'cuộn',\n resize: 'đổi kích thước',\n },\n\n logical: {\n when: 'khi',\n where: 'ở_đâu',\n and: 'và',\n or: 'hoặc',\n not: 'không',\n is: 'là',\n equals: 'bằng',\n contains: 'chứa',\n matches: 'khớp',\n exists: 'tồn tại',\n has: 'có',\n have: 'có',\n empty: 'trống',\n true: 'đúng',\n false: 'sai',\n null: 'rỗng',\n else: 'không thì',\n end: 'kết thúc',\n then: 'rồi',\n live: 'live',\n changes: 'thay đổi',\n },\n\n temporal: {\n now: 'bây giờ',\n today: 'hôm nay',\n tomorrow: 'ngày mai',\n yesterday: 'hôm qua',\n always: 'luôn luôn',\n never: 'không bao giờ',\n sometimes: 'đôi khi',\n once: 'một lần',\n twice: 'hai lần',\n forever: 'mãi mãi',\n },\n\n values: {\n true: 'đúng',\n false: 'sai',\n null: 'rỗng',\n undefined: 'không xác định',\n none: 'không có',\n all: 'tất cả',\n any: 'bất kỳ',\n some: 'một số',\n each: 'mỗi',\n every: 'tất cả',\n body: 'body',\n event: 'sự kiện',\n it: 'nó',\n its: 'của nó',\n me: 'tôi',\n my: 'của tôi',\n result: 'kết quả',\n target: 'mục tiêu',\n you: 'bạn',\n your: 'của bạn',\n },\n\n attributes: {\n id: 'id',\n class: 'lớp',\n style: 'kiểu',\n value: 'giá trị',\n text: 'văn bản',\n html: 'html',\n src: 'nguồn',\n href: 'liên kết',\n disabled: 'vô hiệu',\n hidden: 'ẩn',\n checked: 'được chọn',\n selected: 'được chọn',\n },\n\n expressions: {\n me: 'tôi',\n my: 'của tôi',\n it: 'nó',\n its: 'của nó',\n result: 'kết quả',\n event: 'sự kiện',\n target: 'mục tiêu',\n first: 'đầu tiên',\n last: 'cuối cùng',\n next: 'tiếp theo',\n previous: 'trước đó',\n parent: 'cha',\n children: 'con',\n closest: 'gần nhất',\n empty: 'làm-rỗng',\n 'starts with': 'bắt đầu bằng',\n 'ends with': 'kết thúc bằng',\n 'ignoring case': 'không phân biệt hoa thường',\n 'sorted by': 'sắp xếp theo',\n 'mapped to': 'ánh xạ thành',\n 'split by': 'tách bởi',\n 'joined by': 'nối bởi',\n },\n};\n","import { vi } from '../dictionaries/vi';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const viKeywords: KeywordProvider = createKeywordProvider(vi, 'vi', {\n allowEnglishFallback: true,\n});\n\nexport { vi as viDictionary } from '../dictionaries/vi';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const pl: Dictionary = {\n commands: {\n on: 'gdy',\n tell: 'powiedz',\n trigger: 'wyzwól', // auditor: dict emitted a word the profile reads differently\n send: 'wyślij',\n take: 'weź',\n put: 'umieść',\n set: 'ustaw',\n // `uzyskaj` (the semantic pl profile's get primary), not `pobierz`: pl `pobierz`\n // (\"download\") is the profile's FETCH primary, so emitting it for get made the\n // parser read every transformed get as fetch (get-value lossy + a phantom fetch).\n // Same dict↔profile homonym disambiguation as tr load/install, qu get.\n get: 'uzyskaj',\n add: 'dodaj',\n remove: 'usuń',\n toggle: 'przełącz',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'rozmyj',\n hide: 'ukryj',\n show: 'pokaż',\n if: 'jeśli',\n unless: 'chyba',\n repeat: 'powtórz',\n for: 'dla',\n while: 'dopóki',\n until: 'aż',\n continue: 'kontynuuj',\n break: 'przerwij',\n halt: 'zatrzymaj',\n wait: 'czekaj',\n fetch: 'pobierz',\n call: 'wywołaj',\n return: 'zwróć',\n make: 'utwórz',\n log: 'loguj',\n throw: 'rzuć',\n catch: 'złap',\n measure: 'zmierz',\n transition: 'animuj',\n increment: 'zwiększ',\n decrement: 'zmniejsz',\n default: 'domyślnie',\n go: 'idź',\n pushUrl: 'dodajUrl',\n replaceUrl: 'zamieńUrl',\n copy: 'kopiuj',\n pick: 'wybierz',\n beep: 'sygnał',\n js: 'js',\n async: 'async',\n render: 'renderuj',\n swap: 'zamień',\n morph: 'przekształć',\n settle: 'ustabilizuj',\n append: 'dołącz',\n exit: 'wyjdź',\n install: 'zainstaluj',\n breakpoint: 'punkt-przerwania',\n clear: 'zeruj', // wyczyść is a remove alternative in the profile\n close: 'zamknij',\n open: 'otwórz',\n select: 'wybierz',\n clone: 'sklonuj',\n prepend: 'poprzedź',\n focus: 'skup',\n },\n\n modifiers: {\n to: 'do',\n from: 'z',\n into: 'do',\n with: 'z',\n at: 'przy',\n in: 'w',\n of: 'z',\n as: 'jako',\n by: 'przez',\n before: 'przed',\n after: 'po',\n over: 'nad',\n under: 'pod',\n between: 'między',\n through: 'przez',\n without: 'bez',\n },\n\n events: {\n click: 'kliknięcie',\n dblclick: 'podwójnekliknięcie',\n mousedown: 'myszdół',\n mouseup: 'myszgóra',\n mouseenter: 'myszwejście',\n mouseleave: 'myszwyjście',\n mouseover: 'mysznad',\n mouseout: 'myszpoza',\n mousemove: 'myszruch',\n keydown: 'klawiszdół',\n keyup: 'klawiszgóra',\n keypress: 'klawisznaciśnięcie',\n focus: 'fokus',\n blur: 'rozmycie',\n change: 'zmiana',\n input: 'wejście',\n submit: 'wyślij',\n reset: 'resetuj',\n load: 'załaduj',\n unload: 'wyładuj',\n resize: 'zmieńrozmiar',\n scroll: 'przewiń',\n touchstart: 'dotykstart',\n touchend: 'dotykkoniec',\n touchmove: 'dotykruch',\n touchcancel: 'dotykanuluj',\n },\n\n logical: {\n when: 'kiedy',\n where: 'gdzie',\n and: 'i',\n or: 'lub',\n not: 'nie',\n is: 'jest',\n exists: 'istnieje',\n matches: 'pasuje',\n contains: 'zawiera',\n includes: 'obejmuje',\n equals: 'równa się',\n has: 'ma',\n have: 'mam',\n then: 'wtedy',\n else: 'inaczej',\n otherwise: 'wpp',\n end: 'koniec',\n live: 'żywy',\n changes: 'zmienia',\n },\n\n temporal: {\n seconds: 'sekundy',\n second: 'sekunda',\n milliseconds: 'milisekundy',\n millisecond: 'milisekunda',\n minutes: 'minuty',\n minute: 'minuta',\n hours: 'godziny',\n hour: 'godzina',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'godz',\n },\n\n values: {\n true: 'prawda',\n false: 'fałsz',\n null: 'null',\n undefined: 'niezdefiniowane',\n it: 'to',\n its: 'jego',\n me: 'ja',\n my: 'mój',\n you: 'ty',\n your: 'twój',\n yourself: 'ty sam',\n myself: 'ja sam',\n element: 'element',\n target: 'cel',\n detail: 'szczegół',\n event: 'zdarzenie',\n window: 'okno',\n document: 'dokument',\n body: 'body',\n result: 'wynik',\n value: 'wartość',\n },\n\n attributes: {\n class: 'klasa',\n classes: 'klasy',\n style: 'styl',\n styles: 'style',\n attribute: 'atrybut',\n attributes: 'atrybuty',\n property: 'właściwość',\n properties: 'właściwości',\n },\n\n expressions: {\n first: 'pierwszy',\n last: 'ostatni',\n next: 'następny',\n previous: 'poprzedni',\n prev: 'poprz',\n at: 'przy',\n random: 'losowy',\n closest: 'najbliższy',\n parent: 'rodzic',\n children: 'dzieci',\n within: 'wewnątrz',\n no: 'brak',\n empty: 'pusty',\n some: 'jakiś',\n 'starts with': 'zaczyna się od',\n 'ends with': 'kończy się na',\n 'ignoring case': 'ignorując wielkość liter',\n 'sorted by': 'sortowane według',\n 'mapped to': 'przekształcone na',\n 'split by': 'podzielone przez',\n 'joined by': 'połączone przez',\n },\n};\n","import { pl } from '../dictionaries/pl';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const plKeywords: KeywordProvider = createKeywordProvider(pl, 'pl', {\n allowEnglishFallback: true,\n});\n\nexport { pl as plDictionary } from '../dictionaries/pl';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const russianDictionary: Dictionary = {\n commands: {\n on: 'при',\n tell: 'сказать',\n trigger: 'запустить', // auditor: dict emitted a word the profile reads differently\n send: 'отправить',\n take: 'взять',\n put: 'положить',\n set: 'установить',\n get: 'получить',\n add: 'добавить',\n remove: 'удалить',\n toggle: 'переключить',\n hide: 'скрыть',\n show: 'показать',\n // command verb; the events section keeps the noun прокрутка for `on scroll`.\n // Without this entry the transformer fell back to the event noun, which the\n // parser doesn't read as the scroll command (#321 focus family).\n scroll: 'прокрутить',\n if: 'если',\n unless: 'кроме',\n repeat: 'повторить',\n for: 'для',\n while: 'пока',\n until: 'до',\n continue: 'продолжить',\n break: 'прервать',\n halt: 'остановить',\n wait: 'ждать',\n fetch: 'загрузить',\n call: 'вызвать',\n return: 'вернуть',\n make: 'создать',\n log: 'записать',\n throw: 'бросить',\n catch: 'поймать',\n measure: 'измерить',\n transition: 'анимировать',\n increment: 'увеличить',\n decrement: 'уменьшить',\n default: 'по_умолчанию',\n go: 'перейти',\n pushUrl: 'добавить_url',\n replaceUrl: 'заменить_url',\n copy: 'копировать',\n pick: 'выбрать',\n beep: 'звук',\n js: 'js',\n async: 'асинхронно',\n render: 'отобразить',\n swap: 'поменять',\n morph: 'трансформировать',\n settle: 'стабилизировать',\n append: 'дописать', // profile alternative; the compound splits and добавить parses as add\n exit: 'выйти',\n else: 'иначе',\n install: 'инсталлировать', // loanword — `установить` is `set` (homonym); see russian profile\n init: 'инициализировать',\n behavior: 'поведение',\n focus: 'сфокусировать',\n blur: 'размыть',\n clone: 'клонировать',\n prepend: 'добавить_в_начало',\n breakpoint: 'точка-останова',\n clear: 'очистить',\n close: 'закрыть',\n open: 'открыть',\n select: 'выбрать',\n },\n\n modifiers: {\n to: 'к',\n from: 'из',\n into: 'в',\n with: 'с',\n at: 'у',\n in: 'в',\n of: 'из',\n as: 'как',\n by: 'на',\n before: 'до',\n after: 'после',\n over: 'над',\n under: 'под',\n between: 'между',\n through: 'через',\n without: 'без',\n on: 'на',\n },\n\n events: {\n click: 'клик',\n dblclick: 'двойной_клик',\n // Fused (no `_`): the semantic tokenizer splits on `_`, so an underscore form\n // breaks event recognition (mousedown → bare expression). Mirrors the #510 tr\n // resize fix (boyut_değiştir → boyutlandırma) and the enyakın superlative.\n mousedown: 'мышьвниз',\n mouseup: 'мышьвверх',\n mouseenter: 'мышь_вход',\n mouseleave: 'мышь_выход',\n mouseover: 'наведение',\n mouseout: 'уход',\n mousemove: 'движение_мыши',\n keydown: 'клавиша_вниз',\n keyup: 'клавиша_вверх',\n keypress: 'нажатие_клавиши',\n focus: 'фокус',\n blur: 'потеря_фокуса',\n change: 'изменение',\n input: 'ввод',\n submit: 'отправка',\n reset: 'сброс',\n load: 'загрузка',\n unload: 'выгрузка',\n resize: 'изменениеразмера', // fused (no `_`) — see mousedown note above\n scroll: 'прокрутка',\n touchstart: 'касание_начало',\n touchend: 'касание_конец',\n touchmove: 'касание_движение',\n touchcancel: 'касание_отмена',\n },\n\n logical: {\n when: 'когда',\n where: 'где',\n and: 'и',\n or: 'или',\n not: 'не',\n is: 'есть',\n exists: 'существует',\n matches: 'соответствует',\n contains: 'содержит',\n includes: 'включает',\n equals: 'равно',\n then: 'затем',\n else: 'иначе',\n otherwise: 'в_противном_случае',\n end: 'конец',\n live: 'живой',\n changes: 'изменяется',\n has: 'имеет',\n have: 'имею',\n isNot: 'не_есть',\n empty: 'пустой',\n },\n\n temporal: {\n seconds: 'секунд',\n second: 'секунда',\n milliseconds: 'миллисекунд',\n millisecond: 'миллисекунда',\n minutes: 'минут',\n minute: 'минута',\n hours: 'часов',\n hour: 'час',\n ms: 'мс',\n s: 'с',\n min: 'мин',\n h: 'ч',\n forever: 'всегда',\n once: 'однажды',\n every: 'каждый',\n until: 'до',\n },\n\n values: {\n true: 'истина',\n false: 'ложь',\n null: 'ничего',\n undefined: 'неопределено',\n it: 'это',\n its: 'его',\n me: 'я',\n my: 'мой',\n you: 'ты',\n your: 'твой',\n yourself: 'сам',\n myself: 'я_сам',\n element: 'элемент',\n target: 'цель',\n detail: 'детали',\n event: 'событие',\n window: 'окно',\n document: 'документ',\n body: 'тело',\n result: 'результат',\n value: 'значение',\n first: 'первый',\n last: 'последний',\n next: 'следующий',\n previous: 'предыдущий',\n closest: 'ближайший',\n parent: 'родитель',\n },\n\n attributes: {\n class: 'класс',\n classes: 'классы',\n style: 'стиль',\n styles: 'стили',\n attribute: 'атрибут',\n attributes: 'атрибуты',\n property: 'свойство',\n properties: 'свойства',\n disabled: 'отключено',\n hidden: 'скрыто',\n checked: 'отмечено',\n selected: 'выбрано',\n readonly: 'только_чтение',\n required: 'обязательно',\n text: 'текст',\n html: 'html',\n },\n\n expressions: {\n first: 'первый',\n last: 'последний',\n next: 'следующий',\n previous: 'предыдущий',\n prev: 'пред',\n at: 'в',\n random: 'случайный',\n closest: 'ближайший',\n parent: 'родитель',\n children: 'дети',\n within: 'внутри',\n no: 'нет',\n empty: 'пустой',\n some: 'некоторые',\n 'starts with': 'начинается_с',\n 'ends with': 'заканчивается_на',\n 'ignoring case': 'без_учёта_регистра',\n 'sorted by': 'сортировано_по',\n 'mapped to': 'преобразовано_в',\n 'split by': 'разделено_по',\n 'joined by': 'объединено_через',\n },\n};\n\nexport const ru = russianDictionary;\n","import { russianDictionary } from '../dictionaries/ru';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const ruKeywords: KeywordProvider = createKeywordProvider(russianDictionary, 'ru', {\n allowEnglishFallback: true,\n});\n\nexport { russianDictionary as ruDictionary } from '../dictionaries/ru';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ukrainianDictionary: Dictionary = {\n commands: {\n on: 'при',\n tell: 'сказати',\n trigger: 'запустити', // auditor: dict emitted a word the profile reads differently\n send: 'надіслати',\n take: 'взяти',\n put: 'покласти',\n set: 'встановити',\n get: 'отримати',\n add: 'додати',\n remove: 'видалити',\n toggle: 'перемкнути',\n hide: 'сховати',\n show: 'показати',\n // command verb; the events section keeps the noun прокрутка for `on scroll`.\n // Without this entry the transformer fell back to the event noun, which the\n // parser doesn't read as the scroll command (#321 focus family).\n scroll: 'прокрутити',\n if: 'якщо',\n unless: 'крім',\n repeat: 'повторити',\n for: 'для',\n while: 'поки',\n until: 'до',\n continue: 'продовжити',\n break: 'перервати',\n halt: 'зупинити',\n wait: 'чекати',\n fetch: 'завантажити',\n call: 'викликати',\n return: 'повернути',\n make: 'створити',\n log: 'записати',\n throw: 'кинути',\n catch: 'зловити',\n measure: 'виміряти',\n transition: 'анімувати',\n increment: 'збільшити',\n decrement: 'зменшити',\n default: 'за_замовчуванням',\n go: 'перейти',\n pushUrl: 'додати_url',\n replaceUrl: 'замінити_url',\n copy: 'копіювати',\n pick: 'вибрати',\n beep: 'звук',\n js: 'js',\n async: 'асинхронно',\n render: 'відобразити',\n swap: 'поміняти',\n morph: 'трансформувати',\n settle: 'стабілізувати',\n append: 'дописати', // profile alternative; the compound splits and додати parses as add\n exit: 'вийти',\n else: 'інакше',\n install: 'інсталювати', // loanword — `встановити` is `set` (homonym); see ukrainian profile\n init: 'ініціалізувати',\n behavior: 'поведінка',\n focus: 'сфокусувати',\n blur: 'розфокусувати',\n clone: 'клонувати',\n prepend: 'додати_на_початок',\n breakpoint: 'точка-зупинки',\n clear: 'очистити',\n close: 'закрити',\n open: 'відкрити',\n select: 'вибрати',\n },\n\n modifiers: {\n to: 'до',\n from: 'з',\n into: 'в',\n with: 'з',\n at: 'в',\n in: 'у',\n of: 'з',\n as: 'як',\n by: 'на',\n before: 'до',\n after: 'після',\n over: 'над',\n under: 'під',\n between: 'між',\n through: 'через',\n without: 'без',\n on: 'на',\n },\n\n events: {\n click: 'клік',\n dblclick: 'подвійний_клік',\n // Fused (no `_`): the semantic tokenizer splits on `_`, so an underscore form\n // breaks event recognition. Mirrors the #510 tr resize fix + enyakın.\n mousedown: 'мишавниз',\n mouseup: 'мишавгору',\n mouseenter: 'миша_вхід',\n mouseleave: 'миша_вихід',\n mouseover: 'наведення',\n mouseout: 'відведення',\n mousemove: 'рух_миші',\n keydown: 'клавіша_вниз',\n keyup: 'клавіша_вгору',\n keypress: 'натискання_клавіші',\n focus: 'фокус',\n blur: 'розфокус',\n change: 'зміна',\n input: 'введення',\n submit: 'надсилання',\n reset: 'скидання',\n load: 'завантаження',\n unload: 'вивантаження',\n resize: 'змінарозміру', // fused (no `_`) — see mousedown note above\n scroll: 'прокрутка',\n touchstart: 'дотик_початок',\n touchend: 'дотик_кінець',\n touchmove: 'дотик_рух',\n touchcancel: 'дотик_скасування',\n },\n\n logical: {\n when: 'коли',\n where: 'де',\n and: 'і',\n or: 'або',\n not: 'не',\n is: 'є',\n exists: 'існує',\n matches: 'відповідає',\n contains: 'містить',\n includes: 'включає',\n equals: 'дорівнює',\n then: 'тоді',\n else: 'інакше',\n otherwise: 'в_іншому_випадку',\n end: 'кінець',\n live: 'живий',\n changes: 'змінюється',\n has: 'має',\n have: 'маю',\n isNot: 'не_є',\n empty: 'порожній',\n },\n\n temporal: {\n seconds: 'секунд',\n second: 'секунда',\n milliseconds: 'мілісекунд',\n millisecond: 'мілісекунда',\n minutes: 'хвилин',\n minute: 'хвилина',\n hours: 'годин',\n hour: 'година',\n ms: 'мс',\n s: 'с',\n min: 'хв',\n h: 'год',\n forever: 'завжди',\n once: 'один_раз',\n every: 'кожний',\n until: 'до',\n },\n\n values: {\n true: 'істина',\n false: 'хибність',\n null: 'нічого',\n undefined: 'невизначено',\n it: 'це',\n its: 'його',\n me: 'я',\n my: 'мій',\n you: 'ти',\n your: 'твій',\n yourself: 'сам',\n myself: 'я_сам',\n element: 'елемент',\n target: 'ціль',\n detail: 'деталі',\n event: 'подія',\n window: 'вікно',\n document: 'документ',\n body: 'тіло',\n result: 'результат',\n value: 'значення',\n first: 'перший',\n last: 'останній',\n next: 'наступний',\n previous: 'попередній',\n closest: 'найближчий',\n parent: 'батьківський',\n },\n\n attributes: {\n class: 'клас',\n classes: 'класи',\n style: 'стиль',\n styles: 'стилі',\n attribute: 'атрибут',\n attributes: 'атрибути',\n property: 'властивість',\n properties: 'властивості',\n disabled: 'вимкнено',\n hidden: 'приховано',\n checked: 'позначено',\n selected: 'вибрано',\n readonly: 'лише_читання',\n required: \"обов'язково\",\n text: 'текст',\n html: 'html',\n },\n\n expressions: {\n first: 'перший',\n last: 'останній',\n next: 'наступний',\n previous: 'попередній',\n prev: 'попер',\n at: 'в',\n random: 'випадковий',\n closest: 'найближчий',\n parent: 'батьківський',\n children: 'діти',\n within: 'всередині',\n no: 'ні',\n empty: 'порожній',\n some: 'деякі',\n 'starts with': 'починається_з',\n 'ends with': 'закінчується_на',\n 'ignoring case': 'без_урахування_регістру',\n 'sorted by': 'відсортовано_за',\n 'mapped to': 'перетворено_на',\n 'split by': 'розділено_за',\n 'joined by': \"об'єднано_через\",\n },\n};\n\nexport const uk = ukrainianDictionary;\n","import { ukrainianDictionary } from '../dictionaries/uk';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const ukKeywords: KeywordProvider = createKeywordProvider(ukrainianDictionary, 'uk', {\n allowEnglishFallback: true,\n});\n\nexport { ukrainianDictionary as ukDictionary } from '../dictionaries/uk';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const hindiDictionary: Dictionary = {\n commands: {\n on: 'पर',\n tell: 'बताएं',\n trigger: 'ट्रिगर',\n send: 'भेजें',\n take: 'लें',\n put: 'रखें',\n set: 'सेट',\n get: 'प्राप्त',\n add: 'जोड़ें',\n remove: 'हटाएं',\n toggle: 'टॉगल',\n hide: 'छिपाएं',\n show: 'दिखाएं',\n if: 'अगर',\n unless: 'जब तक नहीं', // spaced (not जब_तक_नहीं) → one multi-word `unless` token\n repeat: 'दोहराएं',\n for: 'हेतु', // single token — के_लिए splits at _ in the hi extractor\n while: 'जब तक',\n until: 'तक',\n continue: 'जारी',\n break: 'रोकें',\n halt: 'रोकें',\n wait: 'प्रतीक्षा',\n fetch: 'लाएं',\n call: 'कॉल',\n return: 'लौटाएं',\n make: 'बनाएं',\n log: 'लॉग',\n throw: 'फेंकें',\n catch: 'पकड़ें',\n measure: 'मापें',\n transition: 'संक्रमण',\n increment: 'बढ़ाएं',\n decrement: 'घटाएं',\n default: 'डिफ़ॉल्ट',\n go: 'जाएं',\n pushUrl: 'url_जोड़ें',\n replaceUrl: 'url_बदलें',\n copy: 'कॉपी',\n pick: 'चुनें',\n beep: 'बीप',\n js: 'जेएस',\n async: 'असिंक',\n render: 'रेंडर',\n swap: 'विनिमय',\n morph: 'रूपांतर',\n settle: 'स्थिर',\n append: 'संलग्न',\n exit: 'बाहर',\n else: 'वरना',\n install: 'इंस्टॉल',\n init: 'प्रारंभ',\n behavior: 'व्यवहार',\n focus: 'फोकस',\n blur: 'धुंधला',\n clone: 'कॉपी',\n prepend: 'जोड़ें_शुरू',\n breakpoint: 'ब्रेकप्वाइंट',\n clear: 'साफ़-करें',\n close: 'बंद-करें',\n open: 'खोलें',\n select: 'चुनें',\n socket: 'सॉकेट',\n },\n\n modifiers: {\n to: 'को',\n from: 'से',\n into: 'में',\n with: 'के_साथ',\n at: 'पर',\n in: 'में',\n of: 'का',\n as: 'के_रूप_में',\n by: 'द्वारा',\n before: 'से पहले',\n after: 'के बाद',\n over: 'के_ऊपर',\n under: 'के_नीचे',\n between: 'के_बीच',\n through: 'के_माध्यम_से',\n without: 'के_बिना',\n on: 'पर',\n },\n\n events: {\n click: 'क्लिक',\n dblclick: 'डबल_क्लिक',\n // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event\n // recognition (mousedown → \"नीचे\"). Mirrors the #535 ru/uk fuse.\n mousedown: 'माउसनीचे',\n mouseup: 'माउसऊपर',\n mouseenter: 'माउस_प्रवेश',\n mouseleave: 'माउस_बाहर',\n mouseover: 'माउस_ओवर',\n mouseout: 'माउस_आउट',\n mousemove: 'माउस_मूव',\n keydown: 'की_नीचे',\n keyup: 'की_ऊपर',\n keypress: 'की_प्रेस',\n focus: 'फोकस',\n blur: 'धुंधला',\n change: 'परिवर्तन',\n input: 'इनपुट',\n submit: 'जमा',\n reset: 'रीसेट',\n load: 'लोड',\n unload: 'अनलोड',\n resize: 'आकार_बदलें',\n scroll: 'स्क्रॉल',\n touchstart: 'टच_शुरू',\n touchend: 'टच_समाप्त',\n touchmove: 'टच_मूव',\n touchcancel: 'टच_रद्द',\n },\n\n logical: {\n when: 'जब',\n where: 'कहाँ',\n and: 'और',\n or: 'या',\n not: 'नहीं',\n is: 'है',\n exists: 'मौजूद',\n // Natural spaced phrase `मेल खाता` (\"matches\") — how Hindi writes it. The base\n // tokenizer now matches multi-word profile keywords, so the hindi profile maps\n // `मेल खाता`→matches without the underscore (`मेल_खाता` split) or the\n // concatenated `मेलखाता` (parsed, but unnatural) workarounds.\n matches: 'मेल खाता',\n contains: 'शामिल',\n includes: 'में_है',\n equals: 'बराबर',\n then: 'फिर',\n else: 'वरना',\n otherwise: 'अन्यथा',\n end: 'समाप्त',\n live: 'लाइव',\n changes: 'बदलने पर',\n has: 'है',\n have: 'है',\n isNot: 'नहीं_है',\n empty: 'खाली',\n },\n\n temporal: {\n seconds: 'सेकंड',\n second: 'सेकंड',\n milliseconds: 'मिलीसेकंड',\n millisecond: 'मिलीसेकंड',\n minutes: 'मिनट',\n minute: 'मिनट',\n hours: 'घंटे',\n hour: 'घंटा',\n ms: 'मिसे',\n s: 'से',\n min: 'मि',\n h: 'घं',\n forever: 'हमेशा',\n once: 'एक_बार',\n every: 'हर',\n until: 'तक',\n },\n\n values: {\n true: 'सच',\n false: 'झूठ',\n null: 'खाली',\n undefined: 'अपरिभाषित',\n it: 'यह',\n its: 'इसका',\n me: 'मैं',\n my: 'मेरा',\n you: 'आप',\n your: 'आपका',\n yourself: 'स्वयं',\n myself: 'मैं_स्वयं',\n element: 'तत्व',\n target: 'लक्ष्य',\n detail: 'विवरण',\n event: 'घटना',\n window: 'विंडो',\n document: 'दस्तावेज़',\n body: 'बॉडी',\n result: 'परिणाम',\n value: 'मान',\n first: 'पहला',\n last: 'अंतिम',\n next: 'अगला',\n previous: 'पिछला',\n closest: 'निकटतम',\n parent: 'मूल',\n },\n\n attributes: {\n class: 'क्लास',\n classes: 'क्लासेस',\n style: 'स्टाइल',\n styles: 'स्टाइल्स',\n attribute: 'गुण',\n attributes: 'गुण',\n property: 'संपत्ति',\n properties: 'संपत्तियाँ',\n disabled: 'अक्षम',\n hidden: 'छिपा',\n checked: 'चेक',\n selected: 'चयनित',\n readonly: 'केवल_पढ़ने',\n required: 'आवश्यक',\n text: 'पाठ',\n html: 'html',\n },\n\n expressions: {\n first: 'पहला',\n last: 'अंतिम',\n next: 'अगला',\n previous: 'पिछला',\n prev: 'पिछ',\n at: 'पर',\n random: 'यादृच्छिक',\n closest: 'निकटतम',\n parent: 'मूल',\n children: 'बच्चे',\n within: 'के_अंदर',\n no: 'नहीं',\n empty: 'खाली',\n some: 'कुछ',\n 'starts with': 'से_शुरू',\n 'ends with': 'पर_समाप्त',\n 'ignoring case': 'केस_अनदेखा',\n 'sorted by': 'द्वारा_क्रमबद्ध',\n 'mapped to': 'में_परिवर्तित',\n 'split by': 'द्वारा_विभाजित',\n 'joined by': 'द्वारा_जुड़ा',\n },\n};\n\nexport const hi = hindiDictionary;\n","import { hindiDictionary } from '../dictionaries/hi';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const hiKeywords: KeywordProvider = createKeywordProvider(hindiDictionary, 'hi', {\n allowEnglishFallback: true,\n});\n\nexport { hindiDictionary as hiDictionary } from '../dictionaries/hi';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const bengaliDictionary: Dictionary = {\n commands: {\n on: 'তে',\n toggle: 'টগল',\n add: 'যোগ',\n remove: 'সরান',\n set: 'সেট',\n get: 'পান',\n put: 'রাখুন',\n take: 'নিন',\n show: 'দেখান',\n hide: 'লুকান',\n increment: 'বৃদ্ধি',\n decrement: 'হ্রাস',\n if: 'যদি',\n else: 'নতুবা',\n repeat: 'পুনরাবৃত্তি',\n for: 'জন্য',\n while: 'যতক্ষণ',\n wait: 'অপেক্ষা',\n fetch: 'আনুন',\n call: 'কল',\n return: 'ফিরুন',\n log: 'লগ',\n trigger: 'ট্রিগার',\n send: 'পাঠান',\n go: 'যান',\n halt: 'থামুন',\n throw: 'নিক্ষেপ',\n continue: 'চালিয়ে যান',\n make: 'তৈরি করুন',\n append: 'জুড়ুন',\n prepend: 'শুরুতে যোগ',\n focus: 'ফোকাস',\n blur: 'ঝাপসা',\n transition: 'সংক্রমণ',\n settle: 'স্থির',\n measure: 'মাপুন',\n async: 'অ্যাসিঙ্ক',\n tell: 'বলুন',\n default: 'ডিফল্ট',\n init: 'শুরু',\n behavior: 'আচরণ',\n install: 'ইনস্টল',\n clone: 'কপি',\n swap: 'বদল',\n morph: 'রূপান্তর',\n beep: 'বীপ',\n break: 'ভাঙুন',\n copy: 'কপি',\n exit: 'বের',\n js: 'জেএস',\n pick: 'বাছুন',\n render: 'রেন্ডার',\n until: 'পর্যন্ত',\n breakpoint: 'ব্রেকপয়েন্ট',\n clear: 'পরিষ্কার',\n close: 'বন্ধ',\n open: 'খুলুন',\n select: 'নির্বাচন',\n socket: 'সকেট',\n },\n\n modifiers: {\n to: 'কে',\n from: 'থেকে',\n into: 'তে',\n on: 'তে',\n with: 'সাথে',\n by: 'দ্বারা',\n as: 'হিসাবে',\n before: 'আগে',\n after: 'পরে',\n at: 'এ',\n in: 'এ',\n over: 'উপর',\n between: 'মধ্যে',\n then: 'তারপর',\n and: 'এবং',\n end: 'শেষ',\n until: 'পর্যন্ত',\n of: 'র',\n },\n\n events: {\n click: 'ক্লিক',\n change: 'পরিবর্তন',\n input: 'ইনপুট',\n submit: 'জমা',\n load: 'লোড',\n focus: 'ফোকাস',\n blur: 'ঝাপসা',\n reset: 'রিসেট',\n keydown: 'কি-ডাউন',\n keyup: 'কি-আপ',\n mouseover: 'মাউস-ওভার',\n mouseout: 'মাউস-আউট',\n scroll: 'স্ক্রোল',\n resize: 'রিসাইজ',\n every: 'প্রতি',\n },\n\n logical: {\n if: 'যদি',\n when: 'যখন',\n where: 'কোথায়',\n else: 'নতুবা',\n not: 'না',\n and: 'এবং',\n or: 'অথবা',\n is: 'হয়',\n exists: 'আছে',\n has: 'আছে',\n have: 'আছি',\n empty: 'খালি',\n true: 'সত্য',\n false: 'মিথ্যা',\n null: 'শূন্য',\n undefined: 'অনির্ধারিত',\n end: 'শেষ',\n then: 'তারপর',\n live: 'লাইভ',\n bind: 'বাইন্ড',\n changes: 'পরিবর্তিত হলে',\n },\n\n temporal: {\n now: 'এখন',\n seconds: 'সেকেন্ড',\n milliseconds: 'মিলিসেকেন্ড',\n minutes: 'মিনিট',\n hours: 'ঘণ্টা',\n forever: 'চিরকাল',\n times: 'বার',\n s: 'সে',\n ms: 'মিসে',\n },\n\n values: {\n me: 'আমি',\n my: 'আমার',\n it: 'এটি',\n its: 'এর',\n result: 'ফলাফল',\n event: 'ঘটনা',\n target: 'লক্ষ্য',\n body: 'বডি',\n you: 'আপনি',\n your: 'তোমার',\n },\n\n attributes: {\n class: 'শ্রেণি',\n id: 'আইডি',\n style: 'শৈলী',\n value: 'মান',\n text: 'পাঠ্য',\n html: 'এইচটিএমএল',\n disabled: 'অক্ষম',\n checked: 'চেক করা',\n },\n\n expressions: {\n first: 'প্রথম',\n last: 'শেষ',\n next: 'পরবর্তী',\n previous: 'আগের',\n closest: 'নিকটতম',\n parent: 'মূল',\n children: 'সন্তান',\n random: 'এলোমেলো',\n length: 'দৈর্ঘ্য',\n index: 'সূচক',\n empty: 'খালি-করুন',\n 'starts with': 'দিয়ে_শুরু',\n 'ends with': 'দিয়ে_শেষ',\n 'ignoring case': 'কেস_উপেক্ষা',\n 'sorted by': 'দ্বারা_সাজানো',\n 'mapped to': 'তে_রূপান্তরিত',\n 'split by': 'দ্বারা_বিভক্ত',\n 'joined by': 'দ্বারা_যুক্ত',\n },\n};\n\nexport const bn = bengaliDictionary;\n","import { bn } from '../dictionaries/bn';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const bnKeywords: KeywordProvider = createKeywordProvider(bn, 'bn', {\n allowEnglishFallback: true,\n});\n\nexport { bn as bnDictionary } from '../dictionaries/bn';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const thaiDictionary: Dictionary = {\n commands: {\n on: 'เมื่อ',\n toggle: 'สลับ',\n add: 'เพิ่ม',\n remove: 'ลบ',\n set: 'ตั้ง',\n get: 'รับค่า',\n put: 'ใส่',\n take: 'รับ',\n show: 'แสดง',\n hide: 'ซ่อน',\n increment: 'เพิ่มค่า',\n decrement: 'ลดค่า',\n if: 'ถ้า',\n else: 'ไม่งั้น',\n repeat: 'ทำซ้ำ',\n for: 'สำหรับ',\n while: 'ในขณะที่',\n wait: 'รอ',\n fetch: 'ดึงข้อมูล',\n call: 'เรียก',\n return: 'คืนค่า',\n log: 'บันทึก',\n trigger: 'ทริกเกอร์',\n send: 'ส่ง',\n go: 'ไป',\n halt: 'หยุด',\n throw: 'โยน',\n continue: 'ต่อไป',\n make: 'สร้าง',\n append: 'เพิ่มท้าย',\n prepend: 'เพิ่มหน้า',\n focus: 'โฟกัส',\n blur: 'เบลอ',\n // เปลี่ยนผ่าน, not เปลี่ยน: the semantic th profile's `change` keyword is\n // เปลี่ยน, so a เปลี่ยน render could never anchor a transition command.\n transition: 'เปลี่ยนผ่าน',\n settle: 'คงที่',\n measure: 'วัด',\n async: 'อะซิงค์',\n tell: 'บอก',\n default: 'ค่าเริ่มต้น',\n init: 'เริ่มต้น',\n behavior: 'พฤติกรรม',\n install: 'ติดตั้ง',\n clone: 'คัดลอก',\n swap: 'สลับที่',\n morph: 'แปลงร่าง',\n beep: 'บี๊บ',\n break: 'ขัดจังหวะ',\n copy: 'คัดลอก',\n exit: 'ออก',\n js: 'เจเอส',\n pick: 'เลือก',\n render: 'แสดงผล',\n until: 'จนถึง',\n breakpoint: 'จุดพัก',\n clear: 'เคลียร์',\n close: 'ปิด',\n open: 'เปิด',\n select: 'เลือก',\n },\n\n modifiers: {\n to: 'ไปยัง',\n from: 'จาก',\n into: 'ใน',\n on: 'เมื่อ',\n with: 'ด้วย',\n by: 'โดย',\n as: 'เป็น',\n before: 'ก่อน',\n after: 'หลัง',\n at: 'ที่',\n in: 'ใน',\n over: 'เหนือ',\n between: 'ระหว่าง',\n then: 'แล้ว',\n and: 'และ',\n end: 'จบ',\n until: 'จนถึง',\n of: 'ของ',\n },\n\n events: {\n click: 'คลิก',\n change: 'เปลี่ยนแปลง',\n input: 'อินพุต',\n submit: 'ส่ง',\n load: 'โหลด',\n focus: 'โฟกัส',\n blur: 'เบลอ',\n reset: 'รีเซ็ต',\n keydown: 'กดคีย์',\n keyup: 'ปล่อยคีย์',\n mouseover: 'เมาส์เข้า',\n mouseout: 'เมาส์ออก',\n scroll: 'เลื่อน',\n resize: 'ปรับขนาด',\n every: 'ทุก',\n },\n\n logical: {\n if: 'ถ้า',\n when: 'เมื่อ',\n where: 'ที่ไหน',\n else: 'ไม่งั้น',\n not: 'ไม่',\n and: 'และ',\n or: 'หรือ',\n is: 'เป็น',\n exists: 'มีอยู่',\n has: 'มี',\n have: 'มี',\n empty: 'ว่าง',\n true: 'จริง',\n false: 'เท็จ',\n null: 'ว่าง',\n undefined: 'ไม่กำหนด',\n end: 'จบ',\n then: 'แล้ว',\n live: 'สด',\n changes: 'เปลี่ยน',\n },\n\n temporal: {\n now: 'ตอนนี้',\n seconds: 'วินาที',\n milliseconds: 'มิลลิวินาที',\n minutes: 'นาที',\n hours: 'ชั่วโมง',\n forever: 'ตลอดไป',\n times: 'ครั้ง',\n s: 'วิ',\n ms: 'มว',\n },\n\n values: {\n me: 'ฉัน',\n my: 'ของฉัน',\n it: 'มัน',\n its: 'ของมัน',\n result: 'ผลลัพธ์',\n event: 'เหตุการณ์',\n target: 'เป้าหมาย',\n body: 'บอดี้',\n you: 'คุณ',\n your: 'ของคุณ',\n },\n\n attributes: {\n class: 'คลาส',\n id: 'ไอดี',\n style: 'สไตล์',\n value: 'ค่า',\n text: 'ข้อความ',\n html: 'เอชทีเอ็มแอล',\n disabled: 'ปิดใช้งาน',\n checked: 'เลือกแล้ว',\n },\n\n expressions: {\n first: 'แรก',\n last: 'สุดท้าย',\n next: 'ถัดไป',\n previous: 'ก่อนหน้า',\n closest: 'ใกล้สุด',\n parent: 'ต้นทาง',\n children: 'ลูก',\n random: 'สุ่ม',\n length: 'ความยาว',\n index: 'ดัชนี',\n empty: 'ล้าง',\n 'starts with': 'ขึ้นต้นด้วย',\n 'ends with': 'ลงท้ายด้วย',\n 'ignoring case': 'ไม่สนตัวพิมพ์',\n 'sorted by': 'เรียงตาม',\n 'mapped to': 'แปลงเป็น',\n 'split by': 'แยกด้วย',\n 'joined by': 'รวมด้วย',\n },\n};\n\nexport const th = thaiDictionary;\n","import { th } from '../dictionaries/th';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const thKeywords: KeywordProvider = createKeywordProvider(th, 'th', {\n allowEnglishFallback: true,\n});\n\nexport { th as thDictionary } from '../dictionaries/th';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const malayDictionary: Dictionary = {\n commands: {\n on: 'apabila',\n tell: 'beritahu',\n trigger: 'cetuskan',\n send: 'hantar',\n take: 'ambil',\n put: 'letak',\n set: 'tetapkan',\n get: 'dapatkan',\n add: 'tambah',\n remove: 'buang',\n toggle: 'togol',\n hide: 'sembunyi',\n show: 'tunjuk',\n if: 'jika',\n unless: 'kecuali',\n repeat: 'ulang',\n for: 'untuk',\n while: 'selagi',\n until: 'sehingga',\n continue: 'teruskan',\n break: 'henti',\n halt: 'henti',\n wait: 'tunggu',\n fetch: 'ambil_dari',\n call: 'panggil',\n return: 'pulang',\n make: 'buat',\n log: 'catat',\n throw: 'lempar',\n catch: 'tangkap',\n measure: 'ukur',\n transition: 'peralihan',\n increment: 'tambah_satu',\n decrement: 'kurang_satu',\n default: 'lalai',\n go: 'pergi',\n pushUrl: 'tolak_url',\n replaceUrl: 'ganti_url',\n copy: 'salin',\n pick: 'pilih',\n beep: 'bunyi',\n js: 'js',\n async: 'tak_segerak',\n render: 'papar',\n swap: 'tukar_tempat',\n morph: 'ubah_bentuk',\n settle: 'selesai',\n append: 'tambah_hujung',\n prepend: 'tambah_mula',\n exit: 'keluar',\n else: 'kalau_tidak',\n focus: 'fokus',\n blur: 'kabur',\n install: 'pasang',\n behavior: 'kelakuan',\n init: 'mula',\n clone: 'klon',\n breakpoint: 'titik-henti',\n clear: 'bersihkan', // padam is a remove alternative in the profile\n close: 'tutup',\n open: 'buka',\n select: 'pilih',\n socket: 'soket', // derived from the ms profile (socket.primary); see generate-i18n-dictionaries\n },\n\n modifiers: {\n to: 'ke',\n from: 'dari',\n into: 'ke_dalam',\n with: 'dengan',\n at: 'di',\n in: 'dalam',\n of: 'daripada',\n as: 'sebagai',\n by: 'oleh',\n before: 'sebelum',\n after: 'selepas',\n over: 'atas',\n under: 'bawah',\n between: 'antara',\n through: 'melalui',\n without: 'tanpa',\n on: 'pada',\n then: 'kemudian',\n and: 'dan',\n end: 'tamat',\n until: 'sehingga',\n },\n\n events: {\n click: 'click',\n dblclick: 'dblclick',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n keydown: 'keydown',\n keyup: 'keyup',\n keypress: 'keypress',\n focus: 'focus',\n blur: 'blur',\n change: 'change',\n input: 'input',\n submit: 'submit',\n reset: 'reset',\n load: 'load',\n unload: 'unload',\n resize: 'resize',\n scroll: 'scroll',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n every: 'setiap',\n },\n\n logical: {\n when: 'apabila',\n where: 'di_mana',\n and: 'dan',\n or: 'atau',\n not: 'bukan',\n is: 'adalah',\n exists: 'wujud',\n matches: 'sepadan',\n contains: 'mengandungi',\n includes: 'termasuk',\n equals: 'sama',\n has: 'ada',\n have: 'ada',\n then: 'kemudian',\n else: 'kalau_tidak',\n otherwise: 'jika_tidak',\n end: 'tamat',\n live: 'langsung',\n changes: 'berubah',\n if: 'jika',\n empty: 'kosong',\n true: 'benar',\n false: 'salah',\n null: 'null',\n undefined: 'tidak_ditakrifkan',\n },\n\n temporal: {\n seconds: 'saat',\n second: 'saat',\n milliseconds: 'milisaat',\n millisecond: 'milisaat',\n minutes: 'minit',\n minute: 'minit',\n hours: 'jam',\n hour: 'jam',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'j',\n now: 'sekarang',\n forever: 'selamanya',\n times: 'kali',\n },\n\n values: {\n true: 'benar',\n false: 'salah',\n null: 'null',\n undefined: 'tidak_ditakrifkan',\n it: 'ia',\n its: 'nya',\n me: 'saya',\n my: 'saya_punya',\n myself: 'diri_saya',\n you: 'kamu',\n your: 'kamu_punya',\n yourself: 'diri_kamu',\n element: 'elemen',\n target: 'sasaran',\n detail: 'perincian',\n event: 'peristiwa',\n window: 'tetingkap',\n document: 'dokumen',\n body: 'badan',\n result: 'hasil',\n value: 'nilai',\n },\n\n attributes: {\n class: 'kelas',\n classes: 'kelas_kelas',\n style: 'gaya',\n styles: 'gaya_gaya',\n attribute: 'atribut',\n attributes: 'atribut_atribut',\n property: 'sifat',\n properties: 'sifat_sifat',\n id: 'id',\n value: 'nilai',\n text: 'teks',\n html: 'html',\n disabled: 'dilumpuhkan',\n checked: 'ditanda',\n },\n\n expressions: {\n first: 'pertama',\n last: 'terakhir',\n next: 'seterusnya',\n previous: 'sebelumnya',\n prev: 'sebelum',\n at: 'di',\n random: 'rawak',\n closest: 'terdekat',\n parent: 'induk',\n children: 'anak_anak',\n within: 'dalam',\n no: 'tiada',\n empty: 'kosong',\n some: 'beberapa',\n 'starts with': 'bermula_dengan',\n 'ends with': 'berakhir_dengan',\n 'ignoring case': 'abaikan_huruf_besar_kecil',\n 'sorted by': 'disusun_mengikut',\n 'mapped to': 'dipetakan_ke',\n 'split by': 'dipecah_oleh',\n 'joined by': 'digabung_oleh',\n length: 'panjang',\n index: 'indeks',\n },\n};\n\nexport const ms = malayDictionary;\n","import { ms } from '../dictionaries/ms';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const msKeywords: KeywordProvider = createKeywordProvider(ms, 'ms', {\n allowEnglishFallback: true,\n});\n\nexport { ms as msDictionary } from '../dictionaries/ms';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const tagalogDictionary: Dictionary = {\n commands: {\n on: 'kapag',\n tell: 'sabihin',\n trigger: 'palitawin',\n send: 'ipadala',\n take: 'kumuha', // auditor: dict emitted a word the profile reads differently\n put: 'ilagay',\n set: 'itakda',\n // Align with the semantic tl profile's `get` primary (`kunin`); the previous\n // `kuhanin` is the base of fetch's `kuhanin_mula`, so the transformed `get`\n // dropped (get-value parsed degenerate). Same dict↔profile alignment as id `toggle`.\n get: 'kunin',\n add: 'idagdag',\n remove: 'alisin',\n toggle: 'palitan',\n hide: 'itago',\n show: 'ipakita',\n if: 'kung',\n unless: 'maliban_kung',\n repeat: 'ulitin',\n for: 'para_sa',\n while: 'habang',\n until: 'hanggang',\n continue: 'magpatuloy',\n break: 'itigil',\n halt: 'huminto',\n wait: 'maghintay',\n fetch: 'kuhanin_mula',\n call: 'tawagin',\n return: 'ibalik',\n make: 'gumawa',\n log: 'itala',\n throw: 'ihagis',\n catch: 'hulihin',\n measure: 'sukatin',\n transition: 'lumipat',\n increment: 'dagdagan',\n decrement: 'bawasan',\n default: 'pamantayan',\n go: 'pumunta',\n pushUrl: 'itulak_url',\n replaceUrl: 'palitan_url',\n copy: 'kopyahin',\n pick: 'pumili',\n beep: 'tunog',\n js: 'js',\n async: 'sabay',\n render: 'irender', // auditor: dict emitted a word the profile reads differently\n swap: 'palitan_pwesto',\n morph: 'baguhin', // auditor: dict emitted a word the profile reads differently\n settle: 'magpatahimik', // auditor: dict emitted a word the profile reads differently\n append: 'idagdag_sa_dulo',\n prepend: 'idagdag_sa_simula',\n exit: 'lumabas',\n else: 'kung_hindi',\n focus: 'ituon',\n blur: 'alisin_tuon',\n install: 'ikabit',\n behavior: 'ugali',\n init: 'simulan',\n clone: 'kopyahin',\n breakpoint: 'breakpoint',\n clear: 'burahin',\n close: 'isara',\n open: 'buksan',\n select: 'piliin',\n },\n\n modifiers: {\n to: 'sa',\n from: 'mula_sa',\n into: 'papasok_sa',\n with: 'kasama',\n at: 'sa',\n in: 'sa_loob',\n of: 'ng',\n as: 'bilang',\n by: 'sa_pamamagitan_ng',\n before: 'bago',\n // `matapos` (not `pagkatapos`) for the positional \"after\": `pagkatapos` is\n // also Tagalog \"then\", so emitting it for the position modifier collides with\n // the sequence connector. `matapos` is the unambiguous positional form and\n // matches the semantic tl profile's `after`.\n after: 'matapos',\n over: 'sa_ibabaw',\n under: 'sa_ilalim',\n between: 'sa_pagitan',\n through: 'sa_pamamagitan',\n without: 'walang',\n on: 'sa',\n then: 'pagkatapos',\n and: 'at',\n end: 'wakas',\n until: 'hanggang',\n },\n\n events: {\n click: 'click',\n dblclick: 'dblclick',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n keydown: 'keydown',\n keyup: 'keyup',\n keypress: 'keypress',\n focus: 'focus',\n blur: 'blur',\n change: 'change',\n input: 'input',\n submit: 'submit',\n reset: 'reset',\n load: 'load',\n unload: 'unload',\n resize: 'resize',\n scroll: 'scroll',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n every: 'bawat',\n },\n\n logical: {\n when: 'kapag',\n where: 'kung_saan',\n and: 'at',\n or: 'o',\n not: 'hindi',\n is: 'ay',\n exists: 'may',\n matches: 'tumutugma',\n contains: 'naglalaman',\n includes: 'kasama',\n equals: 'katumbas',\n has: 'may',\n have: 'may',\n then: 'pagkatapos',\n else: 'kung_hindi',\n otherwise: 'kung_hindi_man',\n end: 'wakas',\n live: 'live',\n changes: 'nagbabago',\n if: 'kung',\n empty: 'walang_laman',\n true: 'totoo',\n false: 'mali',\n null: 'wala',\n undefined: 'hindi_tinukoy',\n },\n\n temporal: {\n seconds: 'segundo',\n second: 'segundo',\n milliseconds: 'milisegundo',\n millisecond: 'milisegundo',\n minutes: 'minuto',\n minute: 'minuto',\n hours: 'oras',\n hour: 'oras',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n now: 'ngayon',\n forever: 'magpakailanman',\n times: 'beses',\n },\n\n values: {\n true: 'totoo',\n false: 'mali',\n null: 'wala',\n undefined: 'hindi_tinukoy',\n it: 'ito',\n its: 'nito',\n me: 'ako',\n my: 'aking',\n myself: 'sarili_ko',\n you: 'ikaw',\n your: 'iyong',\n yourself: 'sarili_mo',\n element: 'elemento',\n target: 'target',\n detail: 'detalye',\n event: 'pangyayari',\n window: 'bintana',\n document: 'dokumento',\n body: 'katawan',\n result: 'resulta',\n value: 'halaga',\n },\n\n attributes: {\n class: 'klase',\n classes: 'mga_klase',\n style: 'estilo',\n styles: 'mga_estilo',\n attribute: 'katangian',\n attributes: 'mga_katangian',\n property: 'ari_arian',\n properties: 'mga_ari_arian',\n id: 'id',\n value: 'halaga',\n text: 'teksto',\n html: 'html',\n disabled: 'hindi_pinagana',\n checked: 'naka_tsek',\n },\n\n expressions: {\n first: 'una',\n last: 'huli',\n next: 'susunod',\n previous: 'nakaraan',\n prev: 'nakaraan',\n at: 'sa',\n random: 'random',\n closest: 'pinakamalapit',\n parent: 'magulang',\n children: 'mga_anak',\n within: 'sa_loob_ng',\n no: 'walang',\n empty: 'walang_laman',\n some: 'ilan',\n 'starts with': 'nagsisimula_sa',\n 'ends with': 'nagtatapos_sa',\n 'ignoring case': 'huwag_pansinin_ang_case',\n 'sorted by': 'nakaayos_ayon_sa',\n 'mapped to': 'binago_sa',\n 'split by': 'hinati_sa',\n 'joined by': 'pinagsama_sa',\n length: 'haba',\n index: 'indeks',\n },\n};\n\nexport const tl = tagalogDictionary;\n","import { tl } from '../dictionaries/tl';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const tlKeywords: KeywordProvider = createKeywordProvider(tl, 'tl', {\n allowEnglishFallback: true,\n});\n\nexport { tl as tlDictionary } from '../dictionaries/tl';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const he: Dictionary = {\n commands: {\n add: 'הוסף',\n append: 'צרף',\n async: 'אסינכרוני',\n beep: 'ביפ',\n break: 'שבור',\n call: 'קרא',\n clear: 'נקה', // profile's clear word — was untranslated (parsed as nothing)\n continue: 'המשך',\n copy: 'העתק',\n decrement: 'הקטן',\n default: 'ברירת מחדל',\n exit: 'צא',\n fetch: 'הבא',\n for: 'עבור',\n get: 'קבל',\n go: 'לך',\n halt: 'עצור',\n hide: 'הסתר',\n if: 'אם',\n unless: 'אלא',\n increment: 'הגדל',\n install: 'התקן',\n js: 'js',\n log: 'רשום',\n make: 'צור',\n measure: 'מדוד',\n morph: 'הפוך',\n on: 'ב',\n pick: 'בחר',\n put: 'שים',\n remove: 'הסר',\n render: 'רנדר',\n repeat: 'חזור',\n return: 'החזר',\n scroll: 'גלול',\n send: 'שלח',\n set: 'קבע',\n settle: 'התייצב',\n show: 'הראה',\n swap: 'החלף',\n take: 'קח',\n tell: 'אמור',\n throw: 'זרוק',\n toggle: 'מתג',\n transition: 'מעבר',\n trigger: 'הפעל',\n until: 'עד',\n wait: 'חכה',\n while: 'כל עוד',\n },\n\n modifiers: {\n after: 'אחרי',\n before: 'לפני',\n from: 'מ',\n into: 'לתוך',\n to: 'על',\n with: 'עם',\n },\n\n events: {\n blur: 'טשטש',\n change: 'שינוי',\n click: 'לחיצה',\n focus: 'מקד',\n input: 'קלט',\n submit: 'שליחה',\n },\n\n logical: {\n and: 'וגם',\n else: 'אחרת',\n end: 'סוף',\n then: 'אז',\n live: 'חי',\n bind: 'קשור',\n changes: 'משתנה',\n when: 'כאשר',\n where: 'איפה',\n },\n\n temporal: {},\n\n values: {\n body: 'גוף',\n event: 'אירוע',\n it: 'זה',\n its: 'שלו',\n me: 'אני',\n my: 'שלי',\n result: 'תוצאה',\n target: 'יעד',\n you: 'אתה',\n your: 'שלך',\n },\n\n attributes: {},\n\n expressions: {\n last: 'אחרון',\n },\n};\n","// packages/i18n/src/parser/he.ts\n\nimport { he } from '../dictionaries/he';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Hebrew keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Hebrew (RTL, SVO):\n * - `ב לחיצה מתג .active` → parses as `on click toggle .active`\n *\n * English keywords are also accepted (mixed mode).\n *\n * @example\n * ```typescript\n * import { heKeywords } from '@lokascript/i18n/parser/he';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: heKeywords });\n * parser.parse('ב לחיצה מתג .active');\n * ```\n */\nexport const heKeywords: KeywordProvider = createKeywordProvider(he, 'he', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { he as heDictionary } from '../dictionaries/he';\n","// packages/i18n/src/parser/locale-manager.ts\n\nimport type { KeywordProvider } from './types';\nimport { createEnglishProvider } from './create-provider';\n\n/**\n * LocaleManager - Centralized locale configuration for hyperscript parsing.\n *\n * Provides utilities for:\n * - Setting/getting the default locale\n * - Creating locale-aware parsers\n * - Runtime locale switching\n *\n * @example\n * ```typescript\n * import { LocaleManager } from '@lokascript/i18n/parser';\n * import { esKeywords, frKeywords } from '@lokascript/i18n/parser';\n *\n * // Register available locales\n * LocaleManager.register('es', esKeywords);\n * LocaleManager.register('fr', frKeywords);\n *\n * // Set default locale\n * LocaleManager.setDefault('es');\n *\n * // Get keyword provider for parsing\n * const provider = LocaleManager.get(); // Returns esKeywords\n * const frProvider = LocaleManager.get('fr'); // Returns frKeywords\n *\n * // Use with parser\n * const parser = new Parser({ keywords: LocaleManager.get() });\n * ```\n */\nexport class LocaleManager {\n private static providers = new Map<string, KeywordProvider>();\n private static defaultLocale: string = 'en';\n private static englishProvider: KeywordProvider = createEnglishProvider();\n\n /**\n * Register a locale provider.\n *\n * @param locale - The locale code (e.g., 'es', 'ja', 'fr')\n * @param provider - The KeywordProvider for this locale\n */\n static register(locale: string, provider: KeywordProvider): void {\n LocaleManager.providers.set(locale.toLowerCase(), provider);\n }\n\n /**\n * Unregister a locale provider.\n *\n * @param locale - The locale code to remove\n */\n static unregister(locale: string): void {\n LocaleManager.providers.delete(locale.toLowerCase());\n }\n\n /**\n * Set the default locale.\n *\n * @param locale - The locale code to use as default\n * @throws Error if the locale is not registered\n */\n static setDefault(locale: string): void {\n const normalizedLocale = locale.toLowerCase();\n if (normalizedLocale !== 'en' && !LocaleManager.providers.has(normalizedLocale)) {\n throw new Error(\n `Locale '${locale}' is not registered. ` +\n `Available locales: ${LocaleManager.getAvailable().join(', ')}`\n );\n }\n LocaleManager.defaultLocale = normalizedLocale;\n }\n\n /**\n * Get the current default locale.\n *\n * @returns The default locale code\n */\n static getDefault(): string {\n return LocaleManager.defaultLocale;\n }\n\n /**\n * Get a keyword provider for a locale.\n *\n * @param locale - The locale code (optional, defaults to the default locale)\n * @returns The KeywordProvider for the locale\n * @throws Error if the locale is not registered\n */\n static get(locale?: string): KeywordProvider {\n const targetLocale = (locale || LocaleManager.defaultLocale).toLowerCase();\n\n // English is always available\n if (targetLocale === 'en') {\n return LocaleManager.englishProvider;\n }\n\n const provider = LocaleManager.providers.get(targetLocale);\n if (!provider) {\n throw new Error(\n `Locale '${targetLocale}' is not registered. ` +\n `Available locales: ${LocaleManager.getAvailable().join(', ')}`\n );\n }\n\n return provider;\n }\n\n /**\n * Check if a locale is registered.\n *\n * @param locale - The locale code to check\n * @returns True if the locale is available\n */\n static has(locale: string): boolean {\n const normalizedLocale = locale.toLowerCase();\n return normalizedLocale === 'en' || LocaleManager.providers.has(normalizedLocale);\n }\n\n /**\n * Get all available locale codes.\n *\n * @returns Array of locale codes\n */\n static getAvailable(): string[] {\n return ['en', ...Array.from(LocaleManager.providers.keys())];\n }\n\n /**\n * Reset the LocaleManager to its initial state.\n * Useful for testing.\n */\n static reset(): void {\n LocaleManager.providers.clear();\n LocaleManager.defaultLocale = 'en';\n }\n\n /**\n * Register all built-in locales at once.\n *\n * @example\n * ```typescript\n * import { LocaleManager } from '@lokascript/i18n/parser';\n * import { esKeywords, jaKeywords, frKeywords, deKeywords, arKeywords } from '@lokascript/i18n/parser';\n *\n * LocaleManager.registerAll({\n * es: esKeywords,\n * ja: jaKeywords,\n * fr: frKeywords,\n * de: deKeywords,\n * ar: arKeywords,\n * });\n * ```\n */\n static registerAll(providers: Record<string, KeywordProvider>): void {\n for (const [locale, provider] of Object.entries(providers)) {\n LocaleManager.register(locale, provider);\n }\n }\n}\n\n/**\n * Quick utility to detect the browser's preferred locale and return\n * a matching provider, falling back to English.\n *\n * @returns The KeywordProvider for the browser's locale or English\n *\n * @example\n * ```typescript\n * import { detectBrowserLocale } from '@lokascript/i18n/parser';\n * import { Parser } from '@hyperfixi/core';\n *\n * // Auto-detect and use browser locale\n * const parser = new Parser({ keywords: detectBrowserLocale() });\n * ```\n */\nexport function detectBrowserLocale(): KeywordProvider {\n if (typeof navigator === 'undefined') {\n return LocaleManager.get('en');\n }\n\n // Get browser languages in order of preference\n const languages = navigator.languages || [navigator.language];\n\n for (const lang of languages) {\n // Extract the base language code (e.g., 'es-MX' -> 'es')\n const baseLocale = lang.split('-')[0].toLowerCase();\n\n if (LocaleManager.has(baseLocale)) {\n return LocaleManager.get(baseLocale);\n }\n }\n\n // Fallback to English\n return LocaleManager.get('en');\n}\n","// packages/i18n/src/dictionaries/en.ts\n\nimport { Dictionary } from '../types';\n\n/**\n * English dictionary - identity mapping since English is the canonical hyperscript language.\n * This exists primarily for symmetry in translation operations (e.g., en -> es).\n */\nexport const en: Dictionary = {\n commands: {\n // Event handling\n on: 'on',\n tell: 'tell',\n trigger: 'trigger',\n send: 'send',\n\n // DOM manipulation\n take: 'take',\n put: 'put',\n set: 'set',\n get: 'get',\n add: 'add',\n remove: 'remove',\n toggle: 'toggle',\n hide: 'hide',\n show: 'show',\n\n // Control flow\n if: 'if',\n unless: 'unless',\n repeat: 'repeat',\n for: 'for',\n while: 'while',\n until: 'until',\n continue: 'continue',\n break: 'break',\n halt: 'halt',\n\n // Async\n wait: 'wait',\n fetch: 'fetch',\n call: 'call',\n return: 'return',\n\n // Other commands\n make: 'make',\n log: 'log',\n throw: 'throw',\n catch: 'catch',\n measure: 'measure',\n transition: 'transition',\n\n // Data Commands\n increment: 'increment',\n decrement: 'decrement',\n default: 'default',\n\n // Reactivity Commands\n bind: 'bind',\n\n // Realtime / service-worker Commands\n eventsource: 'eventsource',\n socket: 'socket',\n worker: 'worker',\n intercept: 'intercept',\n\n // Navigation Commands\n go: 'go',\n pushUrl: 'pushUrl',\n replaceUrl: 'replaceUrl',\n\n // Utility Commands\n copy: 'copy',\n pick: 'pick',\n beep: 'beep',\n\n // Advanced Commands\n js: 'js',\n async: 'async',\n render: 'render',\n\n // Animation Commands\n swap: 'swap',\n morph: 'morph',\n settle: 'settle',\n\n // Content Commands\n append: 'append',\n\n // Control Flow\n exit: 'exit',\n\n // Behaviors\n install: 'install',\n\n // v0.9.90 Phase 1 — DOM / form state / debug\n open: 'open',\n close: 'close',\n select: 'select',\n clear: 'clear',\n breakpoint: 'breakpoint',\n\n // Other commands with schemas (backfill — pre-existing gaps surfaced by\n // the schema-alignment test)\n prepend: 'prepend',\n clone: 'clone',\n // Navigation/DOM commands added in core (Dec 2025 / Apr 2026)\n scroll: 'scroll',\n push: 'push',\n replace: 'replace',\n process: 'process',\n },\n\n modifiers: {\n to: 'to',\n from: 'from',\n into: 'into',\n with: 'with',\n at: 'at',\n in: 'in',\n of: 'of',\n as: 'as',\n by: 'by',\n before: 'before',\n after: 'after',\n over: 'over',\n under: 'under',\n between: 'between',\n through: 'through',\n without: 'without',\n },\n\n events: {\n click: 'click',\n dblclick: 'dblclick',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n\n keydown: 'keydown',\n keyup: 'keyup',\n keypress: 'keypress',\n\n focus: 'focus',\n blur: 'blur',\n change: 'change',\n input: 'input',\n submit: 'submit',\n reset: 'reset',\n\n load: 'load',\n unload: 'unload',\n resize: 'resize',\n scroll: 'scroll',\n\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: 'when',\n where: 'where',\n and: 'and',\n or: 'or',\n not: 'not',\n is: 'is',\n exists: 'exists',\n matches: 'matches',\n contains: 'contains',\n includes: 'includes',\n equals: 'equals',\n has: 'has', // third-person: \"it has .class\", \"#element has .class\"\n have: 'have', // first-person: \"I have .class\"\n then: 'then',\n else: 'else',\n otherwise: 'otherwise',\n end: 'end',\n live: 'live',\n changes: 'changes',\n },\n\n temporal: {\n seconds: 'seconds',\n second: 'second',\n milliseconds: 'milliseconds',\n millisecond: 'millisecond',\n minutes: 'minutes',\n minute: 'minute',\n hours: 'hours',\n hour: 'hour',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'true',\n false: 'false',\n null: 'null',\n undefined: 'undefined',\n it: 'it',\n its: 'its',\n me: 'me',\n my: 'my',\n myself: 'myself',\n you: 'you',\n your: 'your',\n yourself: 'yourself',\n element: 'element',\n target: 'target',\n detail: 'detail',\n event: 'event',\n window: 'window',\n document: 'document',\n body: 'body',\n result: 'result',\n value: 'value',\n },\n\n attributes: {\n class: 'class',\n classes: 'classes',\n style: 'style',\n styles: 'styles',\n attribute: 'attribute',\n attributes: 'attributes',\n property: 'property',\n properties: 'properties',\n },\n\n expressions: {\n // Positional\n first: 'first',\n last: 'last',\n next: 'next',\n previous: 'previous',\n prev: 'prev',\n at: 'at',\n random: 'random',\n\n // DOM Traversal\n closest: 'closest',\n parent: 'parent',\n children: 'children',\n within: 'within',\n\n // Emptiness/Existence\n no: 'no',\n empty: 'empty',\n some: 'some',\n\n // String operations\n 'starts with': 'starts with',\n 'ends with': 'ends with',\n 'ignoring case': 'ignoring case',\n\n // Collection operations (v0.9.90)\n 'sorted by': 'sorted by',\n 'mapped to': 'mapped to',\n 'split by': 'split by',\n 'joined by': 'joined by',\n },\n};\n","/**\n * Generalized Grammar System for Multilingual Hyperscript\n *\n * This system abstracts grammatical patterns across language families,\n * enabling deep multilingual support without per-language hardcoding.\n *\n * Key Linguistic Concepts:\n * - Word Order: SVO, SOV, VSO (and variations)\n * - Adposition Type: Preposition (English) vs Postposition (Japanese/Korean)\n * - Morphology: Isolating (Chinese) vs Agglutinative (Turkish) vs Fusional (Arabic)\n * - Text Direction: LTR vs RTL\n */\n\n// =============================================================================\n// Core Types\n// =============================================================================\n\n/**\n * Semantic roles in hyperscript commands.\n * These are universal across all 13 supported languages - only the surface form changes.\n *\n * ## Core Thematic Roles (from linguistic theory)\n * | Role | Usage | Purpose | Example |\n * |-------------|-------|-----------------------------|---------------------------|\n * | action | 100% | Command verb | toggle, put, fetch |\n * | patient | 90% | What is acted upon | .active, #count |\n * | destination | 40% | Where something goes | into #output, to .class |\n * | source | 13% | Where something comes from | from #input, from URL |\n * | event | 106% | Trigger events | click, keydown, submit |\n * | condition | 8% | Boolean expressions | if x > 5, when visible |\n * | agent | 0% | Who performs action | Reserved for future use |\n * | goal | 1% | Target value/state | to 'red' (in transition) |\n *\n * ## Quantitative Roles (answer \"how much/long\")\n * | Role | Usage | Purpose | Example |\n * |----------|-------|----------------|----------------------|\n * | quantity | 7% | Numeric amount | by 5, 3 times |\n * | duration | 1% | Time span | for 5 seconds, 500ms |\n *\n * ## Adverbial/Modifier Roles (answer \"how/by what means\")\n * | Role | Usage | Purpose | Example |\n * |--------------|-------|---------------------------|-------------------|\n * | style | 2% | Animation/behavior | with fade |\n * | manner | 2% | Insertion position | before, after |\n * | method | 1% | HTTP method/technique | via POST, as GET |\n * | responseType | 1% | Response format | as json, as html |\n *\n * ## Control Flow Roles\n * | Role | Usage | Purpose | Example |\n * |----------|-------|--------------|-----------------------|\n * | loopType | 6% | Loop variant | forever, until, times |\n *\n * ## Design Notes\n * - Low-usage roles (agent, goal, method, responseType) are intentionally kept for:\n * - Linguistic completeness across all 13 languages\n * - Future extensibility (AI agents, server-side execution)\n * - Command-specific semantics (fetch, transition)\n * - Each role has distinct grammatical markers per language (see profiles/index.ts)\n * - Usage percentages based on pattern database analysis\n */\nexport type SemanticRole =\n // Core thematic roles\n | 'action' // The command/verb (increment, put, toggle)\n | 'agent' // Who/what performs action (reserved for future: AI agents, server-side)\n | 'patient' // What is acted upon (the counter, .active)\n | 'source' // Origin (from #input, from URL)\n | 'destination' // Target location (into #output, to .class)\n | 'goal' // Target value/state (to 'red', to 100)\n | 'event' // Trigger (click, input, keydown)\n | 'condition' // Boolean expression (if x > 5)\n // Quantitative roles\n | 'quantity' // Numeric amount (by 5, 3 times)\n | 'duration' // Time span (for 5 seconds, over 500ms)\n // Adverbial roles\n | 'responseType' // Response format (as json, as text, as html)\n | 'method' // HTTP method/technique (via POST, using GET)\n | 'style' // Visual/behavioral manner (with fade, smoothly)\n | 'manner' // Insertion position (before, after)\n // Control flow roles\n | 'loopType' // Loop variant: forever, times, for, while, until, until-event\n // Structural roles (for parser control)\n | 'continues'; // Continuation marker (then-chains)\n\n/**\n * Word order patterns\n * These represent the major typological categories\n */\nexport type WordOrder = 'SVO' | 'SOV' | 'VSO' | 'VOS' | 'OVS' | 'OSV' | 'free';\n\n/**\n * Where grammatical markers appear relative to their noun/verb\n */\nexport type AdpositionType = 'preposition' | 'postposition' | 'circumposition' | 'none';\n\n/**\n * Morphological typology - how words are constructed\n */\nexport type MorphologyType =\n | 'isolating' // Chinese - no inflection, word order matters\n | 'agglutinative' // Turkish, Japanese - morphemes stack predictably\n | 'fusional' // Arabic, Spanish - morphemes blend together\n | 'polysynthetic'; // Quechua - complex words encode full sentences\n\n/**\n * A grammatical marker (particle, case ending, preposition)\n */\nexport interface GrammaticalMarker {\n form: string; // The actual text (を, に, to, 的)\n role: SemanticRole; // What semantic role it marks\n position: AdpositionType; // Where it appears\n required: boolean; // Is it mandatory?\n alternatives?: string[]; // Alternative forms (e.g., 을/를 in Korean)\n}\n\n/**\n * Metadata for preserving line structure during translation.\n * Tracks indentation and blank lines so output maintains the same format.\n */\nexport interface LineMetadata {\n /** Trimmed line content (empty string for blank lines) */\n content: string;\n /** Leading whitespace (tabs/spaces) from original line */\n originalIndent: string;\n /** True if the line was empty or whitespace-only */\n isBlank: boolean;\n}\n\n// =============================================================================\n// Language Profile\n// =============================================================================\n\n/**\n * Complete grammatical profile for a language\n * This captures the essential typological features needed for transformation\n */\nexport interface LanguageProfile {\n code: string; // ISO 639-1 code\n name: string; // Native name\n\n // Typological features\n wordOrder: WordOrder;\n adpositionType: AdpositionType;\n morphology: MorphologyType;\n direction: 'ltr' | 'rtl';\n\n // Grammatical markers for each semantic role\n markers: GrammaticalMarker[];\n\n // Role ordering - which semantic roles come in what order\n // E.g., Japanese: ['patient', 'source', 'destination', 'action']\n // E.g., English: ['action', 'patient', 'source', 'destination']\n canonicalOrder: SemanticRole[];\n\n // Special rules\n rules?: GrammarRule[];\n}\n\n/**\n * Pattern for transforming hyperscript structures\n */\nexport interface GrammarRule {\n name: string;\n description: string;\n\n // Pattern matching (in canonical English form)\n match: PatternMatcher;\n\n // How to transform for this language\n transform: PatternTransform;\n\n // Priority (higher = checked first)\n priority: number;\n}\n\n/**\n * Matches a hyperscript pattern\n */\nexport interface PatternMatcher {\n // Command type(s) this matches\n commands?: string[];\n\n // Required semantic roles\n requiredRoles: SemanticRole[];\n\n // Optional roles\n optionalRoles?: SemanticRole[];\n\n // Custom predicate for complex matching\n predicate?: (parsed: ParsedStatement) => boolean;\n}\n\n/**\n * Defines how to transform a matched pattern\n */\nexport interface PatternTransform {\n // Reorder roles for target language\n roleOrder: SemanticRole[];\n\n // Insert markers between roles\n insertMarkers?: boolean;\n\n // Custom transformation function\n custom?: (parsed: ParsedStatement, profile: LanguageProfile) => string;\n}\n\n// =============================================================================\n// Parsed Structures\n// =============================================================================\n\n/**\n * A parsed hyperscript statement broken into semantic components\n */\nexport interface ParsedStatement {\n type: 'event-handler' | 'command' | 'conditional' | 'loop';\n roles: Map<SemanticRole, ParsedElement>;\n original: string;\n}\n\n/**\n * A single element with its semantic role\n */\nexport interface ParsedElement {\n role: SemanticRole;\n value: string; // Original English value\n translated?: string; // Translated value\n isSelector?: boolean; // CSS selector (don't translate)\n isLiteral?: boolean; // Literal value (don't translate)\n}\n\n// =============================================================================\n// Universal Pattern Templates\n// =============================================================================\n\n/**\n * Universal templates for common hyperscript patterns\n * These define the semantic structure independent of surface form\n */\nexport const UNIVERSAL_PATTERNS = {\n // on click increment #count\n eventIncrement: {\n name: 'event-increment',\n roles: ['event', 'action', 'patient'] as SemanticRole[],\n english: 'on {event} {action} {patient}',\n },\n\n // put X into Y\n putInto: {\n name: 'put-into',\n roles: ['action', 'patient', 'destination'] as SemanticRole[],\n english: '{action} {patient} into {destination}',\n },\n\n // add .class to element\n addTo: {\n name: 'add-to',\n roles: ['action', 'patient', 'destination'] as SemanticRole[],\n english: '{action} {patient} to {destination}',\n },\n\n // toggle .class on element\n toggleOn: {\n name: 'toggle-on',\n roles: ['action', 'patient', 'destination'] as SemanticRole[],\n english: '{action} {patient} on {destination}',\n },\n\n // wait 2 seconds\n waitDuration: {\n name: 'wait-duration',\n roles: ['action', 'quantity'] as SemanticRole[],\n english: '{action} {quantity}',\n },\n\n // if condition then ... end\n conditional: {\n name: 'conditional',\n roles: ['action', 'condition'] as SemanticRole[],\n english: '{action} {condition} then ... end',\n },\n\n // fetch URL as type\n fetchAs: {\n name: 'fetch-as',\n roles: ['action', 'source', 'method'] as SemanticRole[],\n english: '{action} {source} as {method}',\n },\n\n // show element with animation\n showWith: {\n name: 'show-with',\n roles: ['action', 'patient', 'style'] as SemanticRole[],\n english: '{action} {patient} with {style}',\n },\n\n // transition property over duration\n transitionOver: {\n name: 'transition-over',\n roles: ['action', 'patient', 'duration'] as SemanticRole[],\n english: '{action} {patient} over {duration}',\n },\n} as const;\n\n// =============================================================================\n// Language Family Defaults\n// =============================================================================\n\n/**\n * Default profiles for major language families\n * Individual languages inherit and override these\n */\nexport const LANGUAGE_FAMILY_DEFAULTS: Record<string, Partial<LanguageProfile>> = {\n // Germanic (English, German, Dutch)\n germanic: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Romance (Spanish, French, Italian, Portuguese)\n romance: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Japonic (Japanese)\n japonic: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Koreanic (Korean)\n koreanic: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Turkic (Turkish, Azerbaijani)\n turkic: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Sinitic (Chinese, Cantonese)\n sinitic: {\n wordOrder: 'SVO', // Topic-prominent, flexible\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Semitic (Arabic, Hebrew)\n semitic: {\n wordOrder: 'VSO',\n adpositionType: 'preposition',\n morphology: 'fusional', // Root-pattern system\n direction: 'rtl',\n canonicalOrder: [\n 'action',\n 'agent',\n 'patient',\n 'destination',\n 'source',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Austronesian (Indonesian, Tagalog)\n austronesian: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Quechuan (Quechua)\n quechuan: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative', // Actually polysynthetic but simplified\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Bantu (Swahili)\n bantu: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n};\n\n// =============================================================================\n// Transformation Utilities\n// =============================================================================\n\n/**\n * Reorder semantic roles according to target language.\n * Includes a safety net to append any roles present in input\n * but missing from the target order, preventing data loss.\n */\nexport function reorderRoles(\n roles: Map<SemanticRole, ParsedElement>,\n targetOrder: SemanticRole[]\n): ParsedElement[] {\n const result: ParsedElement[] = [];\n const usedRoles = new Set<SemanticRole>();\n\n // 1. Add roles that are explicitly in the canonical order\n for (const role of targetOrder) {\n const element = roles.get(role);\n if (element) {\n result.push(element);\n usedRoles.add(role);\n }\n }\n\n // 2. Safety Net: Append any roles present in input but missing from target order\n // This prevents data loss (e.g., if 'manner' or 'instrument' isn't in the profile)\n for (const [role, element] of roles) {\n if (!usedRoles.has(role)) {\n result.push(element);\n }\n }\n\n return result;\n}\n\n/**\n * Insert grammatical markers between elements\n */\nexport function insertMarkers(\n elements: ParsedElement[],\n markers: GrammaticalMarker[],\n adpositionType: AdpositionType\n): string[] {\n const result: string[] = [];\n\n for (const element of elements) {\n let marker = markers.find(m => m.role === element.role);\n\n // A selector-shaped \"event\" is never a trigger. It's the dangling target of\n // a locative `on` (`set @role to \"alert\" on #sr-announce`) that\n // splitOnCommandBoundaries splits off as a headless pseudo-handler (set/put\n // are deliberately NOT in ON_TARGET_COMMANDS — dual-destination collision).\n // Emitting the event marker after it (ko 할 때, ja で, bn এ, tr de) plants a\n // spurious mid-stream event anchor in the emission; suppress the marker and\n // emit the bare selector, which body parsers skip harmlessly.\n if (marker?.role === 'event' && /^[#.<@[]/.test(element.translated || element.value)) {\n marker = undefined;\n }\n\n // A pronoun-valued \"duration\" is never a time expression. It's the target\n // phrase of `take … for me` (en maps `for` → duration lexically), kept\n // in-clause by splitOnCommandBoundaries' loop-head guard. Emitting the\n // duration marker after it (bn জন্য — also bn's `for` loop keyword) anchors\n // a spurious `for` command in the semantic parse; suppress the marker and\n // emit the bare pronoun, which take-pattern matchers skip harmlessly.\n if (marker?.role === 'duration' && /^(me|you|it)$/i.test(element.value)) {\n marker = undefined;\n }\n\n if (marker) {\n if (adpositionType === 'preposition') {\n // Marker before element: \"to element\"\n if (marker.form) result.push(marker.form);\n result.push(element.translated || element.value);\n } else if (adpositionType === 'postposition') {\n // Marker after element: \"element を\"\n result.push(element.translated || element.value);\n if (marker.form) result.push(marker.form);\n } else {\n result.push(element.translated || element.value);\n }\n } else {\n result.push(element.translated || element.value);\n }\n }\n\n return result;\n}\n\n/**\n * Intelligently joins tokens, handling agglutinative suffixes and prefixes.\n *\n * Rules:\n * 1. If a token ends with '-' (prefix marker), no space after it\n * 2. If a token starts with '-' (suffix marker), no space before it\n * 3. Removes the hyphen indicators from the final output\n *\n * Examples:\n * - ['#count', '-ta'] → '#countta' (Quechua accusative suffix)\n * - ['بـ-', 'الماوس'] → 'بـالماوس' (Arabic prefix attachment)\n * - ['value', 'を'] → 'value を' (Japanese particle, normal spacing)\n */\nexport function joinTokens(tokens: string[]): string {\n if (tokens.length === 0) return '';\n\n let result = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n\n // Check if current token is a prefix (ends with -)\n const isPrefix = token.endsWith('-');\n // Check if current token is a suffix (starts with -)\n const isSuffix = token.startsWith('-');\n\n // Get the display form (strip hyphen markers)\n let displayToken = token;\n if (isPrefix) displayToken = token.slice(0, -1);\n if (isSuffix) displayToken = token.substring(1);\n\n result += displayToken;\n\n // Determine if we need a space before the next token\n if (nextToken) {\n const nextIsSuffix = nextToken.startsWith('-');\n\n // Don't add space if:\n // - Current token is a prefix (ends with -)\n // - Next token is a suffix (starts with -)\n if (!isPrefix && !nextIsSuffix) {\n result += ' ';\n }\n }\n }\n\n return result;\n}\n\n/**\n * Transform a parsed statement to target language\n */\nexport function transformStatement(\n parsed: ParsedStatement,\n _sourceProfile: LanguageProfile,\n targetProfile: LanguageProfile\n): string {\n // 1. Reorder roles for target language\n const reordered = reorderRoles(parsed.roles, targetProfile.canonicalOrder);\n\n // 2. Insert grammatical markers\n const withMarkers = insertMarkers(reordered, targetProfile.markers, targetProfile.adpositionType);\n\n // 3. Join with intelligent spacing for agglutinative languages\n // (handles suffixes like -ta, prefixes like بـ-, etc.)\n return joinTokens(withMarkers);\n}\n","/**\n * Language Profiles Index\n *\n * Concrete implementations of LanguageProfile for supported languages.\n * Each profile inherits from a language family default and adds\n * language-specific markers and rules.\n */\n\nimport type { LanguageProfile, SemanticRole } from '../types';\nimport { reorderRoles, insertMarkers } from '../types';\n\n// =============================================================================\n// English (Reference Language)\n// =============================================================================\n\nexport const englishProfile: LanguageProfile = {\n code: 'en',\n name: 'English',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: [\n 'event',\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n\n markers: [\n { form: 'on', role: 'event', position: 'preposition', required: true },\n { form: 'to', role: 'destination', position: 'preposition', required: false },\n { form: 'into', role: 'destination', position: 'preposition', required: false },\n { form: 'from', role: 'source', position: 'preposition', required: false },\n { form: 'with', role: 'style', position: 'preposition', required: false },\n { form: 'by', role: 'quantity', position: 'preposition', required: false },\n { form: 'as', role: 'method', position: 'preposition', required: false },\n { form: 'over', role: 'duration', position: 'preposition', required: false },\n { form: 'for', role: 'duration', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Japanese (SOV, Postpositions)\n// =============================================================================\n\nexport const japaneseProfile: LanguageProfile = {\n code: 'ja',\n name: '日本語',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n // Japanese: Object comes before verb, markers follow nouns\n // \"on click increment #count\" → \"#count を クリック で 増加\"\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Particles (postpositions)\n { form: 'を', role: 'patient', position: 'postposition', required: true },\n { form: 'に', role: 'destination', position: 'postposition', required: true },\n { form: 'から', role: 'source', position: 'postposition', required: true },\n { form: 'で', role: 'event', position: 'postposition', required: true },\n { form: 'で', role: 'style', position: 'postposition', required: false },\n { form: 'と', role: 'style', position: 'postposition', required: false },\n { form: 'へ', role: 'destination', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Japanese SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n optionalRoles: ['patient'],\n },\n transform: {\n // #count を クリック で 増加\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Japanese order',\n priority: 90,\n match: {\n commands: ['put', '置く'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // X を Y に 置く\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Japanese verb-final order',\n priority: 90,\n match: {\n commands: ['set', '設定'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X を Y に 設定 — verb-final, matching the generated SOV set pattern\n // (markerOverride: を on the destination / に on the value). Default reorder\n // emitted verb-MEDIAL (`X を 設定 Y に`), unmatched by any set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Japanese verb-final order',\n priority: 90,\n match: {\n commands: ['bind', 'バインド'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var を #el に バインド\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Korean (SOV, Postpositions - similar to Japanese)\n// =============================================================================\n\nexport const koreanProfile: LanguageProfile = {\n code: 'ko',\n name: '한국어',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Korean particles (with vowel harmony variants)\n { form: '를', role: 'patient', position: 'postposition', required: true, alternatives: ['을'] },\n { form: '에', role: 'destination', position: 'postposition', required: true },\n { form: '에서', role: 'source', position: 'postposition', required: true },\n // Event marker — the semantic *-event-ko-sov-* patterns anchor on 할 때\n // (the generator profile's eventMarker); without it every ko handler\n // emitted a bare event name no fused pattern could anchor.\n { form: '할 때', role: 'event', position: 'postposition', required: true },\n {\n form: '로',\n role: 'style',\n position: 'postposition',\n required: false,\n alternatives: ['으로'],\n },\n { form: '와', role: 'style', position: 'postposition', required: false, alternatives: ['과'] },\n {\n form: '로',\n role: 'method',\n position: 'postposition',\n required: false,\n alternatives: ['으로'],\n }, // \"as\" - same as instrument\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Korean SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Korean verb-final order',\n priority: 90,\n match: {\n commands: ['put', '넣다'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Standalone put only (e.g. a then-chain clause): an event handler whose\n // action is `put` must keep the event mid-stream, so don't verb-final it.\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // X 를 Y 에 넣다 (patient, destination, verb-last)\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Korean verb-final order',\n priority: 90,\n match: {\n commands: ['set', '설정'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X 를 Y 에 설정 — verb-final, matching the generated SOV set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Korean verb-final order',\n priority: 90,\n match: {\n commands: ['bind', '바인드'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var 를 #el 에 바인드\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Chinese (SVO, Topic-Prominent)\n// =============================================================================\n\nexport const chineseProfile: LanguageProfile = {\n code: 'zh',\n name: '中文',\n\n wordOrder: 'SVO', // But topic-prominent allows flexibility\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n\n // Chinese typically uses topic-comment structure\n // Can front the object for emphasis: \"#count 在 点击时 增加\"\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: '当', role: 'event', position: 'preposition', required: true },\n { form: '时', role: 'event', position: 'postposition', required: true }, // Circumfix with 当\n { form: '把', role: 'patient', position: 'preposition', required: false }, // BA construction\n { form: '到', role: 'destination', position: 'preposition', required: false },\n { form: '从', role: 'source', position: 'preposition', required: false },\n { form: '用', role: 'style', position: 'preposition', required: false },\n { form: '的', role: 'method', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-standard',\n description: 'Standard event handler: 当 X 时 Y',\n priority: 100,\n match: {\n // Don't match commands - match by statement type having event role\n requiredRoles: ['event', 'action'],\n },\n transform: {\n // 当 EVENT 时 ACTION [patient] [destination] [source] [style] [method] ...\n roleOrder: ['event', 'action', 'patient'],\n insertMarkers: true,\n custom: (parsed, profile) => {\n // Handle 当...时 circumfix wrapping the event, then emit the action,\n // then any remaining roles in canonical order with their markers.\n // Earlier this function emitted only event/action/patient and silently\n // dropped destination, source, style, etc. — that produced truncated\n // output for `send X to Y`, `fetch /api with method:...`, etc.\n const event = parsed.roles.get('event');\n const action = parsed.roles.get('action');\n\n // Build the post-action role list using the canonical order minus\n // event/action, plus a safety net for any roles not in the order.\n const remaining = new Map(parsed.roles);\n remaining.delete('event');\n remaining.delete('action');\n\n const remainingOrder: SemanticRole[] = (profile.canonicalOrder || []).filter(\n r => r !== 'event' && r !== 'action'\n );\n const reordered = reorderRoles(remaining, remainingOrder);\n const markedTokens = insertMarkers(reordered, profile.markers, profile.adpositionType);\n\n const parts: string[] = ['当', event?.translated || event?.value || '', '时'];\n if (action) parts.push(action.translated || action.value);\n parts.push(...markedTokens);\n\n return parts.filter(Boolean).join(' ');\n },\n },\n },\n {\n name: 'ba-construction',\n description: 'BA construction for object-fronting: 把 X Y',\n priority: 80,\n match: {\n commands: ['put', 'set', 'move'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // 把 X 放 到 Y\n roleOrder: ['patient', 'action', 'destination'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Bind binds a variable to an element: 绑定 X 到 Y (no 把)',\n priority: 90,\n match: {\n commands: ['bind', '绑定'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // Plain SVO without the 把 object-fronting: the bound variable is the\n // semantic destination (not a fronted patient), and `到` marks the\n // target element. Custom so the patient does not pick up 把.\n roleOrder: ['action', 'patient', 'destination'],\n custom: parsed => {\n const action = parsed.roles.get('action');\n const patient = parsed.roles.get('patient');\n const destination = parsed.roles.get('destination');\n const verb = action?.translated || action?.value || '';\n const v = patient?.translated || patient?.value || '';\n const d = destination?.translated || destination?.value || '';\n return [verb, v, '到', d].filter(Boolean).join(' ');\n },\n },\n },\n ],\n};\n\n// =============================================================================\n// Arabic (VSO, RTL)\n// =============================================================================\n\nexport const arabicProfile: LanguageProfile = {\n code: 'ar',\n name: 'العربية',\n\n wordOrder: 'VSO',\n adpositionType: 'preposition',\n morphology: 'fusional', // Root-pattern morphology\n direction: 'rtl',\n\n // Arabic VSO: Verb first, then subject, then object\n canonicalOrder: ['action', 'agent', 'patient', 'destination', 'source'],\n\n markers: [\n { form: 'عند', role: 'event', position: 'preposition', required: true },\n { form: 'إلى', role: 'destination', position: 'preposition', required: false },\n { form: 'في', role: 'destination', position: 'preposition', required: false },\n { form: 'من', role: 'source', position: 'preposition', required: false },\n // بـ- notation: trailing hyphen indicates prefix that attaches without space\n { form: 'بـ-', role: 'style', position: 'preposition', required: false },\n { form: 'مع', role: 'style', position: 'preposition', required: false },\n // كـ- notation: \"as/like\" prefix for manner\n { form: 'كـ-', role: 'method', position: 'preposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-vso',\n description: 'VSO event handler: VERB TARGET عند EVENT',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n // زِد #count عند النقر (increment #count on click)\n roleOrder: ['action', 'patient', 'event'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Turkish (SOV, Agglutinative)\n// =============================================================================\n\nexport const turkishProfile: LanguageProfile = {\n code: 'tr',\n name: 'Türkçe',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Turkish case suffixes - using spaced form for tokenization\n // Note: Real Turkish attaches these as suffixes, but we use spaces\n // so the semantic tokenizer can properly parse them\n {\n form: 'i',\n role: 'patient',\n position: 'postposition',\n required: true,\n alternatives: ['ı', 'u', 'ü'],\n },\n {\n form: 'e',\n role: 'destination',\n position: 'postposition',\n required: true,\n alternatives: ['a'],\n },\n {\n form: 'den',\n role: 'source',\n position: 'postposition',\n required: true,\n alternatives: ['dan'],\n },\n { form: 'de', role: 'event', position: 'postposition', required: true, alternatives: ['da'] },\n { form: 'ile', role: 'style', position: 'postposition', required: false },\n { form: 'olarak', role: 'method', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-sov',\n description: 'SOV event handler',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Turkish verb-final order',\n priority: 90,\n match: {\n commands: ['put', 'koy'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Standalone put only (e.g. a then-chain clause): an event handler whose\n // action is `put` must keep the event mid-stream, so don't verb-final it.\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // X i Y e koy (patient, destination, verb-last)\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Turkish verb-final order',\n priority: 90,\n match: {\n commands: ['set', 'ayarla'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X i Y e ayarla — verb-final, matching the generated SOV set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Turkish verb-final order',\n priority: 90,\n match: {\n commands: ['bind'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var i #el e bağla\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Spanish (SVO, Romance)\n// =============================================================================\n\nexport const spanishProfile: LanguageProfile = {\n code: 'es',\n name: 'Español',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n // Event: \"En hacer clic\" or \"Al hacer clic\"\n { form: 'en', role: 'event', position: 'preposition', required: true },\n // Destination: Prioritize 'a' over 'en' to avoid collision with event marker\n { form: 'a', role: 'destination', position: 'preposition', required: false },\n { form: 'hacia', role: 'destination', position: 'preposition', required: false }, // \"Towards\"\n { form: 'de', role: 'source', position: 'preposition', required: false },\n { form: 'con', role: 'style', position: 'preposition', required: false },\n { form: 'por', role: 'quantity', position: 'preposition', required: false },\n { form: 'como', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// German (SVO, Germanic)\n// =============================================================================\n\nexport const germanProfile: LanguageProfile = {\n code: 'de',\n name: 'Deutsch',\n\n wordOrder: 'SVO', // V2 in main clauses, but SVO for our purposes\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'bei', role: 'event', position: 'preposition', required: true },\n { form: 'zu', role: 'destination', position: 'preposition', required: false },\n { form: 'in', role: 'destination', position: 'preposition', required: false },\n { form: 'von', role: 'source', position: 'preposition', required: false },\n { form: 'aus', role: 'source', position: 'preposition', required: false },\n { form: 'mit', role: 'style', position: 'preposition', required: false },\n { form: 'um', role: 'quantity', position: 'preposition', required: false },\n { form: 'als', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// French (SVO, Romance)\n// =============================================================================\n\nexport const frenchProfile: LanguageProfile = {\n code: 'fr',\n name: 'Français',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'sur', role: 'event', position: 'preposition', required: true },\n { form: 'à', role: 'destination', position: 'preposition', required: false },\n { form: 'dans', role: 'destination', position: 'preposition', required: false },\n { form: 'de', role: 'source', position: 'preposition', required: false },\n { form: 'avec', role: 'style', position: 'preposition', required: false },\n { form: 'par', role: 'quantity', position: 'preposition', required: false },\n { form: 'comme', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Portuguese (SVO, Romance)\n// =============================================================================\n\nexport const portugueseProfile: LanguageProfile = {\n code: 'pt',\n name: 'Português',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'em', role: 'event', position: 'preposition', required: true },\n { form: 'para', role: 'destination', position: 'preposition', required: false },\n { form: 'em', role: 'destination', position: 'preposition', required: false },\n { form: 'de', role: 'source', position: 'preposition', required: false },\n { form: 'com', role: 'style', position: 'preposition', required: false },\n { form: 'por', role: 'quantity', position: 'preposition', required: false },\n { form: 'como', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Indonesian (SVO, Austronesian)\n// =============================================================================\n\nexport const indonesianProfile: LanguageProfile = {\n code: 'id',\n name: 'Bahasa Indonesia',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'pada', role: 'event', position: 'preposition', required: true },\n { form: 'ke', role: 'destination', position: 'preposition', required: false },\n { form: 'dari', role: 'source', position: 'preposition', required: false },\n { form: 'dengan', role: 'style', position: 'preposition', required: false },\n { form: 'sebagai', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Malay (SVO, Austronesian) — grammar mirrors Indonesian (shared function words:\n// pada / ke / dari / dengan / sebagai). Without this profile the transformer threw\n// \"Unknown target locale: ms\", so no ms translation could be generated at all.\n// =============================================================================\n\nexport const malayProfile: LanguageProfile = {\n code: 'ms',\n name: 'Bahasa Melayu',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n // ms marks the event clause with `apabila` (\"when/on\") — matching the semantic\n // ms event-handler pattern (`apabila {event} {body}`) and the ms dict's\n // `on: apabila`. (Indonesian uses `pada` here; the two diverge on the event head.)\n { form: 'apabila', role: 'event', position: 'preposition', required: true },\n { form: 'ke', role: 'destination', position: 'preposition', required: false },\n { form: 'dari', role: 'source', position: 'preposition', required: false },\n { form: 'dengan', role: 'style', position: 'preposition', required: false },\n { form: 'sebagai', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Quechua (SOV, Quechuan)\n// =============================================================================\n\nexport const quechuaProfile: LanguageProfile = {\n code: 'qu',\n name: 'Runasimi',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative', // Actually polysynthetic\n direction: 'ltr',\n\n canonicalOrder: ['patient', 'source', 'destination', 'event', 'action'],\n\n markers: [\n // Quechua case suffixes - using spaced form for tokenization\n // Note: Real Quechua attaches these as suffixes, but we use spaces\n // so the semantic tokenizer can properly parse them\n { form: 'ta', role: 'patient', position: 'postposition', required: true },\n { form: 'man', role: 'destination', position: 'postposition', required: true },\n { form: 'manta', role: 'source', position: 'postposition', required: true },\n { form: 'pi', role: 'event', position: 'postposition', required: true },\n { form: 'wan', role: 'style', position: 'postposition', required: false },\n { form: 'hina', role: 'method', position: 'postposition', required: false }, // \"as/like\"\n ],\n};\n\n// =============================================================================\n// Swahili (SVO, Bantu)\n// =============================================================================\n\nexport const swahiliProfile: LanguageProfile = {\n code: 'sw',\n name: 'Kiswahili',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'kwenye', role: 'event', position: 'preposition', required: true },\n { form: 'kwa', role: 'destination', position: 'preposition', required: false },\n { form: 'kutoka', role: 'source', position: 'preposition', required: false },\n { form: 'na', role: 'style', position: 'preposition', required: false },\n // `kuwa`, not `kama`: sw `kama` is the IF keyword — rendering the method\n // role (\"as X\") with it grew a phantom `if` at semantic parse time. See the\n // matching comment in dictionaries/sw.ts (modifiers.as).\n { form: 'kuwa', role: 'method', position: 'preposition', required: false }, // \"as/become\"\n ],\n};\n\n// =============================================================================\n// Bengali (SOV, Postpositions - similar to Japanese/Korean)\n// =============================================================================\n\nexport const bengaliProfile: LanguageProfile = {\n code: 'bn',\n name: 'বাংলা',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n // Bengali: Object comes before verb, postpositions follow nouns\n // \"on click increment #count\" → \"#count কে ক্লিক এ বৃদ্ধি\"\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Postpositions\n { form: 'কে', role: 'patient', position: 'postposition', required: true },\n { form: 'তে', role: 'destination', position: 'postposition', required: true },\n { form: 'এ', role: 'event', position: 'postposition', required: true },\n { form: 'থেকে', role: 'source', position: 'postposition', required: true },\n { form: 'দিয়ে', role: 'style', position: 'postposition', required: false },\n { form: 'জন্য', role: 'duration', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Bengali SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n optionalRoles: ['patient'],\n },\n transform: {\n // #count কে ক্লিক এ বৃদ্ধি\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Bengali verb-final order',\n priority: 90,\n match: {\n commands: ['put', 'রাখুন'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Standalone put only (e.g. a then-chain clause): an event handler whose\n // action is `put` must keep the event mid-stream, so don't verb-final it.\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // X কে Y তে রাখুন (patient, destination, verb-last)\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Bengali verb-final order',\n priority: 90,\n match: {\n commands: ['set', 'সেট'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X কে Y তে সেট — verb-final, matching the generated SOV set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Bengali verb-final order',\n priority: 90,\n match: {\n commands: ['bind', 'বাইন্ড'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var কে #el তে বাইন্ড\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Italian (SVO, Romance)\n// =============================================================================\n\nexport const italianProfile: LanguageProfile = {\n code: 'it',\n name: 'Italiano',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'su', role: 'event', position: 'preposition', required: true },\n { form: 'in', role: 'destination', position: 'preposition', required: false },\n { form: 'a', role: 'destination', position: 'preposition', required: false },\n { form: 'da', role: 'source', position: 'preposition', required: false },\n { form: 'di', role: 'source', position: 'preposition', required: false },\n { form: 'con', role: 'style', position: 'preposition', required: false },\n { form: 'come', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Russian (SVO, Slavic)\n// =============================================================================\n\nexport const russianProfile: LanguageProfile = {\n code: 'ru',\n name: 'Русский',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'при', role: 'event', position: 'preposition', required: true },\n { form: 'в', role: 'destination', position: 'preposition', required: false },\n { form: 'на', role: 'destination', position: 'preposition', required: false },\n { form: 'к', role: 'destination', position: 'preposition', required: false },\n { form: 'из', role: 'source', position: 'preposition', required: false },\n { form: 'от', role: 'source', position: 'preposition', required: false },\n { form: 'с', role: 'source', position: 'preposition', required: false },\n { form: 'с', role: 'style', position: 'preposition', required: false },\n { form: 'со', role: 'style', position: 'preposition', required: false },\n { form: 'как', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Ukrainian (SVO, Slavic)\n// =============================================================================\n\nexport const ukrainianProfile: LanguageProfile = {\n code: 'uk',\n name: 'Українська',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'при', role: 'event', position: 'preposition', required: true },\n { form: 'в', role: 'destination', position: 'preposition', required: false },\n { form: 'на', role: 'destination', position: 'preposition', required: false },\n { form: 'до', role: 'destination', position: 'preposition', required: false },\n { form: 'з', role: 'source', position: 'preposition', required: false },\n { form: 'від', role: 'source', position: 'preposition', required: false },\n { form: 'із', role: 'source', position: 'preposition', required: false },\n { form: 'з', role: 'style', position: 'preposition', required: false },\n { form: 'із', role: 'style', position: 'preposition', required: false },\n { form: 'як', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Vietnamese (SVO, Isolating)\n// =============================================================================\n\nexport const vietnameseProfile: LanguageProfile = {\n code: 'vi',\n name: 'Tiếng Việt',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'khi', role: 'event', position: 'preposition', required: true },\n { form: 'vào', role: 'destination', position: 'preposition', required: false },\n { form: 'cho', role: 'destination', position: 'preposition', required: false },\n { form: 'đến', role: 'destination', position: 'preposition', required: false },\n { form: 'từ', role: 'source', position: 'preposition', required: false },\n { form: 'khỏi', role: 'source', position: 'preposition', required: false },\n { form: 'với', role: 'style', position: 'preposition', required: false },\n { form: 'như', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Hindi (SOV, Postpositions)\n// =============================================================================\n\nexport const hindiProfile: LanguageProfile = {\n code: 'hi',\n name: 'हिन्दी',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n // Hindi: Object comes before verb, postpositions follow nouns\n // \"on click increment #count\" → \"#count को क्लिक पर बढ़ाएं\"\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n { form: 'को', role: 'patient', position: 'postposition', required: true },\n { form: 'में', role: 'destination', position: 'postposition', required: true },\n { form: 'पर', role: 'destination', position: 'postposition', required: false },\n { form: 'पर', role: 'event', position: 'postposition', required: true },\n { form: 'से', role: 'source', position: 'postposition', required: true },\n { form: 'से', role: 'style', position: 'postposition', required: false },\n { form: 'साथ', role: 'style', position: 'postposition', required: false },\n { form: 'के रूप में', role: 'method', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Hindi SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n optionalRoles: ['patient'],\n },\n transform: {\n // #count को क्लिक पर बढ़ाएं\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Hindi verb-final order',\n priority: 90,\n match: {\n commands: ['put', 'रखें'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // \"hi\" को #out में रखें\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Hindi verb-final order',\n priority: 90,\n match: {\n commands: ['set', 'सेट'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // #x.innerText को इसका.name में सेट — verb-final, matching the generated\n // SOV set pattern (set schema markerOverride puts को on the destination /\n // में on the value). The default reorder emitted verb-MEDIAL\n // (`#x को सेट … में`), which no set pattern matched → bare-event fallback.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Hindi verb-final order',\n priority: 90,\n match: {\n commands: ['bind', 'बाइंड', 'बांधें'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $greeting को #name-input में bind — verb-final, matching the generated SOV\n // bind pattern (`{destination} को {source} में bind`). The default reorder\n // emitted verb-MEDIAL (`$greeting को bind #name-input में`), which the\n // verb-final pattern never matched → the bare-event fallback mis-anchored\n // the fronted `$greeting` as a phantom `on` event (the rf=0.00 bind residue).\n // ja/ko/zh/tr/bn already carry this rule; hi was the only SOV gap.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Tagalog (VSO, Prepositions)\n// =============================================================================\n\nexport const tagalogProfile: LanguageProfile = {\n code: 'tl',\n name: 'Tagalog',\n\n wordOrder: 'VSO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n // Tagalog VSO: Verb first, then subject, then object\n canonicalOrder: ['action', 'agent', 'patient', 'destination', 'source'],\n\n markers: [\n { form: 'kapag', role: 'event', position: 'preposition', required: true },\n { form: 'sa', role: 'destination', position: 'preposition', required: false },\n // mula_sa (underscore) matches the tl dict and the semantic profile's\n // source marker — the spaced form emitted two tokens the generated\n // patterns' single mula_sa literal could never match, so `remove X\n // mula sa Y` lost its source and the schema default fabricated me.\n { form: 'mula_sa', role: 'source', position: 'preposition', required: false },\n { form: 'nang', role: 'style', position: 'preposition', required: false },\n { form: 'bilang', role: 'method', position: 'preposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-vso',\n description: 'VSO event handler: VERB TARGET kapag EVENT',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n // palitan #count kapag click (toggle #count on click)\n roleOrder: ['action', 'patient', 'event'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Thai (SVO, Isolating, No Spaces)\n// =============================================================================\n\nexport const thaiProfile: LanguageProfile = {\n code: 'th',\n name: 'ไทย',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'เมื่อ', role: 'event', position: 'preposition', required: true },\n { form: 'ใน', role: 'destination', position: 'preposition', required: false },\n { form: 'ไปยัง', role: 'destination', position: 'preposition', required: false },\n { form: 'จาก', role: 'source', position: 'preposition', required: false },\n { form: 'ด้วย', role: 'style', position: 'preposition', required: false },\n { form: 'เป็น', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Polish (SVO, Fusional, Imperative)\n// =============================================================================\n\nexport const polishProfile: LanguageProfile = {\n code: 'pl',\n name: 'Polski',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'gdy', role: 'event', position: 'preposition', required: true },\n { form: 'przy', role: 'event', position: 'preposition', required: false },\n { form: 'do', role: 'destination', position: 'preposition', required: false },\n { form: 'w', role: 'destination', position: 'preposition', required: false },\n { form: 'na', role: 'destination', position: 'preposition', required: false },\n { form: 'z', role: 'source', position: 'preposition', required: false },\n { form: 'od', role: 'source', position: 'preposition', required: false },\n { form: 'ze', role: 'source', position: 'preposition', required: false },\n { form: 'z', role: 'style', position: 'preposition', required: false },\n { form: 'ze', role: 'style', position: 'preposition', required: false },\n { form: 'jako', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Hebrew (SVO, RTL, Prepositions)\n// =============================================================================\n\nexport const hebrewProfile: LanguageProfile = {\n code: 'he',\n name: 'עברית',\n\n wordOrder: 'SVO', // Modern Hebrew is predominantly SVO (Biblical Hebrew was VSO)\n adpositionType: 'preposition',\n morphology: 'fusional', // Root-and-pattern (Semitic), like Arabic\n direction: 'rtl',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n // Hebrew uses single-letter prefix prepositions (ב, ל, מ, כ) that attach to\n // the following word. For tokenization we treat them as spaced forms.\n markers: [\n { form: 'ב', role: 'event', position: 'preposition', required: true },\n { form: 'על', role: 'destination', position: 'preposition', required: false },\n { form: 'אל', role: 'destination', position: 'preposition', required: false },\n { form: 'ל', role: 'destination', position: 'preposition', required: false },\n { form: 'את', role: 'patient', position: 'preposition', required: false }, // Direct object marker\n { form: 'מ', role: 'source', position: 'preposition', required: false },\n { form: 'מן', role: 'source', position: 'preposition', required: false },\n { form: 'עם', role: 'style', position: 'preposition', required: false },\n { form: 'כ', role: 'method', position: 'preposition', required: false },\n ],\n\n rules: [\n {\n name: 'bind-to',\n description: 'Bind binds a variable to an element: קשור X ל Y',\n priority: 90,\n match: {\n commands: ['bind', 'קשור'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // The bound variable is the semantic destination (kept bare, no את\n // object marker), and ל marks the target element. Custom so the\n // variable does not pick up את and the element uses ל (not על).\n roleOrder: ['action', 'patient', 'destination'],\n custom: parsed => {\n const action = parsed.roles.get('action');\n const patient = parsed.roles.get('patient');\n const destination = parsed.roles.get('destination');\n const verb = action?.translated || action?.value || '';\n const v = patient?.translated || patient?.value || '';\n const d = destination?.translated || destination?.value || '';\n return [verb, v, 'ל', d].filter(Boolean).join(' ');\n },\n },\n },\n ],\n};\n\n// =============================================================================\n// Profile Registry\n// =============================================================================\n\nexport const profiles: Record<string, LanguageProfile> = {\n en: englishProfile,\n ja: japaneseProfile,\n ko: koreanProfile,\n zh: chineseProfile,\n ar: arabicProfile,\n tr: turkishProfile,\n es: spanishProfile,\n de: germanProfile,\n fr: frenchProfile,\n pt: portugueseProfile,\n id: indonesianProfile,\n ms: malayProfile,\n qu: quechuaProfile,\n sw: swahiliProfile,\n bn: bengaliProfile,\n // New profiles\n it: italianProfile,\n ru: russianProfile,\n uk: ukrainianProfile,\n vi: vietnameseProfile,\n hi: hindiProfile,\n tl: tagalogProfile,\n th: thaiProfile,\n pl: polishProfile,\n he: hebrewProfile,\n};\n\nexport function getProfile(locale: string): LanguageProfile | undefined {\n return profiles[locale];\n}\n\nexport function getSupportedLocales(): string[] {\n return Object.keys(profiles);\n}\n","/**\n * Direct Language-Pair Mappings\n *\n * Enables translation between language pairs without English pivot.\n * This reduces error compounding and provides more natural translations\n * for closely related languages or those with shared vocabulary.\n *\n * Currently supported pairs:\n * - Japanese ↔ Chinese (shared Kanji concepts)\n * - Spanish ↔ Portuguese (Romance language mutual intelligibility)\n * - Korean ↔ Japanese (SOV grammar similarity)\n */\n\nimport type { Dictionary } from '../types';\nimport { ja } from '../dictionaries/ja';\nimport { zh } from '../dictionaries/zh';\nimport { ko } from '../dictionaries/ko';\n// Note: es and pt use hand-crafted mappings for better quality\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface DirectMapping {\n /** Source language code */\n source: string;\n /** Target language code */\n target: string;\n /** Word mappings: source word -> target word */\n words: Record<string, string>;\n /** Category mappings for structured translation */\n categories?: Record<string, Record<string, string>>;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Create reverse mapping from an existing mapping\n */\nfunction reverseMapping(mapping: DirectMapping): DirectMapping {\n const reversedWords: Record<string, string> = {};\n for (const [source, target] of Object.entries(mapping.words)) {\n reversedWords[target] = source;\n }\n\n const reversedCategories: Record<string, Record<string, string>> = {};\n if (mapping.categories) {\n for (const [category, words] of Object.entries(mapping.categories)) {\n reversedCategories[category] = {};\n for (const [source, target] of Object.entries(words)) {\n reversedCategories[category][target] = source;\n }\n }\n }\n\n const result: DirectMapping = {\n source: mapping.target,\n target: mapping.source,\n words: reversedWords,\n };\n\n if (Object.keys(reversedCategories).length > 0) {\n result.categories = reversedCategories;\n }\n\n return result;\n}\n\n/**\n * Build direct mapping from two dictionaries via English keys\n */\nfunction buildMappingFromDictionaries(\n sourceDict: Dictionary,\n targetDict: Dictionary,\n sourceCode: string,\n targetCode: string\n): DirectMapping {\n const words: Record<string, string> = {};\n const categories: Record<string, Record<string, string>> = {};\n\n // Map each category\n for (const category of [\n 'commands',\n 'modifiers',\n 'events',\n 'logical',\n 'temporal',\n 'values',\n 'attributes',\n ] as const) {\n const sourceCategory = sourceDict[category] as Record<string, string> | undefined;\n const targetCategory = targetDict[category] as Record<string, string> | undefined;\n\n if (sourceCategory && targetCategory) {\n categories[category] = {};\n\n for (const [englishKey, sourceWord] of Object.entries(sourceCategory)) {\n const targetWord = targetCategory[englishKey];\n if (targetWord && sourceWord !== targetWord) {\n words[sourceWord] = targetWord;\n categories[category][sourceWord] = targetWord;\n }\n }\n }\n }\n\n return {\n source: sourceCode,\n target: targetCode,\n words,\n categories,\n };\n}\n\n// =============================================================================\n// Japanese ↔ Chinese Direct Mapping\n// =============================================================================\n\n/**\n * Japanese to Chinese mapping\n *\n * These languages share many concepts through Kanji/Hanzi,\n * making direct translation more accurate than pivot translation.\n */\nexport const jaZhMapping: DirectMapping = buildMappingFromDictionaries(ja, zh, 'ja', 'zh');\n\n/**\n * Chinese to Japanese mapping (reverse of jaZh)\n */\nexport const zhJaMapping: DirectMapping = reverseMapping(jaZhMapping);\n\n// =============================================================================\n// Korean ↔ Japanese Direct Mapping\n// =============================================================================\n\n/**\n * Korean to Japanese mapping\n *\n * Both are SOV languages with postposition particles,\n * sharing grammatical structure that enables more natural translation.\n */\nexport const koJaMapping: DirectMapping = buildMappingFromDictionaries(ko, ja, 'ko', 'ja');\n\n/**\n * Japanese to Korean mapping (reverse of koJa)\n */\nexport const jaKoMapping: DirectMapping = reverseMapping(koJaMapping);\n\n// =============================================================================\n// Spanish ↔ Portuguese Direct Mapping\n// =============================================================================\n\n/**\n * Spanish to Portuguese mapping\n *\n * These Romance languages have high mutual intelligibility,\n * with many cognates that translate directly.\n */\nexport const esPtMapping: DirectMapping = {\n source: 'es',\n target: 'pt',\n words: {\n // Commands - many are cognates\n en: 'em', // on (event)\n decir: 'dizer', // tell\n disparar: 'disparar', // trigger\n enviar: 'enviar', // send\n tomar: 'pegar', // take\n poner: 'colocar', // put\n establecer: 'definir', // set\n obtener: 'obter', // get\n agregar: 'adicionar', // add\n quitar: 'remover', // remove\n alternar: 'alternar', // toggle\n ocultar: 'esconder', // hide\n mostrar: 'mostrar', // show\n si: 'se', // if\n menos: 'a menos', // unless\n repetir: 'repetir', // repeat\n para: 'para', // for\n mientras: 'enquanto', // while\n hasta: 'até', // until\n continuar: 'continuar', // continue\n romper: 'parar', // break\n detener: 'parar', // halt\n esperar: 'esperar', // wait\n buscar: 'buscar', // fetch\n llamar: 'chamar', // call\n retornar: 'retornar', // return\n hacer: 'fazer', // make\n registrar: 'registrar', // log\n lanzar: 'lançar', // throw\n atrapar: 'capturar', // catch\n medir: 'medir', // measure\n transición: 'transição', // transition\n incrementar: 'incrementar', // increment\n decrementar: 'decrementar', // decrement\n predeterminar: 'padrão', // default\n ir: 'ir', // go\n copiar: 'copiar', // copy\n escoger: 'escolher', // pick\n intercambiar: 'trocar', // swap\n transformar: 'transformar', // morph\n añadir: 'anexar', // append\n salir: 'sair', // exit\n\n // Modifiers\n a: 'para', // to\n de: 'de', // from\n dentro: 'em', // into\n con: 'com', // with\n como: 'como', // as\n por: 'por', // by\n\n // Events\n clic: 'clique', // click\n cambio: 'mudança', // change\n entrada: 'entrada', // input\n envío: 'envio', // submit\n carga: 'carregar', // load\n enfoque: 'foco', // focus\n desenfoque: 'desfoque', // blur\n\n // Logical\n verdadero: 'verdadeiro', // true\n falso: 'falso', // false\n y: 'e', // and\n o: 'ou', // or\n no: 'não', // not\n es: 'é', // is\n\n // Temporal\n segundos: 'segundos', // seconds\n milisegundos: 'milissegundos', // milliseconds\n\n // Values\n nulo: 'nulo', // null\n indefinido: 'indefinido', // undefined\n vacío: 'vazio', // empty\n },\n categories: {\n commands: {\n en: 'em',\n decir: 'dizer',\n tomar: 'pegar',\n poner: 'colocar',\n establecer: 'definir',\n obtener: 'obter',\n agregar: 'adicionar',\n quitar: 'remover',\n ocultar: 'esconder',\n si: 'se',\n mientras: 'enquanto',\n hasta: 'até',\n romper: 'parar',\n detener: 'parar',\n llamar: 'chamar',\n hacer: 'fazer',\n lanzar: 'lançar',\n atrapar: 'capturar',\n escoger: 'escolher',\n intercambiar: 'trocar',\n añadir: 'anexar',\n salir: 'sair',\n },\n events: {\n clic: 'clique',\n cambio: 'mudança',\n carga: 'carregar',\n enfoque: 'foco',\n desenfoque: 'desfoque',\n },\n logical: {\n verdadero: 'verdadeiro',\n y: 'e',\n o: 'ou',\n no: 'não',\n es: 'é',\n },\n },\n};\n\n/**\n * Portuguese to Spanish mapping (reverse of esPt)\n */\nexport const ptEsMapping: DirectMapping = reverseMapping(esPtMapping);\n\n// =============================================================================\n// Mapping Registry\n// =============================================================================\n\n/**\n * Registry of direct translation pairs.\n * Key format: \"source->target\" (e.g., \"ja->zh\")\n */\nexport const directMappings: Map<string, DirectMapping> = new Map([\n // Japanese ↔ Chinese\n ['ja->zh', jaZhMapping],\n ['zh->ja', zhJaMapping],\n\n // Korean ↔ Japanese\n ['ko->ja', koJaMapping],\n ['ja->ko', jaKoMapping],\n\n // Spanish ↔ Portuguese\n ['es->pt', esPtMapping],\n ['pt->es', ptEsMapping],\n]);\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Check if direct mapping exists for a language pair\n */\nexport function hasDirectMapping(source: string, target: string): boolean {\n return directMappings.has(`${source}->${target}`);\n}\n\n/**\n * Get direct mapping for a language pair\n */\nexport function getDirectMapping(source: string, target: string): DirectMapping | undefined {\n return directMappings.get(`${source}->${target}`);\n}\n\n/**\n * Translate a single word using direct mapping\n */\nexport function translateWordDirect(\n word: string,\n source: string,\n target: string\n): string | undefined {\n const mapping = getDirectMapping(source, target);\n if (!mapping) return undefined;\n return mapping.words[word];\n}\n\n/**\n * Get all supported direct translation pairs\n */\nexport function getSupportedDirectPairs(): Array<{ source: string; target: string }> {\n return Array.from(directMappings.keys()).map(key => {\n const [source, target] = key.split('->');\n return { source, target };\n });\n}\n","/**\n * Dictionary Index\n *\n * Exports dictionaries for all supported languages.\n * Each dictionary maps English canonical keywords to locale-specific translations\n * across 8 categories: commands, modifiers, events, logical, temporal, values,\n * attributes, and expressions.\n *\n * Derivation utilities (deriveFromProfile, createEnglishDictionary) are available\n * for generating dictionaries from semantic language profiles. See ./derive.ts.\n */\n\nimport { Dictionary } from '../types';\n\n// Import per-language dictionaries\nimport { en as enDict } from './en';\nimport { es as esDict } from './es';\nimport { ko as koDict } from './ko';\nimport { zh as zhDict } from './zh';\nimport { fr as frDict } from './fr';\nimport { de as deDict } from './de';\nimport { ja as jaDict } from './ja';\nimport { ar as arDict } from './ar';\nimport { tr as trDict } from './tr';\nimport { id as idDict } from './id';\nimport { qu as quDict } from './qu';\nimport { sw as swDict } from './sw';\nimport { pt as ptDict } from './pt';\nimport { it as itDict } from './it';\nimport { vi as viDict } from './vi';\nimport { pl as plDict } from './pl';\nimport { russianDictionary as ruDict } from './ru';\nimport { ukrainianDictionary as ukDict } from './uk';\nimport { hindiDictionary as hiDict } from './hi';\nimport { bengaliDictionary as bnDict } from './bn';\nimport { thaiDictionary as thDict } from './th';\nimport { malayDictionary as msDict } from './ms';\nimport { tagalogDictionary as tlDict } from './tl';\nimport { he as heDict } from './he';\n\n// =============================================================================\n// Dictionary Exports\n// =============================================================================\n\n/** English dictionary */\nexport const en: Dictionary = enDict;\n/** Spanish dictionary */\nexport const es: Dictionary = esDict;\n/** Japanese dictionary */\nexport const ja: Dictionary = jaDict;\n/** Korean dictionary */\nexport const ko: Dictionary = koDict;\n/** Chinese dictionary */\nexport const zh: Dictionary = zhDict;\n/** French dictionary */\nexport const fr: Dictionary = frDict;\n/** German dictionary */\nexport const de: Dictionary = deDict;\n/** Arabic dictionary */\nexport const ar: Dictionary = arDict;\n/** Turkish dictionary */\nexport const tr: Dictionary = trDict;\n/** Indonesian dictionary */\nexport const id: Dictionary = idDict;\n/** Portuguese dictionary */\nexport const pt: Dictionary = ptDict;\n/** Quechua dictionary */\nexport const qu: Dictionary = quDict;\n/** Swahili dictionary */\nexport const sw: Dictionary = swDict;\n/** Italian dictionary */\nexport const it: Dictionary = itDict;\n/** Vietnamese dictionary */\nexport const vi: Dictionary = viDict;\n/** Polish dictionary */\nexport const pl: Dictionary = plDict;\n/** Russian dictionary */\nexport const ru: Dictionary = ruDict;\n/** Ukrainian dictionary */\nexport const uk: Dictionary = ukDict;\n/** Hindi dictionary */\nexport const hi: Dictionary = hiDict;\n/** Bengali dictionary */\nexport const bn: Dictionary = bnDict;\n/** Thai dictionary */\nexport const th: Dictionary = thDict;\n/** Malay dictionary */\nexport const ms: Dictionary = msDict;\n/** Tagalog dictionary */\nexport const tl: Dictionary = tlDict;\n/** Hebrew dictionary */\nexport const he: Dictionary = heDict;\n\n// =============================================================================\n// Dictionary Registry\n// =============================================================================\n\n/**\n * All available dictionaries indexed by locale code.\n */\nexport const dictionaries: Record<string, Dictionary> = {\n en,\n es,\n ko,\n zh,\n fr,\n de,\n ja,\n ar,\n tr,\n id,\n qu,\n sw,\n pt,\n it,\n vi,\n pl,\n ru,\n uk,\n hi,\n bn,\n th,\n ms,\n tl,\n he,\n};\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Get all supported locale codes.\n */\nexport const supportedLocales = Object.keys(dictionaries);\n\n/**\n * Check if a locale is supported.\n */\nexport const isLocaleSupported = (locale: string): boolean => {\n return locale in dictionaries;\n};\n\n/**\n * Get dictionary with fallback to another locale.\n */\nexport const getDictionary = (locale: string, fallback: string = 'en'): Dictionary | null => {\n return dictionaries[locale] || dictionaries[fallback] || null;\n};\n\n// =============================================================================\n// Derivation Utilities\n// =============================================================================\n\n/**\n * Re-export derivation utilities for generating dictionaries from semantic profiles.\n */\nexport { deriveFromProfile, createEnglishDictionary, validateDictionary } from './derive';\n","// packages/i18n/src/types.ts\n\n/**\n * Dictionary category names as a union type for type-safe access.\n */\nexport type DictionaryCategory =\n | 'commands'\n | 'modifiers'\n | 'events'\n | 'logical'\n | 'temporal'\n | 'values'\n | 'attributes'\n | 'expressions';\n\n/**\n * All valid dictionary categories.\n */\nexport const DICTIONARY_CATEGORIES: readonly DictionaryCategory[] = [\n 'commands',\n 'modifiers',\n 'events',\n 'logical',\n 'temporal',\n 'values',\n 'attributes',\n 'expressions',\n] as const;\n\n/**\n * Dictionary structure for i18n translations.\n * Maps English canonical keywords to locale-specific translations.\n *\n * Note: Index signature removed for stricter type safety.\n * Use DICTIONARY_CATEGORIES to iterate over categories.\n */\nexport interface Dictionary {\n commands: Record<string, string>;\n modifiers: Record<string, string>;\n events: Record<string, string>;\n logical: Record<string, string>;\n temporal: Record<string, string>;\n values: Record<string, string>;\n attributes: Record<string, string>;\n expressions: Record<string, string>;\n}\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\n/**\n * Type guard to check if a string is a valid dictionary category.\n */\nexport function isDictionaryCategory(key: string): key is DictionaryCategory {\n return DICTIONARY_CATEGORIES.includes(key as DictionaryCategory);\n}\n\n/**\n * Safely get a category from a dictionary with type narrowing.\n * Returns undefined if the category doesn't exist.\n */\nexport function getDictionaryCategory(\n dict: Dictionary,\n category: string\n): Record<string, string> | undefined {\n if (isDictionaryCategory(category)) {\n return dict[category];\n }\n return undefined;\n}\n\n/**\n * Iterate over all categories in a dictionary with proper typing.\n */\nexport function forEachCategory(\n dict: Dictionary,\n callback: (category: DictionaryCategory, entries: Record<string, string>) => void\n): void {\n for (const category of DICTIONARY_CATEGORIES) {\n callback(category, dict[category]);\n }\n}\n\n/**\n * Find a translation in any category of a dictionary.\n * Returns the English key if found, undefined otherwise.\n */\nexport function findInDictionary(\n dict: Dictionary,\n localizedWord: string\n): { category: DictionaryCategory; englishKey: string } | undefined {\n const normalized = localizedWord.toLowerCase();\n for (const category of DICTIONARY_CATEGORIES) {\n const entries = dict[category];\n for (const [english, localized] of Object.entries(entries)) {\n if (localized.toLowerCase() === normalized) {\n return { category, englishKey: english };\n }\n }\n }\n return undefined;\n}\n\n/**\n * Find a translation for an English word in any category.\n * Returns the localized word if found, undefined otherwise.\n */\nexport function translateFromEnglish(dict: Dictionary, englishWord: string): string | undefined {\n const normalized = englishWord.toLowerCase();\n for (const category of DICTIONARY_CATEGORIES) {\n const entries = dict[category];\n const translated = entries[normalized];\n if (translated) {\n return translated;\n }\n }\n return undefined;\n}\n\nexport interface I18nConfig {\n locale: string;\n fallbackLocale?: string;\n dictionaries?: Record<string, Dictionary>;\n detectLocale?: boolean;\n rtlLocales?: string[];\n preserveOriginalAttribute?: string;\n}\n\nexport interface TranslationOptions {\n from?: string;\n to: string;\n preserveOriginal?: boolean;\n validate?: boolean;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n coverage: {\n total: number;\n translated: number;\n missing: string[];\n };\n}\n\nexport interface ValidationError {\n type: 'missing' | 'invalid' | 'duplicate';\n key: string;\n message: string;\n}\n\nexport interface ValidationWarning {\n type: 'unused' | 'deprecated' | 'inconsistent';\n key: string;\n message: string;\n}\n\nexport interface LocaleMetadata {\n code: string;\n name: string;\n nativeName: string;\n rtl: boolean;\n pluralRules?: (n: number) => string;\n}\n\nexport interface TranslationContext {\n locale: string;\n direction: 'ltr' | 'rtl';\n dictionary: Dictionary;\n metadata: LocaleMetadata;\n}\n\nexport type TokenType =\n | 'command'\n | 'modifier'\n | 'event'\n | 'logical'\n | 'temporal'\n | 'value'\n | 'attribute'\n | 'expression'\n | 'identifier'\n | 'operator'\n | 'literal';\n\nexport interface Token {\n type: TokenType;\n value: string;\n translated?: string;\n position: {\n start: number;\n end: number;\n line: number;\n column: number;\n };\n}\n\nexport interface TranslationResult {\n translated: string;\n original?: string;\n tokens: Token[];\n locale: {\n from: string;\n to: string;\n };\n warnings?: string[];\n}\n","/**\n * Grammar-Aware Transformer\n *\n * Transforms hyperscript statements between languages using the\n * generalized grammar system. The key insight is that semantic\n * roles are universal - only their surface realization differs.\n */\n\nimport type {\n LanguageProfile,\n ParsedStatement,\n ParsedElement,\n SemanticRole,\n GrammarRule,\n LineMetadata,\n} from './types';\nimport { reorderRoles, insertMarkers, joinTokens } from './types';\nimport { getProfile, profiles } from './profiles';\nimport { hasDirectMapping, getDirectMapping } from './direct-mappings';\nimport { dictionaries } from '../dictionaries';\nimport { findInDictionary, translateFromEnglish } from '../types';\nimport {\n ENGLISH_MODIFIER_ROLES,\n ENGLISH_COMMANDS,\n COMMAND_PRIMARY_ROLES,\n CONDITIONAL_KEYWORDS,\n THEN_KEYWORDS,\n} from '../constants';\n\n// =============================================================================\n// Compound Statement Handling\n// =============================================================================\n\n/**\n * Get all command keywords including translated ones for a locale.\n */\nfunction getCommandKeywordsForLocale(locale: string): Set<string> {\n const keywords = new Set(ENGLISH_COMMANDS);\n\n // Add translated command keywords from dictionaries\n const dict = dictionaries[locale];\n if (dict?.commands) {\n Object.values(dict.commands).forEach(cmd => {\n if (typeof cmd === 'string') {\n keywords.add(cmd.toLowerCase());\n }\n });\n }\n\n return keywords;\n}\n\n/**\n * English copula forms. A command keyword IMMEDIATELY after one of these is a\n * predicate adjective, not a command verb: in `if my value is empty add .error\n * to me` the `empty` belongs to the condition (`empty` is also a hyperscript\n * command, v0.9.90). Without this guard the condition/body scans cut the\n * condition at `is` and displace the adjective into the body's argument zone,\n * where it anchors a spurious `empty-{lang}-generated` parse AND steals a\n * neighboring role (the empty ×8 bn/hi/tr family). Source-locale copulas are\n * added via the dictionary in `isPredicateAdjectivePosition`.\n */\nconst EN_COPULAS = ['is', 'are', 'was', 'were', 'am', 'be'];\n\nfunction getCopulasForLocale(locale: string): Set<string> {\n const copulas = new Set(EN_COPULAS);\n if (locale !== 'en') {\n for (const form of EN_COPULAS) {\n copulas.add(translateWord(form, 'en', locale).toLowerCase());\n }\n }\n return copulas;\n}\n\n/**\n * True when tokens[i] sits right after a copula — a predicate-adjective\n * position that must never be read as the start of a body command.\n */\nfunction isPredicateAdjectivePosition(tokens: string[], i: number, copulas: Set<string>): boolean {\n const prev = tokens[i - 1]?.toLowerCase();\n return !!prev && copulas.has(prev);\n}\n\n/**\n * Source-locale surface forms of the `for` command keyword and the loop's\n * `in` preposition, for the loop-head test below.\n */\nfunction getForLoopWordsForLocale(locale: string): { forWords: Set<string>; inWords: Set<string> } {\n const forWords = new Set(['for']);\n const inWords = new Set(['in']);\n if (locale !== 'en') {\n forWords.add(translateWord('for', 'en', locale).toLowerCase());\n inWords.add(translateWord('in', 'en', locale).toLowerCase());\n }\n return { forWords, inWords };\n}\n\n/**\n * True when a `for` at tokens[i] heads a real loop. Hyperscript's only\n * statement-head `for` is `for <var> in <iterable>`, so a `for` with no `in`\n * among the tokens before the next command keyword is a ROLE PHRASE — take's\n * target (`take .active from .tab-button for me`) or a duration (`for 2s`) —\n * and must never split the statement: the split shattered the phrase into a\n * dangling `then for me` clause, which six SOV languages then parsed as a\n * spurious `for` loop with patient \"me\" (the take-class ×6 family).\n */\nfunction isLoopHeadFor(\n tokens: string[],\n i: number,\n inWords: Set<string>,\n commandKeywords: Set<string>\n): boolean {\n for (let j = i + 1; j < tokens.length; j++) {\n const lt = tokens[j].toLowerCase();\n if (inWords.has(lt)) return true;\n if (commandKeywords.has(lt)) return false;\n }\n return false;\n}\n\n/**\n * Repair a FRONTED Hebrew accusative marker in transformed output.\n *\n * When an event-handler body leads with a command-modifier (`on click once add …`,\n * via {@link GrammarTransformer.tryTransformEventWithModifierBody}) or is a control\n * block (`on blur if … add … end`, via `tryTransformEventWithBlockBody`), the body\n * command's accusative marker את can be emitted AHEAD of its verb — `add .error to me`\n * renders `… את הוסף .error …` instead of the canonical `… הוסף את .error …`. את before\n * a verb is always ungrammatical Hebrew (it only ever marks a FOLLOWING definite\n * object), and the semantic parser drops the command in every parse path (fused-event,\n * multi-clause, conditional-body) when the marker is fronted but parses it when the\n * marker follows the verb. So an `<accusative-marker> <command-verb>` adjacency is a\n * pure transformer artifact: swap it back. Idempotent and safe — only touches `את\n * <verb>`, never the ~40 generated `<verb> את {patient}` patterns that embed את legitimately.\n */\nfunction repairHebrewFrontedAccusative(text: string): string {\n const ACC = 'את'; // hebrewProfile.markers patient marker\n const verbs = getCommandKeywordsForLocale('he');\n const tokens = text.split(/\\s+/);\n let changed = false;\n for (let i = 0; i + 1 < tokens.length; i++) {\n if (tokens[i] === ACC && verbs.has(tokens[i + 1].toLowerCase())) {\n [tokens[i], tokens[i + 1]] = [tokens[i + 1], tokens[i]];\n changed = true;\n i++; // skip the marker we just moved\n }\n }\n return changed ? tokens.join(' ') : text;\n}\n\n/**\n * Split a compound statement into parts at \"then\" boundaries, newlines,\n * AND command keyword boundaries.\n *\n * Example: \"on click wait 1s then increment #count then toggle .active\"\n * Returns: [\"on click wait 1s\", \"increment #count\", \"toggle .active\"]\n *\n * Example: \"on click\\n increment #count\\n toggle .highlight\"\n * Returns: [\"on click\", \"increment #count\", \"toggle .highlight\"]\n *\n * Example: \"wait 2s toggle .highlight\"\n * Returns: [\"wait 2s\", \"toggle .highlight\"]\n */\n/**\n * A reactive-block structure pulled apart by `extractBlockStructure`.\n * Block-syntactic tokens (head, optional condition expression, optional\n * connector, optional `end` tail) live outside the inner body so the\n * body can be transformed by the regular pipeline (SOV reordering,\n * possessives, etc.) without having block delimiters dragged into role\n * values or moved by the canonical-order reorder.\n */\ninterface BlockStructure {\n headKeyword: string;\n /** Condition expression for `when X changes Y` / `unless X Y`. */\n prefixExpr?: string;\n /** `changes` for `when`; undefined for `live`/`unless`. */\n connector?: string;\n body: string;\n /** `end` if the source had one; undefined otherwise. */\n tailKeyword?: string;\n}\n\n/**\n * Detect a reactive block (`live ... end`, `when X changes Y [end]`,\n * `unless X Y [end]`) and decompose it. Returns `null` when the input\n * is not a reactive block, when there's content after the matched\n * `end`, or when the heuristic can't locate a body — all of which fall\n * through to the standard `parseStatement` path.\n */\nfunction extractBlockStructure(input: string, sourceLocale: string): BlockStructure | null {\n const tokens = input.split(/\\s+/);\n const head = tokens[0]?.toLowerCase();\n if (!head || !BLOCK_HEAD_KEYWORDS.has(head)) return null;\n\n // Depth-aware match for the closing `end` so nested blocks\n // (`live when X changes Y end end`) slice correctly.\n let depth = 1;\n let endIdx = -1;\n for (let i = 1; i < tokens.length; i++) {\n const t = tokens[i].toLowerCase();\n if (BLOCK_HEAD_KEYWORDS.has(t)) depth++;\n else if (t === 'end') {\n depth--;\n if (depth === 0) {\n endIdx = i;\n break;\n }\n }\n }\n\n // If there's trailing content after the matched `end`, bail out and\n // let the existing splitter handle it. (`splitOnThen` normally\n // separates trailing code before we get here.)\n if (endIdx !== -1 && endIdx !== tokens.length - 1) return null;\n\n const inner = endIdx !== -1 ? tokens.slice(1, endIdx) : tokens.slice(1);\n const base: BlockStructure = { headKeyword: tokens[0], body: '' };\n if (endIdx !== -1) base.tailKeyword = tokens[endIdx];\n\n if (head === 'live') {\n return { ...base, body: inner.join(' ') };\n }\n\n if (head === 'when') {\n // Reactive: `when <expr> changes <body>`. Without `changes`, fall\n // through to the standard event-wait path (parseConditional).\n const idx = inner.findIndex(t => t.toLowerCase() === 'changes');\n if (idx >= 0) {\n return {\n ...base,\n prefixExpr: inner.slice(0, idx).join(' '),\n connector: inner[idx],\n body: inner.slice(idx + 1).join(' '),\n };\n }\n return null;\n }\n\n // `unless <cond> <body>`: condition runs up to the first command\n // keyword in `inner`. Heuristic — works because hyperscript bodies\n // always start with a command verb, and `unless` conditions rarely\n // contain bare command keywords as values. A candidate right after a\n // copula (`… is empty`) is a predicate adjective inside the condition,\n // not a body verb — skip it.\n const commands = getCommandKeywordsForLocale(sourceLocale);\n const copulas = getCopulasForLocale(sourceLocale);\n let bodyStart = -1;\n for (let i = 0; i < inner.length; i++) {\n if (commands.has(inner[i].toLowerCase()) && !isPredicateAdjectivePosition(inner, i, copulas)) {\n bodyStart = i;\n break;\n }\n }\n if (bodyStart <= 0) return null;\n return {\n ...base,\n prefixExpr: inner.slice(0, bodyStart).join(' '),\n body: inner.slice(bodyStart).join(' '),\n };\n}\n\nfunction splitCompoundStatement(input: string, sourceLocale: string): string[] {\n // First, split on newlines (preserving non-empty lines)\n const lines = input\n .split(/\\n/)\n .map(line => line.trim())\n .filter(line => line.length > 0);\n\n // If we have multiple lines, treat each as a separate part\n // (but still need to handle \"then\" within each line)\n const parts: string[] = [];\n\n for (const line of lines) {\n const lineParts = splitOnThen(line, sourceLocale);\n // Further split each part on command boundaries\n for (const part of lineParts) {\n const commandParts = splitOnCommandBoundaries(part, sourceLocale);\n parts.push(...commandParts);\n }\n }\n\n return parts;\n}\n\n// =============================================================================\n// Line Structure Preservation\n// =============================================================================\n\n/**\n * Result of splitting with preserved line metadata.\n */\ninterface SplitWithMetadataResult {\n /** The processed parts (commands/statements) */\n parts: string[];\n /** Metadata for each original line (for reconstruction) */\n lineMetadata: LineMetadata[];\n /** Mapping from parts back to their original line indices */\n partToLineIndex: number[];\n}\n\n/**\n * Split a compound statement while preserving line structure metadata.\n * This tracks indentation and blank lines for reconstruction.\n */\nfunction splitCompoundStatementWithMetadata(\n input: string,\n sourceLocale: string\n): SplitWithMetadataResult {\n const rawLines = input.split('\\n');\n const lineMetadata: LineMetadata[] = [];\n const parts: string[] = [];\n const partToLineIndex: number[] = [];\n\n for (let lineIndex = 0; lineIndex < rawLines.length; lineIndex++) {\n const rawLine = rawLines[lineIndex];\n\n // Capture leading whitespace\n const indentMatch = rawLine.match(/^(\\s*)/);\n const originalIndent = indentMatch ? indentMatch[1] : '';\n const trimmed = rawLine.trim();\n\n lineMetadata.push({\n content: trimmed,\n originalIndent,\n isBlank: trimmed.length === 0,\n });\n\n if (trimmed.length > 0) {\n // Process non-empty lines for \"then\" and command boundaries\n const lineParts = splitOnThen(trimmed, sourceLocale);\n for (const part of lineParts) {\n const commandParts = splitOnCommandBoundaries(part, sourceLocale);\n for (const cmdPart of commandParts) {\n parts.push(cmdPart);\n partToLineIndex.push(lineIndex);\n }\n }\n }\n }\n\n return { parts, lineMetadata, partToLineIndex };\n}\n\n/**\n * Normalize indentation to consistent 4-space levels.\n * Preserves relative indentation structure while standardizing spacing.\n */\nfunction normalizeIndentation(lineMetadata: LineMetadata[]): string[] {\n // Find non-blank lines with indentation\n const indentedLines = lineMetadata.filter(m => !m.isBlank && m.originalIndent.length > 0);\n\n if (indentedLines.length === 0) {\n // No indented lines, return empty strings\n return lineMetadata.map(() => '');\n }\n\n // Find minimum non-zero indent (the base unit)\n const indentLengths = indentedLines.map(m => {\n // Convert tabs to 4 spaces for consistent measurement\n const normalized = m.originalIndent.replace(/\\t/g, ' ');\n return normalized.length;\n });\n const minIndent = Math.min(...indentLengths);\n const baseUnit = minIndent > 0 ? minIndent : 4;\n\n // Normalize each line's indentation\n return lineMetadata.map(meta => {\n if (meta.isBlank) {\n return ''; // Blank lines get no indentation\n }\n if (meta.originalIndent.length === 0) {\n return ''; // No original indent\n }\n\n // Convert tabs and calculate level\n const normalized = meta.originalIndent.replace(/\\t/g, ' ');\n const level = Math.round(normalized.length / baseUnit);\n return ' '.repeat(level); // 4 spaces per level\n });\n}\n\n/**\n * Reconstruct output with preserved line structure.\n * Maps transformed parts back to their original lines with proper indentation.\n */\nfunction reconstructWithLineStructure(\n transformedParts: string[],\n lineMetadata: LineMetadata[],\n partToLineIndex: number[],\n targetThen: string\n): string {\n // If there's only one non-blank line, simple case\n const nonBlankCount = lineMetadata.filter(m => !m.isBlank).length;\n if (nonBlankCount <= 1 && transformedParts.length <= 1) {\n const normalizedIndents = normalizeIndentation(lineMetadata);\n const result: string[] = [];\n\n for (let i = 0; i < lineMetadata.length; i++) {\n if (lineMetadata[i].isBlank) {\n result.push('');\n } else if (transformedParts.length > 0) {\n result.push(normalizedIndents[i] + transformedParts[0]);\n }\n }\n return result.join('\\n');\n }\n\n // Normalize indentation\n const normalizedIndents = normalizeIndentation(lineMetadata);\n\n // Group transformed parts by their original line\n const partsPerLine: Map<number, string[]> = new Map();\n for (let i = 0; i < transformedParts.length; i++) {\n const lineIdx = partToLineIndex[i];\n if (!partsPerLine.has(lineIdx)) {\n partsPerLine.set(lineIdx, []);\n }\n partsPerLine.get(lineIdx)!.push(transformedParts[i]);\n }\n\n // Build result lines\n const result: string[] = [];\n for (let i = 0; i < lineMetadata.length; i++) {\n const meta = lineMetadata[i];\n const indent = normalizedIndents[i];\n\n if (meta.isBlank) {\n result.push('');\n } else {\n const lineParts = partsPerLine.get(i) || [];\n if (lineParts.length > 0) {\n // Join multiple parts on same line with \"then\"\n const lineContent = lineParts.join(` ${targetThen} `);\n result.push(indent + lineContent);\n }\n }\n }\n\n return result.join('\\n');\n}\n\n/**\n * Split a statement on command keyword boundaries.\n * E.g., \"wait 2s toggle .highlight\" → [\"wait 2s\", \"toggle .highlight\"]\n *\n * Special cases:\n * - \"on <event> <command>\" stays together (event handler with first command)\n * - Modifiers like \"to\", \"from\" don't trigger splits\n */\n/**\n * English modifier keywords that should not trigger command boundary splits.\n * These are the base set; localized equivalents (e.g. Japanese `に`, Spanish\n * `a`, Arabic `إلى`) are layered on per source locale by\n * `getBoundaryModifiersForLocale`, so a preposition in a non-English source\n * is also recognized as a modifier rather than a spurious command boundary.\n */\nconst BOUNDARY_MODIFIERS = new Set([\n 'to',\n 'into',\n 'from',\n 'with',\n 'by',\n 'as',\n 'at',\n 'in',\n 'on',\n 'of',\n 'over',\n]);\n\n/**\n * Boundary modifiers resolved for a given source locale: the English base set\n * (always kept, since input may mix English keywords) plus every grammatical\n * marker form declared by the locale's profile. Profile markers are the\n * surface realizations of semantic roles (destination, source, style, …) —\n * they always bind to a following value, so none should be treated as a\n * command boundary. Cached per locale because profiles are static.\n */\nconst boundaryModifiersCache = new Map<string, Set<string>>();\n\nfunction getBoundaryModifiersForLocale(locale: string): Set<string> {\n const cached = boundaryModifiersCache.get(locale);\n if (cached) return cached;\n\n const modifiers = new Set(BOUNDARY_MODIFIERS);\n\n const profile = getProfile(locale);\n profile?.markers.forEach(marker => {\n const form = marker.form.replace(/^-|-$/g, '').toLowerCase();\n if (form) modifiers.add(form);\n\n marker.alternatives?.forEach(alt => {\n const altForm = alt.replace(/^-|-$/g, '').toLowerCase();\n if (altForm) modifiers.add(altForm);\n });\n });\n\n boundaryModifiersCache.set(locale, modifiers);\n return modifiers;\n}\n\n/**\n * Commands for which a trailing `on <element>` is the TARGET the command acts\n * on (a destination), not a new event-handler clause. For these, the locative\n * `on` must neither split the statement (`splitOnCommandBoundaries`) nor be read\n * as a fresh `event` role (`buildArgumentModifierMap`) — see those call sites.\n *\n * Deliberately narrow. `on` is overloaded (event-handler head vs. locative\n * target), and the change has cross-language blast radius, so we only enable\n * the locative reading for the DOM class/attribute mutators where it's the\n * documented idiom (`toggle .open on #menu`, `toggle @hidden on #panel`).\n *\n * `trigger`/`send` — `trigger X on Y` / `send X on Y` fire an event on a target\n * element; the trailing `on Y` is that target (destination), not a new clause.\n * Previously excluded: keeping `on Y` attached produced `trigger X → #y` output\n * that was thought to destabilise the semantic parser's multi-line behaviour\n * fallback (behavior-sortable's `trigger sortable:start on me`). That concern is\n * stale — the recent semantic-parser body increments fold the surrounding block\n * cleanly, and splitting instead injected a spurious `then` (`disparar\n * sortable:start entonces en yo`) that glued the following `repeat until event`\n * loop into a then-chain and dropped it. Keeping `on Y` attached restores\n * behavior-sortable to faithful across the SVO languages.\n *\n * Excluded on purpose:\n * - `set` — `set @attr to V on Y` carries BOTH `to` (value) and `on` (target);\n * English marks both as `destination`, so remapping `on` would collide with\n * and clobber the value. Needs distinct value/target roles first (deferred).\n * - `put` — `put X on Y into Z` has the same dual-destination collision.\n *\n * `add`/`remove` use `to`/`from` for their target in practice (not `on`), so\n * their inclusion is a harmless no-op that documents intent.\n */\nconst ON_TARGET_COMMANDS = new Set(['toggle', 'add', 'remove', 'trigger', 'send']);\n\n/**\n * Find the command verb of a partially-collected statement: the first command\n * keyword that is neither the event-handler head (`on`/その他 event markers) nor\n * an argument-introducing preposition. For `on click toggle .open` → `toggle`;\n * for `trigger sortable:start` → `trigger`.\n */\nfunction commandVerbOf(tokens: string[], commandKeywords: Set<string>): string | null {\n for (const token of tokens) {\n const lt = token.toLowerCase();\n if (commandKeywords.has(lt) && !BOUNDARY_MODIFIERS.has(lt) && !EVENT_KEYWORDS.has(lt)) {\n return lt;\n }\n }\n return null;\n}\n\n/**\n * Block-introducing keywords whose body should not be split at command\n * boundaries by `splitOnCommandBoundaries`. Inputs starting with one of\n * these are also routed around `parseStatement` entirely by\n * `extractBlockStructure` + `transformBlock` so block-syntactic tokens\n * never reach `parseCommand`/`parseConditional` (where they'd be\n * misinterpreted as command verbs or swept into role values).\n *\n * `if` deliberately stays out: `if X then Y end` already works via the\n * `splitOnThen` + `parseConditional` path.\n */\nconst BLOCK_HEAD_KEYWORDS = new Set(['live', 'when', 'unless']);\n\n/**\n * Source-language block-introducing command keywords whose body is a clause plus a\n * branch/loop body (harness source is English, so these are English-keyed). Used to\n * locate a block body inside an event handler and to track block depth when finding\n * a top-level `else`.\n */\nconst BLOCK_BODY_KEYWORDS = new Set(['if', 'repeat', 'unless', 'while', 'for']);\n\n/**\n * SVO targets that mark the object/patient with a particle (he את, zh 把) and so\n * mangle an inline `on <event> unless <cond> <body>` guard — the unless tail is\n * swept into one patient blob and the marker lands ahead of the condition. These\n * route through `tryTransformEventWithUnlessGuard`. SOV/VSO object-markers\n * (ja/ko/tr/ar) are excluded: their event does not lead, so the SVO event-first\n * emission there would be wrong (and they don't exhibit the artifact today).\n */\nconst UNLESS_GUARD_OBJECT_MARKING_LOCALES = new Set(['he', 'zh']);\n\nfunction splitOnCommandBoundaries(input: string, sourceLocale: string): string[] {\n const commandKeywords = getCommandKeywordsForLocale(sourceLocale);\n const boundaryModifiers = getBoundaryModifiersForLocale(sourceLocale);\n const { forWords, inWords } = getForLoopWordsForLocale(sourceLocale);\n const tokens = input.split(/\\s+/);\n\n if (tokens.length === 0) return [input];\n\n const parts: string[] = [];\n let currentPart: string[] = [];\n\n // Check if this starts with an event handler pattern (on/em/en/bei/で + event)\n const firstTokenLower = tokens[0]?.toLowerCase();\n const isEventHandler = EVENT_KEYWORDS.has(firstTokenLower);\n\n // If it's an event handler, the first command after the event is part of the handler\n // So we need to track whether we've seen the first command yet\n let seenFirstCommand = !isEventHandler; // If not event handler, we're already past the \"first command\" phase\n\n // Track block-scope depth (live/when/bind/if/unless/for/while/...). While\n // inside a block, do not split on command boundaries — the body belongs\n // to the block head and must transform as one unit. See comments on\n // BLOCK_HEAD_KEYWORDS for the failure mode this prevents.\n let blockDepth = 0;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const lowerToken = token.toLowerCase();\n\n // Update block-scope depth before any split decision.\n if (BLOCK_HEAD_KEYWORDS.has(lowerToken)) {\n blockDepth++;\n } else if (lowerToken === 'end' && blockDepth > 0) {\n blockDepth--;\n }\n\n // If this is a command keyword and we already have tokens in current part\n if (commandKeywords.has(lowerToken) && currentPart.length > 0) {\n // Check if the previous token looks like it could end a command\n const prevToken = currentPart[currentPart.length - 1];\n const prevLower = prevToken.toLowerCase();\n\n // For event handlers: don't split before the first command\n // E.g., \"on click wait 1s\" should stay together\n if (!seenFirstCommand) {\n // Mark that we've now seen the first command\n seenFirstCommand = true;\n currentPart.push(token);\n continue;\n }\n\n // Don't split inside a block (live/when/bind/unless body, etc.).\n // The block head and its body must transform as one statement.\n if (blockDepth > 0) {\n currentPart.push(token);\n continue;\n }\n\n // A `for` that doesn't head a real loop (`for <var> in <iterable>`) is a\n // role phrase of the current command — see isLoopHeadFor.\n if (forWords.has(lowerToken) && !isLoopHeadFor(tokens, i, inWords, commandKeywords)) {\n currentPart.push(token);\n continue;\n }\n\n // Locative `on` for a DOM-target command (`toggle X on Y`) is the target\n // element, NOT a new command. `on` lands in `commandKeywords` only\n // incidentally — the EN dictionary registers `commands.on = 'on'` for the\n // event-handler head — so without this guard the destination `on` split\n // the statement, the join re-inserted a spurious `then` (ثم/pagkatapos/…),\n // and the dangling `on Y` was misread as a second event handler. Keep it\n // attached so the role parser can assign it to `destination`. Restricted\n // to ON_TARGET_COMMANDS so `trigger X on me` etc. keep their prior split.\n if (BOUNDARY_MODIFIERS.has(lowerToken)) {\n const verb = commandVerbOf(currentPart, commandKeywords);\n if (verb && ON_TARGET_COMMANDS.has(verb)) {\n currentPart.push(token);\n continue;\n }\n // `set @attr to V on <scope>` (S1 tabs-aria): the trailing `on <scope>`\n // is the element(s) the attribute is set on, not a new command. `set` is\n // deliberately NOT in ON_TARGET_COMMANDS (its role parser would clobber\n // the value), so this is a dedicated guard — kept attached only when a\n // selector/reference scope follows, then positioned by transformSingle's\n // set-scope handler (transformSetWithScope). A `set` whose `on` is\n // followed by a verb is left to split as before.\n if (lowerToken === 'on' && verb === 'set') {\n const nextTok = tokens[i + 1];\n const nextLower = nextTok?.toLowerCase();\n const scopeLike =\n !!nextTok &&\n (/^[#.<@[]/.test(nextTok) ||\n nextLower === 'me' ||\n nextLower === 'it' ||\n nextLower === 'you');\n if (scopeLike) {\n currentPart.push(token);\n continue;\n }\n }\n }\n\n if (!boundaryModifiers.has(prevLower) && !commandKeywords.has(prevLower)) {\n // This looks like a command boundary - save current part and start new one\n parts.push(currentPart.join(' '));\n currentPart = [token];\n continue;\n }\n }\n\n currentPart.push(token);\n }\n\n // Add the last part\n if (currentPart.length > 0) {\n parts.push(currentPart.join(' '));\n }\n\n return parts.filter(p => p.length > 0);\n}\n\n/**\n * Split a single line on \"then\" keywords.\n */\nfunction splitOnThen(input: string, sourceLocale: string): string[] {\n // Build regex pattern from all known \"then\" keywords\n const thenKeywords = Array.from(THEN_KEYWORDS);\n\n // Add any dictionary-specific \"then\" keyword for the source locale\n const sourceDict = sourceLocale === 'en' ? null : dictionaries[sourceLocale];\n if (sourceDict?.modifiers?.then) {\n thenKeywords.push(sourceDict.modifiers.then);\n }\n // Also check logical.then since some dictionaries put it there\n if ((sourceDict?.logical as Record<string, string>)?.then) {\n thenKeywords.push((sourceDict?.logical as Record<string, string>).then);\n }\n\n // Create a regex that matches any \"then\" keyword as a whole word\n // Use word boundaries to avoid matching \"then\" inside other words\n const escapedKeywords = thenKeywords.map(k => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n const pattern = new RegExp(`\\\\s+(${escapedKeywords.join('|')})\\\\s+`, 'gi');\n\n // Split on \"then\" keywords\n const parts = input.split(pattern).filter(part => {\n // Filter out the \"then\" keywords themselves (captured by the group)\n const lowerPart = part.toLowerCase().trim();\n return lowerPart && !thenKeywords.some(k => k.toLowerCase() === lowerPart);\n });\n\n return parts.map(p => p.trim()).filter(p => p.length > 0);\n}\n\n/**\n * Get the \"then\" keyword in the target language.\n * Checks both modifiers and logical sections since dictionaries vary.\n */\nfunction getTargetThenKeyword(targetLocale: string): string {\n if (targetLocale === 'en') return 'then';\n\n const targetDict = dictionaries[targetLocale];\n if (!targetDict) return 'then';\n\n // Check modifiers first, then logical (dictionaries vary)\n return (\n targetDict.modifiers?.then || (targetDict.logical as Record<string, string>)?.then || 'then'\n );\n}\n\n// =============================================================================\n// Derived Constants from Profiles\n// =============================================================================\n\n/**\n * Derive event keywords from all language profiles.\n * This replaces the hardcoded eventKeywords array.\n */\nfunction deriveEventKeywordsFromProfiles(): Set<string> {\n const keywords = new Set<string>();\n\n // Add 'on' as the English default\n keywords.add('on');\n\n // Extract event markers from all profiles\n for (const profile of Object.values(profiles)) {\n for (const marker of profile.markers) {\n if (marker.role === 'event') {\n // Strip hyphen notation and add\n const form = marker.form.replace(/^-|-$/g, '').toLowerCase();\n if (form) keywords.add(form);\n\n // Add alternatives\n marker.alternatives?.forEach(alt => {\n const altForm = alt.replace(/^-|-$/g, '').toLowerCase();\n if (altForm) keywords.add(altForm);\n });\n }\n }\n }\n\n return keywords;\n}\n\n/** Event keywords derived from language profiles */\nconst EVENT_KEYWORDS = deriveEventKeywordsFromProfiles();\n\n/**\n * Conjunctions that join multiple events in an event handler head\n * (`on click or keypress ...`). Source hyperscript is English, so the\n * canonical form is `or`; localized equivalents are added defensively for\n * non-English sources.\n */\nconst EVENT_CONJUNCTIONS = new Set(['or']);\n\n/**\n * Command-modifier keywords that may lead an event handler body\n * (`on click async fetch …`, `on click once add …`). They modify the handler /\n * following command rather than acting as the verb, so the transformer must lift\n * them out before role assignment instead of treating them as the action.\n * Source hyperscript is English, so these are the canonical English forms — the\n * semantic parser recognizes the same literals when stripping them pre-parse.\n */\nconst BODY_MODIFIER_KEYWORDS = new Set([\n 'async',\n 'once',\n 'debounced',\n 'debounce',\n 'throttled',\n 'throttle',\n]);\n\n// =============================================================================\n// Helper: Dynamic Modifier Map\n// =============================================================================\n\n/**\n * Generates a lookup map for semantic roles based on the language profile.\n * Maps markers (e.g., 'to', 'に', 'into', 'إلى') to their semantic roles.\n * This enables parsing non-English input by using the profile's markers.\n */\nfunction generateModifierMap(profile: LanguageProfile): Record<string, SemanticRole> {\n const map: Record<string, SemanticRole> = {};\n\n // Map markers to roles from the profile\n profile.markers.forEach(marker => {\n // Strip hyphen notation for suffix/prefix markers\n const form = marker.form.replace(/^-|-$/g, '').toLowerCase();\n if (form) {\n map[form] = marker.role;\n }\n\n // Map alternatives if they exist (e.g., Korean vowel harmony variants)\n marker.alternatives?.forEach(alt => {\n const altForm = alt.replace(/^-|-$/g, '').toLowerCase();\n if (altForm) {\n map[altForm] = marker.role;\n }\n });\n });\n\n // Add English modifiers as fallback (don't override profile-specific markers)\n for (const [key, role] of Object.entries(ENGLISH_MODIFIER_ROLES)) {\n if (!(key in map)) {\n map[key] = role;\n }\n }\n\n return map;\n}\n\n/**\n * Modifier map for parsing the ARGUMENTS of a statement (everything after the\n * command verb), as opposed to the statement head.\n *\n * Why a separate map: a few languages reuse one word for both the event-handler\n * head marker and a locative/target preposition. English is the prime case —\n * `on` is the event head (`on click …`) AND the toggle/set target preposition\n * (`toggle .x on #y`). `generateModifierMap` maps `on → event` (from the EN\n * profile's event marker), so when the destination `on` was read in argument\n * position it overwrote the already-captured head event (the `click` got\n * dropped, e.g. `toggle @hidden on #panel` → `… عند #panel` with نقر/click gone).\n *\n * The fix: in argument position, remap the event role to `destination`. This is\n * safe because a trigger event only ever appears at the statement head (which is\n * consumed before argument parsing begins). Any \"event marker\" reached while\n * scanning arguments is therefore being used as a locative — i.e. the element\n * the command acts ON — which is exactly the `destination` role (the semantic\n * parser also models `toggle .x on #y` as patient `.x` + destination `#y`).\n *\n * Restricted to (a) SVO source profiles and (b) ON_TARGET_COMMANDS:\n * - SVO: in VSO/SOV languages the event marker can legitimately appear\n * mid-statement (Arabic VSO renders an event handler as `بدل X عند نقر`,\n * classified as a command), so remapping there would mis-read a real event\n * as a destination. English — and the en→lang gate path — is SVO.\n * - command: only the DOM class/attr mutators use a locative `on` target.\n * For other commands (`trigger X on me`, `set X to V on Y`) the remap is\n * either destabilising or collides with `to`/`into` — see ON_TARGET_COMMANDS.\n *\n * When neither applies the unmodified map is returned (event stays event).\n */\nfunction buildArgumentModifierMap(\n profile: LanguageProfile,\n actionVerb: string | undefined\n): Record<string, SemanticRole> {\n const map = generateModifierMap(profile);\n const verb = actionVerb?.toLowerCase();\n if (profile.wordOrder !== 'SVO' || !verb || !ON_TARGET_COMMANDS.has(verb)) {\n return map;\n }\n\n const remapped: Record<string, SemanticRole> = {};\n for (const [form, role] of Object.entries(map)) {\n remapped[form] = role === 'event' ? 'destination' : role;\n }\n return remapped;\n}\n\n// =============================================================================\n// Statement Parser\n// =============================================================================\n\n/**\n * Parse a hyperscript statement into semantic roles\n * This is the core analysis step that identifies WHAT each part means\n */\nexport function parseStatement(input: string, sourceLocale: string = 'en'): ParsedStatement | null {\n const profile = getProfile(sourceLocale);\n if (!profile) return null;\n\n const tokens = tokenize(input, profile);\n\n // Identify statement type and extract roles\n const statementType = identifyStatementType(tokens, profile);\n\n switch (statementType) {\n case 'event-handler':\n return parseEventHandler(tokens, profile);\n case 'command':\n return parseCommand(tokens, profile);\n case 'conditional':\n return parseConditional(tokens, profile);\n default:\n return null;\n }\n}\n\n/**\n * Known suffixes that may attach to words without spaces.\n * These are split off during tokenization for proper parsing.\n */\nconst ATTACHED_SUFFIXES: Record<string, string[]> = {\n // Chinese: 时 (time/when) often attaches to events like 点击时 (when clicking)\n zh: ['时', '的', '地', '得'],\n // Japanese: Some particles may attach in casual writing\n ja: [],\n // Korean: Particles sometimes written without spaces\n ko: [],\n};\n\n/**\n * Known prefixes that may attach to words without spaces.\n */\nconst ATTACHED_PREFIXES: Record<string, string[]> = {\n // Chinese: 当 (when) sometimes written attached\n zh: ['当'],\n // Arabic: Prepositions that attach\n ar: ['بـ', 'كـ', 'و'],\n};\n\n/**\n * Post-process tokens to split attached suffixes/prefixes.\n * E.g., \"点击时\" → [\"点击\", \"时\"]\n */\nfunction splitAttachedAffixes(tokens: string[], locale: string): string[] {\n const suffixes = ATTACHED_SUFFIXES[locale] || [];\n const prefixes = ATTACHED_PREFIXES[locale] || [];\n\n if (suffixes.length === 0 && prefixes.length === 0) {\n return tokens;\n }\n\n const result: string[] = [];\n\n for (const token of tokens) {\n // Skip CSS selectors and numbers\n if (/^[#.<@]/.test(token) || /^\\d+/.test(token)) {\n result.push(token);\n continue;\n }\n\n let processed = token;\n let prefix = '';\n let suffix = '';\n\n // Check for attached prefixes\n for (const p of prefixes) {\n if (processed.startsWith(p) && processed.length > p.length) {\n prefix = p;\n processed = processed.slice(p.length);\n break;\n }\n }\n\n // Check for attached suffixes\n for (const s of suffixes) {\n if (processed.endsWith(s) && processed.length > s.length) {\n suffix = s;\n processed = processed.slice(0, -s.length);\n break;\n }\n }\n\n // Add tokens in order: prefix, main, suffix\n if (prefix) result.push(prefix);\n if (processed) result.push(processed);\n if (suffix) result.push(suffix);\n }\n\n return result;\n}\n\n/**\n * Simple tokenizer that handles:\n * - Keywords (from dictionary)\n * - CSS selectors (#id, .class, <tag/>)\n * - String literals\n * - Numbers\n * - Attached suffixes/prefixes (language-specific)\n */\nfunction tokenize(input: string, profile: LanguageProfile): string[] {\n // Split on whitespace, preserving selectors and strings\n const tokens: string[] = [];\n let current = '';\n let inSelector = false;\n let selectorDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n\n // Track CSS selector context\n if (char === '<') {\n inSelector = true;\n selectorDepth++;\n } else if (char === '>' && inSelector) {\n selectorDepth--;\n if (selectorDepth === 0) inSelector = false;\n }\n\n // Track event-guard / attribute brackets so `[key is 'Escape']` (which has\n // internal spaces) stays a single token instead of splitting into\n // `[key` / `is` / `'Escape']` — which mis-assigns `is` as the action verb.\n if (char === '[') {\n bracketDepth++;\n } else if (char === ']' && bracketDepth > 0) {\n bracketDepth--;\n }\n\n // Track EVERY parenthesized group as a depth scope so it stays ONE token:\n //\n // - An ATTACHED `(` (a call or event destructure: `pointerdown(clientX,\n // clientY)`, `Resizable(a, b)`) must not split at the comma-space — the\n // event-handler-head reorder would separate the halves and drop the\n // whole handler (tl behavior-resizable degenerate).\n // - A STANDALONE `(` opening an expression (`to (the value of #price as\n // Number) * (my value as Number)`) must be OPAQUE to role segmentation:\n // left loose, its interior `of`/`as`/`from` keywords hit the argument\n // modifier map, so the parser split the expression across roles — the\n // R1 cluster E mangle (computed-value: the transformer reordered INSIDE\n // the parens, embedded the event phrase mid-expression, and dropped the\n // whole second operand in every language). Interior keywords still\n // translate IN PLACE: role values are re-split on whitespace by\n // translateMultiWordValue, and translateWord strips paren punctuation\n // before its dictionary lookup (`($count or 0)` → `($count o 0)` in tl —\n // the operator translates without the group being torn apart).\n if (char === '(') {\n parenDepth++;\n } else if (char === ')' && parenDepth > 0) {\n parenDepth--;\n }\n\n // Split on whitespace unless inside a selector, a bracket guard, or an\n // attached parenthesized argument list\n if (/\\s/.test(char) && !inSelector && bracketDepth === 0 && parenDepth === 0) {\n if (current) {\n tokens.push(current);\n current = '';\n }\n } else {\n current += char;\n }\n }\n\n if (current) {\n tokens.push(current);\n }\n\n // Post-process to split attached affixes for languages that need it\n return splitAttachedAffixes(tokens, profile.code);\n}\n\n/**\n * Identify what type of statement this is\n */\nfunction identifyStatementType(\n tokens: string[],\n profile: LanguageProfile\n): 'event-handler' | 'command' | 'conditional' | 'unknown' {\n if (tokens.length === 0) return 'unknown';\n\n const firstToken = tokens[0].toLowerCase();\n\n // Check for event handler\n const eventMarker = profile.markers.find(m => m.role === 'event' && m.position === 'preposition');\n if (eventMarker && firstToken === eventMarker.form.toLowerCase()) {\n return 'event-handler';\n }\n\n // Check if first token is a known event keyword (derived from profiles)\n if (EVENT_KEYWORDS.has(firstToken)) {\n return 'event-handler';\n }\n\n // Check for conditional using shared constants\n if (CONDITIONAL_KEYWORDS.has(firstToken)) {\n return 'conditional';\n }\n\n return 'command';\n}\n\n/**\n * Parse an event handler statement\n * Pattern: on {event} {command} {target?} {modifiers?}\n *\n * Now handles modifiers like \"by 3\" in \"on click increment #count by 3\"\n */\nfunction parseEventHandler(tokens: string[], profile: LanguageProfile): ParsedStatement {\n const roles = new Map<SemanticRole, ParsedElement>();\n\n // Skip the event keyword (e.g., 'on', 'で', '当', etc.) - derived from profiles\n let startIndex = EVENT_KEYWORDS.has(tokens[0]?.toLowerCase()) ? 1 : 0;\n\n // Next token is the event\n if (tokens[startIndex]) {\n const eventTokens: string[] = [tokens[startIndex]];\n startIndex++;\n\n // Fold \"or\"-conjoined events into the event value (e.g.\n // \"on click or keypress[...] toggle .active\"). Without this, \"or\" would be\n // read as the action verb and the second event swept into role values,\n // hoisting \"or <event2>\" ahead of the command on reorder. Keeping the whole\n // \"<event1> or <event2>\" string in the event role lets it translate and\n // reorder as a single event clause. Only consumes \"or\" that immediately\n // follows the event, before any source/action — so a later \"or\" in a guard\n // or value is untouched.\n while (\n tokens[startIndex] &&\n EVENT_CONJUNCTIONS.has(tokens[startIndex].toLowerCase()) &&\n tokens[startIndex + 1]\n ) {\n eventTokens.push(tokens[startIndex], tokens[startIndex + 1]);\n startIndex += 2;\n }\n\n roles.set('event', {\n role: 'event',\n value: eventTokens.join(' '),\n });\n }\n\n // Check for event source modifier before the action (e.g., \"from #source\" in \"on input from #firstName set ...\")\n // Only handle 'from' (event source) — other modifiers like circumfix markers (Chinese 时) should not be consumed.\n if (tokens[startIndex] && tokens[startIndex].toLowerCase() === 'from' && tokens[startIndex + 1]) {\n startIndex++; // skip 'from'\n // Collect source value tokens until a command keyword is found\n const sourceValue: string[] = [];\n while (tokens[startIndex]) {\n if (ENGLISH_COMMANDS.has(tokens[startIndex].toLowerCase())) break;\n sourceValue.push(tokens[startIndex]);\n startIndex++;\n }\n if (sourceValue.length > 0) {\n const value = sourceValue.join(' ');\n roles.set('source', {\n role: 'source',\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n }\n\n // Next token is the action (command verb)\n if (tokens[startIndex]) {\n roles.set('action', {\n role: 'action',\n value: tokens[startIndex],\n });\n startIndex++;\n }\n\n // Parse remaining tokens with modifier awareness (like parseCommand does)\n // This handles \"by 3\" in \"on click increment #count by 3\".\n // Argument map: for DOM-target commands the head event is already captured, so\n // a locative `on` (`toggle @hidden on #panel`) maps to `destination` rather\n // than overwriting the head `event`.\n if (tokens[startIndex]) {\n const modifierMap = buildArgumentModifierMap(profile, roles.get('action')?.value);\n let currentRole: SemanticRole = 'patient';\n let currentValue: string[] = [];\n\n for (let i = startIndex; i < tokens.length; i++) {\n const token = tokens[i];\n const mappedRole = modifierMap[token.toLowerCase()];\n\n if (mappedRole) {\n // Save previous role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n currentRole = mappedRole;\n currentValue = [];\n } else {\n currentValue.push(token);\n }\n }\n\n // Save final role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n }\n\n return {\n type: 'event-handler',\n roles,\n original: tokens.join(' '),\n };\n}\n\n/**\n * Parse a command statement\n * Pattern: {command} {args...}\n */\nfunction parseCommand(tokens: string[], profile: LanguageProfile): ParsedStatement {\n const roles = new Map<SemanticRole, ParsedElement>();\n\n if (tokens.length === 0) {\n return { type: 'command', roles, original: '' };\n }\n\n // First token is the command\n roles.set('action', {\n role: 'action',\n value: tokens[0],\n });\n\n // Generate dynamic modifier map from language profile (argument position).\n // This enables parsing non-English input (e.g., Japanese に, Korean 에, Arabic إلى).\n // For a DOM-target command a locative `on` (`toggle .active on me`) maps to\n // `destination` (SVO sources) rather than spawning a bogus `event` role.\n const modifierMap = buildArgumentModifierMap(profile, tokens[0]);\n\n let currentRole: SemanticRole = 'patient';\n let currentValue: string[] = [];\n\n for (let i = 1; i < tokens.length; i++) {\n const token = tokens[i];\n const mappedRole = modifierMap[token.toLowerCase()];\n\n if (mappedRole) {\n // Save previous role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n currentRole = mappedRole;\n currentValue = [];\n } else {\n currentValue.push(token);\n }\n }\n\n // Save final role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n\n return {\n type: 'command',\n roles,\n original: tokens.join(' '),\n };\n}\n\n/**\n * Re-assign a command's mis-marked primary argument from the default `patient`\n * role to its true primary role (e.g. `wait`'s leading argument is a `duration`,\n * not a fronted object).\n *\n * The generic argument parser in `parseCommand` / `parseEventHandler` defaults the\n * first unmarked argument to `patient`. For most commands that is correct, but for a\n * command whose primary role is a non-patient *and which the target language does not\n * give a marker* (a duration, a measure — never a BA/object construction), the\n * `patient` assignment makes `insertMarkers` emit a spurious object-marker (Chinese\n * `把`, Japanese `を`, Korean `를`). The marked form is ungrammatical and the semantic\n * parser fails to match it, dropping the command.\n *\n * The fix is deliberately scoped to **literal/measure** primary roles\n * ({@link LITERAL_PRIMARY_ROLES}: `duration`, `quantity`) — values that are *never*\n * the object of an object-marking construction in any supported language, so moving\n * them off `patient` can only ever *remove* a spurious marker. Marker-bearing\n * primaries are intentionally left alone:\n * - `set`→destination `到`, `fetch`→source `从` carry a *correct* marker; touching\n * them risks no benefit.\n * - `send`/`trigger`→event: in a language without an event marker (e.g. Korean has\n * no event particle) un-marking the leading argument makes the semantic parser\n * mis-read it as a bare event handler and emit a phantom `on` action — an\n * over-generation that recall-based fidelity would not catch. So `event`-primary\n * commands stay on the `patient` default.\n *\n * Roles are still reordered by the safety-net in `reorderRoles`, so no value is lost.\n * A belt-and-suspenders target-marker guard keeps the change inert should a profile\n * ever add a marker for one of these literal roles.\n *\n * Must run *before* `translateElements`, while the `action` value is still the\n * source-language (English) keyword, so the schema lookup resolves.\n *\n * @see docs-internal/ZH_BLOCK_BODY_SCOPE.md (#1 — transformer role model)\n */\nconst LITERAL_PRIMARY_ROLES: ReadonlySet<SemanticRole> = new Set<SemanticRole>([\n 'duration',\n 'quantity',\n]);\n\nfunction applyPrimaryRole(parsed: ParsedStatement, targetProfile: LanguageProfile): void {\n // Only re-mark standalone command statements. In an event handler (`on click\n // wait 2s …`) a verb-final SOV language without an event particle (e.g. Korean)\n // relies on the leading argument's patient marker as the structural cue that\n // anchors the handler; un-marking it makes the semantic parser lose the event.\n // The block-body / then-chain `wait` clauses this fix targets are each parsed as\n // their own command statement, so they are still covered.\n if (parsed.type !== 'command') return;\n\n const action = parsed.roles.get('action')?.value;\n if (!action) return;\n\n const primaryRole = COMMAND_PRIMARY_ROLES[action.toLowerCase()];\n if (!primaryRole || !LITERAL_PRIMARY_ROLES.has(primaryRole)) return;\n\n // Only act on a leading argument the generic parser defaulted to `patient`,\n // and only when the primary slot isn't already filled by an explicit marker.\n const patientEl = parsed.roles.get('patient');\n if (!patientEl || parsed.roles.has(primaryRole)) return;\n\n // Guard: never introduce a marker that wasn't there. If the target language\n // marks the primary role, leave the command as-is.\n if (targetProfile.markers.some(m => m.role === primaryRole)) return;\n\n parsed.roles.delete('patient');\n parsed.roles.set(primaryRole, { ...patientEl, role: primaryRole });\n}\n\n/**\n * Parse a conditional statement\n */\nfunction parseConditional(tokens: string[], _profile: LanguageProfile): ParsedStatement {\n const roles = new Map<SemanticRole, ParsedElement>();\n\n // First token is the 'if' keyword\n roles.set('action', {\n role: 'action',\n value: tokens[0],\n });\n\n // Find 'then' to split condition from body - using shared constants\n const thenIndex = tokens.findIndex(t => THEN_KEYWORDS.has(t.toLowerCase()));\n\n if (thenIndex > 1) {\n const conditionValue = tokens.slice(1, thenIndex).join(' ');\n roles.set('condition', {\n role: 'condition',\n value: conditionValue,\n });\n } else if (thenIndex === -1 && tokens.length > 1) {\n // Block-style `if <cond>` with the body on following lines (no inline\n // `then`). Capture everything after `if` as the condition; otherwise the\n // condition is silently dropped and the rendered block becomes a bare\n // `if`/`אם`/`如果`, which the semantic block parser then rejects (null\n // parse). This is the dominant failure for nested control-flow bodies in\n // non-Latin languages (he, zh).\n roles.set('condition', {\n role: 'condition',\n value: tokens.slice(1).join(' '),\n });\n }\n\n return {\n type: 'conditional',\n roles,\n original: tokens.join(' '),\n };\n}\n\n// =============================================================================\n// Translation\n// =============================================================================\n\n/**\n * Translate words using dictionary with type-safe access.\n */\nfunction translateWord(word: string, sourceLocale: string, targetLocale: string): string {\n // Don't translate CSS selectors\n if (/^[#.<@]/.test(word)) {\n return word;\n }\n\n // Don't translate numbers\n if (/^\\d+/.test(word)) {\n return word;\n }\n\n // A whole parenthesized group fused by the tokenizer (`(the value of #price\n // as Number)`) reaching a single-token translate path: translate its\n // interior word-by-word IN ORDER — never reordered, never re-segmented.\n if (/\\s/.test(word) && word.startsWith('(')) {\n return word\n .split(/\\s+/)\n .map(w => translateWord(w, sourceLocale, targetLocale))\n .join(' ');\n }\n\n // A word carrying paren punctuation from a fused group after whitespace\n // re-splitting (`(my` / `valor)` / `(($x`): strip the parens for the\n // dictionary lookup and re-attach, so interior keywords still translate.\n if (word.length > 1 && (word.startsWith('(') || word.endsWith(')'))) {\n const m = word.match(/^(\\(*)([^()]+)(\\)*)$/);\n if (m && (m[1] || m[3])) {\n return m[1] + translateWord(m[2], sourceLocale, targetLocale) + m[3];\n }\n }\n\n const sourceDict = sourceLocale === 'en' ? null : dictionaries[sourceLocale];\n const targetDict = dictionaries[targetLocale];\n\n if (!targetDict) return word;\n\n // If source is not English, first map to English using type-safe lookup\n let englishWord = word;\n if (sourceDict) {\n const found = findInDictionary(sourceDict, word);\n if (found) {\n englishWord = found.englishKey;\n }\n }\n\n // Now map English to target locale using type-safe lookup\n const translated = translateFromEnglish(targetDict, englishWord);\n return translated ?? word;\n}\n\n/**\n * Possessive markers for each language.\n * Used to transform \"X's Y\" patterns to target language structure.\n */\nconst POSSESSIVE_MARKERS: Record<\n string,\n { type: 'prefix' | 'suffix' | 'preposition' | 'particle'; marker: string }\n> = {\n en: { type: 'suffix', marker: \"'s\" },\n es: { type: 'preposition', marker: 'de' },\n pt: { type: 'preposition', marker: 'de' },\n fr: { type: 'preposition', marker: 'de' },\n de: { type: 'preposition', marker: 'von' },\n ja: { type: 'suffix', marker: 'の' },\n ko: { type: 'suffix', marker: '의' },\n zh: { type: 'suffix', marker: '的' },\n ar: { type: 'preposition', marker: 'لـ' },\n // Spaced genitive particle (not the glued `'ın`), so the tokenizer can split\n // it off the selector — consistent with Turkish's other spaced case markers.\n tr: { type: 'particle', marker: 'ın' },\n id: { type: 'preposition', marker: 'dari' },\n // Latin-script genitive: must be a *spaced* particle (`#picker pa`), since a\n // glued `#pickerpa` can't be split from the selector by the tokenizer the\n // way a non-Latin suffix (の/의/র) can.\n qu: { type: 'particle', marker: 'pa' },\n // Bengali SOV postposition genitive, like ja/ko — a spaced suffix the\n // tokenizer splits off as a particle. Previously absent, so it fell back to\n // the English `'s` marker and its possessive property paths never parsed.\n // (Hindi `का` is intentionally omitted: its `bind` lacks a verb-final\n // grammar rule, so fixing its possessive alone yields a wrong `on` parse —\n // tracked as separate follow-up.)\n bn: { type: 'suffix', marker: 'র' },\n sw: { type: 'preposition', marker: 'ya' },\n};\n\n/**\n * Transform possessive 's syntax to target language.\n *\n * Examples:\n * me's value → mi valor (Spanish - pronoun becomes possessive adjective)\n * #button's textContent → textContent de #button (Spanish - prepositional)\n * me's value → 私の値 (Japanese - の particle)\n */\nfunction translatePossessive(token: string, sourceLocale: string, targetLocale: string): string {\n // Check for 's possessive pattern\n const possessiveMatch = token.match(/^(.+)'s$/i);\n if (!possessiveMatch) {\n return token;\n }\n\n const owner = possessiveMatch[1];\n const targetMarker = POSSESSIVE_MARKERS[targetLocale] || POSSESSIVE_MARKERS.en;\n\n // Check if owner is a pronoun that has a possessive form\n const pronounPossessives: Record<string, string> = {\n me: 'my',\n it: 'its',\n you: 'your',\n };\n\n const lowerOwner = owner.toLowerCase();\n if (pronounPossessives[lowerOwner]) {\n // Convert \"me's\" to \"my\" then translate\n const possessiveForm = pronounPossessives[lowerOwner];\n return translateWord(possessiveForm, 'en', targetLocale);\n }\n\n // For selectors and other owners, translate owner and apply target possessive marker\n const translatedOwner = translateWord(owner, sourceLocale, targetLocale);\n\n switch (targetMarker.type) {\n case 'suffix':\n // Japanese/Korean/Chinese: owner + marker (e.g., #buttonの, #button의)\n return `${translatedOwner}${targetMarker.marker}`;\n case 'particle':\n // Latin-script spaced genitive (Quechua `pa`): owner + space + marker\n // so the tokenizer can separate it from the selector.\n return `${translatedOwner} ${targetMarker.marker}`;\n case 'preposition':\n // Will be handled by caller - return marker + owner format\n // Store as special format to be processed later\n return `__POSS__${targetMarker.marker}__${translatedOwner}__POSS__`;\n default:\n return `${translatedOwner}'s`;\n }\n}\n\n// =============================================================================\n// Possessive Dot Notation\n// =============================================================================\n\n/**\n * Regex to match possessive dot notation patterns.\n * Matches: my.prop, its.prop, your.prop, me.prop, it.prop, you.prop\n * Also matches optional chaining: my?.prop, me?.prop, etc.\n */\nconst POSSESSIVE_DOT_REGEX = /^(my|its|your|me|it|you)(\\??\\..+)$/i;\n\n/**\n * Map pronoun forms to possessive adjective forms for dictionary lookup.\n */\nconst POSSESSIVE_DOT_PRONOUNS: Record<string, string> = {\n me: 'my',\n it: 'its',\n you: 'your',\n my: 'my',\n its: 'its',\n your: 'your',\n};\n\n/**\n * Translate possessive dot notation like my.textContent → mi.textContent.\n * Handles both possessive adjective forms (my, its, your) and pronoun forms (me, it, you).\n * Also handles optional chaining (my?.prop).\n * Returns null if the value doesn't match or no translation is available.\n */\nfunction translatePossessiveDotNotation(\n value: string,\n sourceLocale: string,\n targetLocale: string\n): string | null {\n const match = value.match(POSSESSIVE_DOT_REGEX);\n if (!match) return null;\n\n const possessiveWord = match[1].toLowerCase();\n const propertySuffix = match[2]; // \".textContent\" or \"?.textContent\"\n\n // Normalize to possessive adjective form for dictionary lookup\n const possessiveKey = POSSESSIVE_DOT_PRONOUNS[possessiveWord] || possessiveWord;\n const translated = translateWord(possessiveKey, sourceLocale, targetLocale);\n\n // Skip if translation is multi-word (can't prefix dot notation)\n if (translated.includes(' ')) return null;\n\n if (translated !== possessiveKey) {\n return translated + propertySuffix;\n }\n\n // Try original pronoun form if different from possessive key\n if (possessiveWord !== possessiveKey) {\n const alt = translateWord(possessiveWord, sourceLocale, targetLocale);\n if (alt !== possessiveWord && !alt.includes(' ')) {\n return alt + propertySuffix;\n }\n }\n\n return null;\n}\n\n// =============================================================================\n// Multi-Word Value Translation\n// =============================================================================\n\n/**\n * Translate a multi-word value, translating each word individually.\n * Handles possessives like \"my value\" → \"mi valor\" in Spanish.\n * Also handles 's possessive syntax like \"me's value\" → \"mi valor\".\n * Also handles possessive dot notation like \"my.textContent\" → \"mi.textContent\".\n */\nfunction translateMultiWordValue(\n value: string,\n sourceLocale: string,\n targetLocale: string\n): string {\n // Mask event-guard / attribute brackets (`[key is 'Escape']`): their contents\n // are expression syntax, not translatable keywords — translating `is` -> `ni`\n // etc. inside them breaks the guard. Restore verbatim after translation.\n if (value.includes('[')) {\n const guards: string[] = [];\n const masked = value.replace(/\\[[^\\]]*\\]/g, match => {\n guards.push(match);\n return `${guards.length - 1}`;\n });\n if (guards.length > 0) {\n const translated = translateMultiWordValue(masked, sourceLocale, targetLocale);\n return translated.replace(/(\\d+)/g, (_, n) => guards[Number(n)]);\n }\n }\n\n // If it's a single word, check for possessive then translate\n if (!value.includes(' ')) {\n // Check for possessive 's\n if (value.includes(\"'s\")) {\n return translatePossessive(value, sourceLocale, targetLocale);\n }\n // Check for possessive dot notation (my.prop, its.prop, me.prop, etc.)\n const dotResult = translatePossessiveDotNotation(value, sourceLocale, targetLocale);\n if (dotResult !== null) return dotResult;\n\n return translateWord(value, sourceLocale, targetLocale);\n }\n\n // Split into words and translate each\n const words = value.split(/\\s+/);\n const translated: string[] = [];\n let i = 0;\n\n while (i < words.length) {\n const word = words[i];\n\n // Check for possessive 's pattern FIRST (e.g., \"me's value\", \"#button's textContent\")\n // This must come before selector check because \"#button's\" starts with #\n if (word.includes(\"'s\")) {\n const possessiveResult = translatePossessive(word, sourceLocale, targetLocale);\n\n // Check if it's a prepositional possessive that needs reordering\n const prepMatch = possessiveResult.match(/^__POSS__(.+)__(.+)__POSS__$/);\n if (prepMatch && i + 1 < words.length) {\n // Prepositional: \"X's Y\" → \"Y marker X\" (e.g., \"textContent de #button\")\n const marker = prepMatch[1];\n const owner = prepMatch[2];\n const property = words[i + 1];\n const translatedProperty = translateWord(property, sourceLocale, targetLocale);\n translated.push(`${translatedProperty} ${marker} ${owner}`);\n i += 2; // Skip property since we consumed it\n continue;\n } else if (prepMatch) {\n // No property following - just output owner with marker prefix\n const marker = prepMatch[1];\n const owner = prepMatch[2];\n translated.push(`${marker} ${owner}`);\n i++;\n continue;\n }\n\n // Suffix-style possessive (Japanese, Korean, etc.) or pronoun\n translated.push(possessiveResult);\n i++;\n continue;\n }\n\n // Skip pure CSS selectors and numbers (but NOT possessives which were handled above)\n if (/^[#.<@]/.test(word) || /^\\d+/.test(word)) {\n translated.push(word);\n i++;\n continue;\n }\n\n // Skip quoted strings\n if (/^[\"'].*[\"']$/.test(word)) {\n translated.push(word);\n i++;\n continue;\n }\n\n // Check for possessive dot notation (my.prop, its.prop, me.prop, etc.)\n const dotResult = translatePossessiveDotNotation(word, sourceLocale, targetLocale);\n if (dotResult !== null) {\n translated.push(dotResult);\n i++;\n continue;\n }\n\n translated.push(translateWord(word, sourceLocale, targetLocale));\n i++;\n }\n\n return translated.join(' ');\n}\n\n/**\n * Translate all elements in a parsed statement\n */\nfunction translateElements(\n parsed: ParsedStatement,\n sourceLocale: string,\n targetLocale: string\n): void {\n for (const [_role, element] of parsed.roles) {\n // Always process possessive 's syntax, even for selectors\n // E.g., \"#button's textContent\" should translate the possessive\n if (element.value.includes(\"'s\")) {\n element.translated = translateMultiWordValue(element.value, sourceLocale, targetLocale);\n } else if (!element.isSelector && !element.isLiteral) {\n element.translated = translateMultiWordValue(element.value, sourceLocale, targetLocale);\n } else {\n element.translated = element.value;\n }\n }\n}\n\n// =============================================================================\n// Caret-scope masking (`^name on <selector>`)\n// =============================================================================\n\n/** Private-use sentinels bracketing a masked caret-scope index. */\nconst CARET_SCOPE_OPEN = '\\uE000';\nconst CARET_SCOPE_CLOSE = '\\uE001';\n\n/**\n * Match `^name on <selector>` and the scope's selector form (#id, .class,\n * <tag/>, [attr]). The `^name` is kept; only the ` on <selector>` scope is masked.\n */\nconst CARET_SCOPE_RE = /(\\^[A-Za-z_][\\w-]*)(\\s+on\\s+(?:[#.][\\w-]+|<[^>]*\\/>|\\[[^\\]]+\\]))/g;\n\n/**\n * Mask the ` on <selector>` scope of every `^name on <selector>` read behind an\n * opaque token attached to `^name`, so the overloaded `on` doesn't reach the\n * splitter / event-handler parser. Returns null when there's nothing to mask.\n */\nfunction maskCaretScopes(input: string): { masked: string; scopes: string[] } | null {\n const scopes: string[] = [];\n const masked = input.replace(CARET_SCOPE_RE, (_m, varTok: string, scope: string) => {\n const idx = scopes.length;\n scopes.push(scope);\n return `${varTok}${CARET_SCOPE_OPEN}${idx}${CARET_SCOPE_CLOSE}`;\n });\n return scopes.length > 0 ? { masked, scopes } : null;\n}\n\n/** Restore masked caret-scope tokens to their verbatim ` on <selector>` form. */\nfunction restoreCaretScopes(input: string, scopes: string[]): string {\n return input.replace(\n new RegExp(`${CARET_SCOPE_OPEN}(\\\\d+)${CARET_SCOPE_CLOSE}`, 'g'),\n (_m, n: string) => scopes[Number(n)] ?? ''\n );\n}\n\n// =============================================================================\n// Main Transformer\n// =============================================================================\n\nexport class GrammarTransformer {\n private sourceProfile: LanguageProfile;\n private targetProfile: LanguageProfile;\n\n constructor(sourceLocale: string = 'en', targetLocale: string) {\n const source = getProfile(sourceLocale);\n const target = getProfile(targetLocale);\n\n if (!source) throw new Error(`Unknown source locale: ${sourceLocale}`);\n if (!target) throw new Error(`Unknown target locale: ${targetLocale}`);\n\n this.sourceProfile = source;\n this.targetProfile = target;\n }\n\n /**\n * Transform a hyperscript statement from source to target language.\n * Handles compound statements with \"then\" by splitting, transforming each part,\n * and rejoining with the target language's \"then\" keyword.\n *\n * For multi-line input, preserves line structure (indentation, blank lines).\n */\n transform(input: string): string {\n const out = this.transformInternal(input);\n // Hebrew: repair a fronted accusative marker the body-split heuristics can emit\n // (`… את הוסף .x …` → `… הוסף את .x …`). Applied to the assembled output; idempotent\n // across the internal recursion. See repairHebrewFrontedAccusative.\n return this.targetProfile.code === 'he' ? repairHebrewFrontedAccusative(out) : out;\n }\n\n private transformInternal(input: string): string {\n // Caret-scoped variable reads (`^name on <selector>`) carry a second,\n // overloaded `on` that the splitter/event-parser would mistake for an event\n // or command boundary — mangling `put ^count on #host into me`. Mask the\n // ` on <selector>` scope behind an opaque token attached to `^name` so the\n // command reorders as if the patient were a single value, then restore it.\n // `on` is kept verbatim (the semantic caret-scope matcher accepts it by raw\n // value across languages — passthrough-alignment).\n const caret = maskCaretScopes(input);\n if (caret) {\n return restoreCaretScopes(this.transform(caret.masked), caret.scopes);\n }\n\n const targetThen = getTargetThenKeyword(this.targetProfile.code);\n\n // Inline JS blocks (`... js <raw js> end`) must be masked BEFORE any\n // splitting/reordering: the body is raw JavaScript, not hyperscript, so it\n // must never be tokenized, translated, or word-order reordered. (Single-line\n // only here; multi-line js bodies are handled with the behavior work.)\n if (!input.includes('\\n')) {\n const jsBlock = this.tryTransformJsBlock(input);\n if (jsBlock !== null) return jsBlock;\n\n // Event handler whose body leads with a command-modifier\n // (`on click async fetch …`, `on click once add …`): lift the modifier out\n // so the real verb isn't mistaken for the action and the SOV reorder keeps\n // the body patient-first (recoverable by the parser's SOV event extraction).\n const eventModifier = this.tryTransformEventWithModifierBody(input);\n if (eventModifier !== null) return eventModifier;\n\n // Event handler whose body is a block (`on <event> if/repeat/unless … end`):\n // the block body must be reordered as a self-contained unit, not shredded\n // across the event handler's role soup.\n const eventBlock = this.tryTransformEventWithBlockBody(input);\n if (eventBlock !== null) return eventBlock;\n\n // Event handler whose body is an un-terminated inline `unless` guard\n // (`on click unless I match .disabled toggle .selected`): route the guard\n // through the standalone block path so Hebrew's accusative marker lands on\n // the body command, not the condition. Hebrew-only; null elsewhere.\n const eventGuard = this.tryTransformEventWithUnlessGuard(input);\n if (eventGuard !== null) return eventGuard;\n }\n\n // Check if input has multi-line structure worth preserving\n const hasMultiLineStructure = input.includes('\\n');\n\n if (hasMultiLineStructure) {\n // Multi-line case - preserve structure (indentation, blank lines)\n const { parts, lineMetadata, partToLineIndex } = splitCompoundStatementWithMetadata(\n input,\n this.sourceProfile.code\n );\n\n const transformedParts = parts.map(part => this.transformSingle(part));\n\n return reconstructWithLineStructure(\n transformedParts,\n lineMetadata,\n partToLineIndex,\n targetThen\n );\n }\n\n // Single-line case - use existing logic\n const parts = splitCompoundStatement(input, this.sourceProfile.code);\n\n if (parts.length > 1) {\n const transformedParts = parts.map(part => this.transformSingle(part));\n return transformedParts.join(` ${targetThen} `);\n }\n\n // Single statement (no \"then\" splitting needed)\n return this.transformSingle(input);\n }\n\n /**\n * Transform a single hyperscript statement (no compound \"then\" chains).\n */\n private transformSingle(input: string): string {\n // 0. Reactive block? Route around parseStatement entirely so\n // block-syntactic tokens (live/when/unless/end) aren't treated\n // as command verbs or swept into role values, and so SOV/VSO\n // reorder applies only inside the body.\n const block = extractBlockStructure(input, this.sourceProfile.code);\n if (block) {\n return this.transformBlock(block);\n }\n\n // 0b. `set @attr to V on <scope>` (S1 tabs-aria): strip the trailing\n // `on <scope>`, transform the scope-less set normally, then re-insert\n // `on <scope>` where the semantic set patterns expect it.\n const setScope = this.transformSetWithScope(input);\n if (setScope !== null) {\n return setScope;\n }\n\n // 1. Parse into semantic roles\n const parsed = parseStatement(input, this.sourceProfile.code);\n if (!parsed) {\n return input; // Return unchanged if parsing fails\n }\n\n // 1b. Re-assign a mis-marked primary argument (e.g. `wait`'s duration) off the\n // default `patient` role so the target doesn't emit a spurious object-marker.\n // Runs before translation while `action` is still the English keyword.\n applyPrimaryRole(parsed, this.targetProfile);\n\n // 2. Translate individual words\n translateElements(parsed, this.sourceProfile.code, this.targetProfile.code);\n\n // 3. Find applicable rule\n const rule = this.findRule(parsed);\n\n // 4. Apply transformation\n if (rule?.transform.custom) {\n return rule.transform.custom(parsed, this.targetProfile);\n }\n\n // 5. Reorder according to target language's canonical order\n const roleOrder = rule?.transform.roleOrder || this.targetProfile.canonicalOrder;\n const reordered = reorderRoles(parsed.roles, roleOrder);\n\n // 6. Insert grammatical markers\n const shouldInsertMarkers = rule?.transform.insertMarkers ?? true;\n if (shouldInsertMarkers) {\n const result = insertMarkers(\n reordered,\n this.targetProfile.markers,\n this.targetProfile.adpositionType\n );\n // Use joinTokens for proper suffix/prefix attachment (Turkish -i, Quechua -ta, etc.)\n return joinTokens(result);\n }\n\n // 7. Join without markers (still use joinTokens for consistency)\n return joinTokens(reordered.map(e => e.translated || e.value));\n }\n\n /**\n * Detect and transform an inline JS block (`[on <event>] js <raw js> end`).\n *\n * The `js ... end` body is raw JavaScript: it must not be tokenized,\n * translated, or word-order reordered. We mask the whole block with a single\n * opaque placeholder, run the surrounding statement (the event-handler head,\n * if any) through the normal reorder pipeline so the placeholder lands in the\n * correct action position, then substitute the translated `js`/`end` keywords\n * around the verbatim body.\n *\n * Returns `null` (fall through to the normal path) when there is no js block,\n * no matching `end`, or trailing content after `end` (kept tight on purpose).\n */\n private tryTransformJsBlock(input: string): string | null {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n // The `js` / `end` keyword forms in the SOURCE language.\n const sourceJs = translateWord('js', 'en', src);\n const sourceEnd = translateWord('end', 'en', src).toLowerCase();\n\n const tokens = input.split(/\\s+/).filter(t => t.length > 0);\n // The js command token, optionally with a `(locals)` suffix: `js`, `js(me)`.\n const escapedJs = sourceJs.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const jsRe = new RegExp(`^${escapedJs}(\\\\(.*\\\\))?$`, 'i');\n const jsIdx = tokens.findIndex(t => jsRe.test(t));\n if (jsIdx === -1) return null;\n\n // First `end` after the js keyword closes the block (raw JS never contains a\n // bare hyperscript `end` token).\n let endIdx = -1;\n for (let i = jsIdx + 1; i < tokens.length; i++) {\n if (tokens[i].toLowerCase() === sourceEnd) {\n endIdx = i;\n break;\n }\n }\n if (endIdx === -1) return null;\n // Trailing content after `end` — leave for the normal path.\n if (endIdx !== tokens.length - 1) return null;\n\n const jsToken = tokens[jsIdx];\n const jsParen = jsToken.match(jsRe)?.[1] ?? '';\n const jsKeywordRaw = jsParen ? jsToken.slice(0, jsToken.length - jsParen.length) : jsToken;\n\n const body = tokens.slice(jsIdx + 1, endIdx).join(' ');\n const targetJs = translateWord(jsKeywordRaw, src, dst) + jsParen;\n const targetEnd = translateWord(tokens[endIdx], src, dst);\n const replacement = [targetJs, body, targetEnd].filter(s => s.length > 0).join(' ');\n\n const before = tokens.slice(0, jsIdx);\n // Bare `js ... end` with no leading event-handler head: emit directly.\n if (before.length === 0) return replacement;\n\n // Mask the block as one opaque action token, reorder the surrounding\n // statement, then restore the verbatim block.\n const placeholder = 'JSBLOCKPLACEHOLDER';\n const reordered = this.transformSingle([...before, placeholder].join(' '));\n if (!reordered.includes(placeholder)) return null; // unexpected — fall through\n return reordered.replace(placeholder, replacement);\n }\n\n /**\n * Transform an event handler whose body is a block command\n * (`on <event> [from <src>] {if|repeat|unless|while|for} … end`).\n *\n * `parseEventHandler` would treat the block keyword as the action and sweep the\n * condition/body into role values, then reorder them — shredding the block\n * (`if event.shiftKey call submitAndContinue() end` → scattered tokens). Instead\n * we mask the whole block as an opaque action placeholder, reorder the event\n * head normally, transform the block as a self-contained unit, and restitch.\n *\n * Returns `null` (fall through) when the input isn't an event handler, has no\n * block-keyword body, or has no closing `end`.\n */\n private tryTransformEventWithBlockBody(input: string): string | null {\n const tokens = tokenize(input, this.sourceProfile);\n if (tokens.length === 0) return null;\n if (!EVENT_KEYWORDS.has(tokens[0]?.toLowerCase())) return null;\n\n let blockIdx = -1;\n for (let i = 1; i < tokens.length; i++) {\n if (BLOCK_BODY_KEYWORDS.has(tokens[i].toLowerCase())) {\n blockIdx = i;\n break;\n }\n }\n if (blockIdx <= 0) return null;\n // Only handle the explicitly-terminated form; un-terminated bodies\n // (`on click unless X toggle Y`) keep the existing path.\n if (tokens[tokens.length - 1].toLowerCase() !== 'end') return null;\n\n const eventHead = tokens.slice(0, blockIdx);\n const blockTokens = tokens.slice(blockIdx);\n\n // Event heads carrying a `from <source>` modifier (`on keydown[...] from\n // .modal if … end`): for SVO/SOV targets, route them through this block-body\n // path too — masking the block and emitting the event clause (incl. the\n // translated `from <source>`, which `transformSingle` → `parseEventHandler`\n // already reorders) first, then the transformed block. This keeps the if-block\n // body from being shredded across the event handler's roles and properly\n // translates its inner keywords (`in`/`focus`/`first`/positional); the old\n // exclusion left them English and mangled the order (this is what cleared\n // `focus-trap` in tr). VSO targets (ar, tl) are kept on the existing path:\n // there the event-first emission with a `from`-source reorders incorrectly and\n // regresses `focus-trap`/`window-keydown`, while the existing path already\n // parses them. So the `from`-source exclusion is scoped to VSO only.\n if (this.targetProfile.wordOrder === 'VSO' && eventHead.some(t => t.toLowerCase() === 'from')) {\n return null;\n }\n\n const placeholder = 'EVENTBLOCKPLACEHOLDER';\n const headOut = this.transformSingle([...eventHead, placeholder].join(' '));\n if (!headOut.includes(placeholder)) return null;\n\n const blockOut = this.transformBlockBody(blockTokens);\n\n // Always emit the event clause first, then the block. An event handler's\n // event is a leading delimiter, and the semantic parser only matches a\n // block body when it follows the event — even in verb-first (VSO) languages\n // whose normal command order would push the event to the end. So strip the\n // placeholder out of the (possibly reordered) head and append the block,\n // rather than substituting in place.\n const eventClause = headOut.replace(placeholder, '').replace(/\\s+/g, ' ').trim();\n return [eventClause, blockOut].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform an event handler whose body is an inline `unless` guard with NO\n * `end` (`on <event> unless <cond> <body>` — the `unless-condition` shape).\n *\n * Object-marking SVO targets (he, zh). `parseEventHandler` reads `unless` as the\n * action and sweeps the whole `<cond> <body>` tail into a single `patient` blob;\n * the target then prefixes that blob with its object marker — Hebrew's accusative\n * את (`… אלא את I match .disabled מתג .selected`) or Chinese's BA particle 把\n * (`… 除非 把 I match .disabled 切换 .selected`) — and the inner toggle loses its\n * own marker. The semantic parser can't recover the guard from that: the marker\n * ahead of the condition blocks the `unless` pattern AND the now-markerless body\n * command fails its object-marked toggle pattern, so the body collapses (`unless`\n * dropped). Marker-less languages (de/it/ar/pl) tolerate the same role-blob and\n * stay faithful, so this is an object-marker artifact, not a general parse gap.\n *\n * The standalone `unless <cond> <body>` path already produces the correct shape\n * (`extractBlockStructure` → `transformBlock`: condition kept marker-free, body\n * command keeps its marker — he `אלא I match .disabled מתג את .selected`, zh\n * `除非 I match .disabled 切换 把 .selected`). So we split the event head off,\n * transform the guard through that path, and emit the event clause first (he and\n * zh are both SVO — event leads). Returns `null` (fall through) when the input\n * isn't an object-marking event handler with an un-terminated inline `unless`\n * guard.\n */\n private tryTransformEventWithUnlessGuard(input: string): string | null {\n // SVO object-marking targets only — these front the unless tail with an object\n // marker (he את / zh 把) that breaks the parse. Event-leads emission below\n // assumes SVO, so SOV/VSO object-markers (ja/ko/tr/ar) are intentionally out.\n if (!UNLESS_GUARD_OBJECT_MARKING_LOCALES.has(this.targetProfile.code)) return null;\n\n const tokens = tokenize(input, this.sourceProfile);\n if (tokens.length === 0) return null;\n if (!EVENT_KEYWORDS.has(tokens[0]?.toLowerCase())) return null;\n\n let guardIdx = -1;\n for (let i = 1; i < tokens.length; i++) {\n if (tokens[i].toLowerCase() === 'unless') {\n guardIdx = i;\n break;\n }\n }\n if (guardIdx <= 0) return null;\n // The terminated form (`… unless … end`) is handled by\n // tryTransformEventWithBlockBody's masking path; only take the inline guard.\n if (tokens[tokens.length - 1].toLowerCase() === 'end') return null;\n\n const eventHead = tokens.slice(0, guardIdx);\n const guard = tokens.slice(guardIdx).join(' ');\n\n // `unless` is a BLOCK_HEAD keyword, so transform() routes the guard through\n // extractBlockStructure → transformBlock (the standalone shape that parses).\n const guardOut = this.transform(guard);\n if (!guardOut) return null;\n\n const placeholder = 'EVENTGUARDPLACEHOLDER';\n const headOut = this.transformSingle([...eventHead, placeholder].join(' '));\n if (!headOut.includes(placeholder)) return null;\n const eventClause = headOut.replace(placeholder, '').replace(/\\s+/g, ' ').trim();\n return [eventClause, guardOut].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform an event handler whose body leads with a command-modifier\n * (`on <event> [from <src>] {async|once|debounced [at N]|throttled [at N]} <body>`).\n *\n * `parseEventHandler` reads the first token after the event as the **action**, so\n * a leading modifier is mistaken for the verb and the real verb (`fetch`/`add`) is\n * swept into the patient. For SOV targets the reorder then surfaces that verb\n * **first** (`取得 /api/data を クリック …`), and the semantic parser matches the\n * leading `<verb> <patient>` with the low-priority `*-generated-verb-first`\n * command pattern — returning a bare command and discarding the event + the rest\n * of the body (degenerate parse).\n *\n * Instead, lift the modifier out, transform the modifier-free handler through the\n * normal path (which keeps the body in canonical patient-first SOV order so the\n * event sits mid-stream and the existing SOV event-extraction recovers it), then\n * re-emit the modifier as a **leading English literal**. The semantic parser\n * strips a leading `once`/`debounced`/`throttled` (`extractStandaloneModifiers`)\n * and an `async` anywhere (`stripAsyncModifier`) before parsing, so the modifier\n * is consumed as handler metadata rather than shadowing the body.\n *\n * Returns `null` (fall through) when the input isn't an event handler or the body\n * doesn't lead with a modifier — leaving simple/Mode-B handlers byte-identical.\n */\n private tryTransformEventWithModifierBody(input: string): string | null {\n // The verb-first degenerate parse this works around is specific to SOV\n // reorder: only there does a leading modifier displace the patient-first\n // order and surface the verb first. SVO/VSO/V2/other targets keep the body\n // in an order the parser already handles, so leave them byte-identical.\n if (this.targetProfile.wordOrder !== 'SOV') return null;\n\n const tokens = tokenize(input, this.sourceProfile);\n if (tokens.length === 0) return null;\n if (!EVENT_KEYWORDS.has(tokens[0]?.toLowerCase())) return null;\n\n // Walk past the event clause head: event keyword, event token, any\n // `or`-conjoined events, and an optional `from <source>` modifier — mirroring\n // parseEventHandler's head parsing — to find where the body begins.\n let i = 1; // past the event keyword\n if (!tokens[i]) return null;\n i++; // past the event token\n while (tokens[i] && EVENT_CONJUNCTIONS.has(tokens[i].toLowerCase()) && tokens[i + 1]) {\n i += 2;\n }\n if (tokens[i]?.toLowerCase() === 'from' && tokens[i + 1]) {\n i++; // skip 'from'\n // Collect source tokens until a command verb or a body modifier.\n while (\n tokens[i] &&\n !ENGLISH_COMMANDS.has(tokens[i].toLowerCase()) &&\n !BODY_MODIFIER_KEYWORDS.has(tokens[i].toLowerCase())\n ) {\n i++;\n }\n }\n\n const modWord = tokens[i]?.toLowerCase();\n if (!modWord || !BODY_MODIFIER_KEYWORDS.has(modWord)) return null;\n\n // Consume the modifier phrase. `debounced`/`throttled` may carry an optional\n // `at <duration>` (or a bare duration). `async`/`once` are single tokens.\n const modStart = i;\n let modEnd = i + 1;\n if (modWord !== 'async' && modWord !== 'once') {\n if (tokens[modEnd]?.toLowerCase() === 'at') modEnd++;\n if (tokens[modEnd] && /^\\d+(ms|s|m)?$/.test(tokens[modEnd])) modEnd++;\n }\n\n const modifierPhrase = tokens.slice(modStart, modEnd).join(' ');\n const rebuilt = [...tokens.slice(0, modStart), ...tokens.slice(modEnd)].join(' ');\n\n // A handler with only a modifier and no body has nothing to keep patient-first.\n if (tokens.length - (modEnd - modStart) <= 2) return null;\n\n // Re-run the full transform on the modifier-free handler so then-chains and\n // juxtaposed bodies route through the existing (working) paths. The rebuilt\n // input no longer leads with a modifier, so this never re-enters here.\n const bodyOut = this.transform(rebuilt);\n return [modifierPhrase, bodyOut].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform a `set <stuff> on <scope>` clause (S1 tabs-aria). The trailing\n * `on <scope>` is the element(s) the attribute is set on — kept attached by\n * splitOnCommandBoundaries. The semantic parser captures it as a `scope` role\n * via the passthrough literal `on` (setSchema's scope markerOverride is `on`\n * in every language), so `on` is emitted verbatim and only the scope *value*\n * is translated (selectors pass through; `me`/`it`/`you` translate to the\n * native reference, which the parser also accepts).\n *\n * Positioning matches where the set patterns expect the scope: at the clause\n * end for verb-first orders (SVO/VSO), and immediately before the clause-final\n * verb for SOV (the generated SOV pattern is `{dest} {patient} on {scope}\n * {verb}`). Returns null (fall through) when there is no trailing `on <scope>`.\n *\n * Source is English in the sync-translations pipeline, so the `set` verb and\n * `on` marker are matched as English literals.\n */\n private transformSetWithScope(input: string): string | null {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const m = input.match(/^(.*\\bset\\b.*\\S)\\s+on\\s+([#.<@[]\\S*|me|it|you)\\s*$/i);\n if (!m) return null;\n const head = m[1];\n const scopeRaw = m[2];\n\n // Transform the scope-less clause via the normal path; `head` no longer ends\n // in `on <scope>`, so this never re-enters transformSetWithScope.\n const headOut = this.transformSingle(head);\n\n const scopeT = /^[#.<@[]/.test(scopeRaw) ? scopeRaw : translateWord(scopeRaw, src, dst);\n\n // SOV needs the scope positioned per how the semantic set patterns match:\n // - Event-handler set (`on <event> set …`): the dest-first SOV event-handler\n // pattern is verb-MEDIAL and carries an optional trailing `[on {scope}]`,\n // so append the scope at the clause end.\n // - Standalone then-clause set: SOV emits verb-MEDIAL (`{dest} {verb}\n // {patient}`), but the only command set pattern with scope is verb-LAST\n // (`{dest} {patient} on {scope} {verb}`). Move the medial verb to the end\n // and place `on {scope}` before it, so the generated command pattern matches.\n if (this.targetProfile.wordOrder === 'SOV') {\n const verb = translateWord('set', 'en', dst);\n const firstTok = input.trim().split(/\\s+/)[0]?.toLowerCase();\n const isEventHandler = !!firstTok && EVENT_KEYWORDS.has(firstTok);\n const toks = headOut.split(/\\s+/).filter(Boolean);\n if (!isEventHandler) {\n // Standalone then-clause set: SOV emits verb-MEDIAL; move the verb to the\n // end and place `on {scope}` before it so the verb-last command set\n // pattern (scope before verb) matches.\n const vIdx = toks.indexOf(verb);\n if (vIdx >= 0) {\n toks.splice(vIdx, 1);\n toks.push('on', scopeT, verb);\n return toks.join(' ');\n }\n } else if (toks.length > 0 && toks[toks.length - 1] === verb) {\n // Event-handler set whose verb is clause-final (e.g. qu\n // `{dest} ta {patient} man {event} pi {verb}`): the parser extracts the\n // event and matches the body as a verb-last command, so the scope must\n // sit before the verb. Verb-MEDIAL SOV event handlers (ja/ko/tr/bn/hi)\n // fall through to the append branch, where their fused event-handler set\n // pattern carries the trailing `[on {scope}]` group.\n toks.splice(toks.length - 1, 0, 'on', scopeT);\n return toks.join(' ');\n }\n return `${headOut} on ${scopeT}`;\n }\n\n // Verb-first (SVO/VSO/V2): append `on <scope>` at the clause end, which the\n // trailing `[on {scope}]` group on the set patterns matches.\n return `${headOut} on ${scopeT}`;\n }\n\n /**\n * Transform a self-contained block command (`{head} {clause?} {body} {end}`),\n * where head ∈ {if, repeat, unless, …}. The clause (condition / `until event …`)\n * runs up to the first command verb and is translated word-by-word; the body is\n * recursively transformed (so its inner commands reorder for the target); the\n * head/tail keywords are translated. The block is never word-order reordered as\n * a whole — delimiters stay at the edges regardless of target word order.\n */\n private transformBlockBody(blockTokens: string[]): string {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const head = blockTokens[0];\n const hasEnd = blockTokens[blockTokens.length - 1]?.toLowerCase() === 'end';\n const tail = hasEnd ? blockTokens[blockTokens.length - 1] : '';\n const inner = blockTokens.slice(1, hasEnd ? -1 : undefined);\n\n // Skip predicate-adjective positions (`… is empty`): the adjective is\n // part of the condition clause, not the body's first verb — cutting there\n // displaced it into the next command's argument zone (empty ×8 bn/hi/tr).\n const commands = getCommandKeywordsForLocale(src);\n const copulas = getCopulasForLocale(src);\n let bodyStart = inner.findIndex(\n (t, i) => commands.has(t.toLowerCase()) && !isPredicateAdjectivePosition(inner, i, copulas)\n );\n if (bodyStart < 0) bodyStart = inner.length;\n\n const clause = inner.slice(0, bodyStart).join(' ');\n const bodyTokens = inner.slice(bodyStart);\n\n const headT = translateWord(head, src, dst);\n const tailT = tail ? translateWord(tail, src, dst) : '';\n const clauseT = clause ? translateMultiWordValue(clause, src, dst) : '';\n const bodyT = this.transformConditionalBody(bodyTokens);\n\n return [headT, clauseT, bodyT, tailT].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform an `if`/`unless` block body, splitting it at a top-level `else` into\n * a then-branch and an else-branch so each is reordered as a self-contained unit\n * and the `else` keyword itself is translated. Without this, the body is reordered\n * as one stream: `else` rides along glued to the preceding clause (and, when that\n * clause begins with a selector, is marked a selector and left *untranslated*),\n * and a spurious `then` is inserted around it — both of which break the target\n * text and the downstream parse. The split is depth-aware so an `else` belonging\n * to a nested block is not mistaken for this block's separator. Bodies without an\n * `else` transform exactly as before.\n */\n private transformConditionalBody(bodyTokens: string[]): string {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const sourceElse = translateWord('else', 'en', src).toLowerCase();\n let depth = 0;\n let elseIdx = -1;\n for (let i = 0; i < bodyTokens.length; i++) {\n const t = bodyTokens[i].toLowerCase();\n if (BLOCK_BODY_KEYWORDS.has(t)) depth++;\n else if (t === 'end' && depth > 0) depth--;\n else if (t === sourceElse && depth === 0) {\n elseIdx = i;\n break;\n }\n }\n\n if (elseIdx === -1) {\n const body = bodyTokens.join(' ');\n return body ? this.transform(body) : '';\n }\n\n const thenBranch = bodyTokens.slice(0, elseIdx).join(' ');\n const elseBranch = bodyTokens.slice(elseIdx + 1).join(' ');\n const elseT = translateWord(bodyTokens[elseIdx], src, dst);\n\n return [\n thenBranch ? this.transform(thenBranch) : '',\n elseT,\n elseBranch ? this.transform(elseBranch) : '',\n ]\n .filter(s => s.length > 0)\n .join(' ');\n }\n\n /**\n * Translate a reactive block by translating the head/tail/connector\n * via the dictionary, recursively transforming the body through the\n * regular pipeline, and rejoining in source-language position order.\n * Block-syntactic tokens are never reordered: they're delimiters, not\n * arguments, and authors expect them at start/end positions\n * regardless of target word order.\n */\n private transformBlock(block: BlockStructure): string {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const head = translateWord(block.headKeyword, src, dst);\n const tail = block.tailKeyword ? translateWord(block.tailKeyword, src, dst) : '';\n const connector = block.connector ? translateWord(block.connector, src, dst) : '';\n const prefix = block.prefixExpr ? translateMultiWordValue(block.prefixExpr, src, dst) : '';\n\n // Recurse through `transform()` (not `transformSingle`) so the body\n // gets `then`-splitting and nested-block handling for free.\n const body = this.transform(block.body);\n\n return [head, prefix, connector, body, tail].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Find the best matching rule for this statement\n */\n private findRule(parsed: ParsedStatement): GrammarRule | undefined {\n if (!this.targetProfile.rules) return undefined;\n\n const matchingRules = this.targetProfile.rules\n .filter(rule => this.matchesRule(parsed, rule))\n .sort((a, b) => b.priority - a.priority);\n\n return matchingRules[0];\n }\n\n /**\n * Check if a parsed statement matches a rule\n */\n private matchesRule(parsed: ParsedStatement, rule: GrammarRule): boolean {\n const { match } = rule;\n\n // Check required roles\n for (const role of match.requiredRoles) {\n if (!parsed.roles.has(role)) {\n return false;\n }\n }\n\n // Check command match if specified\n if (match.commands && match.commands.length > 0) {\n const action = parsed.roles.get('action');\n if (!action) return false;\n\n const actionValue = action.value.toLowerCase();\n if (!match.commands.some(cmd => cmd.toLowerCase() === actionValue)) {\n return false;\n }\n }\n\n // Check custom predicate\n if (match.predicate && !match.predicate(parsed)) {\n return false;\n }\n\n return true;\n }\n}\n\n// =============================================================================\n// Convenience Functions\n// =============================================================================\n\n/**\n * Transform hyperscript from English to target language\n */\nexport function toLocale(input: string, targetLocale: string): string {\n const transformer = new GrammarTransformer('en', targetLocale);\n return transformer.transform(input);\n}\n\n/**\n * Transform hyperscript from source language to English\n */\nexport function toEnglish(input: string, sourceLocale: string): string {\n const transformer = new GrammarTransformer(sourceLocale, 'en');\n return transformer.transform(input);\n}\n\n/**\n * Transform between any two languages.\n *\n * Uses direct translation for supported language pairs (ja↔zh, es↔pt, ko↔ja),\n * falling back to English pivot for other pairs.\n */\nexport function translate(input: string, sourceLocale: string, targetLocale: string): string {\n if (sourceLocale === targetLocale) return input;\n if (sourceLocale === 'en') return toLocale(input, targetLocale);\n if (targetLocale === 'en') return toEnglish(input, sourceLocale);\n\n // Try direct translation for supported pairs\n if (hasDirectMapping(sourceLocale, targetLocale)) {\n return translateDirect(input, sourceLocale, targetLocale);\n }\n\n // Fallback: Via English pivot\n const english = toEnglish(input, sourceLocale);\n return toLocale(english, targetLocale);\n}\n\n/**\n * Direct translation between language pairs without English pivot.\n * More accurate for closely related languages (ja↔zh, es↔pt).\n */\nfunction translateDirect(input: string, sourceLocale: string, targetLocale: string): string {\n const mapping = getDirectMapping(sourceLocale, targetLocale);\n if (!mapping) {\n // Fallback to pivot translation\n return toLocale(toEnglish(input, sourceLocale), targetLocale);\n }\n\n // Tokenize input\n const tokens = input.split(/\\s+/);\n\n // Translate each token using direct mapping\n const translated = tokens.map(token => {\n // Preserve CSS selectors and literals\n if (token.startsWith('#') || token.startsWith('.') || token.startsWith('@')) {\n return token;\n }\n if (token.startsWith('\"') || token.startsWith(\"'\")) {\n return token;\n }\n\n // Look up in direct mapping\n const directTranslation = mapping.words[token];\n if (directTranslation) {\n return directTranslation;\n }\n\n // Check for suffix-attached tokens (e.g., \"#count-ta\" in Quechua)\n const suffixMatch = token.match(/^(.+?)(-.+)$/);\n if (suffixMatch) {\n const [, base, suffix] = suffixMatch;\n const translatedBase = mapping.words[base] || base;\n return translatedBase + suffix;\n }\n\n // Return unchanged if no mapping found\n return token;\n });\n\n return translated.join(' ');\n}\n\n// =============================================================================\n// Examples (for testing)\n// =============================================================================\n\nexport const examples = {\n english: {\n eventHandler: 'on click increment #count',\n putInto: 'put my value into #output',\n toggle: 'toggle .active',\n wait: 'wait 2 seconds',\n },\n\n // Expected outputs (approximate, for reference)\n japanese: {\n eventHandler: '#count を クリック で 増加',\n putInto: '私の 値 を #output に 置く',\n toggle: '.active を 切り替え',\n wait: '2秒 待つ',\n },\n\n chinese: {\n eventHandler: '当 点击 时 增加 #count',\n putInto: '把 我的值 放 到 #output',\n toggle: '切换 .active',\n wait: '等待 2秒',\n },\n\n arabic: {\n eventHandler: 'زِد #count عند النقر',\n putInto: 'ضع قيمتي في #output',\n toggle: 'بدّل .active',\n wait: 'انتظر ثانيتين',\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/parser/create-provider.ts","../src/dictionaries/es.ts","../src/parser/es.ts","../src/dictionaries/ja.ts","../src/parser/ja.ts","../src/dictionaries/fr.ts","../src/parser/fr.ts","../src/dictionaries/de.ts","../src/parser/de.ts","../src/dictionaries/ar.ts","../src/parser/ar.ts","../src/dictionaries/ko.ts","../src/parser/ko.ts","../src/dictionaries/zh.ts","../src/parser/zh.ts","../src/dictionaries/tr.ts","../src/parser/tr.ts","../src/dictionaries/id.ts","../src/parser/id.ts","../src/dictionaries/qu.ts","../src/parser/qu.ts","../src/dictionaries/sw.ts","../src/parser/sw.ts","../src/dictionaries/pt.ts","../src/parser/pt.ts","../src/dictionaries/it.ts","../src/parser/it.ts","../src/dictionaries/vi.ts","../src/parser/vi.ts","../src/dictionaries/pl.ts","../src/parser/pl.ts","../src/dictionaries/ru.ts","../src/parser/ru.ts","../src/dictionaries/uk.ts","../src/parser/uk.ts","../src/dictionaries/hi.ts","../src/parser/hi.ts","../src/dictionaries/bn.ts","../src/parser/bn.ts","../src/dictionaries/th.ts","../src/parser/th.ts","../src/dictionaries/ms.ts","../src/parser/ms.ts","../src/dictionaries/tl.ts","../src/parser/tl.ts","../src/dictionaries/he.ts","../src/parser/he.ts","../src/parser/locale-manager.ts","../src/dictionaries/en.ts","../src/grammar/types.ts","../src/grammar/profiles/index.ts","../src/grammar/direct-mappings.ts","../src/dictionaries/index.ts","../src/types.ts","../src/grammar/transformer.ts"],"names":["en","es","ja","ko","zh","fr","de","ar","tr","id","pt","qu","sw","it","vi","pl","bn","th","ms","tl","he","normalizedIndents","result","translated","parts"],"mappings":"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","file":"browser.cjs","sourcesContent":["// packages/i18n/src/constants.ts\n\n/**\n * Shared Constants for i18n Package\n *\n * Centralizes keyword definitions to eliminate duplication across\n * transformer.ts, create-provider.ts, and other modules.\n */\n\nimport type { SemanticRole } from './grammar/types';\n\n// =============================================================================\n// English Modifier → Semantic Role Mappings\n// =============================================================================\n\n/**\n * Maps English modifier keywords to their semantic roles.\n * Used by both the grammar transformer and keyword provider.\n */\nexport const ENGLISH_MODIFIER_ROLES: Readonly<Record<string, SemanticRole>> = {\n to: 'destination',\n into: 'destination',\n from: 'source',\n with: 'style',\n by: 'quantity',\n as: 'method',\n on: 'event',\n over: 'duration',\n for: 'duration',\n} as const;\n\n/**\n * Maps a command verb to its **primary** semantic role — the role of the\n * command's first/leading argument when no explicit modifier keyword marks it.\n *\n * The generic argument parser in the transformer defaults the first unmarked\n * argument to `patient`, which is correct for the majority of commands\n * (`toggle .x`, `add .x`, …) but wrong for commands whose leading argument is a\n * non-patient — e.g. `wait <duration>`. Marking a duration as a patient emits a\n * spurious object-marker in the target language (Chinese `等待 把 1s`, ungrammatical;\n * Japanese `1s を 待つ`; Korean `1s 를 대기`), which the semantic parser then fails to\n * match — dropping the command.\n *\n * Only commands whose primary role is **not** `patient` are listed here (the\n * `patient` default already covers the rest). Mirrors the `primaryRole` field of\n * the semantic package's command schemas (`@lokascript/semantic`); kept in sync by\n * `schema-alignment.test.ts` so this local copy can't drift without the bundle\n * having to pull in the whole semantic graph.\n *\n * @see packages/i18n/src/schema-alignment.test.ts\n * @see docs-internal/ZH_BLOCK_BODY_SCOPE.md (#1 — transformer role model)\n */\nexport const COMMAND_PRIMARY_ROLES: Readonly<Record<string, SemanticRole>> = {\n set: 'destination',\n on: 'event',\n trigger: 'event',\n send: 'event',\n wait: 'duration',\n fetch: 'source',\n get: 'source',\n if: 'condition',\n unless: 'condition',\n while: 'condition',\n repeat: 'loopType',\n go: 'destination',\n scroll: 'destination',\n tell: 'destination',\n default: 'destination',\n swap: 'destination',\n // morph deliberately absent: its schema primaryRole is `patient` (the\n // element being morphed — aligned with the transformer's patient marking\n // in the session-9 role-layout swap), and patient is the default.\n bind: 'destination',\n} as const;\n\n/**\n * English modifier keywords (derived from ENGLISH_MODIFIER_ROLES)\n */\nexport const ENGLISH_MODIFIERS: Set<string> = new Set([\n 'to',\n 'from',\n 'into',\n 'with',\n 'at',\n 'in',\n 'of',\n 'as',\n 'by',\n 'before',\n 'after',\n 'without',\n]);\n\n// =============================================================================\n// English Commands\n// =============================================================================\n\n/**\n * English commands - the canonical set that the runtime understands.\n */\nexport const ENGLISH_COMMANDS: Set<string> = new Set([\n 'add',\n 'append',\n 'async',\n 'beep',\n 'blur', // v0.9.90 phase 1\n 'break',\n 'breakpoint', // v0.9.90 phase 1\n 'call',\n 'clear', // v0.9.90 phase 1\n 'close', // v0.9.90 phase 1\n 'continue',\n 'decrement',\n 'default',\n 'empty', // v0.9.90 phase 1\n 'exit',\n 'fetch',\n 'focus', // v0.9.90 phase 1\n 'for',\n 'get',\n 'go',\n 'halt',\n 'hide',\n 'if',\n 'increment',\n 'install',\n 'js',\n 'log',\n 'make',\n 'measure',\n 'morph',\n 'open', // v0.9.90 phase 1\n 'pick',\n 'process',\n 'push',\n 'put',\n 'remove',\n 'render',\n 'repeat',\n 'replace',\n 'reset', // v0.9.90 phase 1\n 'return',\n 'select', // v0.9.90 phase 1\n 'send',\n 'set',\n 'settle',\n 'show',\n 'swap',\n 'take',\n 'tell',\n 'throw',\n 'toggle',\n 'transition',\n 'trigger',\n 'unless',\n 'wait',\n // v2.x reactive + realtime + service-worker DSL commands\n 'live',\n 'bind',\n 'eventsource',\n 'socket',\n 'worker',\n 'intercept',\n]);\n\n// =============================================================================\n// English Keywords (Non-Commands)\n// =============================================================================\n\n/**\n * English keywords that are not commands.\n */\nexport const ENGLISH_KEYWORDS: Set<string> = new Set([\n // Flow control\n 'then',\n 'else',\n 'end',\n 'and',\n 'or',\n 'not',\n // Conditionals\n 'if',\n 'unless',\n // Loops\n 'for',\n 'while',\n 'until',\n 'forever',\n 'times',\n 'each',\n 'index',\n // Prepositions\n 'in',\n 'to',\n 'from',\n 'into',\n 'with',\n 'without',\n 'of',\n 'at',\n 'by',\n // Conversion\n 'as',\n // Comparison\n 'matches',\n 'contains',\n 'is',\n 'exists',\n // Events\n 'on',\n 'when',\n 'every',\n 'event',\n // Definitions\n 'init',\n 'def',\n 'behavior',\n // Scope\n 'global',\n 'local',\n // Articles\n 'the',\n 'a',\n 'an',\n 'first',\n 'last',\n // Position\n 'start',\n 'before',\n 'after',\n]);\n\n// =============================================================================\n// Universal English Keywords (DOM/HTML Standards)\n// =============================================================================\n\n/**\n * English keywords that should always be recognized, even in non-English locales.\n * These are HTML/DOM standard terms that developers worldwide use.\n */\nexport const UNIVERSAL_ENGLISH_KEYWORDS: Set<string> = new Set([\n // DOM events (HTML spec)\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'keydown',\n 'keyup',\n 'keypress',\n 'focus',\n 'blur',\n 'change',\n 'input',\n 'submit',\n 'reset',\n 'load',\n 'unload',\n 'resize',\n 'scroll',\n 'touchstart',\n 'touchend',\n 'touchmove',\n 'touchcancel',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'contextmenu',\n 'wheel',\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n // Common abbreviations\n 'ms',\n 's',\n]);\n\n// =============================================================================\n// Logical Keywords\n// =============================================================================\n\n/**\n * English logical operator keywords.\n */\nexport const ENGLISH_LOGICAL_KEYWORDS: Set<string> = new Set([\n 'and',\n 'or',\n 'not',\n 'is',\n 'exists',\n 'matches',\n 'contains',\n 'then',\n 'else',\n]);\n\n// =============================================================================\n// Value Keywords\n// =============================================================================\n\n/**\n * English value keywords.\n */\nexport const ENGLISH_VALUE_KEYWORDS: Set<string> = new Set([\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'it',\n 'me',\n 'my',\n 'result',\n]);\n\n// =============================================================================\n// Expression Keywords\n// =============================================================================\n\n/**\n * English expression keywords - positional, traversal, and string operations.\n */\nexport const ENGLISH_EXPRESSION_KEYWORDS: Set<string> = new Set([\n // Positional\n 'first',\n 'last',\n 'next',\n 'previous',\n 'prev',\n 'at',\n 'random',\n // DOM traversal\n 'closest',\n 'parent',\n 'children',\n 'within',\n // Emptiness/existence\n 'no',\n 'empty',\n 'some',\n // String operations (multi-word)\n 'starts with',\n 'ends with',\n]);\n\n// =============================================================================\n// Conditional Keywords\n// =============================================================================\n\n/**\n * Conditional keywords across languages (for statement type identification).\n * Includes 'when'/'where' conditional modifiers and their translations.\n */\nexport const CONDITIONAL_KEYWORDS: Set<string> = new Set([\n // English\n 'if',\n 'unless',\n 'when',\n 'where',\n // Japanese\n 'もし',\n '時に',\n 'ときに',\n 'どこで',\n // Chinese\n '如果',\n '当',\n // Arabic\n 'إذا',\n 'عندما',\n 'حيث',\n // Spanish\n 'si',\n 'cuando',\n 'donde',\n // German\n 'wenn',\n 'wann',\n 'wo',\n // French\n 'quand',\n 'lorsque',\n 'où',\n // Portuguese\n 'quando',\n 'onde',\n // Turkish\n 'eğer',\n 'zaman',\n 'nerede',\n // Indonesian\n 'ketika',\n 'saat',\n 'dimana',\n // Korean\n '때',\n '어디서',\n // Quechua\n 'maypi',\n // Swahili\n 'wakati',\n 'wapi',\n]);\n\n/**\n * \"Then\" keywords across languages (for conditional parsing).\n */\nexport const THEN_KEYWORDS: Set<string> = new Set([\n 'then',\n 'それから',\n '那么',\n 'ثم',\n 'entonces',\n 'alors',\n 'dann',\n 'sonra',\n 'lalu',\n 'chayqa',\n 'kisha',\n]);\n","// packages/i18n/src/parser/create-provider.ts\n\nimport type { Dictionary } from '../types';\nimport type { KeywordProvider, KeywordProviderOptions } from './types';\nimport {\n ENGLISH_COMMANDS,\n ENGLISH_KEYWORDS,\n ENGLISH_MODIFIERS,\n ENGLISH_LOGICAL_KEYWORDS,\n ENGLISH_VALUE_KEYWORDS,\n ENGLISH_EXPRESSION_KEYWORDS,\n UNIVERSAL_ENGLISH_KEYWORDS,\n} from '../constants';\n\n/**\n * Creates a KeywordProvider from a dictionary.\n *\n * The provider creates reverse mappings (locale → English) for fast\n * resolution during parsing.\n *\n * @example\n * ```typescript\n * import { es } from '../dictionaries/es';\n * export const esKeywords = createKeywordProvider(es, 'es');\n * ```\n */\nexport function createKeywordProvider(\n dictionary: Dictionary,\n locale: string,\n options: KeywordProviderOptions = {}\n): KeywordProvider {\n const { allowEnglishFallback = true } = options;\n\n // Build reverse maps: locale keyword → English canonical\n const reverseCommands = new Map<string, string>();\n const reverseModifiers = new Map<string, string>();\n const reverseEvents = new Map<string, string>();\n const reverseLogical = new Map<string, string>();\n const reverseTemporal = new Map<string, string>();\n const reverseValues = new Map<string, string>();\n const reverseAttributes = new Map<string, string>();\n const reverseExpressions = new Map<string, string>();\n const reverseAll = new Map<string, string>();\n\n // Forward maps: English → locale keyword\n const forwardAll = new Map<string, string>();\n\n // Build reverse mappings from dictionary\n // Note: reverseAll uses priority - first category to claim a locale word wins\n function buildReverseMap(\n category: Record<string, string>,\n reverseMap: Map<string, string>,\n priority: boolean = false\n ): void {\n for (const [english, localeWord] of Object.entries(category)) {\n const normalizedLocale = localeWord.toLowerCase();\n reverseMap.set(normalizedLocale, english.toLowerCase());\n // Only set in reverseAll if not already claimed (priority) or if this is a priority category\n if (priority || !reverseAll.has(normalizedLocale)) {\n reverseAll.set(normalizedLocale, english.toLowerCase());\n }\n forwardAll.set(english.toLowerCase(), localeWord.toLowerCase());\n }\n }\n\n // Build all reverse maps\n // Priority order: commands first (highest priority for parsing), then logical, events, values\n // This ensures 'en' (Spanish) → 'on' (command) rather than 'in' (modifier)\n if (dictionary.commands) {\n buildReverseMap(dictionary.commands, reverseCommands, true);\n }\n if (dictionary.logical) {\n buildReverseMap(dictionary.logical, reverseLogical, true);\n }\n if (dictionary.events) {\n buildReverseMap(dictionary.events, reverseEvents);\n }\n if (dictionary.values) {\n buildReverseMap(dictionary.values, reverseValues);\n }\n if (dictionary.temporal) {\n buildReverseMap(dictionary.temporal, reverseTemporal);\n }\n // Modifiers last (lowest priority) - they often conflict with commands\n if (dictionary.modifiers) {\n buildReverseMap(dictionary.modifiers, reverseModifiers);\n }\n if (dictionary.attributes) {\n buildReverseMap(dictionary.attributes, reverseAttributes);\n }\n if (dictionary.expressions) {\n buildReverseMap(dictionary.expressions, reverseExpressions);\n }\n\n // Collect all locale commands and keywords for completions\n const localeCommands = new Set(reverseCommands.keys());\n const allLocaleKeywords = new Set(reverseAll.keys());\n\n // Add English keywords/commands if fallback is enabled\n if (allowEnglishFallback) {\n for (const cmd of ENGLISH_COMMANDS) {\n localeCommands.add(cmd);\n }\n for (const kw of ENGLISH_KEYWORDS) {\n allLocaleKeywords.add(kw);\n }\n for (const kw of UNIVERSAL_ENGLISH_KEYWORDS) {\n allLocaleKeywords.add(kw);\n }\n }\n\n return {\n locale,\n\n resolve(token: string): string | undefined {\n const normalized = token.toLowerCase();\n\n // Check if it's a locale keyword\n const english = reverseAll.get(normalized);\n if (english !== undefined) {\n return english;\n }\n\n // If English fallback is enabled, check if it's already English\n if (allowEnglishFallback) {\n if (ENGLISH_COMMANDS.has(normalized) || ENGLISH_KEYWORDS.has(normalized)) {\n return normalized;\n }\n // Universal keywords (DOM events, etc.) pass through\n if (UNIVERSAL_ENGLISH_KEYWORDS.has(normalized)) {\n return normalized;\n }\n }\n\n return undefined;\n },\n\n isCommand(token: string): boolean {\n const normalized = token.toLowerCase();\n\n // Check locale commands\n if (reverseCommands.has(normalized)) {\n return true;\n }\n\n // Check English commands if fallback enabled\n if (allowEnglishFallback && ENGLISH_COMMANDS.has(normalized)) {\n return true;\n }\n\n return false;\n },\n\n isKeyword(token: string): boolean {\n const normalized = token.toLowerCase();\n\n // Check locale keywords (modifiers, logical, temporal, values)\n if (\n reverseModifiers.has(normalized) ||\n reverseLogical.has(normalized) ||\n reverseTemporal.has(normalized) ||\n reverseValues.has(normalized)\n ) {\n return true;\n }\n\n // Check English keywords if fallback enabled\n if (allowEnglishFallback && ENGLISH_KEYWORDS.has(normalized)) {\n return true;\n }\n\n return false;\n },\n\n isEvent(token: string): boolean {\n const normalized = token.toLowerCase();\n\n // Check locale events\n if (reverseEvents.has(normalized)) {\n return true;\n }\n\n // Universal English events always accepted\n if (UNIVERSAL_ENGLISH_KEYWORDS.has(normalized)) {\n return true;\n }\n\n return false;\n },\n\n isModifier(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseModifiers.has(normalized) ||\n (allowEnglishFallback && ENGLISH_MODIFIERS.has(normalized))\n );\n },\n\n isLogical(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseLogical.has(normalized) ||\n (allowEnglishFallback && ENGLISH_LOGICAL_KEYWORDS.has(normalized))\n );\n },\n\n isValue(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseValues.has(normalized) ||\n (allowEnglishFallback && ENGLISH_VALUE_KEYWORDS.has(normalized))\n );\n },\n\n isExpression(token: string): boolean {\n const normalized = token.toLowerCase();\n return (\n reverseExpressions.has(normalized) ||\n (allowEnglishFallback && ENGLISH_EXPRESSION_KEYWORDS.has(normalized))\n );\n },\n\n getCommands(): string[] {\n return Array.from(localeCommands);\n },\n\n getKeywords(): string[] {\n return Array.from(allLocaleKeywords);\n },\n\n toLocale(englishKeyword: string): string | undefined {\n return forwardAll.get(englishKeyword.toLowerCase());\n },\n };\n}\n\n/**\n * Creates a default English-only keyword provider.\n * This is used when no locale is specified.\n */\nexport function createEnglishProvider(): KeywordProvider {\n return {\n locale: 'en',\n\n resolve(token: string): string | undefined {\n const normalized = token.toLowerCase();\n if (\n ENGLISH_COMMANDS.has(normalized) ||\n ENGLISH_KEYWORDS.has(normalized) ||\n UNIVERSAL_ENGLISH_KEYWORDS.has(normalized)\n ) {\n return normalized;\n }\n return undefined;\n },\n\n isCommand(token: string): boolean {\n return ENGLISH_COMMANDS.has(token.toLowerCase());\n },\n\n isKeyword(token: string): boolean {\n return ENGLISH_KEYWORDS.has(token.toLowerCase());\n },\n\n isEvent(token: string): boolean {\n return UNIVERSAL_ENGLISH_KEYWORDS.has(token.toLowerCase());\n },\n\n isModifier(token: string): boolean {\n return ENGLISH_MODIFIERS.has(token.toLowerCase());\n },\n\n isLogical(token: string): boolean {\n return ENGLISH_LOGICAL_KEYWORDS.has(token.toLowerCase());\n },\n\n isValue(token: string): boolean {\n return ENGLISH_VALUE_KEYWORDS.has(token.toLowerCase());\n },\n\n isExpression(token: string): boolean {\n return ENGLISH_EXPRESSION_KEYWORDS.has(token.toLowerCase());\n },\n\n getCommands(): string[] {\n return Array.from(ENGLISH_COMMANDS);\n },\n\n getKeywords(): string[] {\n return Array.from(ENGLISH_KEYWORDS);\n },\n\n toLocale(_englishKeyword: string): string | undefined {\n // English provider returns the keyword as-is\n return _englishKeyword.toLowerCase();\n },\n };\n}\n\n// Re-export the English keyword sets from constants for use in core\nexport {\n ENGLISH_COMMANDS,\n ENGLISH_KEYWORDS,\n ENGLISH_MODIFIERS,\n ENGLISH_LOGICAL_KEYWORDS,\n ENGLISH_VALUE_KEYWORDS,\n ENGLISH_EXPRESSION_KEYWORDS,\n UNIVERSAL_ENGLISH_KEYWORDS,\n} from '../constants';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const es: Dictionary = {\n commands: {\n on: 'en',\n tell: 'decir',\n trigger: 'disparar',\n send: 'enviar',\n take: 'tomar',\n put: 'poner',\n set: 'establecer',\n get: 'obtener',\n add: 'agregar',\n remove: 'quitar',\n toggle: 'alternar',\n hide: 'ocultar',\n show: 'mostrar',\n if: 'si',\n unless: 'menos',\n repeat: 'repetir',\n for: 'para',\n while: 'mientras',\n until: 'hasta',\n continue: 'continuar',\n break: 'romper',\n halt: 'detener',\n wait: 'esperar',\n fetch: 'buscar',\n call: 'llamar',\n return: 'retornar',\n make: 'hacer',\n log: 'registrar',\n throw: 'lanzar',\n catch: 'atrapar',\n measure: 'medir',\n transition: 'transición',\n increment: 'incrementar',\n decrement: 'decrementar',\n default: 'predeterminar',\n go: 'ir',\n pushUrl: 'pushUrl',\n replaceUrl: 'reemplazarUrl',\n copy: 'copiar',\n pick: 'escoger',\n beep: 'pitido',\n js: 'js',\n async: 'asíncrono',\n render: 'renderizar',\n swap: 'intercambiar',\n morph: 'transformar',\n settle: 'estabilizar',\n append: 'anexar', // profile primary; 'añadir' is add's word (parsed as add)\n exit: 'salir',\n install: 'instalar',\n breakpoint: 'punto-interrupción',\n clear: 'limpiar',\n close: 'cerrar',\n open: 'abrir',\n select: 'seleccionar',\n clone: 'clonar',\n prepend: 'anteponer',\n },\n\n modifiers: {\n to: 'a',\n from: 'de',\n into: 'en',\n with: 'con',\n at: 'en',\n in: 'en',\n of: 'de',\n as: 'como',\n by: 'por',\n before: 'antes',\n after: 'después',\n over: 'sobre',\n under: 'bajo',\n between: 'entre',\n through: 'través',\n without: 'sin',\n },\n\n events: {\n click: 'clic',\n dblclick: 'dobleclic',\n mousedown: 'ratónabajo',\n mouseup: 'ratónarriba',\n mouseenter: 'ratónentrar',\n mouseleave: 'ratónsalir',\n // V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused\n // spellings captured event=expression:undefined — broken listeners)\n mouseover: 'ratón encima',\n mouseout: 'ratón fuera',\n mousemove: 'ratónmover',\n keydown: 'tecla abajo',\n keyup: 'tecla arriba',\n keypress: 'teclapresar',\n focus: 'enfocar',\n blur: 'desenfocar',\n change: 'cambiar',\n input: 'entrada',\n submit: 'envío', // Batch 3: enviar is the send verb — on-submit listener captured event \"send\"\n reset: 'reiniciar',\n load: 'cargar',\n unload: 'descargar',\n resize: 'redimensionar',\n scroll: 'desplazar',\n touchstart: 'toqueempezar',\n touchend: 'toqueterminar',\n touchmove: 'toquemover',\n touchcancel: 'toquecancelar',\n },\n\n logical: {\n when: 'cuando',\n where: 'donde',\n and: 'y',\n or: 'o',\n not: 'no',\n is: 'es',\n exists: 'existe',\n matches: 'coincide',\n contains: 'contiene',\n includes: 'incluye',\n equals: 'iguala',\n has: 'tiene',\n have: 'tengo',\n then: 'entonces',\n else: 'sino',\n otherwise: 'delocontrario',\n end: 'fin',\n live: 'vivo',\n changes: 'cambia',\n },\n\n temporal: {\n seconds: 'segundos',\n second: 'segundo',\n milliseconds: 'milisegundos',\n millisecond: 'milisegundo',\n minutes: 'minutos',\n minute: 'minuto',\n hours: 'horas',\n hour: 'hora',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'verdadero',\n false: 'falso',\n null: 'nulo',\n undefined: 'indefinido',\n it: 'ello',\n its: 'su',\n me: 'yo',\n my: 'mi',\n you: 'tu',\n your: 'tu',\n yourself: 'ti mismo',\n myself: 'yo mismo',\n element: 'elemento',\n target: 'objetivo',\n detail: 'detalle',\n event: 'evento',\n window: 'ventana',\n document: 'documento',\n body: 'cuerpo',\n result: 'resultado',\n value: 'valor',\n },\n\n attributes: {\n class: 'clase',\n classes: 'clases',\n style: 'estilo',\n styles: 'estilos',\n attribute: 'atributo',\n attributes: 'atributos',\n property: 'propiedad',\n properties: 'propiedades',\n },\n\n expressions: {\n characters: 'caracteres',\n inclusive: 'inclusivo',\n exclusive: 'exclusivo',\n first: 'primero',\n last: 'último',\n next: 'siguiente',\n previous: 'anterior',\n prev: 'ant',\n at: 'en',\n random: 'aleatorio',\n closest: 'cercano',\n parent: 'padre',\n children: 'hijos',\n within: 'dentro',\n no: 'ningún',\n empty: 'vacío',\n some: 'algún',\n 'starts with': 'empieza con',\n 'ends with': 'termina con',\n 'ignoring case': 'ignorando mayúsculas',\n 'sorted by': 'ordenado por',\n 'mapped to': 'transformado a',\n 'split by': 'dividido por',\n 'joined by': 'unido por',\n },\n};\n","// packages/i18n/src/parser/es.ts\n\nimport { es } from '../dictionaries/es';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Spanish keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Spanish:\n * - `en clic alternar .active` → parses as `on click toggle .active`\n * - `si verdadero entonces registrar \"hola\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `en click alternar .active` also works (Spanish `en` + English `click`)\n *\n * @example\n * ```typescript\n * import { esKeywords } from '@lokascript/i18n/parser/es';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: esKeywords });\n * parser.parse('en clic alternar .active');\n * ```\n */\nexport const esKeywords: KeywordProvider = createKeywordProvider(es, 'es', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { es as esDictionary } from '../dictionaries/es';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ja: Dictionary = {\n commands: {\n on: 'で',\n tell: '伝える',\n trigger: '引き金',\n send: '送る',\n take: '取る',\n put: '置く',\n set: '設定',\n get: '取得',\n add: '追加',\n remove: '削除',\n toggle: '切り替え',\n hide: '隠す',\n show: '表示',\n if: 'もし',\n unless: 'ない限り', // not でなければ — leading で particle shatters the marker\n repeat: '繰り返し',\n for: 'ために',\n while: 'の間',\n until: 'まで',\n continue: '続ける',\n break: '中断',\n halt: '停止',\n wait: '待つ',\n fetch: 'フェッチ',\n call: '呼び出し',\n return: '戻る',\n make: '作る',\n log: '記録',\n throw: '投げる',\n catch: '捕まえる',\n measure: '測定',\n transition: '遷移',\n increment: '増加',\n decrement: '減少',\n default: '既定',\n go: '移動',\n pushUrl: 'URLプッシュ',\n replaceUrl: 'URL置換',\n copy: 'コピー',\n pick: '選択',\n beep: 'ビープ',\n js: 'JS実行',\n async: '非同期',\n render: '描画',\n swap: '交換',\n morph: '変形',\n settle: '安定',\n append: '末尾追加',\n // 終了 → 退出: realigned to the semantic profile primary (ja.ts `exit: 退出`).\n // 終了 was the historic exit/end collision word (see isEndKeyword's ja note);\n // rendered as 終了 it tokenized as a plain identifier, so a guard-clause\n // `exit` inside `if … end` never parsed (behavior-sortable ja).\n exit: '退出',\n install: 'インストール',\n breakpoint: 'ブレークポイント',\n clear: 'クリア',\n close: '閉じる',\n open: '開く',\n select: '選ぶ', // Batch 3: 選択 is the pick keyword — bare select rendered with it parses null\n clone: '複製',\n prepend: '先頭追加',\n socket: 'ソケット',\n },\n\n modifiers: {\n to: 'に',\n from: 'から',\n into: 'へ',\n with: 'と',\n at: 'で',\n in: 'の中',\n of: 'の',\n as: 'として',\n by: 'によって',\n before: '前に',\n after: '後に',\n over: '上に',\n under: '下に',\n between: '間に',\n through: '通して',\n without: 'なしで',\n },\n\n events: {\n click: 'クリック',\n dblclick: 'dblclick',\n mousedown: 'マウス押下',\n mouseup: 'マウス解放',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n // V3 Batch 2: kanji compounds realigned to the S5b/tokenizer katakana\n // loanwords (the standard JS event terms; the compounds captured\n // event=expression:undefined — broken listeners)\n mouseover: 'マウスオーバー',\n mouseout: 'マウスアウト',\n mousemove: 'mousemove',\n keydown: 'キーダウン',\n keyup: 'キーアップ',\n keypress: 'キープレス',\n focus: 'フォーカス',\n blur: 'ぼかし',\n change: '変更',\n input: '入力',\n submit: '送信',\n reset: 'リセット',\n load: '読み込み',\n unload: 'unload',\n resize: 'サイズ変更',\n scroll: 'スクロール',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: '時',\n where: 'どこ',\n and: 'そして',\n or: 'または',\n not: 'ではない',\n is: 'である',\n exists: '存在する',\n matches: '一致する',\n contains: '含む',\n includes: '含める',\n equals: '等しい',\n has: 'ある',\n have: 'ある',\n then: 'それから',\n else: 'そうでなければ',\n otherwise: 'そうでなければ',\n end: '終わり',\n live: 'ライブ',\n bind: 'バインド',\n changes: '変わったら',\n },\n\n temporal: {\n seconds: '秒',\n second: '秒',\n milliseconds: 'ミリ秒',\n millisecond: 'ミリ秒',\n minutes: '分',\n minute: '分',\n hours: '時間',\n hour: '時間',\n ms: 'ms',\n s: '秒',\n min: '分',\n h: '時',\n },\n\n values: {\n true: '真',\n false: '偽',\n null: 'null',\n undefined: '未定義',\n it: 'それ',\n its: 'その',\n me: '私',\n my: '私の',\n you: 'あなた',\n your: 'あなたの',\n yourself: 'あなた自身',\n myself: '私自身',\n element: '要素',\n target: '対象',\n detail: '詳細',\n event: 'イベント',\n window: 'ウィンドウ',\n document: 'ドキュメント',\n body: 'ボディ',\n result: '結果',\n value: '値',\n },\n\n attributes: {\n class: 'クラス',\n classes: 'クラス群',\n style: 'スタイル',\n styles: 'スタイル群',\n attribute: '属性',\n attributes: '属性群',\n property: 'プロパティ',\n properties: 'プロパティ群',\n },\n\n expressions: {\n characters: '文字',\n inclusive: '含む',\n exclusive: '除く',\n first: '最初',\n last: '最後',\n next: '次',\n previous: '前',\n prev: '前',\n at: 'で',\n random: 'ランダム',\n closest: '最も近い',\n parent: '親',\n children: '子',\n within: '以内',\n no: 'ない',\n empty: '空',\n some: 'いくつか',\n 'starts with': 'で始まる',\n 'ends with': 'で終わる',\n 'ignoring case': '大文字小文字を無視',\n 'sorted by': 'でソート',\n 'mapped to': 'に変換',\n 'split by': 'で分割',\n 'joined by': 'で結合',\n },\n};\n","// packages/i18n/src/parser/ja.ts\n\nimport { ja } from '../dictionaries/ja';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Japanese keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Japanese:\n * - `クリック で 切り替え .active` → parses as `on click toggle .active`\n * - `もし 真 それから 記録 \"こんにちは\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `click で 切り替え .active` also works (English `click` + Japanese `で`, `切り替え`)\n *\n * Japanese is a useful test case because:\n * - SOV word order (subject-object-verb) vs English SVO\n * - No articles (a, an, the)\n * - Unicode characters (tests tokenizer robustness)\n *\n * @example\n * ```typescript\n * import { jaKeywords } from '@lokascript/i18n/parser/ja';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: jaKeywords });\n * parser.parse('クリック で 切り替え .active');\n * ```\n */\nexport const jaKeywords: KeywordProvider = createKeywordProvider(ja, 'ja', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { ja as jaDictionary } from '../dictionaries/ja';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const fr: Dictionary = {\n commands: {\n on: 'sur',\n tell: 'dire',\n trigger: 'déclencher',\n send: 'envoyer',\n take: 'prendre',\n put: 'mettre',\n set: 'définir',\n get: 'obtenir',\n add: 'ajouter',\n remove: 'supprimer',\n toggle: 'basculer',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'défocaliser',\n hide: 'cacher',\n show: 'montrer',\n if: 'si',\n unless: 'saufsi',\n repeat: 'répéter',\n for: 'pour',\n while: 'tantque',\n until: 'jusquà',\n continue: 'continuer',\n break: 'arrêter',\n halt: 'stopper',\n wait: 'attendre',\n fetch: 'récupérer',\n call: 'appeler',\n return: 'retourner',\n make: 'créer',\n log: 'enregistrer',\n throw: 'lancer',\n catch: 'attraper',\n measure: 'mesurer',\n transition: 'transition',\n increment: 'incrémenter',\n decrement: 'décrémenter',\n default: 'défaut',\n go: 'aller',\n pushUrl: 'pousserUrl',\n replaceUrl: 'remplacerUrl',\n copy: 'copier',\n pick: 'choisir',\n beep: 'bip',\n js: 'js',\n async: 'asynchrone',\n render: 'rendu',\n swap: 'échanger',\n morph: 'transformer',\n settle: 'stabiliser',\n append: 'annexer', // profile primary; 'ajouter' is add's word (parsed as add)\n exit: 'sortir',\n install: 'installer',\n breakpoint: 'point-arrêt',\n clear: 'effacer',\n close: 'fermer',\n open: 'ouvrir',\n select: 'sélectionner',\n clone: 'cloner',\n prepend: 'préfixer',\n focus: 'focaliser',\n },\n\n modifiers: {\n to: 'à',\n from: 'de',\n into: 'dans',\n with: 'avec',\n at: 'à',\n in: 'en',\n of: 'de',\n as: 'comme',\n by: 'par',\n before: 'avant',\n after: 'après',\n over: 'sur',\n under: 'sous',\n between: 'entre',\n through: 'à travers',\n without: 'sans',\n },\n\n events: {\n click: 'clic',\n dblclick: 'doubleclic',\n // mousedown/mouseup: English passthrough — no native form round-trips on the\n // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms\n // shattered to their first word — live broken listeners in repeat-until-event).\n // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'sourisentrer',\n mouseleave: 'sourissortir',\n // V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused\n // spellings captured event=expression:undefined — broken listeners)\n mouseover: 'souris dessus',\n mouseout: 'souris dehors',\n mousemove: 'sourisbouger',\n keydown: 'touche bas',\n keyup: 'touche haut',\n keypress: 'touchepressée',\n focus: 'focus',\n blur: 'flou',\n change: 'changer',\n input: 'saisie',\n submit: 'soumettre',\n reset: 'réinitialiser',\n load: 'charger',\n unload: 'décharger',\n resize: 'redimensionner',\n scroll: 'défiler',\n touchstart: 'touchercommencer',\n touchend: 'toucherfin',\n touchmove: 'toucherbouger',\n touchcancel: 'toucherannuler',\n },\n\n logical: {\n when: 'quand',\n where: 'où',\n and: 'et',\n or: 'ou',\n not: 'non',\n is: 'est',\n exists: 'existe',\n matches: 'correspond',\n contains: 'contient',\n includes: 'inclut',\n equals: 'égale',\n has: 'a',\n have: 'ai',\n then: 'alors',\n else: 'sinon',\n otherwise: 'autrement',\n end: 'fin',\n live: 'vif',\n changes: 'change',\n },\n\n temporal: {\n seconds: 'secondes',\n second: 'seconde',\n milliseconds: 'millisecondes',\n millisecond: 'milliseconde',\n minutes: 'minutes',\n minute: 'minute',\n hours: 'heures',\n hour: 'heure',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'vrai',\n false: 'faux',\n null: 'nul',\n undefined: 'indéfini',\n it: 'ça',\n its: 'son',\n me: 'moi',\n my: 'mon',\n you: 'tu',\n your: 'ton',\n yourself: 'toi-même',\n myself: 'moi-même',\n element: 'élément',\n target: 'cible',\n detail: 'détail',\n event: 'événement',\n window: 'fenêtre',\n document: 'document',\n body: 'corps',\n result: 'résultat',\n value: 'valeur',\n },\n\n attributes: {\n class: 'classe',\n classes: 'classes',\n style: 'style',\n styles: 'styles',\n attribute: 'attribut',\n attributes: 'attributs',\n property: 'propriété',\n properties: 'propriétés',\n },\n\n expressions: {\n characters: 'caractères',\n inclusive: 'inclusif',\n exclusive: 'exclusif',\n first: 'premier',\n last: 'dernier',\n next: 'suivant',\n previous: 'précédent',\n prev: 'préc',\n at: 'à',\n random: 'aléatoire',\n closest: 'proche',\n parent: 'parent',\n children: 'enfants',\n within: 'dans',\n no: 'aucun',\n empty: 'vide',\n some: 'quelques',\n 'starts with': 'commence par',\n 'ends with': 'finit par',\n 'ignoring case': 'en ignorant la casse',\n 'sorted by': 'trié par',\n 'mapped to': 'transformé en',\n 'split by': 'divisé par',\n 'joined by': 'joint par',\n },\n};\n","// packages/i18n/src/parser/fr.ts\n\nimport { fr } from '../dictionaries/fr';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * French keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in French:\n * - `sur clic basculer .active` → parses as `on click toggle .active`\n * - `si vrai alors enregistrer \"bonjour\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `sur click basculer .active` also works (French `sur` + English `click`)\n *\n * @example\n * ```typescript\n * import { frKeywords } from '@lokascript/i18n/parser/fr';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: frKeywords });\n * parser.parse('sur clic basculer .active');\n * ```\n */\nexport const frKeywords: KeywordProvider = createKeywordProvider(fr, 'fr', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { fr as frDictionary } from '../dictionaries/fr';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const de: Dictionary = {\n commands: {\n on: 'bei',\n tell: 'sagen',\n trigger: 'auslösen',\n send: 'senden',\n take: 'nehmen',\n put: 'setzen',\n set: 'festlegen',\n get: 'erhalten',\n add: 'hinzufügen',\n remove: 'entfernen',\n toggle: 'umschalten',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'defokussieren',\n hide: 'verstecken',\n show: 'zeigen',\n // Align with the semantic German profile's `if` primary (`falls`). The previous\n // `wenn` collides with the profile's `when` keyword (German `wenn` = both\n // \"if\" and \"when\"), so a transformed `if` resolved to `when` and the conditional\n // wrapper never formed (`if`/`put` dropped). Same dict↔profile alignment as id\n // `toggle` / get-value. `when` is unaffected (separate dict entry).\n if: 'falls',\n unless: 'wennnicht',\n repeat: 'wiederholen',\n for: 'für',\n while: 'während',\n until: 'bis',\n continue: 'weiter',\n break: 'unterbrechen',\n halt: 'anhalten',\n wait: 'warten',\n fetch: 'abrufen',\n call: 'aufrufen',\n return: 'zurückgeben',\n make: 'erstellen',\n log: 'protokollieren',\n throw: 'werfen',\n catch: 'fangen',\n measure: 'messen',\n transition: 'übergang',\n increment: 'erhöhen',\n decrement: 'verringern',\n default: 'standard',\n go: 'gehen',\n pushUrl: 'urlHinzufügen',\n replaceUrl: 'urlErsetzen',\n copy: 'kopieren',\n pick: 'auswählen',\n beep: 'piepton',\n js: 'js',\n async: 'asynchron',\n render: 'rendern',\n swap: 'tauschen',\n morph: 'verwandeln',\n settle: 'stabilisieren',\n append: 'anhängen',\n exit: 'beenden',\n install: 'installieren',\n breakpoint: 'haltepunkt',\n clear: 'bereinigen', // löschen is a remove alternative in the profile\n close: 'schließen',\n open: 'öffnen',\n select: 'markieren', // Batch 3: auswählen is the pick keyword — bare select rendered with it parses null\n clone: 'klonen',\n prepend: 'voranstellen',\n focus: 'fokussieren',\n },\n\n modifiers: {\n to: 'zu',\n from: 'von',\n into: 'in',\n with: 'mit',\n at: 'bei',\n in: 'in',\n of: 'von',\n as: 'als',\n by: 'durch',\n before: 'vor',\n after: 'nach',\n over: 'über',\n under: 'unter',\n between: 'zwischen',\n through: 'durch',\n without: 'ohne',\n },\n\n events: {\n click: 'klick',\n dblclick: 'doppelklick',\n // mousedown/mouseup: English passthrough — no native form round-trips on the\n // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms\n // shattered to their first word — live broken listeners in repeat-until-event).\n // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mauseintreten',\n mouseleave: 'mausverlassen',\n // V3 Batch 2: fused/dead event words realigned to the de tokenizer's\n // registered forms (S5b's `maus über`/`taste runter` are aspirational — they\n // do not tokenize; `mausüber` etc. captured event=expression:undefined).\n mouseover: 'maus drüber',\n mouseout: 'maus weg',\n mousemove: 'mausbewegen',\n keydown: 'taste unten',\n keyup: 'taste oben',\n keypress: 'tastedrücken',\n focus: 'fokus',\n // matches commands.blur (which shadows this at render time) and the live\n // corpus render; `unscharf` was dead vocab that captured no event\n blur: 'defokussieren',\n change: 'ändern',\n input: 'eingabe',\n submit: 'absenden',\n reset: 'zurücksetzen',\n load: 'laden',\n unload: 'entladen',\n resize: 'größeändern',\n scroll: 'scrollen',\n touchstart: 'berührungstart',\n touchend: 'berührungend',\n touchmove: 'berührungbewegen',\n touchcancel: 'berührungabbrechen',\n },\n\n logical: {\n when: 'wenn',\n where: 'wo',\n and: 'und',\n or: 'oder',\n not: 'nicht',\n is: 'ist',\n exists: 'existiert',\n matches: 'passt',\n contains: 'enthält',\n includes: 'beinhaltet',\n equals: 'gleicht',\n has: 'hat',\n have: 'habe',\n then: 'dann',\n else: 'sonst',\n otherwise: 'andernfalls',\n end: 'ende',\n live: 'live',\n changes: 'ändert',\n },\n\n temporal: {\n seconds: 'sekunden',\n second: 'sekunde',\n milliseconds: 'millisekunden',\n millisecond: 'millisekunde',\n minutes: 'minuten',\n minute: 'minute',\n hours: 'stunden',\n hour: 'stunde',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'std',\n },\n\n values: {\n true: 'wahr',\n false: 'falsch',\n null: 'null',\n undefined: 'undefiniert',\n it: 'es',\n its: 'sein',\n me: 'ich',\n my: 'mein',\n you: 'du',\n your: 'dein',\n yourself: 'dich selbst',\n myself: 'ich selbst',\n element: 'element',\n target: 'ziel',\n detail: 'detail',\n event: 'ereignis',\n window: 'fenster',\n document: 'dokument',\n body: 'körper',\n result: 'ergebnis',\n value: 'wert',\n },\n\n attributes: {\n class: 'klasse',\n classes: 'klassen',\n style: 'stil',\n styles: 'stile',\n attribute: 'attribut',\n attributes: 'attribute',\n property: 'eigenschaft',\n properties: 'eigenschaften',\n },\n\n expressions: {\n characters: 'Zeichen',\n inclusive: 'inklusiv',\n exclusive: 'exklusiv',\n first: 'erste',\n last: 'letzte',\n next: 'nächste',\n previous: 'vorherige',\n prev: 'vorh',\n at: 'bei',\n random: 'zufällig',\n // `nächste` already serves `next` (line above). German `nächste` is\n // genuinely ambiguous (next/nearest), so emitting it for `closest` too\n // collided: the semantic tokenizer normalizes `nächste`→next (a deliberate\n // last-wins choice — see german.ts), and a closest reading is impossible to\n // recover. Use the unambiguous `nächstgelegene` (\"nearest-located\") for\n // closest so the two readings stay distinct end-to-end.\n closest: 'nächstgelegene',\n parent: 'elternteil',\n children: 'kinder',\n within: 'innerhalb',\n no: 'kein',\n empty: 'leer',\n some: 'einige',\n 'starts with': 'beginnt mit',\n 'ends with': 'endet mit',\n 'ignoring case': 'ohne Groß-/Kleinschreibung',\n 'sorted by': 'sortiert nach',\n 'mapped to': 'zugeordnet zu',\n 'split by': 'geteilt durch',\n 'joined by': 'verbunden mit',\n },\n};\n","// packages/i18n/src/parser/de.ts\n\nimport { de } from '../dictionaries/de';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * German keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in German:\n * - `bei klick umschalten .active` → parses as `on click toggle .active`\n * - `wenn wahr dann protokollieren \"hallo\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `bei click umschalten .active` also works (German `bei` + English `click`)\n *\n * German is a useful test case because:\n * - Compound words (Zusammensetzungen) are common\n * - Different word order in clauses (V2 in main, V-final in subordinate)\n * - Case system (nominative, accusative, dative, genitive)\n *\n * @example\n * ```typescript\n * import { deKeywords } from '@lokascript/i18n/parser/de';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: deKeywords });\n * parser.parse('bei klick umschalten .active');\n * ```\n */\nexport const deKeywords: KeywordProvider = createKeywordProvider(de, 'de', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { de as deDictionary } from '../dictionaries/de';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ar: Dictionary = {\n commands: {\n on: 'على',\n tell: 'أخبر',\n trigger: 'تشغيل',\n send: 'أرسل',\n take: 'خذ',\n put: 'ضع',\n set: 'اضبط',\n get: 'احصل',\n add: 'أضف',\n remove: 'احذف',\n toggle: 'بدل',\n hide: 'اخف',\n show: 'اظهر',\n if: 'إذا',\n // Single-token form: the semantic ar tokenizer splits the two-word `إلا إذا`\n // into `إلا` + `إذا`(if), which derails the `unless` block. `إلا` alone is the\n // conventional Arabic shorthand and matches the ar profile's unless keyword.\n unless: 'إلا',\n repeat: 'كرر',\n for: 'لكل',\n while: 'بينما',\n until: 'حتى',\n continue: 'واصل',\n break: 'توقف',\n halt: 'أوقف',\n wait: 'انتظر',\n fetch: 'احضر',\n call: 'استدع',\n return: 'ارجع',\n make: 'اصنع',\n log: 'سجل',\n throw: 'ارم',\n catch: 'التقط',\n measure: 'قس',\n transition: 'انتقال',\n increment: 'زِد',\n decrement: 'أنقص',\n default: 'افتراضي',\n go: 'اذهب',\n pushUrl: 'ادفع رابط',\n replaceUrl: 'استبدل رابط',\n copy: 'انسخ',\n pick: 'اختر',\n beep: 'صفّر',\n js: 'جافاسكربت',\n async: 'متزامن',\n render: 'ارسم',\n swap: 'استبدل', // profile primary; 'بدّل' is toggle's word (parsed as toggle)\n morph: 'حوّل',\n settle: 'استقر',\n append: 'ألحق',\n exit: 'اخرج',\n install: 'ثبّت',\n breakpoint: 'نقطة-توقف',\n clear: 'نظّف', // امسح is a remove alternative in the profile\n close: 'أغلق',\n open: 'افتح',\n select: 'ظلل', // Batch 3: اختر is the pick keyword — bare select rendered with it parses null\n clone: 'استنسخ',\n prepend: 'سبق',\n socket: 'مقبس',\n },\n\n modifiers: {\n to: 'إلى',\n from: 'من',\n into: 'في',\n with: 'مع',\n at: 'عند',\n in: 'في',\n of: 'من',\n as: 'كـ',\n by: 'بواسطة',\n before: 'قبل',\n after: 'بعد',\n over: 'فوق',\n under: 'تحت',\n between: 'بين',\n through: 'عبر',\n without: 'بدون',\n },\n\n events: {\n click: 'نقر',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n dblclick: 'dblclick',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'فأرة فوق',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n keydown: 'مفتاح أسفل',\n keyup: 'مفتاح أعلى',\n keypress: 'keypress',\n focus: 'تركيز',\n blur: 'ضبابية',\n change: 'تغيير',\n input: 'إدخال',\n submit: 'إرسال',\n reset: 'reset',\n load: 'تحميل',\n unload: 'unload',\n resize: 'تغيير حجم',\n scroll: 'تمرير',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: 'عندما',\n where: 'أين',\n and: 'و',\n or: 'أو',\n not: 'ليس',\n is: 'هو',\n exists: 'موجود',\n matches: 'يطابق',\n contains: 'يحتوي',\n includes: 'يشمل',\n equals: 'يساوي',\n has: 'لديه',\n have: 'لدي',\n then: 'ثم',\n else: 'وإلا',\n otherwise: 'خلاف ذلك',\n end: 'النهاية',\n live: 'حي',\n bind: 'اربط',\n changes: 'يتغير',\n },\n\n temporal: {\n seconds: 'ثوانِ',\n second: 'ثانية',\n milliseconds: 'ميلي ثانية',\n millisecond: 'ميلي ثانية',\n minutes: 'دقائق',\n minute: 'دقيقة',\n hours: 'ساعات',\n hour: 'ساعة',\n ms: 'م.ث',\n s: 'ث',\n min: 'د',\n h: 'س',\n },\n\n values: {\n true: 'صحيح',\n false: 'خطأ',\n null: 'فارغ',\n undefined: 'غير معرف',\n it: 'هو',\n its: 'له',\n me: 'أنا',\n my: 'لي',\n myself: 'نفسي',\n you: 'أنت',\n your: 'لك',\n yourself: 'نفسك',\n element: 'عنصر',\n target: 'هدف',\n detail: 'تفاصيل',\n event: 'حدث',\n window: 'نافذة',\n document: 'وثيقة',\n body: 'جسم',\n result: 'نتيجة',\n value: 'قيمة',\n },\n\n attributes: {\n class: 'فئة',\n classes: 'فئات',\n style: 'أسلوب',\n styles: 'أساليب',\n attribute: 'خاصية',\n attributes: 'خصائص',\n property: 'خاصية',\n properties: 'خصائص',\n },\n\n expressions: {\n characters: 'حروف',\n inclusive: 'شامل',\n exclusive: 'حصري',\n first: 'أول',\n last: 'آخر',\n next: 'التالي',\n previous: 'السابق',\n prev: 'سابق',\n at: 'عند',\n random: 'عشوائي',\n closest: 'الأقرب',\n parent: 'والد',\n children: 'أطفال',\n within: 'داخل',\n no: 'لا يوجد',\n empty: 'فارغ',\n some: 'بعض',\n 'starts with': 'يبدأ بـ',\n 'ends with': 'ينتهي بـ',\n 'ignoring case': 'مع تجاهل الحالة',\n 'sorted by': 'مرتب حسب',\n 'mapped to': 'محول إلى',\n 'split by': 'مقسم بواسطة',\n 'joined by': 'مدموج بواسطة',\n },\n};\n","// packages/i18n/src/parser/ar.ts\n\nimport { ar } from '../dictionaries/ar';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Arabic keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Arabic:\n * - `على نقر بدل .active` → parses as `on click toggle .active`\n * - `إذا صحيح ثم سجل \"مرحبا\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `على click بدل .active` also works (Arabic `على` + English `click`)\n *\n * Arabic is a crucial test case because:\n * - Right-to-left (RTL) script\n * - Different character set (Unicode Arabic block)\n * - Space-separated words with diacritics\n * - Tests parser's Unicode handling robustly\n *\n * Note: The parser handles RTL text correctly because tokenization\n * is based on whitespace/operator boundaries, not visual direction.\n *\n * @example\n * ```typescript\n * import { arKeywords } from '@lokascript/i18n/parser/ar';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: arKeywords });\n * parser.parse('على نقر بدل .active');\n * ```\n */\nexport const arKeywords: KeywordProvider = createKeywordProvider(ar, 'ar', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { ar as arDictionary } from '../dictionaries/ar';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ko: Dictionary = {\n commands: {\n on: '에',\n tell: '말하다',\n trigger: '트리거',\n send: '보내다',\n take: '가져오다',\n put: '넣다',\n set: '설정',\n get: '얻다',\n add: '추가',\n remove: '제거',\n toggle: '토글',\n hide: '숨기다',\n show: '보이다',\n if: '만약',\n unless: '아니라면', // distinct from else `아니면` (line ~131) — was a homonym\n repeat: '반복',\n for: '각각', // profile's for word — 동안 is while (collision)\n while: '동안',\n until: '까지',\n continue: '계속',\n break: '중단',\n halt: '정지',\n wait: '대기',\n fetch: '가져오기',\n call: '호출',\n return: '반환',\n make: '만들다',\n log: '로그',\n throw: '던지다',\n catch: '잡다',\n measure: '측정',\n transition: '전환',\n increment: '증가',\n decrement: '감소',\n default: '기본값',\n go: '이동',\n pushUrl: 'URL푸시',\n replaceUrl: 'URL교체',\n copy: '복사',\n pick: '선택',\n beep: '비프',\n js: 'JS실행',\n async: '비동기',\n render: '렌더링',\n swap: '교환',\n morph: '변형',\n settle: '안정',\n append: '덧붙이다', // profile primary; '추가' is add's word (parsed as add)\n // 종료 → 나가기: realigned to the semantic profile primary (ko.ts `exit: 나가기`,\n // whose comment already flags the 종료 end-collision). Rendered as 종료 it\n // tokenized as a plain identifier, so a guard-clause `exit` never parsed.\n exit: '나가기',\n install: '설치',\n breakpoint: '중단점',\n clear: '지우기',\n close: '닫기',\n open: '열기',\n select: '고르기', // Batch 3: 선택 is the pick keyword — bare select rendered with it parses null\n clone: '복제',\n prepend: '앞에추가',\n socket: '소켓',\n },\n\n modifiers: {\n to: '에',\n from: '에서',\n into: '으로',\n with: '와',\n at: '에',\n in: '안에',\n of: '의',\n as: '로',\n by: '에의해',\n before: '전에',\n after: '후에',\n over: '위에',\n under: '아래',\n between: '사이',\n through: '통해',\n without: '없이',\n },\n\n events: {\n click: '클릭',\n dblclick: '더블클릭',\n mousedown: '마우스다운',\n mouseup: '마우스업',\n mouseenter: '마우스엔터',\n mouseleave: '마우스리브',\n mouseover: '마우스오버',\n mouseout: '마우스아웃',\n mousemove: '마우스무브',\n keydown: '키다운',\n keyup: '키업',\n keypress: '키프레스',\n focus: '포커스',\n blur: '블러',\n change: '변경',\n input: '입력',\n submit: '제출',\n reset: '재설정', // Batch 3: 리셋 captured on.event as expression (broken listener) — profile word round-trips\n load: '로드',\n unload: 'unload',\n resize: '리사이즈',\n scroll: '스크롤',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n touchstart: 'touchstart',\n touchend: '터치종료',\n touchmove: 'touchmove',\n touchcancel: '터치취소',\n },\n\n logical: {\n when: '때',\n where: '어디',\n and: '그리고',\n or: '또는',\n not: '아니',\n is: '이다',\n exists: '존재',\n matches: '일치',\n contains: '포함',\n includes: '포함하다',\n equals: '같다',\n has: '있다',\n have: '있다',\n then: '그러면',\n else: '아니면',\n otherwise: '그렇지않으면',\n end: '끝',\n live: '라이브',\n bind: '바인드',\n changes: '변경되면',\n },\n\n temporal: {\n seconds: '초',\n second: '초',\n milliseconds: '밀리초',\n millisecond: '밀리초',\n minutes: '분',\n minute: '분',\n hours: '시간',\n hour: '시간',\n ms: 'ms',\n s: '초',\n min: '분',\n h: '시',\n },\n\n values: {\n true: '참',\n false: '거짓',\n null: '널',\n undefined: '정의안됨',\n it: '그것',\n its: '그것의',\n me: '나',\n my: '내',\n myself: '나자신',\n you: '너',\n your: '네',\n yourself: '너자신',\n element: '요소',\n target: '대상',\n detail: '세부',\n event: '이벤트',\n window: '창',\n document: '문서',\n body: '바디',\n result: '결과',\n value: '값',\n },\n\n attributes: {\n class: '클래스',\n classes: '클래스들',\n style: '스타일',\n styles: '스타일들',\n attribute: '속성',\n attributes: '속성들',\n property: '프로퍼티',\n properties: '프로퍼티들',\n },\n\n expressions: {\n characters: '문자',\n inclusive: '포함',\n exclusive: '제외',\n first: '첫번째',\n last: '마지막',\n next: '다음',\n previous: '이전',\n prev: '이전',\n at: '에서',\n random: '무작위',\n closest: '가장가까운',\n parent: '부모',\n children: '자식',\n within: '이내',\n no: '없음',\n empty: '비어있는',\n some: '일부',\n 'starts with': '로시작',\n 'ends with': '로끝나는',\n 'ignoring case': '대소문자_무시',\n 'sorted by': '로_정렬',\n 'mapped to': '로_변환',\n 'split by': '로_분할',\n 'joined by': '로_결합',\n },\n};\n","// packages/i18n/src/parser/ko.ts\n\nimport { ko } from '../dictionaries/ko';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Korean keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Korean:\n * - `에 클릭 토글 .active` → parses as `on click toggle .active`\n * - `만약 참 그러면 로그 \"안녕하세요\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `에 click 토글 .active` also works (Korean `에` + English `click`)\n *\n * Korean is a useful test case because:\n * - SOV word order (Subject-Object-Verb)\n * - Hangul script (syllabic blocks)\n * - Agglutinative morphology with particles\n * - Tests parser's Unicode handling with Korean characters\n *\n * @example\n * ```typescript\n * import { koKeywords } from '@lokascript/i18n/parser/ko';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: koKeywords });\n * parser.parse('에 클릭 토글 .active');\n * ```\n */\nexport const koKeywords: KeywordProvider = createKeywordProvider(ko, 'ko', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { ko as koDictionary } from '../dictionaries/ko';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const zh: Dictionary = {\n commands: {\n on: '当',\n tell: '告诉',\n trigger: '触发',\n send: '发送',\n // `拿取` (the semantic zh profile's take primary), not `获取` — `获取` is the\n // profile's GET primary, so emitting it for take made `take …` parse as get\n // (take-class-from-siblings: phantom get, take dropped). Exposed by the get-zh-ba\n // pattern; same dict↔profile homonym family as pl get/fetch.\n take: '拿取',\n put: '放置',\n set: '设置',\n get: '获得',\n add: '添加',\n remove: '移除',\n toggle: '切换',\n hide: '隐藏',\n show: '显示',\n if: '如果',\n unless: '除非',\n repeat: '重复',\n for: '为',\n while: '当',\n until: '直到',\n continue: '继续',\n break: '中断',\n halt: '停止',\n wait: '等待',\n // 抓取 (zhuāqǔ, \"grab/scrape\") is the semantic zh profile's `fetch` primary;\n // 获取 (huòqǔ) is its `get` primary, so emitting 获取 here made the semantic\n // parser read a transformed `fetch` as `get`. See ZH_BLOCK_BODY_SCOPE.md #3.\n fetch: '抓取',\n call: '调用',\n return: '返回',\n make: '制作',\n log: '日志',\n throw: '抛出',\n catch: '捕获',\n measure: '测量',\n transition: '过渡',\n increment: '增加',\n decrement: '减少',\n default: '默认',\n go: '前往',\n pushUrl: '推送网址',\n replaceUrl: '替换网址',\n copy: '复制',\n pick: '选取',\n beep: '蜂鸣',\n js: 'JS执行',\n async: '异步',\n render: '渲染',\n swap: '交换',\n morph: '变形',\n settle: '稳定',\n append: '追加',\n exit: '退出',\n install: '安装',\n breakpoint: '断点',\n clear: '清除',\n close: '关闭',\n open: '打开',\n select: '选择',\n clone: '克隆',\n prepend: '前置',\n },\n\n modifiers: {\n to: '到',\n from: '从',\n into: '进入',\n with: '与',\n at: '在',\n in: '在',\n of: '的',\n as: '作为',\n by: '通过',\n before: '之前',\n after: '之后',\n over: '在上',\n under: '在下',\n between: '之间',\n through: '通过',\n without: '没有',\n },\n\n events: {\n click: '点击',\n dblclick: '双击',\n // mousedown/mouseup: English passthrough — no native form round-trips on the\n // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms\n // shattered to their first word — live broken listeners in repeat-until-event).\n // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n // V3 Batch 2: 鼠标悬停 captured no event (expression:undefined) — realigned\n // to the tokenizer-registered 鼠标移入 (also S5b-listed). 按键抬起\n // prefix-shattered to 按键 and captured `keydown` (a keyup handler firing\n // on keydown) → 松键, the S5b/tokenizer form. keydown keeps 按键按下\n // (captures keydown via the registered 按键 prefix; S5b-aliased) — fixing\n // it to bare 按键 would collide with keypress below.\n mouseover: '鼠标移入',\n mouseout: '鼠标移出',\n mousemove: '鼠标移动',\n keydown: '按键按下',\n keyup: '松键',\n keypress: 'keypress',\n focus: '聚焦',\n blur: '失焦',\n change: '改变',\n input: '输入',\n submit: '提交',\n reset: '重置',\n load: '加载',\n unload: '卸载',\n resize: '调整大小',\n scroll: '滚动',\n touchstart: '触摸开始',\n touchend: 'touchend',\n touchmove: '触摸移动',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: '当',\n where: '哪里',\n and: '和',\n or: '或',\n not: '非',\n is: '是',\n exists: '存在',\n matches: '匹配',\n contains: '包含',\n includes: '包括',\n equals: '等于',\n has: '有',\n have: '有',\n then: '那么',\n else: '否则',\n otherwise: '要不然',\n end: '结束',\n live: '实时',\n bind: '绑定',\n changes: '改变时',\n },\n\n temporal: {\n seconds: '秒',\n second: '秒',\n milliseconds: '毫秒',\n millisecond: '毫秒',\n minutes: '分钟',\n minute: '分钟',\n hours: '小时',\n hour: '小时',\n ms: '毫秒',\n s: '秒',\n min: '分',\n h: '时',\n },\n\n values: {\n true: '真',\n false: '假',\n null: '空',\n undefined: '未定义',\n it: '它',\n its: '它的',\n me: '我',\n my: '我的',\n myself: '我自己',\n you: '你',\n your: '你的',\n yourself: '你自己',\n element: '元素',\n target: '目标',\n detail: '详情',\n event: '事件',\n window: '窗口',\n document: '文档',\n body: '主体',\n result: '结果',\n value: '值',\n },\n\n attributes: {\n class: '类',\n classes: '类别',\n style: '样式',\n styles: '样式集',\n attribute: '属性',\n attributes: '属性集',\n property: '特性',\n properties: '特性集',\n },\n\n expressions: {\n characters: '字符',\n inclusive: '包含',\n exclusive: '排除',\n first: '第一个',\n last: '最后一个',\n next: '下一个',\n previous: '上一个',\n prev: '上个',\n at: '在',\n random: '随机',\n closest: '最近的',\n parent: '父级',\n children: '子级',\n within: '之内',\n no: '没有',\n empty: '空的',\n some: '一些',\n 'starts with': '以开头',\n 'ends with': '以结尾',\n 'ignoring case': '忽略大小写',\n 'sorted by': '按_排序',\n 'mapped to': '映射为',\n 'split by': '按_分割',\n 'joined by': '用_连接',\n },\n};\n","// packages/i18n/src/parser/zh.ts\n\nimport { zh } from '../dictionaries/zh';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Chinese (Simplified) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Chinese:\n * - `当 点击 切换 .active` → parses as `on click toggle .active`\n * - `如果 真 那么 日志 \"你好\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `当 click 切换 .active` also works (Chinese `当` + English `click`)\n *\n * Chinese is a useful test case because:\n * - SVO word order (similar to English)\n * - Logographic script (Chinese characters)\n * - Isolating morphology (minimal inflection)\n * - Tests parser's Unicode handling with CJK characters\n * - Large developer population\n *\n * @example\n * ```typescript\n * import { zhKeywords } from '@lokascript/i18n/parser/zh';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: zhKeywords });\n * parser.parse('当 点击 切换 .active');\n * ```\n */\nexport const zhKeywords: KeywordProvider = createKeywordProvider(zh, 'zh', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { zh as zhDictionary } from '../dictionaries/zh';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const tr: Dictionary = {\n commands: {\n on: 'üzerinde',\n tell: 'söyle',\n trigger: 'tetikle',\n send: 'gönder',\n take: 'tut', // auditor: dict emitted a word the profile reads differently\n put: 'koy',\n set: 'ayarla',\n get: 'al',\n add: 'ekle',\n remove: 'kaldır',\n toggle: 'değiştir',\n hide: 'gizle',\n show: 'göster',\n if: 'eğer',\n unless: 'değilse',\n repeat: 'tekrarla',\n for: 'için',\n // `süresince` (the semantic tr profile's while primary), not `iken`: `iken`\n // is the profile's WHEN primary (logical.when below also emits it), so a\n // fronted repeat-while head tokenized as `when` and the condition dropped\n // wholesale. Same dict↔profile homonym disambiguation as pl get/pobierz.\n while: 'süresince',\n until: 'kadar',\n continue: 'devam',\n break: 'dur',\n halt: 'durdur',\n wait: 'bekle',\n fetch: 'getir',\n call: 'çağır',\n return: 'dön',\n make: 'yap',\n log: 'kaydet',\n throw: 'fırlat',\n catch: 'yakala',\n measure: 'ölç',\n transition: 'geçiş',\n increment: 'artır',\n decrement: 'azalt',\n default: 'varsayılan',\n go: 'git',\n pushUrl: 'urlEkle',\n replaceUrl: 'urlDeğiştir',\n copy: 'kopyala',\n pick: 'seç',\n beep: 'bip',\n js: 'js',\n async: 'asenkron',\n render: 'render',\n swap: 'takas',\n morph: 'dönüştür',\n settle: 'sabitlen',\n append: 'iliştir', // profile primary; 'ekle' is add's word (parsed as add)\n exit: 'çık',\n install: 'kur',\n breakpoint: 'kesme-noktası',\n clear: 'temizle',\n close: 'kapat',\n open: 'aç',\n select: 'vurgula', // Batch 3: seç is the pick keyword — bare select rendered with it parses null\n clone: 'klonla',\n prepend: 'başınaekle',\n socket: 'soket',\n },\n\n modifiers: {\n to: 'e',\n from: 'den',\n into: 'içine',\n with: 'ile',\n at: 'de',\n in: 'içinde',\n of: 'nin',\n as: 'olarak',\n by: 'tarafından',\n before: 'önce',\n after: 'sonra',\n over: 'üzerinde',\n under: 'altında',\n between: 'arasında',\n through: 'boyunca',\n without: 'olmadan',\n },\n\n events: {\n click: 'tıklama',\n dblclick: 'dblclick',\n // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event\n // recognition (mousedown → \"bas\" / mouseup mis-captured). Mirrors the #535\n // ru/uk fuse + #510 resize fix.\n mousedown: 'farebas',\n mouseup: 'farebırak',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n // V3 Batch 2: same `_`-split class (tuş_bas captured verbatim `bas` — a\n // listener for a DOM event named \"bas\") — realigned to the S5b/tokenizer\n // fused forms.\n mouseover: 'fareiçinde',\n mouseout: 'faredışında',\n mousemove: 'mousemove',\n keydown: 'tuşbasma',\n keyup: 'tuşbırakma',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n keypress: 'keypress',\n focus: 'odak',\n blur: 'bulanık',\n change: 'değişim',\n input: 'giriş',\n submit: 'gönderme', // Batch 3: gönder is the send verb — on-submit listener captured event \"send\"\n reset: 'sıfırla',\n load: 'yükle',\n unload: 'unload',\n resize: 'boyutlandırma',\n scroll: 'kaydır',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: 'iken',\n where: 'nerede',\n and: 've',\n or: 'veya',\n not: 'değil',\n is: 'dir',\n exists: 'var',\n matches: 'eşleşir',\n contains: 'içerir',\n includes: 'dahil',\n equals: 'eşittir',\n has: 'var',\n have: 'var',\n then: 'ardından',\n else: 'yoksa',\n otherwise: 'aksi_halde',\n end: 'son',\n live: 'canlı',\n changes: 'değiştiğinde',\n },\n\n temporal: {\n seconds: 'saniye',\n second: 'saniye',\n milliseconds: 'milisaniye',\n millisecond: 'milisaniye',\n minutes: 'dakika',\n minute: 'dakika',\n hours: 'saat',\n hour: 'saat',\n ms: 'ms',\n s: 's',\n min: 'dk',\n h: 'sa',\n },\n\n values: {\n true: 'doğru',\n false: 'yanlış',\n null: 'boş',\n undefined: 'tanımsız',\n it: 'o',\n its: 'onun',\n me: 'ben',\n my: 'benim',\n myself: 'kendim',\n you: 'sen',\n your: 'senin',\n yourself: 'kendin',\n element: 'öğe',\n target: 'hedef',\n detail: 'detay',\n event: 'olay',\n window: 'pencere',\n document: 'belge',\n body: 'gövde',\n result: 'sonuç',\n value: 'değer',\n },\n\n attributes: {\n class: 'sınıf',\n classes: 'sınıflar',\n style: 'stil',\n styles: 'stiller',\n attribute: 'özellik',\n attributes: 'özellikler',\n property: 'özellik',\n properties: 'özellikler',\n },\n\n expressions: {\n characters: 'karakterler',\n inclusive: 'dahil',\n exclusive: 'hariç',\n first: 'ilk',\n // 'son' is also the END keyword emission (block terminator), and the\n // parser's end-recognizers match it by value — so a positional `last`\n // emission of 'son' terminated the enclosing block mid-condition\n // (focus-trap's `eşleşir son <button/>` dropped the branch body; the sw\n // mwisho class). 'sonuncu' (\"the last one\") is unambiguous.\n last: 'sonuncu',\n next: 'sonraki',\n previous: 'önceki',\n prev: 'önc',\n at: 'de',\n random: 'rastgele',\n closest: 'enyakın',\n parent: 'ebeveyn',\n children: 'çocuklar',\n within: 'içinde',\n no: 'yok',\n empty: 'boş',\n some: 'bazı',\n 'starts with': 'ile başlar',\n 'ends with': 'ile biter',\n 'ignoring case': 'büyük küçük harf duyarsız',\n 'sorted by': 'göre sıralı',\n 'mapped to': 'ye dönüştürülmüş',\n 'split by': 'ile bölünmüş',\n 'joined by': 'ile birleştirilmiş',\n },\n};\n","// packages/i18n/src/parser/tr.ts\n\nimport { tr } from '../dictionaries/tr';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Turkish keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Turkish:\n * - `üzerinde tıklama değiştir .active` → parses as `on click toggle .active`\n * - `eğer doğru ise kaydet \"merhaba\"` → parses as `if true then log \"hello\"`\n *\n * English keywords are also accepted (mixed mode), so:\n * - `üzerinde click değiştir .active` also works (Turkish `üzerinde` + English `click`)\n *\n * Turkish is a useful test case because:\n * - SOV word order (Subject-Object-Verb)\n * - Agglutinative morphology with suffixes\n * - Vowel harmony rules\n * - Latin script with special characters (ı, ğ, ş, ç, ö, ü)\n * - Tests parser's handling of extended Latin characters\n *\n * @example\n * ```typescript\n * import { trKeywords } from '@lokascript/i18n/parser/tr';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: trKeywords });\n * parser.parse('üzerinde tıklama değiştir .active');\n * ```\n */\nexport const trKeywords: KeywordProvider = createKeywordProvider(tr, 'tr', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { tr as trDictionary } from '../dictionaries/tr';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const id: Dictionary = {\n commands: {\n on: 'pada',\n tell: 'katakan',\n trigger: 'picu',\n send: 'kirim',\n take: 'ambil',\n put: 'taruh',\n set: 'atur',\n get: 'dapatkan',\n add: 'tambah',\n remove: 'hapus',\n toggle: 'alihkan',\n hide: 'sembunyikan',\n show: 'tampilkan',\n if: 'jika',\n unless: 'kecuali',\n repeat: 'ulangi',\n for: 'untuk',\n while: 'selama',\n until: 'sampai',\n continue: 'lanjutkan',\n break: 'hentikan',\n halt: 'berhenti',\n wait: 'tunggu',\n // profile primary; 'ambil' is take's word — emitting it for fetch made every\n // fetch parse as take once the fused take-event pattern came alive (the de\n // holen/abrufen bug class)\n fetch: 'muat',\n call: 'panggil',\n return: 'kembali',\n make: 'buat',\n log: 'catat',\n throw: 'lempar',\n catch: 'tangkap',\n measure: 'ukur',\n transition: 'transisi',\n // naikkan (raise), not tambahkan — tambahkan is the semantic profile's\n // `add` alternative, so emitting it made increment-counter parse as ADD\n // (the #373 collision family). naikkan is the profile's increment\n // alternative, pairing naturally with the decrement side.\n increment: 'naikkan',\n decrement: 'kurangi',\n default: 'bawaan',\n go: 'pergi',\n pushUrl: 'tambahUrl',\n replaceUrl: 'gantiUrl',\n copy: 'salin',\n pick: 'pilih',\n beep: 'bunyi',\n js: 'js',\n async: 'asinkron',\n render: 'olah', // auditor: dict emitted a word the profile reads differently\n swap: 'tukar',\n morph: 'ubah', // auditor: dict emitted a word the profile reads differently\n settle: 'stabilkan', // auditor: dict emitted a word the profile reads differently\n append: 'sisipkan', // profile primary; 'tambah_akhir' splits and is unrecognized\n exit: 'keluar',\n install: 'pasang',\n breakpoint: 'titik-henti',\n clear: 'bersihkan', // hapus is the remove PRIMARY in the profile\n close: 'tutupkan', // Batch 3: tutup is the hide keyword — rendered close parsed as action=hide\n open: 'buka',\n select: 'tandai', // Batch 3: pilih is the pick keyword — bare select rendered with it parses null\n clone: 'klon',\n prepend: 'awali',\n },\n\n modifiers: {\n to: 'ke',\n from: 'dari',\n into: 'ke_dalam',\n with: 'dengan',\n at: 'di',\n in: 'dalam',\n of: 'dari',\n as: 'sebagai',\n by: 'oleh',\n before: 'sebelum',\n after: 'setelah',\n over: 'di_atas',\n under: 'di_bawah',\n between: 'antara',\n through: 'melalui',\n without: 'tanpa',\n },\n\n events: {\n click: 'klik',\n dblclick: 'dblclick',\n // mousedown/mouseup: English passthrough — no native form round-trips on the\n // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms\n // shattered to their first word — live broken listeners in repeat-until-event).\n // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n // V3 Batch 2: mouse_atas/mouse_luar captured no event (the S5b forms\n // `mouse masuk`/`mouse keluar` are aspirational — they don't tokenize\n // either) — realigned to the tokenizer-registered natives. keydown keeps\n // tekan_tombol (captures keydown via the registered `tekan`; S5b-aliased).\n // keyup has NO parseable native (lepas is unregistered) → English\n // passthrough, matching the blur/reset precedent below.\n mouseover: 'arahkan',\n mouseout: 'tinggalkan',\n mousemove: 'mousemove',\n keydown: 'tekan_tombol',\n keyup: 'keyup',\n keypress: 'keypress',\n focus: 'fokus',\n blur: 'blur',\n change: 'ubah',\n input: 'masukan',\n submit: 'kirim',\n reset: 'reset',\n load: 'muat',\n unload: 'bongkar',\n resize: 'ubah_ukuran',\n scroll: 'gulir',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: 'ketika',\n where: 'di_mana',\n and: 'dan',\n or: 'atau',\n not: 'bukan',\n is: 'adalah',\n exists: 'ada',\n matches: 'cocok',\n contains: 'berisi',\n includes: 'termasuk',\n equals: 'sama',\n has: 'punya',\n have: 'punya',\n then: 'lalu',\n else: 'lainnya',\n otherwise: 'sebaliknya',\n end: 'akhir',\n live: 'langsung',\n changes: 'berubah',\n },\n\n temporal: {\n seconds: 'detik',\n second: 'detik',\n milliseconds: 'milidetik',\n millisecond: 'milidetik',\n minutes: 'menit',\n minute: 'menit',\n hours: 'jam',\n hour: 'jam',\n ms: 'ms',\n s: 'd',\n min: 'mnt',\n h: 'j',\n },\n\n values: {\n true: 'benar',\n false: 'salah',\n null: 'kosong',\n undefined: 'tidak_terdefinisi',\n it: 'itu',\n its: 'miliknya',\n me: 'saya',\n my: 'saya punya',\n myself: 'saya sendiri',\n you: 'kamu',\n your: 'kamu punya',\n yourself: 'kamu sendiri',\n element: 'elemen',\n target: 'target',\n detail: 'detail',\n event: 'peristiwa',\n window: 'jendela',\n document: 'dokumen',\n body: 'badan',\n result: 'hasil',\n value: 'nilai',\n },\n\n attributes: {\n class: 'kelas',\n classes: 'kelas_kelas',\n style: 'gaya',\n styles: 'gaya_gaya',\n attribute: 'atribut',\n attributes: 'atribut_atribut',\n property: 'properti',\n properties: 'properti_properti',\n },\n\n expressions: {\n characters: 'karakter',\n inclusive: 'inklusif',\n exclusive: 'eksklusif',\n first: 'pertama',\n last: 'terakhir',\n next: 'berikutnya',\n previous: 'sebelumnya',\n prev: 'sblm',\n at: 'di',\n random: 'acak',\n closest: 'terdekat',\n parent: 'induk',\n children: 'anak_anak',\n within: 'dalam',\n no: 'tidak_ada',\n empty: 'kosong',\n some: 'beberapa',\n 'starts with': 'dimulai dengan',\n 'ends with': 'diakhiri dengan',\n 'ignoring case': 'abaikan kapital',\n 'sorted by': 'diurutkan berdasarkan',\n 'mapped to': 'dipetakan ke',\n 'split by': 'dipisah oleh',\n 'joined by': 'digabung oleh',\n },\n};\n","// packages/i18n/src/parser/id.ts\n\nimport { id } from '../dictionaries/id';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Indonesian (Bahasa Indonesia) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Indonesian:\n * - `pada klik ganti .active` → parses as `on click toggle .active`\n * - `jika benar lalu log \"Halo\"` → parses as `if true then log \"Hello\"`\n *\n * Indonesian is an SVO language with:\n * - Agglutinative morphology (prefixes/suffixes)\n * - No grammatical gender\n * - Prepositions (like English)\n * - Relatively simple syntax\n *\n * @example\n * ```typescript\n * import { idKeywords } from '@lokascript/i18n/parser/id';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: idKeywords });\n * parser.parse('pada klik ganti .active');\n * ```\n */\nexport const idKeywords: KeywordProvider = createKeywordProvider(id, 'id', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { id as idDictionary } from '../dictionaries/id';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const qu: Dictionary = {\n commands: {\n on: 'kaqpi',\n tell: 'niy',\n trigger: 'kichay',\n send: 'kachay',\n take: 'hapiy', // auditor: dict emitted a word the profile reads differently\n put: 'churay',\n // churay is the semantic qu profile's `put` primary; `set` is churanay. Emitting\n // churay for set made the semantic parser read a transformed `set` as `put`.\n // See ZH_BLOCK_BODY_SCOPE.md (#2 sweep — keyword realignment, cf. zh fetch).\n set: 'churanay',\n // Align with the semantic quechua profile's `get` primary (`taripay`); the\n // previous `chaskiy` had no profile entry, so the transformed `get` dropped\n // (get-value parsed degenerate). Same dict↔profile alignment as id `toggle`.\n get: 'taripay',\n add: 'yapay',\n remove: 'qichuy',\n toggle: 'tikray',\n hide: 'pakay',\n show: 'rikuchiy',\n if: 'sichus',\n unless: 'mana sichus', // spaced phrase (\"if not\"); `_` form split to `mana`+`sichus`(=if) at parse time\n repeat: 'kutipay',\n for: 'sapankaq', // profile's for word — rayku doubles as `by`\n // `kaykamaqa` (the semantic qu profile's while primary), not `kay_kaq`: the\n // `_` form is unknown to the profile (and `_` words split at parse time, cf.\n // qhipaman_yapay), so the fronted repeat-while head never formed a `while`\n // node — the condition dropped wholesale. Same dict↔profile alignment as\n // vi render / de abrufen.\n while: 'kaykamaqa',\n until: 'hayk_akama',\n continue: 'purichiy',\n break: 'p_akiy',\n halt: 'sayay',\n wait: 'suyay',\n fetch: 'apamuy',\n call: 'qayay',\n return: 'kutimuy',\n make: 'ruray',\n // qillqay is the semantic qu profile's `copy` primary; `log` is qillqakuy.\n // Emitting qillqay for log made the parser read every transformed log as\n // copy (log-value/log-element/get-value lossy) — same realign as set above.\n log: 'qillqakuy',\n throw: 'wikchuy',\n catch: 'hapsiy',\n measure: 'tupuy',\n // pasay, not tikray: the semantic qu profile's toggle keyword is\n // t'ikray/tikray, so a tikray render collided with toggle and the\n // transition command never anchored (sw kama precedent, #569).\n transition: 'pasay',\n increment: 'yapachiy',\n decrement: 'pisiyachiy',\n default: 'ñawpaq_kaq',\n go: 'riy',\n pushUrl: 'url_tanqay',\n replaceUrl: 'url_tikray',\n copy: 'qillqay',\n pick: 'akllay',\n beep: 'waqay',\n js: 'js',\n async: 'mana_suyaspa',\n render: 'rikurichiy', // auditor: dict emitted a word the profile reads differently\n swap: \"t'inkuy\", // profile primary; 'rantin_tikray' splits, 'tikray' is toggle's word\n morph: 'tukunay', // auditor: dict emitted a word the profile reads differently\n settle: 'tiyakuy', // auditor: dict emitted a word the profile reads differently\n append: 'qatichiy', // profile's append primary (single token); `qhipaman_yapay` `_`-split to qhipaman+yapay(=add) at parse time\n exit: 'lluqsiy',\n install: 'tarpuy',\n breakpoint: 'sayachinay',\n clear: 'pichay',\n close: 'wichqay',\n open: 'paskay', // Batch 3: kichay is the trigger keyword — rendered open parsed null\n select: 'marcay', // Batch 3: akllay is the pick keyword — bare select rendered with it parses null\n clone: 'kikinchay',\n prepend: 'ñawpachiy',\n socket: 'tinkina',\n },\n\n modifiers: {\n to: 'man',\n from: 'manta',\n into: 'ukupi',\n with: 'wan',\n at: 'pi',\n in: 'ukupi',\n of: 'pa',\n as: 'hina',\n by: 'rayku',\n before: 'ñawpaqpi',\n after: 'qhepapi',\n over: 'hawapi',\n under: 'urapi',\n between: 'chawpipi',\n through: 'pasaspa',\n without: 'mana',\n },\n\n events: {\n click: 'ñitiy',\n dblclick: 'dblclick',\n // Fused (no `_`): the semantic tokenizer splits on `_` — and `rat_ñitiy` then\n // mis-captured as the `click` event (ñitiy→click). Mirrors the #535 ru/uk fuse.\n mousedown: 'ratñitiy',\n mouseup: 'rathuqariy',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n // V3 Batch 2: `yupana_ñitiy` split at `_` and mis-captured as the `click`\n // event (ñitiy→click, the same mechanism as the mousedown fuse above);\n // `yupana_huqariy` captured verbatim `huqariy`. Realigned to the\n // S5b/tokenizer forms.\n keydown: 'llave uray',\n keyup: 'llave hawa',\n keypress: 'keypress',\n focus: 'qhaway',\n blur: 'paqariy',\n change: 'kambiay', // Batch 3: tikray is the toggle verb — on-change listener captured event \"toggle\"\n input: 'yaykuchiy',\n submit: 'apaykachay', // Batch 3: kachay is the send verb — on-submit captured \"send\" in one corpus slot\n reset: 'musuqchay', // Batch 3: qallariy is the init/start word — on-reset listener captured event \"default\"\n load: 'apakuy',\n unload: 'unload',\n resize: 'hatun_kay',\n scroll: 'kunray',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: 'maykama',\n where: 'maypi',\n and: 'chaymanta',\n or: 'utaq',\n not: 'mana',\n is: 'kanqa',\n exists: 'tiyan',\n matches: 'tupan',\n contains: 'ukupi_kan',\n includes: 'churasqa',\n equals: 'kikin',\n has: 'kachkan',\n have: 'kachkani',\n then: 'chayqa',\n // Align to the semantic profile's else word `manachus`. The old `mana_chayqa`\n // tokenized as `mana`(false) + `_` + `chayqa`(then) — no else keyword formed,\n // so qu conditionals never split their else branch. `manachus` is a single\n // token the profile-derived keyword map reads as `else` (dict↔profile align).\n else: 'manachus',\n otherwise: 'huk_kaqpi',\n end: 'tukuy',\n live: 'kawsay',\n changes: 'tukurikun',\n },\n\n temporal: {\n seconds: 'sikundukuna',\n second: 'sikundu',\n milliseconds: 'iskay_paqta_sikundukuna',\n millisecond: 'iskay_paqta_sikundu',\n minutes: 'minutukuna',\n minute: 'minutu',\n hours: 'horakuna',\n hour: 'hora',\n ms: 'ms',\n s: 's',\n min: 'm',\n h: 'h',\n },\n\n values: {\n true: 'cheqaq',\n false: 'llulla',\n null: 'chusaq',\n undefined: 'mana_riqsisqa',\n it: 'chay',\n its: 'chaypaq',\n me: 'noqa',\n my: 'noqaq',\n myself: 'noqa killa',\n you: 'qam',\n your: 'qampaq',\n yourself: 'qam killa',\n element: 'raku',\n target: 'punta',\n detail: 'sut_iy',\n event: 'ruway',\n window: 'k_iri',\n document: 'qillqa',\n body: 'kurku',\n result: 'lluqsiy',\n value: 'chanin',\n },\n\n attributes: {\n class: 'ayllu',\n classes: 'ayllukuna',\n style: 'sami',\n styles: 'samikuna',\n attribute: 'kaq',\n attributes: 'kaqkuna',\n property: 'kanay',\n properties: 'kanaykuna',\n },\n\n expressions: {\n // Pick unit word (arc 3): native-first per qu convention — `sanampa`\n // (\"sign/letter\", the standard term for alphabet characters) over a\n // loanword. Paired with the QUECHUA_EXTRAS entry in the semantic\n // tokenizer; both surfaces must match verbatim.\n characters: 'sanampa',\n first: 'ñawpaq',\n last: 'qhipa',\n next: 'qhipantin',\n previous: 'ñawpaqnin',\n prev: 'ñawpaq',\n at: 'pi',\n random: 'imaymanata',\n closest: 'kaylla',\n parent: 'mama_tayta',\n children: 'wawakuna',\n within: 'ukupi',\n no: 'mana_kanchu',\n empty: 'chusaq',\n some: 'wakin',\n 'starts with': 'qallarisqa wan',\n 'ends with': 'tukusqa wan',\n 'ignoring case': 'hatun-huchuy qillqata-saqiy',\n 'sorted by': 'niqpi ruwasqa',\n 'mapped to': 'kay kaqman',\n 'split by': 'rakisqa',\n 'joined by': 'huñusqa',\n },\n};\n","// packages/i18n/src/parser/qu.ts\n\nimport { qu } from '../dictionaries/qu';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Quechua (Runasimi) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Quechua:\n * - `ñitiy-pi yapay #count-ta` → parses as `on click increment #count`\n *\n * Quechua is an SOV language with:\n * - Agglutinative/polysynthetic morphology\n * - Extensive suffix system (case markers: -ta, -man, -pi, -manta, -wan)\n * - Postpositions (unlike Spanish which uses prepositions)\n * - Object-Verb word order\n * - Evidentiality markers (not used in hyperscript)\n *\n * The grammar transformer handles suffix joining via hyphen notation\n * (e.g., \"#count-ta\" attaches the accusative marker).\n *\n * @example\n * ```typescript\n * import { quKeywords } from '@lokascript/i18n/parser/qu';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: quKeywords });\n * parser.parse('ñitiy-pi yapay #count-ta');\n * ```\n */\nexport const quKeywords: KeywordProvider = createKeywordProvider(qu, 'qu', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { qu as quDictionary } from '../dictionaries/qu';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const sw: Dictionary = {\n commands: {\n on: 'kwenye',\n tell: 'ambia',\n trigger: 'chochea',\n send: 'tuma',\n take: 'chukua',\n put: 'weka',\n // weka is the semantic sw profile's `put` primary; `set` is seti. Emitting weka\n // for set made the semantic parser read a transformed `set` as `put`.\n // See ZH_BLOCK_BODY_SCOPE.md (#2 sweep — keyword realignment, cf. zh fetch).\n set: 'seti',\n get: 'pata',\n add: 'ongeza',\n remove: 'ondoa',\n toggle: 'badilisha',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'blur',\n hide: 'ficha',\n show: 'onyesha',\n if: 'kama',\n unless: 'isipokuwa',\n repeat: 'rudia',\n for: 'kwa',\n while: 'wakati',\n until: 'hadi',\n continue: 'endelea',\n break: 'vunja',\n halt: 'simama',\n wait: 'ngoja',\n fetch: 'leta',\n call: 'ita',\n // `rudisha` (transitive, \"give back a value\"), not `rudi` (\"go back\"): the\n // semantic profile reads `rudisha`/`rejea`, so emitting `rudi` produced sw code\n // the parser could not read back. Kept clear of `rudia` (= `repeat`).\n return: 'rudisha',\n make: 'tengeneza', // auditor: dict emitted a word the profile reads differently\n log: 'andika',\n throw: 'tupa',\n catch: 'shika',\n measure: 'pima',\n transition: 'mpito',\n increment: 'ongezeko',\n decrement: 'punguza',\n default: 'msingi',\n go: 'nenda',\n pushUrl: 'sukumaUrl',\n replaceUrl: 'badilishaUrl',\n copy: 'nakala', // Batch 3: nakili is the clone keyword — rendered copy parsed as action=clone\n pick: 'chagua',\n beep: 'lia',\n js: 'js',\n async: 'sainkroni',\n render: 'chora',\n swap: 'badilishana',\n morph: 'geuza', // auditor: dict emitted a word the profile reads differently\n settle: 'tulia',\n append: 'ambatanisha', // profile primary; 'ongezaMwisho' is unrecognized\n exit: 'toka',\n install: 'sakinisha',\n breakpoint: 'nukta-simama',\n clear: 'safisha', // futa is a remove alternative in the profile\n close: 'funga',\n open: 'fungua',\n select: 'alama', // Batch 3: chagua is the pick keyword — bare select rendered with it parses null\n clone: 'nakili',\n prepend: 'tanguliza',\n focus: 'lenga',\n socket: 'soketi',\n },\n\n modifiers: {\n to: 'kwa',\n from: 'kutoka',\n into: 'ndani',\n with: 'na',\n at: 'katika',\n in: 'ndani',\n of: 'ya',\n // `kuwa` (\"to be/become\" — the conversion sense, cf. `badilisha kuwa`), not\n // `kama`: sw `kama` is the IF keyword (commands.if above and the semantic sw\n // profile's if primary), so emitting it for `as` grew a phantom `if` command\n // out of every transformed `as <Type>` tail (`kama JSON`, `kama Number`) when\n // the semantic parser split event-body statements. Same dict↔profile homonym\n // disambiguation as pl get/pobierz. The semantic fetch-sw pattern still\n // tolerates hand-written `kama` in as-marker position.\n as: 'kuwa',\n by: 'na',\n before: 'kabla',\n after: 'baada',\n over: 'juu',\n under: 'chini',\n between: 'kati',\n through: 'kupitia',\n without: 'bila',\n },\n\n events: {\n click: 'bonyeza',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n dblclick: 'dblclick',\n mousedown: 'panya_shuka',\n mouseup: 'panya_juu',\n mouseenter: 'panya_ingia',\n mouseleave: 'panya_toka',\n // V3 Batch 2: panya_juu is mouseup's form (shared here by mistake — the\n // tokenizer deliberately maps it to mouseup for the corpus row, so a\n // mouseover handler captured `mouseup`) — realigned to the\n // tokenizer-registered `sogeza juu`.\n mouseover: 'sogeza juu',\n mouseout: 'panya_nje',\n mousemove: 'panya_sogea',\n keydown: 'kitufe_shuka',\n keyup: 'kitufe_juu',\n keypress: 'keypress',\n // V3 Batch 2: zingatia captured no event → lenga (S5b/tokenizer form);\n // poteza_macho was a null parse → `blur` (the S5b identity form — matches\n // the live corpus render `kwenye blur`); badilisha is the toggle VERB\n // homonym (a change handler captured event=`toggle` — a listener for a DOM\n // event named \"toggle\") → kubadilisha (S5b/tokenizer form).\n focus: 'lenga',\n blur: 'blur',\n change: 'kubadilisha',\n input: 'ingizo',\n submit: 'wasilisha',\n reset: 'reset',\n load: 'pakia',\n unload: 'shuka',\n resize: 'badilisha_ukubwa',\n scroll: 'sogeza',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: 'wakati',\n where: 'wapi',\n and: 'na',\n or: 'au',\n not: 'si',\n is: 'ni',\n exists: 'ipo',\n matches: 'inafanana',\n contains: 'ina',\n includes: 'pamoja',\n equals: 'sawa',\n has: 'ana',\n have: 'nina',\n then: 'kisha',\n else: 'sivyo',\n otherwise: 'vinginevyo',\n end: 'mwisho',\n live: 'mubashara',\n changes: 'inabadilika',\n },\n\n temporal: {\n seconds: 'sekunde',\n second: 'sekunde',\n milliseconds: 'millisekunde',\n millisecond: 'millisekunde',\n minutes: 'dakika',\n minute: 'dakika',\n hours: 'masaa',\n hour: 'saa',\n ms: 'ms',\n s: 's',\n min: 'dk',\n h: 'sa',\n },\n\n values: {\n true: 'kweli',\n false: 'uongo',\n null: 'tupu',\n undefined: 'haijafafanuliwa',\n it: 'hiyo',\n its: 'yake',\n me: 'mimi',\n my: 'yangu',\n myself: 'mimi mwenyewe',\n you: 'wewe',\n your: 'yako',\n yourself: 'wewe mwenyewe',\n element: 'kipengele',\n target: 'lengo',\n detail: 'maelezo',\n event: 'tukio',\n window: 'dirisha',\n document: 'hati',\n body: 'mwili',\n result: 'matokeo',\n value: 'thamani',\n },\n\n attributes: {\n class: 'darasa',\n classes: 'madarasa',\n style: 'mtindo',\n styles: 'mitindo',\n attribute: 'sifa',\n attributes: 'sifa',\n property: 'mali',\n properties: 'mali',\n },\n\n expressions: {\n characters: 'herufi',\n first: 'kwanza',\n // 'mwisho' is the END keyword (block terminator) — the tokenizer's keyword\n // map is last-wins, so a positional `last` emission of 'mwisho' reads as\n // `end` and terminates the enclosing block mid-condition (focus-trap's\n // `… inafanana mwisho <button/>` dropped the whole branch body). Emit the\n // concatenated adjective form instead (wa mwisho — the saufsi/wennnicht/\n // enyakın single-token class); the tokenizer reads it as `last`.\n last: 'wamwisho',\n next: 'ijayo',\n previous: 'iliyopita',\n prev: 'awali',\n at: 'katika',\n random: 'nasibu',\n // Natural Swahili: `karibu` (\"near/close\") is the ordinary word and already\n // maps to closest. The earlier `karibu_zaidi` (\"nearer\") underscore-split to\n // karibu/_/zaidi (the stray `_ zaidi` broke positional capture); the fused\n // `karibuzaidi` parsed but isn't real Swahili. `karibu` alone is both natural\n // and correct (the sw tokenizer is single-word-only, so a spaced `karibu\n // zaidi` would strand `zaidi` regardless).\n closest: 'karibu',\n parent: 'mzazi',\n children: 'watoto',\n within: 'ndani_ya',\n no: 'hakuna',\n empty: 'tupu',\n some: 'baadhi',\n 'starts with': 'huanza na',\n 'ends with': 'huisha na',\n 'ignoring case': 'puuza herufi kubwa ndogo',\n 'sorted by': 'kupangwa kwa',\n 'mapped to': 'kubadilishwa kuwa',\n 'split by': 'kugawanywa kwa',\n 'joined by': 'kuunganishwa kwa',\n },\n};\n","// packages/i18n/src/parser/sw.ts\n\nimport { sw } from '../dictionaries/sw';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Swahili (Kiswahili) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Swahili:\n * - `kwenye bonyeza badilisha .active` → parses as `on click toggle .active`\n * - `kama kweli basi andika \"Habari\"` → parses as `if true then log \"Hello\"`\n *\n * Swahili is an SVO Bantu language with:\n * - Agglutinative verb morphology\n * - Noun class system (simplified for hyperscript keywords)\n * - Prepositions (unlike many other African languages)\n * - Subject-verb agreement (not relevant for hyperscript)\n *\n * Swahili is widely spoken in East Africa and serves as a lingua franca\n * for millions of speakers.\n *\n * @example\n * ```typescript\n * import { swKeywords } from '@lokascript/i18n/parser/sw';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: swKeywords });\n * parser.parse('kwenye bonyeza badilisha .active');\n * ```\n */\nexport const swKeywords: KeywordProvider = createKeywordProvider(sw, 'sw', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { sw as swDictionary } from '../dictionaries/sw';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const pt: Dictionary = {\n commands: {\n on: 'em',\n tell: 'dizer',\n trigger: 'disparar',\n send: 'enviar',\n take: 'pegar',\n put: 'colocar',\n set: 'definir',\n get: 'obter',\n add: 'adicionar',\n remove: 'remover',\n toggle: 'alternar',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'desfocar',\n hide: 'esconder',\n show: 'mostrar',\n if: 'se',\n unless: 'salvo', // a_menos splits at _ in the pt extractor (see profile)\n repeat: 'repetir',\n for: 'para',\n while: 'enquanto',\n until: 'até',\n continue: 'continuar',\n // un-crossed: the profile/tokenizer read parar=halt, interromper=break\n break: 'interromper',\n halt: 'parar',\n wait: 'esperar',\n fetch: 'buscar',\n call: 'chamar',\n return: 'retornar',\n make: 'fazer',\n log: 'registrar',\n throw: 'lançar',\n catch: 'capturar',\n measure: 'medir',\n transition: 'transição',\n increment: 'incrementar',\n decrement: 'decrementar',\n default: 'padrão',\n go: 'ir',\n pushUrl: 'pushUrl',\n replaceUrl: 'substituirUrl',\n copy: 'copiar',\n pick: 'escolher',\n beep: 'apitar',\n js: 'js',\n async: 'assíncrono',\n render: 'renderizar',\n swap: 'trocar',\n morph: 'transformar',\n settle: 'estabilizar',\n append: 'anexar',\n exit: 'sair',\n install: 'instalar',\n breakpoint: 'ponto-interrupção',\n clear: 'limpar',\n close: 'fechar',\n open: 'abrir',\n select: 'selecionar',\n clone: 'clonar',\n prepend: 'preceder',\n focus: 'focar',\n socket: 'soquete',\n },\n\n modifiers: {\n to: 'para',\n from: 'de',\n into: 'em',\n with: 'com',\n at: 'em',\n in: 'dentro',\n of: 'de',\n as: 'como',\n by: 'por',\n before: 'antes',\n after: 'depois',\n over: 'sobre',\n under: 'sob',\n between: 'entre',\n through: 'através',\n without: 'sem',\n },\n\n events: {\n click: 'clique',\n dblclick: 'duploClique',\n mousedown: 'mouseBaixo',\n mouseup: 'mouseCima',\n mouseenter: 'mouseEntrar',\n mouseleave: 'mouseSair',\n // V3 Batch 2: camelCase forms split to the S5b/tokenizer-known forms (the\n // fused spellings captured event=expression:undefined — broken listeners)\n mouseover: 'mouse sobre',\n mouseout: 'mouse fora',\n mousemove: 'mouseMover',\n keydown: 'tecla baixo',\n keyup: 'tecla cima',\n keypress: 'teclaPressionar',\n focus: 'foco',\n blur: 'desfoque',\n change: 'mudança',\n input: 'entrada',\n submit: 'envio',\n reset: 'redefinir', // Batch 3: reiniciar captured on.event as expression (broken listener) — profile word round-trips\n load: 'carregar',\n unload: 'descarregar',\n resize: 'redimensionar',\n scroll: 'rolar',\n touchstart: 'toqueInício',\n touchend: 'toqueFim',\n touchmove: 'toqueMover',\n touchcancel: 'toqueCancelar',\n },\n\n logical: {\n when: 'quando',\n where: 'onde',\n and: 'e',\n or: 'ou',\n not: 'não',\n is: 'é',\n exists: 'existe',\n matches: 'corresponde',\n contains: 'contém',\n includes: 'inclui',\n equals: 'igual',\n has: 'tem',\n have: 'tenho',\n then: 'então',\n else: 'senão',\n otherwise: 'caso_contrário',\n end: 'fim',\n live: 'vivo',\n changes: 'muda',\n },\n\n temporal: {\n seconds: 'segundos',\n second: 'segundo',\n milliseconds: 'milissegundos',\n millisecond: 'milissegundo',\n minutes: 'minutos',\n minute: 'minuto',\n hours: 'horas',\n hour: 'hora',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'verdadeiro',\n false: 'falso',\n null: 'nulo',\n undefined: 'indefinido',\n it: 'isso',\n its: 'seu',\n me: 'eu',\n my: 'meu',\n myself: 'eu mesmo',\n you: 'você',\n your: 'seu',\n yourself: 'você mesmo',\n element: 'elemento',\n target: 'alvo',\n detail: 'detalhe',\n event: 'evento',\n window: 'janela',\n document: 'documento',\n body: 'corpo',\n result: 'resultado',\n value: 'valor',\n },\n\n attributes: {\n class: 'classe',\n classes: 'classes',\n style: 'estilo',\n styles: 'estilos',\n attribute: 'atributo',\n attributes: 'atributos',\n property: 'propriedade',\n properties: 'propriedades',\n },\n\n expressions: {\n characters: 'caracteres',\n inclusive: 'inclusivo',\n exclusive: 'exclusivo',\n first: 'primeiro',\n last: 'último',\n next: 'próximo',\n previous: 'anterior',\n prev: 'ant',\n at: 'em',\n random: 'aleatório',\n closest: 'maispróximo',\n parent: 'pai',\n children: 'filhos',\n within: 'dentro',\n no: 'nenhum',\n empty: 'vazio',\n some: 'algum',\n 'starts with': 'começa com',\n 'ends with': 'termina com',\n 'ignoring case': 'ignorando maiúsculas',\n 'sorted by': 'ordenado por',\n 'mapped to': 'mapeado para',\n 'split by': 'dividido por',\n 'joined by': 'unido por',\n },\n};\n","// packages/i18n/src/parser/pt.ts\n\nimport { pt } from '../dictionaries/pt';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Portuguese (Português) keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Portuguese:\n * - `em clique alternar .active` → parses as `on click toggle .active`\n * - `se verdadeiro então registrar \"Olá\"` → parses as `if true then log \"Hello\"`\n *\n * Portuguese is an SVO language with:\n * - High mutual intelligibility with Spanish\n * - Prepositions (like English and Spanish)\n * - Gender agreement (simplified for hyperscript)\n * - Fusional morphology\n *\n * Direct translation is supported between Portuguese and Spanish,\n * avoiding the English pivot for more natural translations.\n *\n * @example\n * ```typescript\n * import { ptKeywords } from '@lokascript/i18n/parser/pt';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: ptKeywords });\n * parser.parse('em clique alternar .active');\n * ```\n */\nexport const ptKeywords: KeywordProvider = createKeywordProvider(pt, 'pt', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { pt as ptDictionary } from '../dictionaries/pt';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const it: Dictionary = {\n commands: {\n on: 'su',\n tell: 'dire',\n trigger: 'scatenare',\n send: 'inviare',\n take: 'prendere',\n put: 'mettere',\n set: 'impostare',\n get: 'ottenere',\n add: 'aggiungere',\n remove: 'rimuovere',\n toggle: 'commutare',\n hide: 'nascondere',\n show: 'mostrare',\n if: 'se',\n unless: 'salvo',\n repeat: 'ripetere',\n for: 'per',\n while: 'mentre',\n until: 'fino',\n continue: 'continuare',\n break: 'interrompere',\n halt: 'fermare',\n wait: 'aspettare',\n fetch: 'recuperare',\n call: 'chiamare',\n return: 'ritornare',\n make: 'fare',\n log: 'registrare',\n throw: 'lanciare',\n catch: 'catturare',\n measure: 'misurare',\n transition: 'transizione',\n increment: 'incrementare',\n decrement: 'decrementare',\n default: 'predefinito',\n go: 'andare',\n pushUrl: 'pushUrl',\n replaceUrl: 'sostituireUrl',\n copy: 'copiare',\n pick: 'scegliere',\n beep: 'beep',\n js: 'js',\n async: 'asincrono',\n render: 'renderizzare',\n swap: 'scambiare',\n morph: 'trasformare',\n settle: 'stabilizzare',\n append: 'accodare', // profile primary; 'aggiungere' is add's word (parsed as add)\n exit: 'uscire',\n install: 'installare',\n breakpoint: 'punto-interruzione',\n clear: 'cancellare',\n close: 'chiudere',\n open: 'aprire',\n select: 'selezionare',\n clone: 'clonare',\n prepend: 'anteporre',\n // profile primary; without a commands entry the transformer fell back to\n // the EVENTS noun 'fuoco', which generated focus patterns can't match\n focus: 'focalizzare',\n },\n\n modifiers: {\n to: 'a',\n from: 'da',\n into: 'in',\n with: 'con',\n at: 'a',\n in: 'in',\n of: 'di',\n as: 'come',\n by: 'per',\n before: 'prima',\n after: 'dopo',\n over: 'sopra',\n under: 'sotto',\n between: 'tra',\n through: 'attraverso',\n without: 'senza',\n },\n\n events: {\n click: 'clic',\n dblclick: 'doppioclic',\n // mousedown/mouseup: English passthrough — no native form round-trips on the\n // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms\n // shattered to their first word — live broken listeners in repeat-until-event).\n // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseentra',\n mouseleave: 'mouseesce',\n mouseover: 'mousesopra',\n mouseout: 'mousefuori',\n mousemove: 'mousemuovi',\n keydown: 'tastogiù',\n keyup: 'tastosu',\n keypress: 'tastopremi',\n focus: 'fuoco',\n blur: 'sfuocare', // Batch 3: the noun form parsed the blur command with no patient; the verb round-trips both event and command slots\n change: 'cambio',\n input: 'input',\n submit: 'invio',\n reset: 'reimpostare', // Batch 3: English passthrough captured on.event as expression — profile verb round-trips\n load: 'carica',\n unload: 'scarica',\n resize: 'ridimensiona',\n scroll: 'scorrimento',\n touchstart: 'toccoinizia',\n touchend: 'toccofine',\n touchmove: 'toccomuovi',\n touchcancel: 'toccoannulla',\n },\n\n logical: {\n when: 'quando',\n where: 'dove',\n and: 'e',\n or: 'o',\n not: 'non',\n is: 'è',\n exists: 'esiste',\n matches: 'corrisponde',\n contains: 'contiene',\n includes: 'include',\n equals: 'uguale',\n has: 'ha',\n have: 'ho',\n then: 'allora',\n else: 'altrimenti',\n otherwise: 'altrimenti',\n end: 'fine',\n live: 'vivo',\n changes: 'cambia',\n },\n\n temporal: {\n seconds: 'secondi',\n second: 'secondo',\n milliseconds: 'millisecondi',\n millisecond: 'millisecondo',\n minutes: 'minuti',\n minute: 'minuto',\n hours: 'ore',\n hour: 'ora',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'vero',\n false: 'falso',\n null: 'nullo',\n undefined: 'indefinito',\n it: 'esso',\n its: 'suo',\n me: 'io',\n my: 'mio',\n you: 'tu',\n your: 'tuo',\n yourself: 'te stesso',\n myself: 'me stesso',\n element: 'elemento',\n target: 'obiettivo',\n detail: 'dettaglio',\n event: 'evento',\n window: 'finestra',\n document: 'documento',\n body: 'corpo',\n result: 'risultato',\n value: 'valore',\n },\n\n attributes: {\n class: 'classe',\n classes: 'classi',\n style: 'stile',\n styles: 'stili',\n attribute: 'attributo',\n attributes: 'attributi',\n property: 'proprietà',\n properties: 'proprietà',\n },\n\n expressions: {\n characters: 'caratteri',\n inclusive: 'inclusivo',\n exclusive: 'esclusivo',\n first: 'primo',\n last: 'ultimo',\n next: 'prossimo',\n previous: 'precedente',\n prev: 'prec',\n at: 'a',\n random: 'casuale',\n closest: 'vicino',\n parent: 'genitore',\n children: 'figli',\n within: 'dentro',\n no: 'nessun',\n empty: 'vuoto',\n some: 'qualche',\n 'starts with': 'inizia con',\n 'ends with': 'finisce con',\n 'ignoring case': 'ignorando maiuscole',\n 'sorted by': 'ordinato per',\n 'mapped to': 'trasformato in',\n 'split by': 'diviso per',\n 'joined by': 'unito per',\n },\n};\n","import { it } from '../dictionaries/it';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const itKeywords: KeywordProvider = createKeywordProvider(it, 'it', {\n allowEnglishFallback: true,\n});\n\nexport { it as itDictionary } from '../dictionaries/it';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const vi: Dictionary = {\n commands: {\n on: 'khi',\n tell: 'nói với',\n trigger: 'kích hoạt',\n send: 'gửi',\n take: 'lấy',\n put: 'đặt',\n set: 'gán',\n get: 'lấy giá trị',\n add: 'thêm',\n remove: 'xóa',\n toggle: 'chuyển đổi',\n hide: 'ẩn',\n show: 'hiển thị',\n if: 'nếu',\n unless: 'trừ khi',\n repeat: 'lặp lại',\n for: 'với mỗi',\n while: 'trong khi',\n until: 'cho đến khi',\n continue: 'tiếp tục',\n break: 'dừng',\n halt: 'dừng lại',\n wait: 'chờ',\n fetch: 'tải',\n call: 'gọi',\n return: 'trả về',\n make: 'tạo',\n log: 'in ra',\n throw: 'ném',\n catch: 'bắt',\n measure: 'đo lường',\n transition: 'chuyển tiếp',\n increment: 'tăng',\n decrement: 'giảm',\n default: 'mặc định',\n go: 'đi đến',\n pushUrl: 'pushUrl',\n replaceUrl: 'thayThếUrl',\n copy: 'sao chép',\n pick: 'chọn',\n beep: 'beep',\n js: 'js',\n async: 'bất đồng bộ',\n render: 'kết xuất', // distinct from `show` (was `hiển thị`, which collides with show: the semantic profile reads `hiển thị` as show, `kết xuất` as render)\n swap: 'hoán đổi',\n morph: 'biến đổi',\n settle: 'ổn định',\n append: 'nối',\n exit: 'thoát',\n focus: 'tập trung',\n blur: 'mất tập trung',\n init: 'khởi tạo',\n behavior: 'hành vi',\n install: 'cài đặt',\n clone: 'nhân bản', // Batch 3: 'sao chép' is the copy verb — rendered clone parsed as action=copy\n prepend: 'thêm vào đầu', // Batch 3: 'thêm đầu' shatters at 'thêm' (add) — parsed as action=add\n else: 'không thì',\n breakpoint: 'điểm-dừng',\n clear: 'tẩy', // xóa is the remove PRIMARY in the profile\n close: 'đóng',\n open: 'mở',\n select: 'đánh-dấu', // Batch 3: 'chọn' is the pick keyword — bare select rendered with it parses null\n },\n\n modifiers: {\n into: 'vào',\n before: 'trước',\n after: 'sau',\n then: 'rồi',\n end: 'kết thúc',\n from: 'từ',\n to: 'đến',\n with: 'với',\n as: 'như',\n by: 'bởi',\n on: 'trên',\n in: 'trong',\n at: 'tại',\n of: 'của',\n between: 'giữa',\n the: '',\n times: 'lần',\n },\n\n events: {\n click: 'nhấp',\n dblclick: 'dblclick',\n input: 'nhập',\n change: 'change',\n submit: 'nộp', // Batch 3: 'gửi' is the send verb — on-submit listener captured event \"send\"\n keydown: 'keydown',\n keyup: 'keyup',\n keypress: 'keypress',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n focus: 'focus',\n blur: 'blur',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n reset: 'reset',\n load: 'load',\n scroll: 'cuộn',\n resize: 'đổi kích thước',\n },\n\n logical: {\n when: 'khi',\n where: 'ở_đâu',\n and: 'và',\n or: 'hoặc',\n not: 'không',\n is: 'là',\n equals: 'bằng',\n contains: 'chứa',\n matches: 'khớp',\n exists: 'tồn tại',\n has: 'có',\n have: 'có',\n empty: 'trống',\n true: 'đúng',\n false: 'sai',\n null: 'rỗng',\n else: 'không thì',\n end: 'kết thúc',\n then: 'rồi',\n live: 'live',\n changes: 'thay đổi',\n },\n\n temporal: {\n now: 'bây giờ',\n today: 'hôm nay',\n tomorrow: 'ngày mai',\n yesterday: 'hôm qua',\n always: 'luôn luôn',\n never: 'không bao giờ',\n sometimes: 'đôi khi',\n once: 'một lần',\n twice: 'hai lần',\n forever: 'mãi mãi',\n },\n\n values: {\n true: 'đúng',\n false: 'sai',\n null: 'rỗng',\n undefined: 'không xác định',\n none: 'không có',\n all: 'tất cả',\n any: 'bất kỳ',\n some: 'một số',\n each: 'mỗi',\n every: 'tất cả',\n body: 'body',\n event: 'sự kiện',\n it: 'nó',\n its: 'của nó',\n me: 'tôi',\n my: 'của tôi',\n result: 'kết quả',\n target: 'mục tiêu',\n you: 'bạn',\n your: 'của bạn',\n },\n\n attributes: {\n id: 'id',\n class: 'lớp',\n style: 'kiểu',\n value: 'giá trị',\n text: 'văn bản',\n html: 'html',\n src: 'nguồn',\n href: 'liên kết',\n disabled: 'vô hiệu',\n hidden: 'ẩn',\n checked: 'được chọn',\n selected: 'được chọn',\n },\n\n expressions: {\n random: 'ngẫu nhiên',\n characters: 'ký tự',\n inclusive: 'bao gồm',\n exclusive: 'loại trừ',\n me: 'tôi',\n my: 'của tôi',\n it: 'nó',\n its: 'của nó',\n result: 'kết quả',\n event: 'sự kiện',\n target: 'mục tiêu',\n first: 'đầu tiên',\n last: 'cuối cùng',\n next: 'tiếp theo',\n previous: 'trước đó',\n parent: 'cha',\n children: 'con',\n closest: 'gần nhất',\n empty: 'làm-rỗng',\n 'starts with': 'bắt đầu bằng',\n 'ends with': 'kết thúc bằng',\n 'ignoring case': 'không phân biệt hoa thường',\n 'sorted by': 'sắp xếp theo',\n 'mapped to': 'ánh xạ thành',\n 'split by': 'tách bởi',\n 'joined by': 'nối bởi',\n },\n};\n","import { vi } from '../dictionaries/vi';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const viKeywords: KeywordProvider = createKeywordProvider(vi, 'vi', {\n allowEnglishFallback: true,\n});\n\nexport { vi as viDictionary } from '../dictionaries/vi';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const pl: Dictionary = {\n commands: {\n on: 'gdy',\n tell: 'powiedz',\n trigger: 'wyzwól', // auditor: dict emitted a word the profile reads differently\n send: 'wyślij',\n take: 'weź',\n put: 'umieść',\n set: 'ustaw',\n // `uzyskaj` (the semantic pl profile's get primary), not `pobierz`: pl `pobierz`\n // (\"download\") is the profile's FETCH primary, so emitting it for get made the\n // parser read every transformed get as fetch (get-value lossy + a phantom fetch).\n // Same dict↔profile homonym disambiguation as tr load/install, qu get.\n get: 'uzyskaj',\n add: 'dodaj',\n remove: 'usuń',\n toggle: 'przełącz',\n // command blur (the events section has the blur EVENT word; without this\n // entry the transformer fell back to it and no profile read it as the verb)\n blur: 'rozmyj',\n hide: 'ukryj',\n show: 'pokaż',\n if: 'jeśli',\n unless: 'chyba',\n repeat: 'powtórz',\n for: 'dla',\n while: 'dopóki',\n until: 'aż',\n continue: 'kontynuuj',\n break: 'przerwij',\n halt: 'zatrzymaj',\n wait: 'czekaj',\n fetch: 'pobierz',\n call: 'wywołaj',\n return: 'zwróć',\n make: 'utwórz',\n log: 'loguj',\n throw: 'rzuć',\n catch: 'złap',\n measure: 'zmierz',\n transition: 'animuj',\n increment: 'zwiększ',\n decrement: 'zmniejsz',\n default: 'domyślnie',\n go: 'idź',\n pushUrl: 'dodajUrl',\n replaceUrl: 'zamieńUrl',\n copy: 'kopiuj',\n pick: 'wybierz',\n beep: 'sygnał',\n js: 'js',\n async: 'async',\n render: 'renderuj',\n swap: 'zamień',\n morph: 'przekształć',\n settle: 'ustabilizuj',\n append: 'dołącz',\n exit: 'wyjdź',\n install: 'zainstaluj',\n breakpoint: 'punkt-przerwania',\n clear: 'zeruj', // wyczyść is a remove alternative in the profile\n close: 'zamknij',\n open: 'otwórz',\n select: 'zaznacz', // Batch 3: wybierz is the pick keyword — bare select rendered with it parses null\n clone: 'sklonuj',\n prepend: 'poprzedź',\n focus: 'skup',\n },\n\n modifiers: {\n to: 'do',\n from: 'z',\n into: 'do',\n with: 'z',\n at: 'przy',\n in: 'w',\n of: 'z',\n as: 'jako',\n by: 'przez',\n before: 'przed',\n after: 'po',\n over: 'nad',\n under: 'pod',\n between: 'między',\n through: 'przez',\n without: 'bez',\n },\n\n events: {\n click: 'kliknięcie',\n dblclick: 'podwójnekliknięcie',\n // mousedown/mouseup: English passthrough — no native form round-trips on the\n // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms\n // shattered to their first word — live broken listeners in repeat-until-event).\n // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'myszwejście',\n mouseleave: 'myszwyjście',\n mouseover: 'mysznad',\n mouseout: 'myszpoza',\n mousemove: 'myszruch',\n keydown: 'klawiszdół',\n keyup: 'klawiszgóra',\n keypress: 'klawisznaciśnięcie',\n focus: 'fokus',\n blur: 'rozmycie',\n change: 'zmiana',\n input: 'wejście',\n submit: 'wysłaniu', // Batch 3: wyślij is the send verb — on-submit listener captured event \"send\"\n reset: 'zresetuj', // Batch 3: resetuj captured on.event as expression (broken listener) — profile word round-trips\n load: 'załaduj',\n unload: 'wyładuj',\n resize: 'zmieńrozmiar',\n scroll: 'przewiń',\n touchstart: 'dotykstart',\n touchend: 'dotykkoniec',\n touchmove: 'dotykruch',\n touchcancel: 'dotykanuluj',\n },\n\n logical: {\n when: 'kiedy',\n where: 'gdzie',\n and: 'i',\n or: 'lub',\n not: 'nie',\n is: 'jest',\n exists: 'istnieje',\n matches: 'pasuje',\n contains: 'zawiera',\n includes: 'obejmuje',\n equals: 'równa się',\n has: 'ma',\n have: 'mam',\n then: 'wtedy',\n else: 'inaczej',\n otherwise: 'wpp',\n end: 'koniec',\n live: 'żywy',\n changes: 'zmienia',\n },\n\n temporal: {\n seconds: 'sekundy',\n second: 'sekunda',\n milliseconds: 'milisekundy',\n millisecond: 'milisekunda',\n minutes: 'minuty',\n minute: 'minuta',\n hours: 'godziny',\n hour: 'godzina',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'godz',\n },\n\n values: {\n true: 'prawda',\n false: 'fałsz',\n null: 'null',\n undefined: 'niezdefiniowane',\n it: 'to',\n its: 'jego',\n me: 'ja',\n my: 'mój',\n you: 'ty',\n your: 'twój',\n yourself: 'ty sam',\n myself: 'ja sam',\n element: 'element',\n target: 'cel',\n detail: 'szczegół',\n event: 'zdarzenie',\n window: 'okno',\n document: 'dokument',\n body: 'body',\n result: 'wynik',\n value: 'wartość',\n },\n\n attributes: {\n class: 'klasa',\n classes: 'klasy',\n style: 'styl',\n styles: 'style',\n attribute: 'atrybut',\n attributes: 'atrybuty',\n property: 'właściwość',\n properties: 'właściwości',\n },\n\n expressions: {\n characters: 'znaki',\n inclusive: 'włącznie',\n exclusive: 'wyłącznie',\n first: 'pierwszy',\n last: 'ostatni',\n next: 'następny',\n previous: 'poprzedni',\n prev: 'poprz',\n at: 'przy',\n random: 'losowy',\n closest: 'najbliższy',\n parent: 'rodzic',\n children: 'dzieci',\n within: 'wewnątrz',\n no: 'brak',\n empty: 'pusty',\n some: 'jakiś',\n 'starts with': 'zaczyna się od',\n 'ends with': 'kończy się na',\n 'ignoring case': 'ignorując wielkość liter',\n 'sorted by': 'sortowane według',\n 'mapped to': 'przekształcone na',\n 'split by': 'podzielone przez',\n 'joined by': 'połączone przez',\n },\n};\n","import { pl } from '../dictionaries/pl';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const plKeywords: KeywordProvider = createKeywordProvider(pl, 'pl', {\n allowEnglishFallback: true,\n});\n\nexport { pl as plDictionary } from '../dictionaries/pl';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const russianDictionary: Dictionary = {\n commands: {\n on: 'при',\n tell: 'сказать',\n trigger: 'запустить', // auditor: dict emitted a word the profile reads differently\n send: 'отправить',\n take: 'взять',\n put: 'положить',\n set: 'установить',\n get: 'получить',\n add: 'добавить',\n remove: 'удалить',\n toggle: 'переключить',\n hide: 'скрыть',\n show: 'показать',\n // command verb; the events section keeps the noun прокрутка for `on scroll`.\n // Without this entry the transformer fell back to the event noun, which the\n // parser doesn't read as the scroll command (#321 focus family).\n scroll: 'прокрутить',\n if: 'если',\n unless: 'кроме',\n repeat: 'повторить',\n for: 'для',\n while: 'пока',\n until: 'до',\n continue: 'продолжить',\n break: 'прервать',\n halt: 'остановить',\n wait: 'ждать',\n fetch: 'загрузить',\n call: 'вызвать',\n return: 'вернуть',\n make: 'создать',\n log: 'записать',\n throw: 'бросить',\n catch: 'поймать',\n measure: 'измерить',\n transition: 'анимировать',\n increment: 'увеличить',\n decrement: 'уменьшить',\n default: 'по_умолчанию',\n go: 'перейти',\n pushUrl: 'добавить_url',\n replaceUrl: 'заменить_url',\n copy: 'копировать',\n pick: 'выбрать',\n beep: 'звук',\n js: 'js',\n async: 'асинхронно',\n render: 'отобразить',\n swap: 'поменять',\n morph: 'трансформировать',\n settle: 'стабилизировать',\n append: 'дописать', // profile alternative; the compound splits and добавить parses as add\n exit: 'выйти',\n else: 'иначе',\n install: 'инсталлировать', // loanword — `установить` is `set` (homonym); see russian profile\n init: 'инициализировать',\n behavior: 'поведение',\n focus: 'сфокусировать',\n blur: 'размыть',\n clone: 'клонировать',\n prepend: 'добавить_в_начало',\n breakpoint: 'точка-останова',\n clear: 'очистить',\n close: 'закрыть',\n open: 'открыть',\n select: 'выделить', // Batch 3: выбрать is the pick keyword — bare select rendered with it parses null\n },\n\n modifiers: {\n to: 'к',\n from: 'из',\n into: 'в',\n with: 'с',\n at: 'у',\n in: 'в',\n of: 'из',\n as: 'как',\n by: 'на',\n before: 'до',\n after: 'после',\n over: 'над',\n under: 'под',\n between: 'между',\n through: 'через',\n without: 'без',\n on: 'на',\n },\n\n events: {\n click: 'клик',\n dblclick: 'двойной_клик',\n // Fused (no `_`): the semantic tokenizer splits on `_`, so an underscore form\n // breaks event recognition (mousedown → bare expression). Mirrors the #510 tr\n // resize fix (boyut_değiştir → boyutlandırma) and the enyakın superlative.\n mousedown: 'мышьвниз',\n mouseup: 'мышьвверх',\n mouseenter: 'мышь_вход',\n mouseleave: 'мышь_выход',\n mouseover: 'наведение',\n mouseout: 'уход',\n mousemove: 'движение_мыши',\n keydown: 'клавиша_вниз',\n keyup: 'клавиша_вверх',\n keypress: 'нажатие_клавиши',\n focus: 'фокус',\n blur: 'потеря_фокуса',\n change: 'изменение',\n input: 'ввод',\n submit: 'отправка',\n reset: 'сбросить', // Batch 3: сброс captured on.event as expression (broken listener) — profile verb round-trips\n load: 'загрузка',\n unload: 'выгрузка',\n resize: 'изменениеразмера', // fused (no `_`) — see mousedown note above\n scroll: 'прокрутка',\n touchstart: 'касание_начало',\n touchend: 'касание_конец',\n touchmove: 'касание_движение',\n touchcancel: 'касание_отмена',\n },\n\n logical: {\n when: 'когда',\n where: 'где',\n and: 'и',\n or: 'или',\n not: 'не',\n is: 'есть',\n exists: 'существует',\n matches: 'соответствует',\n contains: 'содержит',\n includes: 'включает',\n equals: 'равно',\n then: 'затем',\n else: 'иначе',\n otherwise: 'в_противном_случае',\n end: 'конец',\n live: 'живой',\n changes: 'изменяется',\n has: 'имеет',\n have: 'имею',\n isNot: 'не_есть',\n empty: 'пустой',\n },\n\n temporal: {\n seconds: 'секунд',\n second: 'секунда',\n milliseconds: 'миллисекунд',\n millisecond: 'миллисекунда',\n minutes: 'минут',\n minute: 'минута',\n hours: 'часов',\n hour: 'час',\n ms: 'мс',\n s: 'с',\n min: 'мин',\n h: 'ч',\n forever: 'всегда',\n once: 'однажды',\n every: 'каждый',\n until: 'до',\n },\n\n values: {\n true: 'истина',\n false: 'ложь',\n null: 'ничего',\n undefined: 'неопределено',\n it: 'это',\n its: 'его',\n me: 'я',\n my: 'мой',\n you: 'ты',\n your: 'твой',\n yourself: 'сам',\n myself: 'я_сам',\n element: 'элемент',\n target: 'цель',\n detail: 'детали',\n event: 'событие',\n window: 'окно',\n document: 'документ',\n body: 'тело',\n result: 'результат',\n value: 'значение',\n first: 'первый',\n last: 'последний',\n next: 'следующий',\n previous: 'предыдущий',\n closest: 'ближайший',\n parent: 'родитель',\n },\n\n attributes: {\n class: 'класс',\n classes: 'классы',\n style: 'стиль',\n styles: 'стили',\n attribute: 'атрибут',\n attributes: 'атрибуты',\n property: 'свойство',\n properties: 'свойства',\n disabled: 'отключено',\n hidden: 'скрыто',\n checked: 'отмечено',\n selected: 'выбрано',\n readonly: 'только_чтение',\n required: 'обязательно',\n text: 'текст',\n html: 'html',\n },\n\n expressions: {\n characters: 'символы',\n inclusive: 'включительно',\n exclusive: 'исключительно',\n first: 'первый',\n last: 'последний',\n next: 'следующий',\n previous: 'предыдущий',\n prev: 'пред',\n at: 'в',\n random: 'случайный',\n closest: 'ближайший',\n parent: 'родитель',\n children: 'дети',\n within: 'внутри',\n no: 'нет',\n empty: 'пустой',\n some: 'некоторые',\n 'starts with': 'начинается_с',\n 'ends with': 'заканчивается_на',\n 'ignoring case': 'без_учёта_регистра',\n 'sorted by': 'сортировано_по',\n 'mapped to': 'преобразовано_в',\n 'split by': 'разделено_по',\n 'joined by': 'объединено_через',\n },\n};\n\nexport const ru = russianDictionary;\n","import { russianDictionary } from '../dictionaries/ru';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const ruKeywords: KeywordProvider = createKeywordProvider(russianDictionary, 'ru', {\n allowEnglishFallback: true,\n});\n\nexport { russianDictionary as ruDictionary } from '../dictionaries/ru';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const ukrainianDictionary: Dictionary = {\n commands: {\n on: 'при',\n tell: 'сказати',\n trigger: 'запустити', // auditor: dict emitted a word the profile reads differently\n send: 'надіслати',\n take: 'взяти',\n put: 'покласти',\n set: 'встановити',\n get: 'отримати',\n add: 'додати',\n remove: 'видалити',\n toggle: 'перемкнути',\n hide: 'сховати',\n show: 'показати',\n // command verb; the events section keeps the noun прокрутка for `on scroll`.\n // Without this entry the transformer fell back to the event noun, which the\n // parser doesn't read as the scroll command (#321 focus family).\n scroll: 'прокрутити',\n if: 'якщо',\n unless: 'крім',\n repeat: 'повторити',\n for: 'для',\n while: 'поки',\n until: 'до',\n continue: 'продовжити',\n break: 'перервати',\n halt: 'зупинити',\n wait: 'чекати',\n fetch: 'завантажити',\n call: 'викликати',\n return: 'повернути',\n make: 'створити',\n log: 'записати',\n throw: 'кинути',\n catch: 'зловити',\n measure: 'виміряти',\n transition: 'анімувати',\n increment: 'збільшити',\n decrement: 'зменшити',\n default: 'за_замовчуванням',\n go: 'перейти',\n pushUrl: 'додати_url',\n replaceUrl: 'замінити_url',\n copy: 'копіювати',\n pick: 'вибрати',\n beep: 'звук',\n js: 'js',\n async: 'асинхронно',\n render: 'відобразити',\n swap: 'поміняти',\n morph: 'трансформувати',\n settle: 'стабілізувати',\n append: 'дописати', // profile alternative; the compound splits and додати parses as add\n exit: 'вийти',\n else: 'інакше',\n install: 'інсталювати', // loanword — `встановити` is `set` (homonym); see ukrainian profile\n init: 'ініціалізувати',\n behavior: 'поведінка',\n focus: 'сфокусувати',\n blur: 'розфокусувати',\n clone: 'клонувати',\n prepend: 'додати_на_початок',\n breakpoint: 'точка-зупинки',\n clear: 'очистити',\n close: 'закрити',\n open: 'відкрити',\n select: 'виділити', // Batch 3: вибрати is the pick keyword — bare select rendered with it parses null\n },\n\n modifiers: {\n to: 'до',\n from: 'з',\n into: 'в',\n with: 'з',\n at: 'в',\n in: 'у',\n of: 'з',\n as: 'як',\n by: 'на',\n before: 'до',\n after: 'після',\n over: 'над',\n under: 'під',\n between: 'між',\n through: 'через',\n without: 'без',\n on: 'на',\n },\n\n events: {\n click: 'клік',\n dblclick: 'подвійний_клік',\n // Fused (no `_`): the semantic tokenizer splits on `_`, so an underscore form\n // breaks event recognition. Mirrors the #510 tr resize fix + enyakın.\n mousedown: 'мишавниз',\n mouseup: 'мишавгору',\n mouseenter: 'миша_вхід',\n mouseleave: 'миша_вихід',\n mouseover: 'наведення',\n mouseout: 'відведення',\n mousemove: 'рух_миші',\n keydown: 'клавіша_вниз',\n keyup: 'клавіша_вгору',\n keypress: 'натискання_клавіші',\n focus: 'фокус',\n blur: 'розфокус',\n change: 'зміна',\n input: 'введення',\n submit: 'надсилання',\n reset: 'скинути', // Batch 3: скидання captured on.event as expression (broken listener) — profile verb round-trips\n load: 'завантаження',\n unload: 'вивантаження',\n resize: 'змінарозміру', // fused (no `_`) — see mousedown note above\n scroll: 'прокрутка',\n touchstart: 'дотик_початок',\n touchend: 'дотик_кінець',\n touchmove: 'дотик_рух',\n touchcancel: 'дотик_скасування',\n },\n\n logical: {\n when: 'коли',\n where: 'де',\n and: 'і',\n or: 'або',\n not: 'не',\n is: 'є',\n exists: 'існує',\n matches: 'відповідає',\n contains: 'містить',\n includes: 'включає',\n equals: 'дорівнює',\n then: 'тоді',\n else: 'інакше',\n otherwise: 'в_іншому_випадку',\n end: 'кінець',\n live: 'живий',\n changes: 'змінюється',\n has: 'має',\n have: 'маю',\n isNot: 'не_є',\n empty: 'порожній',\n },\n\n temporal: {\n seconds: 'секунд',\n second: 'секунда',\n milliseconds: 'мілісекунд',\n millisecond: 'мілісекунда',\n minutes: 'хвилин',\n minute: 'хвилина',\n hours: 'годин',\n hour: 'година',\n ms: 'мс',\n s: 'с',\n min: 'хв',\n h: 'год',\n forever: 'завжди',\n once: 'один_раз',\n every: 'кожний',\n until: 'до',\n },\n\n values: {\n true: 'істина',\n false: 'хибність',\n null: 'нічого',\n undefined: 'невизначено',\n it: 'це',\n its: 'його',\n me: 'я',\n my: 'мій',\n you: 'ти',\n your: 'твій',\n yourself: 'сам',\n myself: 'я_сам',\n element: 'елемент',\n target: 'ціль',\n detail: 'деталі',\n event: 'подія',\n window: 'вікно',\n document: 'документ',\n body: 'тіло',\n result: 'результат',\n value: 'значення',\n first: 'перший',\n last: 'останній',\n next: 'наступний',\n previous: 'попередній',\n closest: 'найближчий',\n parent: 'батьківський',\n },\n\n attributes: {\n class: 'клас',\n classes: 'класи',\n style: 'стиль',\n styles: 'стилі',\n attribute: 'атрибут',\n attributes: 'атрибути',\n property: 'властивість',\n properties: 'властивості',\n disabled: 'вимкнено',\n hidden: 'приховано',\n checked: 'позначено',\n selected: 'вибрано',\n readonly: 'лише_читання',\n required: \"обов'язково\",\n text: 'текст',\n html: 'html',\n },\n\n expressions: {\n characters: 'символи',\n inclusive: 'включно',\n exclusive: 'виключно',\n first: 'перший',\n last: 'останній',\n next: 'наступний',\n previous: 'попередній',\n prev: 'попер',\n at: 'в',\n random: 'випадковий',\n closest: 'найближчий',\n parent: 'батьківський',\n children: 'діти',\n within: 'всередині',\n no: 'ні',\n empty: 'порожній',\n some: 'деякі',\n 'starts with': 'починається_з',\n 'ends with': 'закінчується_на',\n 'ignoring case': 'без_урахування_регістру',\n 'sorted by': 'відсортовано_за',\n 'mapped to': 'перетворено_на',\n 'split by': 'розділено_за',\n 'joined by': \"об'єднано_через\",\n },\n};\n\nexport const uk = ukrainianDictionary;\n","import { ukrainianDictionary } from '../dictionaries/uk';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const ukKeywords: KeywordProvider = createKeywordProvider(ukrainianDictionary, 'uk', {\n allowEnglishFallback: true,\n});\n\nexport { ukrainianDictionary as ukDictionary } from '../dictionaries/uk';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const hindiDictionary: Dictionary = {\n commands: {\n on: 'पर',\n tell: 'बताएं',\n trigger: 'ट्रिगर',\n send: 'भेजें',\n take: 'लें',\n put: 'रखें',\n set: 'सेट',\n get: 'प्राप्त',\n add: 'जोड़ें',\n remove: 'हटाएं',\n toggle: 'टॉगल',\n hide: 'छिपाएं',\n show: 'दिखाएं',\n if: 'अगर',\n unless: 'जब तक नहीं', // spaced (not जब_तक_नहीं) → one multi-word `unless` token\n repeat: 'दोहराएं',\n for: 'हेतु', // single token — के_लिए splits at _ in the hi extractor\n while: 'जब तक',\n until: 'तक',\n continue: 'जारी',\n break: 'रोकें',\n halt: 'रोकें',\n wait: 'प्रतीक्षा',\n fetch: 'लाएं',\n call: 'कॉल',\n return: 'लौटाएं',\n make: 'बनाएं',\n log: 'लॉग',\n throw: 'फेंकें',\n catch: 'पकड़ें',\n measure: 'मापें',\n transition: 'संक्रमण',\n increment: 'बढ़ाएं',\n decrement: 'घटाएं',\n default: 'डिफ़ॉल्ट',\n go: 'जाएं',\n pushUrl: 'url_जोड़ें',\n replaceUrl: 'url_बदलें',\n copy: 'कॉपी',\n pick: 'चुनें',\n beep: 'बीप',\n js: 'जेएस',\n async: 'असिंक',\n render: 'रेंडर',\n swap: 'विनिमय',\n morph: 'रूपांतर',\n settle: 'स्थिर',\n append: 'संलग्न',\n exit: 'बाहर',\n else: 'वरना',\n install: 'इंस्टॉल',\n init: 'प्रारंभ',\n behavior: 'व्यवहार',\n focus: 'फोकस',\n blur: 'धुंधला',\n clone: 'क्लोन', // Batch 3: कॉपी is the copy verb — rendered clone parsed as action=copy\n prepend: 'जोड़ें_शुरू',\n breakpoint: 'ब्रेकप्वाइंट',\n clear: 'साफ़-करें',\n close: 'बंद-करें',\n open: 'खोलें',\n select: 'चिह्नित-करें', // Batch 3: चुनें is the pick keyword — bare select rendered with it parses null\n socket: 'सॉकेट',\n },\n\n modifiers: {\n to: 'को',\n from: 'से',\n into: 'में',\n with: 'के_साथ',\n at: 'पर',\n in: 'में',\n of: 'का',\n as: 'के_रूप_में',\n by: 'द्वारा',\n before: 'से पहले',\n after: 'के बाद',\n over: 'के_ऊपर',\n under: 'के_नीचे',\n between: 'के_बीच',\n through: 'के_माध्यम_से',\n without: 'के_बिना',\n on: 'पर',\n },\n\n events: {\n click: 'क्लिक',\n dblclick: 'डबल_क्लिक',\n // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event\n // recognition (mousedown → \"नीचे\"). Mirrors the #535 ru/uk fuse.\n mousedown: 'माउसनीचे',\n mouseup: 'माउसऊपर',\n mouseenter: 'माउस_प्रवेश',\n mouseleave: 'माउस_बाहर',\n mouseover: 'माउस_ओवर',\n mouseout: 'माउस_आउट',\n mousemove: 'माउस_मूव',\n keydown: 'की_नीचे',\n keyup: 'की_ऊपर',\n keypress: 'की_प्रेस',\n focus: 'फोकस',\n blur: 'धुंधला',\n change: 'परिवर्तन',\n input: 'इनपुट',\n submit: 'जमा',\n reset: 'रीसेट',\n load: 'लोड',\n unload: 'अनलोड',\n resize: 'आकार_बदलें',\n scroll: 'स्क्रॉल',\n touchstart: 'टच_शुरू',\n touchend: 'टच_समाप्त',\n touchmove: 'टच_मूव',\n touchcancel: 'टच_रद्द',\n },\n\n logical: {\n when: 'जब',\n where: 'कहाँ',\n and: 'और',\n or: 'या',\n not: 'नहीं',\n is: 'है',\n exists: 'मौजूद',\n // Natural spaced phrase `मेल खाता` (\"matches\") — how Hindi writes it. The base\n // tokenizer now matches multi-word profile keywords, so the hindi profile maps\n // `मेल खाता`→matches without the underscore (`मेल_खाता` split) or the\n // concatenated `मेलखाता` (parsed, but unnatural) workarounds.\n matches: 'मेल खाता',\n contains: 'शामिल',\n includes: 'में_है',\n equals: 'बराबर',\n then: 'फिर',\n else: 'वरना',\n otherwise: 'अन्यथा',\n end: 'समाप्त',\n live: 'लाइव',\n changes: 'बदलने पर',\n has: 'है',\n have: 'है',\n isNot: 'नहीं_है',\n empty: 'खाली',\n },\n\n temporal: {\n seconds: 'सेकंड',\n second: 'सेकंड',\n milliseconds: 'मिलीसेकंड',\n millisecond: 'मिलीसेकंड',\n minutes: 'मिनट',\n minute: 'मिनट',\n hours: 'घंटे',\n hour: 'घंटा',\n ms: 'मिसे',\n s: 'से',\n min: 'मि',\n h: 'घं',\n forever: 'हमेशा',\n once: 'एक_बार',\n every: 'हर',\n until: 'तक',\n },\n\n values: {\n true: 'सच',\n false: 'झूठ',\n null: 'खाली',\n undefined: 'अपरिभाषित',\n it: 'यह',\n its: 'इसका',\n me: 'मैं',\n my: 'मेरा',\n you: 'आप',\n your: 'आपका',\n yourself: 'स्वयं',\n myself: 'मैं_स्वयं',\n element: 'तत्व',\n target: 'लक्ष्य',\n detail: 'विवरण',\n event: 'घटना',\n window: 'विंडो',\n document: 'दस्तावेज़',\n body: 'बॉडी',\n result: 'परिणाम',\n value: 'मान',\n first: 'पहला',\n last: 'अंतिम',\n next: 'अगला',\n previous: 'पिछला',\n closest: 'निकटतम',\n parent: 'मूल',\n },\n\n attributes: {\n class: 'क्लास',\n classes: 'क्लासेस',\n style: 'स्टाइल',\n styles: 'स्टाइल्स',\n attribute: 'गुण',\n attributes: 'गुण',\n property: 'संपत्ति',\n properties: 'संपत्तियाँ',\n disabled: 'अक्षम',\n hidden: 'छिपा',\n checked: 'चेक',\n selected: 'चयनित',\n readonly: 'केवल_पढ़ने',\n required: 'आवश्यक',\n text: 'पाठ',\n html: 'html',\n },\n\n expressions: {\n characters: 'अक्षर',\n first: 'पहला',\n last: 'अंतिम',\n next: 'अगला',\n previous: 'पिछला',\n prev: 'पिछ',\n at: 'पर',\n random: 'यादृच्छिक',\n closest: 'निकटतम',\n parent: 'मूल',\n children: 'बच्चे',\n within: 'के_अंदर',\n no: 'नहीं',\n empty: 'खाली',\n some: 'कुछ',\n 'starts with': 'से_शुरू',\n 'ends with': 'पर_समाप्त',\n 'ignoring case': 'केस_अनदेखा',\n 'sorted by': 'द्वारा_क्रमबद्ध',\n 'mapped to': 'में_परिवर्तित',\n 'split by': 'द्वारा_विभाजित',\n 'joined by': 'द्वारा_जुड़ा',\n },\n};\n\nexport const hi = hindiDictionary;\n","import { hindiDictionary } from '../dictionaries/hi';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const hiKeywords: KeywordProvider = createKeywordProvider(hindiDictionary, 'hi', {\n allowEnglishFallback: true,\n});\n\nexport { hindiDictionary as hiDictionary } from '../dictionaries/hi';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const bengaliDictionary: Dictionary = {\n commands: {\n on: 'তে',\n toggle: 'টগল',\n add: 'যোগ',\n remove: 'সরান',\n set: 'সেট',\n get: 'পান',\n put: 'রাখুন',\n take: 'নিন',\n show: 'দেখান',\n hide: 'লুকান',\n increment: 'বৃদ্ধি',\n decrement: 'হ্রাস',\n if: 'যদি',\n else: 'নতুবা',\n repeat: 'পুনরাবৃত্তি',\n for: 'জন্য',\n while: 'যতক্ষণ',\n wait: 'অপেক্ষা',\n fetch: 'আনুন',\n call: 'কল',\n return: 'ফিরুন',\n log: 'লগ',\n trigger: 'ট্রিগার',\n send: 'পাঠান',\n go: 'যান',\n halt: 'থামুন',\n throw: 'নিক্ষেপ',\n continue: 'চালিয়ে যান',\n make: 'তৈরি করুন',\n append: 'জুড়ুন',\n prepend: 'শুরুতে যোগ',\n focus: 'ফোকাস',\n blur: 'ঝাপসা',\n transition: 'সংক্রমণ',\n settle: 'স্থির',\n measure: 'মাপুন',\n async: 'অ্যাসিঙ্ক',\n tell: 'বলুন',\n default: 'ডিফল্ট',\n init: 'শুরু',\n behavior: 'আচরণ',\n install: 'ইনস্টল',\n clone: 'ক্লোন', // Batch 3: কপি is the copy verb — rendered clone parsed as action=copy\n swap: 'বদল',\n morph: 'রূপান্তর',\n beep: 'বীপ',\n break: 'ভাঙুন',\n copy: 'কপি',\n exit: 'বের',\n js: 'জেএস',\n pick: 'বাছুন',\n render: 'রেন্ডার',\n until: 'পর্যন্ত',\n breakpoint: 'ব্রেকপয়েন্ট',\n clear: 'পরিষ্কার',\n close: 'বন্ধ',\n open: 'খুলুন',\n select: 'নির্বাচন',\n socket: 'সকেট',\n },\n\n modifiers: {\n to: 'কে',\n from: 'থেকে',\n into: 'তে',\n on: 'তে',\n with: 'সাথে',\n by: 'দ্বারা',\n as: 'হিসাবে',\n before: 'আগে',\n after: 'পরে',\n at: 'এ',\n in: 'এ',\n over: 'উপর',\n between: 'মধ্যে',\n then: 'তারপর',\n and: 'এবং',\n end: 'শেষ',\n until: 'পর্যন্ত',\n of: 'র',\n },\n\n events: {\n click: 'ক্লিক',\n change: 'পরিবর্তন',\n input: 'ইনপুট',\n submit: 'জমা',\n load: 'লোড',\n focus: 'ফোকাস',\n blur: 'ঝাপসা',\n reset: 'রিসেট',\n keydown: 'keydown',\n keyup: 'keyup',\n // V3c burn-down (2026-07-14): English passthrough — no native form round-trips\n // on the parse side (probe: split forms shatter, fused forms capture verbatim).\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n scroll: 'স্ক্রোল',\n resize: 'রিসাইজ',\n every: 'প্রতি',\n },\n\n logical: {\n if: 'যদি',\n when: 'যখন',\n where: 'কোথায়',\n else: 'নতুবা',\n not: 'না',\n and: 'এবং',\n or: 'অথবা',\n is: 'হয়',\n exists: 'আছে',\n has: 'আছে',\n have: 'আছি',\n empty: 'খালি',\n true: 'সত্য',\n false: 'মিথ্যা',\n null: 'শূন্য',\n undefined: 'অনির্ধারিত',\n end: 'শেষ',\n then: 'তারপর',\n live: 'লাইভ',\n bind: 'বাইন্ড',\n changes: 'পরিবর্তিত হলে',\n },\n\n temporal: {\n now: 'এখন',\n seconds: 'সেকেন্ড',\n milliseconds: 'মিলিসেকেন্ড',\n minutes: 'মিনিট',\n hours: 'ঘণ্টা',\n forever: 'চিরকাল',\n times: 'বার',\n s: 'সে',\n ms: 'মিসে',\n },\n\n values: {\n me: 'আমি',\n my: 'আমার',\n it: 'এটি',\n its: 'এর',\n result: 'ফলাফল',\n event: 'ঘটনা',\n target: 'লক্ষ্য',\n body: 'বডি',\n you: 'আপনি',\n your: 'তোমার',\n },\n\n attributes: {\n class: 'শ্রেণি',\n id: 'আইডি',\n style: 'শৈলী',\n value: 'মান',\n text: 'পাঠ্য',\n html: 'এইচটিএমএল',\n disabled: 'অক্ষম',\n checked: 'চেক করা',\n },\n\n expressions: {\n characters: 'অক্ষর',\n inclusive: 'অন্তর্ভুক্ত',\n exclusive: 'বাদ',\n first: 'প্রথম',\n last: 'শেষ',\n next: 'পরবর্তী',\n previous: 'আগের',\n closest: 'নিকটতম',\n parent: 'মূল',\n children: 'সন্তান',\n random: 'এলোমেলো',\n length: 'দৈর্ঘ্য',\n index: 'সূচক',\n empty: 'খালি-করুন',\n 'starts with': 'দিয়ে_শুরু',\n 'ends with': 'দিয়ে_শেষ',\n 'ignoring case': 'কেস_উপেক্ষা',\n 'sorted by': 'দ্বারা_সাজানো',\n 'mapped to': 'তে_রূপান্তরিত',\n 'split by': 'দ্বারা_বিভক্ত',\n 'joined by': 'দ্বারা_যুক্ত',\n },\n};\n\nexport const bn = bengaliDictionary;\n","import { bn } from '../dictionaries/bn';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const bnKeywords: KeywordProvider = createKeywordProvider(bn, 'bn', {\n allowEnglishFallback: true,\n});\n\nexport { bn as bnDictionary } from '../dictionaries/bn';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const thaiDictionary: Dictionary = {\n commands: {\n on: 'เมื่อ',\n toggle: 'สลับ',\n add: 'เพิ่ม',\n remove: 'ลบ',\n set: 'ตั้ง',\n get: 'รับค่า',\n put: 'ใส่',\n take: 'รับ',\n show: 'แสดง',\n hide: 'ซ่อน',\n increment: 'เพิ่มค่า',\n decrement: 'ลดค่า',\n if: 'ถ้า',\n else: 'ไม่งั้น',\n repeat: 'ทำซ้ำ',\n for: 'สำหรับ',\n while: 'ในขณะที่',\n wait: 'รอ',\n fetch: 'ดึงข้อมูล',\n call: 'เรียก',\n return: 'คืนค่า',\n log: 'บันทึก',\n trigger: 'ทริกเกอร์',\n send: 'ส่ง',\n go: 'ไป',\n halt: 'หยุด',\n throw: 'โยน',\n continue: 'ต่อไป',\n make: 'สร้าง',\n append: 'เพิ่มท้าย',\n prepend: 'เพิ่มหน้า',\n focus: 'โฟกัส',\n blur: 'เบลอ',\n // เปลี่ยนผ่าน, not เปลี่ยน: the semantic th profile's `change` keyword is\n // เปลี่ยน, so a เปลี่ยน render could never anchor a transition command.\n transition: 'เปลี่ยนผ่าน',\n settle: 'คงที่',\n measure: 'วัด',\n async: 'อะซิงค์',\n tell: 'บอก',\n default: 'ค่าเริ่มต้น',\n init: 'เริ่มต้น',\n behavior: 'พฤติกรรม',\n install: 'ติดตั้ง',\n clone: 'โคลน', // Batch 3: คัดลอก is the copy verb — rendered clone parsed as action=copy\n swap: 'สลับที่',\n morph: 'แปลงร่าง',\n beep: 'บี๊บ',\n break: 'ขัดจังหวะ',\n copy: 'คัดลอก',\n exit: 'ออก',\n js: 'เจเอส',\n pick: 'เลือก',\n render: 'แสดงผล',\n until: 'จนถึง',\n breakpoint: 'จุดพัก',\n clear: 'เคลียร์',\n close: 'ปิด',\n open: 'เปิด',\n select: 'ทำเครื่องหมาย', // Batch 3: เลือก is the pick keyword — bare select rendered with it parses null\n },\n\n modifiers: {\n to: 'ไปยัง',\n from: 'จาก',\n into: 'ใน',\n on: 'เมื่อ',\n with: 'ด้วย',\n by: 'โดย',\n as: 'เป็น',\n before: 'ก่อน',\n after: 'หลัง',\n at: 'ที่',\n in: 'ใน',\n over: 'เหนือ',\n between: 'ระหว่าง',\n then: 'แล้ว',\n and: 'และ',\n end: 'จบ',\n until: 'จนถึง',\n of: 'ของ',\n },\n\n events: {\n click: 'คลิก',\n change: 'เปลี่ยนแปลง',\n input: 'อินพุต',\n submit: 'ส่ง',\n load: 'โหลด',\n focus: 'โฟกัส',\n blur: 'เบลอ',\n reset: 'รีเซ็ต',\n keydown: 'กดคีย์',\n keyup: 'ปล่อยคีย์',\n mouseover: 'เมาส์เข้า',\n mouseout: 'เมาส์ออก',\n scroll: 'เลื่อน',\n resize: 'ปรับขนาด',\n every: 'ทุก',\n },\n\n logical: {\n if: 'ถ้า',\n when: 'เมื่อ',\n where: 'ที่ไหน',\n else: 'ไม่งั้น',\n not: 'ไม่',\n and: 'และ',\n or: 'หรือ',\n is: 'เป็น',\n exists: 'มีอยู่',\n has: 'มี',\n have: 'มี',\n empty: 'ว่าง',\n true: 'จริง',\n false: 'เท็จ',\n null: 'ว่าง',\n undefined: 'ไม่กำหนด',\n end: 'จบ',\n then: 'แล้ว',\n live: 'สด',\n changes: 'เปลี่ยน',\n },\n\n temporal: {\n now: 'ตอนนี้',\n seconds: 'วินาที',\n milliseconds: 'มิลลิวินาที',\n minutes: 'นาที',\n hours: 'ชั่วโมง',\n forever: 'ตลอดไป',\n times: 'ครั้ง',\n s: 'วิ',\n ms: 'มว',\n },\n\n values: {\n me: 'ฉัน',\n my: 'ของฉัน',\n it: 'มัน',\n its: 'ของมัน',\n result: 'ผลลัพธ์',\n event: 'เหตุการณ์',\n target: 'เป้าหมาย',\n body: 'บอดี้',\n you: 'คุณ',\n your: 'ของคุณ',\n },\n\n attributes: {\n class: 'คลาส',\n id: 'ไอดี',\n style: 'สไตล์',\n value: 'ค่า',\n text: 'ข้อความ',\n html: 'เอชทีเอ็มแอล',\n disabled: 'ปิดใช้งาน',\n checked: 'เลือกแล้ว',\n },\n\n expressions: {\n characters: 'อักขระ',\n inclusive: 'รวม',\n exclusive: 'ยกเว้น',\n first: 'แรก',\n last: 'สุดท้าย',\n next: 'ถัดไป',\n previous: 'ก่อนหน้า',\n closest: 'ใกล้สุด',\n parent: 'ต้นทาง',\n children: 'ลูก',\n random: 'สุ่ม',\n length: 'ความยาว',\n index: 'ดัชนี',\n empty: 'ล้าง',\n 'starts with': 'ขึ้นต้นด้วย',\n 'ends with': 'ลงท้ายด้วย',\n 'ignoring case': 'ไม่สนตัวพิมพ์',\n 'sorted by': 'เรียงตาม',\n 'mapped to': 'แปลงเป็น',\n 'split by': 'แยกด้วย',\n 'joined by': 'รวมด้วย',\n },\n};\n\nexport const th = thaiDictionary;\n","import { th } from '../dictionaries/th';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const thKeywords: KeywordProvider = createKeywordProvider(th, 'th', {\n allowEnglishFallback: true,\n});\n\nexport { th as thDictionary } from '../dictionaries/th';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const malayDictionary: Dictionary = {\n commands: {\n on: 'apabila',\n tell: 'beritahu',\n trigger: 'cetuskan',\n send: 'hantar',\n take: 'ambil',\n put: 'letak',\n set: 'tetapkan',\n get: 'dapatkan',\n add: 'tambah',\n remove: 'buang',\n toggle: 'togol',\n hide: 'sembunyi',\n show: 'tunjuk',\n if: 'jika',\n unless: 'kecuali',\n repeat: 'ulang',\n for: 'untuk',\n while: 'selagi',\n until: 'sehingga',\n continue: 'teruskan',\n break: 'henti',\n halt: 'henti',\n wait: 'tunggu',\n fetch: 'ambil_dari',\n call: 'panggil',\n return: 'pulang',\n make: 'buat',\n log: 'catat',\n throw: 'lempar',\n catch: 'tangkap',\n measure: 'ukur',\n transition: 'peralihan',\n increment: 'tambah_satu',\n decrement: 'kurang_satu',\n default: 'lalai',\n go: 'pergi',\n pushUrl: 'tolak_url',\n replaceUrl: 'ganti_url',\n copy: 'salin',\n pick: 'pilih',\n beep: 'bunyi',\n js: 'js',\n async: 'tak_segerak',\n render: 'papar',\n swap: 'tukar_tempat',\n morph: 'ubah_bentuk',\n settle: 'selesai',\n append: 'tambah_hujung',\n prepend: 'tambah_mula',\n exit: 'keluar',\n else: 'kalau_tidak',\n focus: 'fokus',\n blur: 'kabur',\n install: 'pasang',\n behavior: 'kelakuan',\n init: 'mula',\n clone: 'klon',\n breakpoint: 'titik-henti',\n clear: 'bersihkan', // padam is a remove alternative in the profile\n close: 'tutup',\n open: 'buka',\n select: 'tandai', // Batch 3: pilih is the pick keyword — bare select rendered with it parses null\n socket: 'soket', // derived from the ms profile (socket.primary); see generate-i18n-dictionaries\n },\n\n modifiers: {\n to: 'ke',\n from: 'dari',\n into: 'ke_dalam',\n with: 'dengan',\n at: 'di',\n in: 'dalam',\n of: 'daripada',\n as: 'sebagai',\n by: 'oleh',\n before: 'sebelum',\n after: 'selepas',\n over: 'atas',\n under: 'bawah',\n between: 'antara',\n through: 'melalui',\n without: 'tanpa',\n on: 'pada',\n then: 'kemudian',\n and: 'dan',\n end: 'tamat',\n until: 'sehingga',\n },\n\n events: {\n click: 'click',\n dblclick: 'dblclick',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n keydown: 'keydown',\n keyup: 'keyup',\n keypress: 'keypress',\n focus: 'focus',\n blur: 'blur',\n change: 'change',\n input: 'input',\n submit: 'submit',\n reset: 'reset',\n load: 'load',\n unload: 'unload',\n resize: 'resize',\n scroll: 'scroll',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n every: 'setiap',\n },\n\n logical: {\n when: 'apabila',\n where: 'di_mana',\n and: 'dan',\n or: 'atau',\n not: 'bukan',\n is: 'adalah',\n exists: 'wujud',\n matches: 'sepadan',\n contains: 'mengandungi',\n includes: 'termasuk',\n equals: 'sama',\n has: 'ada',\n have: 'ada',\n then: 'kemudian',\n else: 'kalau_tidak',\n otherwise: 'jika_tidak',\n end: 'tamat',\n live: 'langsung',\n changes: 'berubah',\n if: 'jika',\n empty: 'kosong',\n true: 'benar',\n false: 'salah',\n null: 'null',\n undefined: 'tidak_ditakrifkan',\n },\n\n temporal: {\n seconds: 'saat',\n second: 'saat',\n milliseconds: 'milisaat',\n millisecond: 'milisaat',\n minutes: 'minit',\n minute: 'minit',\n hours: 'jam',\n hour: 'jam',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'j',\n now: 'sekarang',\n forever: 'selamanya',\n times: 'kali',\n },\n\n values: {\n true: 'benar',\n false: 'salah',\n null: 'null',\n undefined: 'tidak_ditakrifkan',\n it: 'ia',\n its: 'nya',\n me: 'saya',\n my: 'saya_punya',\n myself: 'diri_saya',\n you: 'kamu',\n your: 'kamu_punya',\n yourself: 'diri_kamu',\n element: 'elemen',\n target: 'sasaran',\n detail: 'perincian',\n event: 'peristiwa',\n window: 'tetingkap',\n document: 'dokumen',\n body: 'badan',\n result: 'hasil',\n value: 'nilai',\n },\n\n attributes: {\n class: 'kelas',\n classes: 'kelas_kelas',\n style: 'gaya',\n styles: 'gaya_gaya',\n attribute: 'atribut',\n attributes: 'atribut_atribut',\n property: 'sifat',\n properties: 'sifat_sifat',\n id: 'id',\n value: 'nilai',\n text: 'teks',\n html: 'html',\n disabled: 'dilumpuhkan',\n checked: 'ditanda',\n },\n\n expressions: {\n characters: 'aksara',\n inclusive: 'inklusif',\n exclusive: 'eksklusif',\n first: 'pertama',\n last: 'terakhir',\n next: 'seterusnya',\n previous: 'sebelumnya',\n prev: 'sebelum',\n at: 'di',\n random: 'rawak',\n closest: 'terdekat',\n parent: 'induk',\n children: 'anak_anak',\n within: 'dalam',\n no: 'tiada',\n empty: 'kosong',\n some: 'beberapa',\n 'starts with': 'bermula_dengan',\n 'ends with': 'berakhir_dengan',\n 'ignoring case': 'abaikan_huruf_besar_kecil',\n 'sorted by': 'disusun_mengikut',\n 'mapped to': 'dipetakan_ke',\n 'split by': 'dipecah_oleh',\n 'joined by': 'digabung_oleh',\n length: 'panjang',\n index: 'indeks',\n },\n};\n\nexport const ms = malayDictionary;\n","import { ms } from '../dictionaries/ms';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const msKeywords: KeywordProvider = createKeywordProvider(ms, 'ms', {\n allowEnglishFallback: true,\n});\n\nexport { ms as msDictionary } from '../dictionaries/ms';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const tagalogDictionary: Dictionary = {\n commands: {\n on: 'kapag',\n tell: 'sabihin',\n trigger: 'palitawin',\n send: 'ipadala',\n take: 'kumuha', // auditor: dict emitted a word the profile reads differently\n put: 'ilagay',\n set: 'itakda',\n // Align with the semantic tl profile's `get` primary (`kunin`); the previous\n // `kuhanin` is the base of fetch's `kuhanin_mula`, so the transformed `get`\n // dropped (get-value parsed degenerate). Same dict↔profile alignment as id `toggle`.\n get: 'kunin',\n add: 'idagdag',\n remove: 'alisin',\n toggle: 'palitan',\n hide: 'itago',\n show: 'ipakita',\n if: 'kung',\n unless: 'maliban_kung',\n repeat: 'ulitin',\n for: 'para_sa',\n while: 'habang',\n until: 'hanggang',\n continue: 'magpatuloy',\n break: 'itigil',\n halt: 'huminto',\n wait: 'maghintay',\n fetch: 'kuhanin_mula',\n call: 'tawagin',\n return: 'ibalik',\n make: 'gumawa',\n log: 'itala',\n throw: 'ihagis',\n catch: 'hulihin',\n measure: 'sukatin',\n transition: 'lumipat',\n increment: 'dagdagan',\n decrement: 'bawasan',\n default: 'pamantayan',\n go: 'pumunta',\n pushUrl: 'itulak_url',\n replaceUrl: 'palitan_url',\n copy: 'kopyahin',\n pick: 'pumili',\n beep: 'tunog',\n js: 'js',\n async: 'sabay',\n render: 'irender', // auditor: dict emitted a word the profile reads differently\n swap: 'palitan_pwesto',\n morph: 'baguhin', // auditor: dict emitted a word the profile reads differently\n settle: 'magpatahimik', // auditor: dict emitted a word the profile reads differently\n append: 'idagdag_sa_dulo',\n prepend: 'idagdag_sa_simula',\n exit: 'lumabas',\n else: 'kung_hindi',\n focus: 'ituon',\n blur: 'alisin_tuon',\n install: 'ikabit',\n behavior: 'ugali',\n init: 'simulan',\n clone: 'i-clone', // Batch 3: kopyahin is the copy verb — rendered clone parsed as action=copy\n breakpoint: 'breakpoint',\n clear: 'burahin',\n close: 'isara',\n open: 'buksan',\n select: 'piliin',\n },\n\n modifiers: {\n to: 'sa',\n from: 'mula_sa',\n into: 'papasok_sa',\n with: 'kasama',\n at: 'sa',\n in: 'sa_loob',\n of: 'ng',\n as: 'bilang',\n by: 'sa_pamamagitan_ng',\n before: 'bago',\n // `matapos` (not `pagkatapos`) for the positional \"after\": `pagkatapos` is\n // also Tagalog \"then\", so emitting it for the position modifier collides with\n // the sequence connector. `matapos` is the unambiguous positional form and\n // matches the semantic tl profile's `after`.\n after: 'matapos',\n over: 'sa_ibabaw',\n under: 'sa_ilalim',\n between: 'sa_pagitan',\n through: 'sa_pamamagitan',\n without: 'walang',\n on: 'sa',\n then: 'pagkatapos',\n and: 'at',\n end: 'wakas',\n until: 'hanggang',\n },\n\n events: {\n click: 'click',\n dblclick: 'dblclick',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n keydown: 'keydown',\n keyup: 'keyup',\n keypress: 'keypress',\n focus: 'focus',\n blur: 'blur',\n change: 'change',\n input: 'input',\n submit: 'submit',\n reset: 'reset',\n load: 'load',\n unload: 'unload',\n resize: 'resize',\n scroll: 'scroll',\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n every: 'bawat',\n },\n\n logical: {\n when: 'kapag',\n where: 'kung_saan',\n and: 'at',\n or: 'o',\n not: 'hindi',\n is: 'ay',\n exists: 'may',\n matches: 'tumutugma',\n contains: 'naglalaman',\n includes: 'kasama',\n equals: 'katumbas',\n has: 'may',\n have: 'may',\n then: 'pagkatapos',\n else: 'kung_hindi',\n otherwise: 'kung_hindi_man',\n end: 'wakas',\n live: 'live',\n changes: 'nagbabago',\n if: 'kung',\n empty: 'walang_laman',\n true: 'totoo',\n false: 'mali',\n null: 'wala',\n undefined: 'hindi_tinukoy',\n },\n\n temporal: {\n seconds: 'segundo',\n second: 'segundo',\n milliseconds: 'milisegundo',\n millisecond: 'milisegundo',\n minutes: 'minuto',\n minute: 'minuto',\n hours: 'oras',\n hour: 'oras',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n now: 'ngayon',\n forever: 'magpakailanman',\n times: 'beses',\n },\n\n values: {\n true: 'totoo',\n false: 'mali',\n null: 'wala',\n undefined: 'hindi_tinukoy',\n it: 'ito',\n its: 'nito',\n me: 'ako',\n my: 'aking',\n myself: 'sarili_ko',\n you: 'ikaw',\n your: 'iyong',\n yourself: 'sarili_mo',\n element: 'elemento',\n target: 'target',\n detail: 'detalye',\n event: 'pangyayari',\n window: 'bintana',\n document: 'dokumento',\n body: 'katawan',\n result: 'resulta',\n value: 'halaga',\n },\n\n attributes: {\n class: 'klase',\n classes: 'mga_klase',\n style: 'estilo',\n styles: 'mga_estilo',\n attribute: 'katangian',\n attributes: 'mga_katangian',\n property: 'ari_arian',\n properties: 'mga_ari_arian',\n id: 'id',\n value: 'halaga',\n text: 'teksto',\n html: 'html',\n disabled: 'hindi_pinagana',\n checked: 'naka_tsek',\n },\n\n expressions: {\n characters: 'karakter',\n inclusive: 'kasama',\n exclusive: 'bukod',\n first: 'una',\n last: 'huli',\n next: 'susunod',\n previous: 'nakaraan',\n prev: 'nakaraan',\n at: 'sa',\n random: 'random',\n closest: 'pinakamalapit',\n parent: 'magulang',\n children: 'mga_anak',\n within: 'sa_loob_ng',\n no: 'walang',\n empty: 'walang_laman',\n some: 'ilan',\n 'starts with': 'nagsisimula_sa',\n 'ends with': 'nagtatapos_sa',\n 'ignoring case': 'huwag_pansinin_ang_case',\n 'sorted by': 'nakaayos_ayon_sa',\n 'mapped to': 'binago_sa',\n 'split by': 'hinati_sa',\n 'joined by': 'pinagsama_sa',\n length: 'haba',\n index: 'indeks',\n },\n};\n\nexport const tl = tagalogDictionary;\n","import { tl } from '../dictionaries/tl';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\nexport const tlKeywords: KeywordProvider = createKeywordProvider(tl, 'tl', {\n allowEnglishFallback: true,\n});\n\nexport { tl as tlDictionary } from '../dictionaries/tl';\n","// Generated/merged from semantic profiles — hand-written entries are preserved\n// To add derived entries, update the semantic profile and run: npm run generate:language-assets\n\nimport { Dictionary } from '../types';\n\nexport const he: Dictionary = {\n commands: {\n add: 'הוסף',\n append: 'צרף',\n async: 'אסינכרוני',\n beep: 'ביפ',\n break: 'שבור',\n call: 'קרא',\n clear: 'נקה', // profile's clear word — was untranslated (parsed as nothing)\n continue: 'המשך',\n copy: 'העתק',\n decrement: 'הקטן',\n default: 'ברירת מחדל',\n exit: 'צא',\n fetch: 'הבא',\n for: 'עבור',\n get: 'קבל',\n go: 'לך',\n halt: 'עצור',\n hide: 'הסתר',\n if: 'אם',\n unless: 'אלא',\n increment: 'הגדל',\n install: 'התקן',\n js: 'js',\n log: 'רשום',\n make: 'צור',\n measure: 'מדוד',\n morph: 'הפוך',\n on: 'ב',\n pick: 'בחר',\n put: 'שים',\n remove: 'הסר',\n render: 'רנדר',\n repeat: 'חזור',\n return: 'החזר',\n scroll: 'גלול',\n send: 'שלח',\n set: 'קבע',\n settle: 'התייצב',\n show: 'הראה',\n swap: 'החלף',\n take: 'קח',\n tell: 'אמור',\n throw: 'זרוק',\n toggle: 'מתג',\n transition: 'מעבר',\n trigger: 'הפעל',\n until: 'עד',\n wait: 'חכה',\n while: 'כל עוד',\n },\n\n modifiers: {\n after: 'אחרי',\n before: 'לפני',\n from: 'מ',\n into: 'לתוך',\n to: 'על',\n with: 'עם',\n },\n\n events: {\n blur: 'טשטש',\n change: 'שינוי',\n click: 'לחיצה',\n focus: 'מקד',\n input: 'קלט',\n submit: 'שליחה',\n },\n\n logical: {\n and: 'וגם',\n else: 'אחרת',\n end: 'סוף',\n then: 'אז',\n live: 'חי',\n bind: 'קשור',\n changes: 'משתנה',\n when: 'כאשר',\n where: 'איפה',\n },\n\n temporal: {},\n\n values: {\n body: 'גוף',\n event: 'אירוע',\n it: 'זה',\n its: 'שלו',\n me: 'אני',\n my: 'שלי',\n result: 'תוצאה',\n target: 'יעד',\n you: 'אתה',\n your: 'שלך',\n },\n\n attributes: {},\n\n expressions: {\n random: 'אקראי',\n characters: 'תווים',\n inclusive: 'כולל',\n exclusive: 'בלעדי',\n last: 'אחרון',\n },\n};\n","// packages/i18n/src/parser/he.ts\n\nimport { he } from '../dictionaries/he';\nimport { createKeywordProvider } from './create-provider';\nimport type { KeywordProvider } from './types';\n\n/**\n * Hebrew keyword provider for the hyperscript parser.\n *\n * Enables parsing hyperscript written in Hebrew (RTL, SVO):\n * - `ב לחיצה מתג .active` → parses as `on click toggle .active`\n *\n * English keywords are also accepted (mixed mode).\n *\n * @example\n * ```typescript\n * import { heKeywords } from '@lokascript/i18n/parser/he';\n * import { Parser } from '@hyperfixi/core';\n *\n * const parser = new Parser({ keywords: heKeywords });\n * parser.parse('ב לחיצה מתג .active');\n * ```\n */\nexport const heKeywords: KeywordProvider = createKeywordProvider(he, 'he', {\n allowEnglishFallback: true,\n});\n\n// Re-export for convenience\nexport { he as heDictionary } from '../dictionaries/he';\n","// packages/i18n/src/parser/locale-manager.ts\n\nimport type { KeywordProvider } from './types';\nimport { createEnglishProvider } from './create-provider';\n\n/**\n * LocaleManager - Centralized locale configuration for hyperscript parsing.\n *\n * Provides utilities for:\n * - Setting/getting the default locale\n * - Creating locale-aware parsers\n * - Runtime locale switching\n *\n * @example\n * ```typescript\n * import { LocaleManager } from '@lokascript/i18n/parser';\n * import { esKeywords, frKeywords } from '@lokascript/i18n/parser';\n *\n * // Register available locales\n * LocaleManager.register('es', esKeywords);\n * LocaleManager.register('fr', frKeywords);\n *\n * // Set default locale\n * LocaleManager.setDefault('es');\n *\n * // Get keyword provider for parsing\n * const provider = LocaleManager.get(); // Returns esKeywords\n * const frProvider = LocaleManager.get('fr'); // Returns frKeywords\n *\n * // Use with parser\n * const parser = new Parser({ keywords: LocaleManager.get() });\n * ```\n */\nexport class LocaleManager {\n private static providers = new Map<string, KeywordProvider>();\n private static defaultLocale: string = 'en';\n private static englishProvider: KeywordProvider = createEnglishProvider();\n\n /**\n * Register a locale provider.\n *\n * @param locale - The locale code (e.g., 'es', 'ja', 'fr')\n * @param provider - The KeywordProvider for this locale\n */\n static register(locale: string, provider: KeywordProvider): void {\n LocaleManager.providers.set(locale.toLowerCase(), provider);\n }\n\n /**\n * Unregister a locale provider.\n *\n * @param locale - The locale code to remove\n */\n static unregister(locale: string): void {\n LocaleManager.providers.delete(locale.toLowerCase());\n }\n\n /**\n * Set the default locale.\n *\n * @param locale - The locale code to use as default\n * @throws Error if the locale is not registered\n */\n static setDefault(locale: string): void {\n const normalizedLocale = locale.toLowerCase();\n if (normalizedLocale !== 'en' && !LocaleManager.providers.has(normalizedLocale)) {\n throw new Error(\n `Locale '${locale}' is not registered. ` +\n `Available locales: ${LocaleManager.getAvailable().join(', ')}`\n );\n }\n LocaleManager.defaultLocale = normalizedLocale;\n }\n\n /**\n * Get the current default locale.\n *\n * @returns The default locale code\n */\n static getDefault(): string {\n return LocaleManager.defaultLocale;\n }\n\n /**\n * Get a keyword provider for a locale.\n *\n * @param locale - The locale code (optional, defaults to the default locale)\n * @returns The KeywordProvider for the locale\n * @throws Error if the locale is not registered\n */\n static get(locale?: string): KeywordProvider {\n const targetLocale = (locale || LocaleManager.defaultLocale).toLowerCase();\n\n // English is always available\n if (targetLocale === 'en') {\n return LocaleManager.englishProvider;\n }\n\n const provider = LocaleManager.providers.get(targetLocale);\n if (!provider) {\n throw new Error(\n `Locale '${targetLocale}' is not registered. ` +\n `Available locales: ${LocaleManager.getAvailable().join(', ')}`\n );\n }\n\n return provider;\n }\n\n /**\n * Check if a locale is registered.\n *\n * @param locale - The locale code to check\n * @returns True if the locale is available\n */\n static has(locale: string): boolean {\n const normalizedLocale = locale.toLowerCase();\n return normalizedLocale === 'en' || LocaleManager.providers.has(normalizedLocale);\n }\n\n /**\n * Get all available locale codes.\n *\n * @returns Array of locale codes\n */\n static getAvailable(): string[] {\n return ['en', ...Array.from(LocaleManager.providers.keys())];\n }\n\n /**\n * Reset the LocaleManager to its initial state.\n * Useful for testing.\n */\n static reset(): void {\n LocaleManager.providers.clear();\n LocaleManager.defaultLocale = 'en';\n }\n\n /**\n * Register all built-in locales at once.\n *\n * @example\n * ```typescript\n * import { LocaleManager } from '@lokascript/i18n/parser';\n * import { esKeywords, jaKeywords, frKeywords, deKeywords, arKeywords } from '@lokascript/i18n/parser';\n *\n * LocaleManager.registerAll({\n * es: esKeywords,\n * ja: jaKeywords,\n * fr: frKeywords,\n * de: deKeywords,\n * ar: arKeywords,\n * });\n * ```\n */\n static registerAll(providers: Record<string, KeywordProvider>): void {\n for (const [locale, provider] of Object.entries(providers)) {\n LocaleManager.register(locale, provider);\n }\n }\n}\n\n/**\n * Quick utility to detect the browser's preferred locale and return\n * a matching provider, falling back to English.\n *\n * @returns The KeywordProvider for the browser's locale or English\n *\n * @example\n * ```typescript\n * import { detectBrowserLocale } from '@lokascript/i18n/parser';\n * import { Parser } from '@hyperfixi/core';\n *\n * // Auto-detect and use browser locale\n * const parser = new Parser({ keywords: detectBrowserLocale() });\n * ```\n */\nexport function detectBrowserLocale(): KeywordProvider {\n if (typeof navigator === 'undefined') {\n return LocaleManager.get('en');\n }\n\n // Get browser languages in order of preference\n const languages = navigator.languages || [navigator.language];\n\n for (const lang of languages) {\n // Extract the base language code (e.g., 'es-MX' -> 'es')\n const baseLocale = lang.split('-')[0].toLowerCase();\n\n if (LocaleManager.has(baseLocale)) {\n return LocaleManager.get(baseLocale);\n }\n }\n\n // Fallback to English\n return LocaleManager.get('en');\n}\n","// packages/i18n/src/dictionaries/en.ts\n\nimport { Dictionary } from '../types';\n\n/**\n * English dictionary - identity mapping since English is the canonical hyperscript language.\n * This exists primarily for symmetry in translation operations (e.g., en -> es).\n */\nexport const en: Dictionary = {\n commands: {\n // Event handling\n on: 'on',\n tell: 'tell',\n trigger: 'trigger',\n send: 'send',\n\n // DOM manipulation\n take: 'take',\n put: 'put',\n set: 'set',\n get: 'get',\n add: 'add',\n remove: 'remove',\n toggle: 'toggle',\n hide: 'hide',\n show: 'show',\n\n // Control flow\n if: 'if',\n unless: 'unless',\n repeat: 'repeat',\n for: 'for',\n while: 'while',\n until: 'until',\n continue: 'continue',\n break: 'break',\n halt: 'halt',\n\n // Async\n wait: 'wait',\n fetch: 'fetch',\n call: 'call',\n return: 'return',\n\n // Other commands\n make: 'make',\n log: 'log',\n throw: 'throw',\n catch: 'catch',\n measure: 'measure',\n transition: 'transition',\n\n // Data Commands\n increment: 'increment',\n decrement: 'decrement',\n default: 'default',\n\n // Reactivity Commands\n bind: 'bind',\n\n // Realtime / service-worker Commands\n eventsource: 'eventsource',\n socket: 'socket',\n worker: 'worker',\n intercept: 'intercept',\n\n // Navigation Commands\n go: 'go',\n pushUrl: 'pushUrl',\n replaceUrl: 'replaceUrl',\n\n // Utility Commands\n copy: 'copy',\n pick: 'pick',\n beep: 'beep',\n\n // Advanced Commands\n js: 'js',\n async: 'async',\n render: 'render',\n\n // Animation Commands\n swap: 'swap',\n morph: 'morph',\n settle: 'settle',\n\n // Content Commands\n append: 'append',\n\n // Control Flow\n exit: 'exit',\n\n // Behaviors\n install: 'install',\n\n // v0.9.90 Phase 1 — DOM / form state / debug\n open: 'open',\n close: 'close',\n select: 'select',\n clear: 'clear',\n breakpoint: 'breakpoint',\n\n // Other commands with schemas (backfill — pre-existing gaps surfaced by\n // the schema-alignment test)\n prepend: 'prepend',\n clone: 'clone',\n // Navigation/DOM commands added in core (Dec 2025 / Apr 2026)\n scroll: 'scroll',\n push: 'push',\n replace: 'replace',\n process: 'process',\n },\n\n modifiers: {\n to: 'to',\n from: 'from',\n into: 'into',\n with: 'with',\n at: 'at',\n in: 'in',\n of: 'of',\n as: 'as',\n by: 'by',\n before: 'before',\n after: 'after',\n over: 'over',\n under: 'under',\n between: 'between',\n through: 'through',\n without: 'without',\n },\n\n events: {\n click: 'click',\n dblclick: 'dblclick',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n mouseover: 'mouseover',\n mouseout: 'mouseout',\n mousemove: 'mousemove',\n\n keydown: 'keydown',\n keyup: 'keyup',\n keypress: 'keypress',\n\n focus: 'focus',\n blur: 'blur',\n change: 'change',\n input: 'input',\n submit: 'submit',\n reset: 'reset',\n\n load: 'load',\n unload: 'unload',\n resize: 'resize',\n scroll: 'scroll',\n\n touchstart: 'touchstart',\n touchend: 'touchend',\n touchmove: 'touchmove',\n touchcancel: 'touchcancel',\n },\n\n logical: {\n when: 'when',\n where: 'where',\n and: 'and',\n or: 'or',\n not: 'not',\n is: 'is',\n exists: 'exists',\n matches: 'matches',\n contains: 'contains',\n includes: 'includes',\n equals: 'equals',\n has: 'has', // third-person: \"it has .class\", \"#element has .class\"\n have: 'have', // first-person: \"I have .class\"\n then: 'then',\n else: 'else',\n otherwise: 'otherwise',\n end: 'end',\n live: 'live',\n changes: 'changes',\n },\n\n temporal: {\n seconds: 'seconds',\n second: 'second',\n milliseconds: 'milliseconds',\n millisecond: 'millisecond',\n minutes: 'minutes',\n minute: 'minute',\n hours: 'hours',\n hour: 'hour',\n ms: 'ms',\n s: 's',\n min: 'min',\n h: 'h',\n },\n\n values: {\n true: 'true',\n false: 'false',\n null: 'null',\n undefined: 'undefined',\n it: 'it',\n its: 'its',\n me: 'me',\n my: 'my',\n myself: 'myself',\n you: 'you',\n your: 'your',\n yourself: 'yourself',\n element: 'element',\n target: 'target',\n detail: 'detail',\n event: 'event',\n window: 'window',\n document: 'document',\n body: 'body',\n result: 'result',\n value: 'value',\n },\n\n attributes: {\n class: 'class',\n classes: 'classes',\n style: 'style',\n styles: 'styles',\n attribute: 'attribute',\n attributes: 'attributes',\n property: 'property',\n properties: 'properties',\n },\n\n expressions: {\n // Positional\n first: 'first',\n last: 'last',\n next: 'next',\n previous: 'previous',\n prev: 'prev',\n at: 'at',\n random: 'random',\n\n // DOM Traversal\n closest: 'closest',\n parent: 'parent',\n children: 'children',\n within: 'within',\n\n // Emptiness/Existence\n no: 'no',\n empty: 'empty',\n some: 'some',\n\n // String operations\n 'starts with': 'starts with',\n 'ends with': 'ends with',\n 'ignoring case': 'ignoring case',\n\n // Collection operations (v0.9.90)\n 'sorted by': 'sorted by',\n 'mapped to': 'mapped to',\n 'split by': 'split by',\n 'joined by': 'joined by',\n },\n};\n","/**\n * Generalized Grammar System for Multilingual Hyperscript\n *\n * This system abstracts grammatical patterns across language families,\n * enabling deep multilingual support without per-language hardcoding.\n *\n * Key Linguistic Concepts:\n * - Word Order: SVO, SOV, VSO (and variations)\n * - Adposition Type: Preposition (English) vs Postposition (Japanese/Korean)\n * - Morphology: Isolating (Chinese) vs Agglutinative (Turkish) vs Fusional (Arabic)\n * - Text Direction: LTR vs RTL\n */\n\n// =============================================================================\n// Core Types\n// =============================================================================\n\n/**\n * Semantic roles in hyperscript commands.\n * These are universal across all 13 supported languages - only the surface form changes.\n *\n * ## Core Thematic Roles (from linguistic theory)\n * | Role | Usage | Purpose | Example |\n * |-------------|-------|-----------------------------|---------------------------|\n * | action | 100% | Command verb | toggle, put, fetch |\n * | patient | 90% | What is acted upon | .active, #count |\n * | destination | 40% | Where something goes | into #output, to .class |\n * | source | 13% | Where something comes from | from #input, from URL |\n * | event | 106% | Trigger events | click, keydown, submit |\n * | condition | 8% | Boolean expressions | if x > 5, when visible |\n * | agent | 0% | Who performs action | Reserved for future use |\n * | goal | 1% | Target value/state | to 'red' (in transition) |\n *\n * ## Quantitative Roles (answer \"how much/long\")\n * | Role | Usage | Purpose | Example |\n * |----------|-------|----------------|----------------------|\n * | quantity | 7% | Numeric amount | by 5, 3 times |\n * | duration | 1% | Time span | for 5 seconds, 500ms |\n *\n * ## Adverbial/Modifier Roles (answer \"how/by what means\")\n * | Role | Usage | Purpose | Example |\n * |--------------|-------|---------------------------|-------------------|\n * | style | 2% | Animation/behavior | with fade |\n * | manner | 2% | Insertion position | before, after |\n * | method | 1% | HTTP method/technique | via POST, as GET |\n * | responseType | 1% | Response format | as json, as html |\n *\n * ## Control Flow Roles\n * | Role | Usage | Purpose | Example |\n * |----------|-------|--------------|-----------------------|\n * | loopType | 6% | Loop variant | forever, until, times |\n *\n * ## Design Notes\n * - Low-usage roles (agent, goal, method, responseType) are intentionally kept for:\n * - Linguistic completeness across all 13 languages\n * - Future extensibility (AI agents, server-side execution)\n * - Command-specific semantics (fetch, transition)\n * - Each role has distinct grammatical markers per language (see profiles/index.ts)\n * - Usage percentages based on pattern database analysis\n */\nexport type SemanticRole =\n // Core thematic roles\n | 'action' // The command/verb (increment, put, toggle)\n | 'agent' // Who/what performs action (reserved for future: AI agents, server-side)\n | 'patient' // What is acted upon (the counter, .active)\n | 'source' // Origin (from #input, from URL)\n | 'destination' // Target location (into #output, to .class)\n | 'goal' // Target value/state (to 'red', to 100)\n | 'event' // Trigger (click, input, keydown)\n | 'condition' // Boolean expression (if x > 5)\n // Quantitative roles\n | 'quantity' // Numeric amount (by 5, 3 times)\n | 'duration' // Time span (for 5 seconds, over 500ms)\n // Adverbial roles\n | 'responseType' // Response format (as json, as text, as html)\n | 'method' // HTTP method/technique (via POST, using GET)\n | 'style' // Visual/behavioral manner (with fade, smoothly)\n | 'manner' // Insertion position (before, after)\n // Control flow roles\n | 'loopType' // Loop variant: forever, times, for, while, until, until-event\n // Structural roles (for parser control)\n | 'continues'; // Continuation marker (then-chains)\n\n/**\n * Word order patterns\n * These represent the major typological categories\n */\nexport type WordOrder = 'SVO' | 'SOV' | 'VSO' | 'VOS' | 'OVS' | 'OSV' | 'free';\n\n/**\n * Where grammatical markers appear relative to their noun/verb\n */\nexport type AdpositionType = 'preposition' | 'postposition' | 'circumposition' | 'none';\n\n/**\n * Morphological typology - how words are constructed\n */\nexport type MorphologyType =\n | 'isolating' // Chinese - no inflection, word order matters\n | 'agglutinative' // Turkish, Japanese - morphemes stack predictably\n | 'fusional' // Arabic, Spanish - morphemes blend together\n | 'polysynthetic'; // Quechua - complex words encode full sentences\n\n/**\n * A grammatical marker (particle, case ending, preposition)\n */\nexport interface GrammaticalMarker {\n form: string; // The actual text (を, に, to, 的)\n role: SemanticRole; // What semantic role it marks\n position: AdpositionType; // Where it appears\n required: boolean; // Is it mandatory?\n alternatives?: string[]; // Alternative forms (e.g., 을/를 in Korean)\n}\n\n/**\n * Metadata for preserving line structure during translation.\n * Tracks indentation and blank lines so output maintains the same format.\n */\nexport interface LineMetadata {\n /** Trimmed line content (empty string for blank lines) */\n content: string;\n /** Leading whitespace (tabs/spaces) from original line */\n originalIndent: string;\n /** True if the line was empty or whitespace-only */\n isBlank: boolean;\n}\n\n// =============================================================================\n// Language Profile\n// =============================================================================\n\n/**\n * Complete grammatical profile for a language\n * This captures the essential typological features needed for transformation\n */\nexport interface LanguageProfile {\n code: string; // ISO 639-1 code\n name: string; // Native name\n\n // Typological features\n wordOrder: WordOrder;\n adpositionType: AdpositionType;\n morphology: MorphologyType;\n direction: 'ltr' | 'rtl';\n\n // Grammatical markers for each semantic role\n markers: GrammaticalMarker[];\n\n // Role ordering - which semantic roles come in what order\n // E.g., Japanese: ['patient', 'source', 'destination', 'action']\n // E.g., English: ['action', 'patient', 'source', 'destination']\n canonicalOrder: SemanticRole[];\n\n // Special rules\n rules?: GrammarRule[];\n}\n\n/**\n * Pattern for transforming hyperscript structures\n */\nexport interface GrammarRule {\n name: string;\n description: string;\n\n // Pattern matching (in canonical English form)\n match: PatternMatcher;\n\n // How to transform for this language\n transform: PatternTransform;\n\n // Priority (higher = checked first)\n priority: number;\n}\n\n/**\n * Matches a hyperscript pattern\n */\nexport interface PatternMatcher {\n // Command type(s) this matches\n commands?: string[];\n\n // Required semantic roles\n requiredRoles: SemanticRole[];\n\n // Optional roles\n optionalRoles?: SemanticRole[];\n\n // Custom predicate for complex matching\n predicate?: (parsed: ParsedStatement) => boolean;\n}\n\n/**\n * Defines how to transform a matched pattern\n */\nexport interface PatternTransform {\n // Reorder roles for target language\n roleOrder: SemanticRole[];\n\n // Insert markers between roles\n insertMarkers?: boolean;\n\n // Custom transformation function\n custom?: (parsed: ParsedStatement, profile: LanguageProfile) => string;\n}\n\n// =============================================================================\n// Parsed Structures\n// =============================================================================\n\n/**\n * A parsed hyperscript statement broken into semantic components\n */\nexport interface ParsedStatement {\n type: 'event-handler' | 'command' | 'conditional' | 'loop';\n roles: Map<SemanticRole, ParsedElement>;\n original: string;\n}\n\n/**\n * A single element with its semantic role\n */\nexport interface ParsedElement {\n role: SemanticRole;\n value: string; // Original English value\n translated?: string; // Translated value\n isSelector?: boolean; // CSS selector (don't translate)\n isLiteral?: boolean; // Literal value (don't translate)\n}\n\n// =============================================================================\n// Universal Pattern Templates\n// =============================================================================\n\n/**\n * Universal templates for common hyperscript patterns\n * These define the semantic structure independent of surface form\n */\nexport const UNIVERSAL_PATTERNS = {\n // on click increment #count\n eventIncrement: {\n name: 'event-increment',\n roles: ['event', 'action', 'patient'] as SemanticRole[],\n english: 'on {event} {action} {patient}',\n },\n\n // put X into Y\n putInto: {\n name: 'put-into',\n roles: ['action', 'patient', 'destination'] as SemanticRole[],\n english: '{action} {patient} into {destination}',\n },\n\n // add .class to element\n addTo: {\n name: 'add-to',\n roles: ['action', 'patient', 'destination'] as SemanticRole[],\n english: '{action} {patient} to {destination}',\n },\n\n // toggle .class on element\n toggleOn: {\n name: 'toggle-on',\n roles: ['action', 'patient', 'destination'] as SemanticRole[],\n english: '{action} {patient} on {destination}',\n },\n\n // wait 2 seconds\n waitDuration: {\n name: 'wait-duration',\n roles: ['action', 'quantity'] as SemanticRole[],\n english: '{action} {quantity}',\n },\n\n // if condition then ... end\n conditional: {\n name: 'conditional',\n roles: ['action', 'condition'] as SemanticRole[],\n english: '{action} {condition} then ... end',\n },\n\n // fetch URL as type\n fetchAs: {\n name: 'fetch-as',\n roles: ['action', 'source', 'method'] as SemanticRole[],\n english: '{action} {source} as {method}',\n },\n\n // show element with animation\n showWith: {\n name: 'show-with',\n roles: ['action', 'patient', 'style'] as SemanticRole[],\n english: '{action} {patient} with {style}',\n },\n\n // transition property over duration\n transitionOver: {\n name: 'transition-over',\n roles: ['action', 'patient', 'duration'] as SemanticRole[],\n english: '{action} {patient} over {duration}',\n },\n} as const;\n\n// =============================================================================\n// Language Family Defaults\n// =============================================================================\n\n/**\n * Default profiles for major language families\n * Individual languages inherit and override these\n */\nexport const LANGUAGE_FAMILY_DEFAULTS: Record<string, Partial<LanguageProfile>> = {\n // Germanic (English, German, Dutch)\n germanic: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Romance (Spanish, French, Italian, Portuguese)\n romance: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Japonic (Japanese)\n japonic: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Koreanic (Korean)\n koreanic: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Turkic (Turkish, Azerbaijani)\n turkic: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Sinitic (Chinese, Cantonese)\n sinitic: {\n wordOrder: 'SVO', // Topic-prominent, flexible\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Semitic (Arabic, Hebrew)\n semitic: {\n wordOrder: 'VSO',\n adpositionType: 'preposition',\n morphology: 'fusional', // Root-pattern system\n direction: 'rtl',\n canonicalOrder: [\n 'action',\n 'agent',\n 'patient',\n 'destination',\n 'source',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Austronesian (Indonesian, Tagalog)\n austronesian: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n\n // Quechuan (Quechua)\n quechuan: {\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative', // Actually polysynthetic but simplified\n direction: 'ltr',\n canonicalOrder: [\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n 'action',\n ],\n },\n\n // Bantu (Swahili)\n bantu: {\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n canonicalOrder: [\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n },\n};\n\n// =============================================================================\n// Transformation Utilities\n// =============================================================================\n\n/**\n * Reorder semantic roles according to target language.\n * Includes a safety net to append any roles present in input\n * but missing from the target order, preventing data loss.\n */\nexport function reorderRoles(\n roles: Map<SemanticRole, ParsedElement>,\n targetOrder: SemanticRole[]\n): ParsedElement[] {\n const result: ParsedElement[] = [];\n const usedRoles = new Set<SemanticRole>();\n\n // 1. Add roles that are explicitly in the canonical order\n for (const role of targetOrder) {\n const element = roles.get(role);\n if (element) {\n result.push(element);\n usedRoles.add(role);\n }\n }\n\n // 2. Safety Net: Append any roles present in input but missing from target order\n // This prevents data loss (e.g., if 'manner' or 'instrument' isn't in the profile)\n for (const [role, element] of roles) {\n if (!usedRoles.has(role)) {\n result.push(element);\n }\n }\n\n return result;\n}\n\n/**\n * Insert grammatical markers between elements\n */\nexport function insertMarkers(\n elements: ParsedElement[],\n markers: GrammaticalMarker[],\n adpositionType: AdpositionType\n): string[] {\n const result: string[] = [];\n\n for (const element of elements) {\n let marker = markers.find(m => m.role === element.role);\n\n // A selector-shaped \"event\" is never a trigger. It's the dangling target of\n // a locative `on` (`set @role to \"alert\" on #sr-announce`) that\n // splitOnCommandBoundaries splits off as a headless pseudo-handler (set/put\n // are deliberately NOT in ON_TARGET_COMMANDS — dual-destination collision).\n // Emitting the event marker after it (ko 할 때, ja で, bn এ, tr de) plants a\n // spurious mid-stream event anchor in the emission; suppress the marker and\n // emit the bare selector, which body parsers skip harmlessly.\n if (marker?.role === 'event' && /^[#.<@[]/.test(element.translated || element.value)) {\n marker = undefined;\n }\n\n // A pronoun-valued \"duration\" is never a time expression. It's the target\n // phrase of `take … for me` (en maps `for` → duration lexically), kept\n // in-clause by splitOnCommandBoundaries' loop-head guard. Emitting the\n // duration marker after it (bn জন্য — also bn's `for` loop keyword) anchors\n // a spurious `for` command in the semantic parse; suppress the marker and\n // emit the bare pronoun, which take-pattern matchers skip harmlessly.\n if (marker?.role === 'duration' && /^(me|you|it)$/i.test(element.value)) {\n marker = undefined;\n }\n\n if (marker) {\n if (adpositionType === 'preposition') {\n // Marker before element: \"to element\"\n if (marker.form) result.push(marker.form);\n result.push(element.translated || element.value);\n } else if (adpositionType === 'postposition') {\n // Marker after element: \"element を\"\n result.push(element.translated || element.value);\n if (marker.form) result.push(marker.form);\n } else {\n result.push(element.translated || element.value);\n }\n } else {\n result.push(element.translated || element.value);\n }\n }\n\n return result;\n}\n\n/**\n * Intelligently joins tokens, handling agglutinative suffixes and prefixes.\n *\n * Rules:\n * 1. If a token ends with '-' (prefix marker), no space after it\n * 2. If a token starts with '-' (suffix marker), no space before it\n * 3. Removes the hyphen indicators from the final output\n *\n * Examples:\n * - ['#count', '-ta'] → '#countta' (Quechua accusative suffix)\n * - ['بـ-', 'الماوس'] → 'بـالماوس' (Arabic prefix attachment)\n * - ['value', 'を'] → 'value を' (Japanese particle, normal spacing)\n */\nexport function joinTokens(tokens: string[]): string {\n if (tokens.length === 0) return '';\n\n let result = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n\n // Check if current token is a prefix (ends with -)\n const isPrefix = token.endsWith('-');\n // Check if current token is a suffix (starts with -)\n const isSuffix = token.startsWith('-');\n\n // Get the display form (strip hyphen markers)\n let displayToken = token;\n if (isPrefix) displayToken = token.slice(0, -1);\n if (isSuffix) displayToken = token.substring(1);\n\n result += displayToken;\n\n // Determine if we need a space before the next token\n if (nextToken) {\n const nextIsSuffix = nextToken.startsWith('-');\n\n // Don't add space if:\n // - Current token is a prefix (ends with -)\n // - Next token is a suffix (starts with -)\n if (!isPrefix && !nextIsSuffix) {\n result += ' ';\n }\n }\n }\n\n return result;\n}\n\n/**\n * Transform a parsed statement to target language\n */\nexport function transformStatement(\n parsed: ParsedStatement,\n _sourceProfile: LanguageProfile,\n targetProfile: LanguageProfile\n): string {\n // 1. Reorder roles for target language\n const reordered = reorderRoles(parsed.roles, targetProfile.canonicalOrder);\n\n // 2. Insert grammatical markers\n const withMarkers = insertMarkers(reordered, targetProfile.markers, targetProfile.adpositionType);\n\n // 3. Join with intelligent spacing for agglutinative languages\n // (handles suffixes like -ta, prefixes like بـ-, etc.)\n return joinTokens(withMarkers);\n}\n","/**\n * Language Profiles Index\n *\n * Concrete implementations of LanguageProfile for supported languages.\n * Each profile inherits from a language family default and adds\n * language-specific markers and rules.\n */\n\nimport type { GrammarRule, LanguageProfile, SemanticRole } from '../types';\nimport { reorderRoles, insertMarkers } from '../types';\n\n// =============================================================================\n// English (Reference Language)\n// =============================================================================\n\nexport const englishProfile: LanguageProfile = {\n code: 'en',\n name: 'English',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: [\n 'event',\n 'action',\n 'patient',\n 'source',\n 'destination',\n 'quantity',\n 'duration',\n 'method',\n 'style',\n ],\n\n markers: [\n { form: 'on', role: 'event', position: 'preposition', required: true },\n { form: 'to', role: 'destination', position: 'preposition', required: false },\n { form: 'into', role: 'destination', position: 'preposition', required: false },\n { form: 'from', role: 'source', position: 'preposition', required: false },\n { form: 'with', role: 'style', position: 'preposition', required: false },\n { form: 'by', role: 'quantity', position: 'preposition', required: false },\n { form: 'as', role: 'method', position: 'preposition', required: false },\n { form: 'over', role: 'duration', position: 'preposition', required: false },\n { form: 'for', role: 'duration', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Shared SOV rule factory — fused `halt the event call fn()` heads (Family H,\n// docs-internal/HANDOFF_r1-deferred-tail.md)\n// =============================================================================\n\n/**\n * The form-submit-prevent head fuses TWO juxtaposed commands (`on submit halt\n * the event call validateForm()`): parseEventHandler reads `halt` as the\n * action and sweeps `the event call validateForm()` into ONE patient blob, so\n * the SOV patient-first reorder fronts the whole blob — halt's operand lands\n * clause-initial far from its verb, and call's operand rides inside the blob\n * (tr bound validateForm() to halt and the event to call). No roleOrder can\n * fix a single-blob patient; this custom render splits the blob at the\n * language's call verb and emits both commands verb-final, joined by the\n * then-connective (the boundary the semantic compound-splitter already\n * respects — the event-debounce geometry):\n *\n * `<halt-operand> <pm> <event> <em> <halt-verb> <conn> <call-args> <pm> <call-verb>`\n *\n * The trailing EVENTBLOCKPLACEHOLDER (tryTransformEventWithBlockBody's mask\n * for an `if … end` tail) is re-emitted clause-final so the caller's\n * strip-and-append keeps working.\n */\nfunction sovHaltCallFusedRule(cfg: {\n callVerb: string; // the dictionary's call rendering — the blob split point\n patientMarker: string;\n eventMarker: string;\n connective: string;\n}): GrammarRule {\n return {\n name: 'halt-call-fused-verb-final',\n description: 'Split the swept `halt <operand> call <args>` blob; both verbs clause-final',\n priority: 95,\n match: {\n commands: ['halt'],\n requiredRoles: ['action', 'event', 'patient'],\n // Only the juxtaposed-call blob: a plain `halt`/`halt the event` handler\n // keeps its default render. The translated call verb must be present to\n // split on — if the dictionary emission drifts, the rule stands down\n // rather than emitting a mangled clause.\n predicate: parsed => {\n const p = parsed.roles.get('patient');\n return (\n !!p && /\\bcall\\b/.test(p.value) && !!p.translated && p.translated.includes(cfg.callVerb)\n );\n },\n },\n transform: {\n roleOrder: [], // unused — custom takes over\n custom: parsed => {\n const p = parsed.roles.get('patient')!;\n const ev = parsed.roles.get('event')!;\n const act = parsed.roles.get('action')!;\n let blob = (p.translated ?? p.value).trim();\n const PH = 'EVENTBLOCKPLACEHOLDER';\n let tail = '';\n if (blob.endsWith(PH)) {\n blob = blob.slice(0, -PH.length).trim();\n tail = ` ${PH}`;\n }\n const at = blob.indexOf(cfg.callVerb);\n const haltOperand = blob.slice(0, at).trim();\n const callArgs = blob.slice(at + cfg.callVerb.length).trim();\n return (\n [\n haltOperand,\n cfg.patientMarker,\n ev.translated ?? ev.value,\n cfg.eventMarker,\n act.translated ?? act.value,\n cfg.connective,\n callArgs,\n cfg.patientMarker,\n cfg.callVerb,\n ].join(' ') + tail\n );\n },\n },\n };\n}\n\n// =============================================================================\n// Shared SOV rule factory — pick range rows (`pick characters 0 to 5 of #note`,\n// docs-internal/HANDOFF_pick-text-range-arc3.md)\n// =============================================================================\n\n/**\n * The canonical pick range row decomposes in parseStatement/parseEventHandler as\n * patient=`characters 0` + destination=`5 of #note` (the range's `to` reads as a\n * destination marker), so the default SOV reorder scatters the range across the\n * clause — ja emitted `文字 0 を クリック で 選択 5 の #note に` with the `5`\n * stranded after the verb, unparseable in every SOV language. No roleOrder can\n * reunite a range split across two roles; this custom render reassembles the\n * canonical surface and emits the SOV convention shape (big patient phrase\n * first, verb final):\n *\n * `<root> <gen> <unit> <a> <sep> <b> <pm> [<event> <em>] <verb>`\n *\n * e.g. ja `#note の 文字 0 から 5 を クリック で 選択`. The paired semantic\n * pick pattern (patterns/pick.ts VERB_FINAL_SPECS) parses exactly this shape\n * back, with the range fold normalizing `<a> <sep> <b>` to English `a to b` —\n * the two sides co-evolve per the i18n-renders-semantic-patterns-coevolve\n * lesson; change one and you must re-probe the other.\n *\n * Gated tight to the numeric-endpoint corpus shape (`<unit> <int>` patient +\n * `<int> of <root>` destination); word endpoints (`start`/`end`), modes\n * (`inclusive`) and anything else fall through to the default render unchanged.\n */\nfunction sovPickRangeRule(cfg: {\n /** Genitive joiner between the root and the unit word (ja `の`, hi `का`). */\n genitive: string;\n /** Range separator between the two endpoints (ja `から`, hi `से`). */\n rangeSep: string;\n /** Patient/object marker after the range (ja `を`, hi `को`). */\n patientMarker: string;\n /** Event marker after the event word (ja `で`, hi `पर`). */\n eventMarker: string;\n}): GrammarRule {\n return {\n name: 'pick-range-verb-final',\n description: 'Reassemble the pick range (unit + endpoints + root) adjacent, verb-final',\n priority: 95,\n match: {\n commands: ['pick'],\n requiredRoles: ['action', 'patient', 'destination'],\n predicate: parsed => {\n const p = parsed.roles.get('patient');\n const d = parsed.roles.get('destination');\n return (\n !!p &&\n !!d &&\n /^\\S+\\s+\\d+$/.test(p.value.trim()) &&\n /^\\d+\\s+of\\s+\\S+$/.test(d.value.trim())\n );\n },\n },\n transform: {\n roleOrder: [], // unused — custom takes over\n custom: parsed => {\n const p = parsed.roles.get('patient')!;\n const d = parsed.roles.get('destination')!;\n const act = parsed.roles.get('action')!;\n const ev = parsed.roles.get('event');\n // Unit word from the TRANSLATED patient (`文字 0` → `文字`); endpoints\n // and root from the UNTRANSLATED values — integers and selectors are\n // language-invariant by construction (the R3 rule).\n const pParts = (p.translated ?? p.value).trim().split(/\\s+/);\n const a = pParts[pParts.length - 1]!;\n const unit = pParts.slice(0, -1).join(' ');\n const dMatch = d.value.trim().match(/^(\\d+)\\s+of\\s+(\\S+)$/)!;\n const b = dMatch[1]!;\n const root = dMatch[2]!;\n const verb = act.translated ?? act.value;\n const head = [root, cfg.genitive, unit, a, cfg.rangeSep, b, cfg.patientMarker];\n const eventPart = ev ? [ev.translated ?? ev.value, cfg.eventMarker] : [];\n return [...head, ...eventPart, verb].join(' ');\n },\n },\n };\n}\n\n// =============================================================================\n// Japanese (SOV, Postpositions)\n// =============================================================================\n\nexport const japaneseProfile: LanguageProfile = {\n code: 'ja',\n name: '日本語',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n // Japanese: Object comes before verb, markers follow nouns\n // \"on click increment #count\" → \"#count を クリック で 増加\"\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Particles (postpositions)\n { form: 'を', role: 'patient', position: 'postposition', required: true },\n { form: 'に', role: 'destination', position: 'postposition', required: true },\n { form: 'から', role: 'source', position: 'postposition', required: true },\n { form: 'で', role: 'event', position: 'postposition', required: true },\n { form: 'で', role: 'style', position: 'postposition', required: false },\n { form: 'と', role: 'style', position: 'postposition', required: false },\n { form: 'へ', role: 'destination', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Japanese SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n optionalRoles: ['patient'],\n },\n transform: {\n // #count を クリック で 増加\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Japanese order',\n priority: 90,\n match: {\n commands: ['put', '置く'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // X を Y に 置く\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Japanese verb-final order',\n priority: 90,\n match: {\n commands: ['set', '設定'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X を Y に 設定 — verb-final, matching the generated SOV set pattern\n // (markerOverride: を on the destination / に on the value). Default reorder\n // emitted verb-MEDIAL (`X を 設定 Y に`), unmatched by any set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Japanese verb-final order',\n priority: 90,\n match: {\n commands: ['bind', 'バインド'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var を #el に バインド\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n // the イベント を 送信 で 停止 それから validateForm() を 呼び出し\n sovHaltCallFusedRule({\n callVerb: '呼び出し',\n patientMarker: 'を',\n eventMarker: 'で',\n connective: 'それから',\n }),\n // #note の 文字 0 から 5 を クリック で 選択\n sovPickRangeRule({\n genitive: 'の',\n rangeSep: 'から',\n patientMarker: 'を',\n eventMarker: 'で',\n }),\n ],\n};\n\n// =============================================================================\n// Korean (SOV, Postpositions - similar to Japanese)\n// =============================================================================\n\nexport const koreanProfile: LanguageProfile = {\n code: 'ko',\n name: '한국어',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Korean particles (with vowel harmony variants)\n { form: '를', role: 'patient', position: 'postposition', required: true, alternatives: ['을'] },\n { form: '에', role: 'destination', position: 'postposition', required: true },\n { form: '에서', role: 'source', position: 'postposition', required: true },\n // Event marker — the semantic *-event-ko-sov-* patterns anchor on 할 때\n // (the generator profile's eventMarker); without it every ko handler\n // emitted a bare event name no fused pattern could anchor.\n { form: '할 때', role: 'event', position: 'postposition', required: true },\n {\n form: '로',\n role: 'style',\n position: 'postposition',\n required: false,\n alternatives: ['으로'],\n },\n { form: '와', role: 'style', position: 'postposition', required: false, alternatives: ['과'] },\n {\n form: '로',\n role: 'method',\n position: 'postposition',\n required: false,\n alternatives: ['으로'],\n }, // \"as\" - same as instrument\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Korean SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Korean verb-final order',\n priority: 90,\n match: {\n commands: ['put', '넣다'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Standalone put only (e.g. a then-chain clause): an event handler whose\n // action is `put` must keep the event mid-stream, so don't verb-final it.\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // X 를 Y 에 넣다 (patient, destination, verb-last)\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Korean verb-final order',\n priority: 90,\n match: {\n commands: ['set', '설정'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X 를 Y 에 설정 — verb-final, matching the generated SOV set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Korean verb-final order',\n priority: 90,\n match: {\n commands: ['bind', '바인드'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var 를 #el 에 바인드\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n // the 이벤트 를 제출 할 때 정지 그러면 validateForm() 를 호출\n sovHaltCallFusedRule({\n callVerb: '호출',\n patientMarker: '를',\n eventMarker: '할 때',\n connective: '그러면',\n }),\n // #note 의 문자 0 부터 5 를 클릭 할 때 선택\n sovPickRangeRule({\n genitive: '의',\n rangeSep: '부터',\n patientMarker: '를',\n eventMarker: '할 때',\n }),\n ],\n};\n\n// =============================================================================\n// Chinese (SVO, Topic-Prominent)\n// =============================================================================\n\nexport const chineseProfile: LanguageProfile = {\n code: 'zh',\n name: '中文',\n\n wordOrder: 'SVO', // But topic-prominent allows flexibility\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n\n // Chinese typically uses topic-comment structure\n // Can front the object for emphasis: \"#count 在 点击时 增加\"\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: '当', role: 'event', position: 'preposition', required: true },\n { form: '时', role: 'event', position: 'postposition', required: true }, // Circumfix with 当\n { form: '把', role: 'patient', position: 'preposition', required: false }, // BA construction\n { form: '到', role: 'destination', position: 'preposition', required: false },\n { form: '从', role: 'source', position: 'preposition', required: false },\n { form: '用', role: 'style', position: 'preposition', required: false },\n { form: '的', role: 'method', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-standard',\n description: 'Standard event handler: 当 X 时 Y',\n priority: 100,\n match: {\n // Don't match commands - match by statement type having event role\n requiredRoles: ['event', 'action'],\n },\n transform: {\n // 当 EVENT 时 ACTION [patient] [destination] [source] [style] [method] ...\n roleOrder: ['event', 'action', 'patient'],\n insertMarkers: true,\n custom: (parsed, profile) => {\n // Handle 当...时 circumfix wrapping the event, then emit the action,\n // then any remaining roles in canonical order with their markers.\n // Earlier this function emitted only event/action/patient and silently\n // dropped destination, source, style, etc. — that produced truncated\n // output for `send X to Y`, `fetch /api with method:...`, etc.\n const event = parsed.roles.get('event');\n const action = parsed.roles.get('action');\n\n // Build the post-action role list using the canonical order minus\n // event/action, plus a safety net for any roles not in the order.\n const remaining = new Map(parsed.roles);\n remaining.delete('event');\n remaining.delete('action');\n\n const remainingOrder: SemanticRole[] = (profile.canonicalOrder || []).filter(\n r => r !== 'event' && r !== 'action'\n );\n const reordered = reorderRoles(remaining, remainingOrder);\n const markedTokens = insertMarkers(reordered, profile.markers, profile.adpositionType);\n\n const parts: string[] = ['当', event?.translated || event?.value || '', '时'];\n if (action) parts.push(action.translated || action.value);\n parts.push(...markedTokens);\n\n return parts.filter(Boolean).join(' ');\n },\n },\n },\n {\n name: 'ba-construction',\n description: 'BA construction for object-fronting: 把 X Y',\n priority: 80,\n match: {\n commands: ['put', 'set', 'move'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // 把 X 放 到 Y\n roleOrder: ['patient', 'action', 'destination'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Bind binds a variable to an element: 绑定 X 到 Y (no 把)',\n priority: 90,\n match: {\n commands: ['bind', '绑定'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // Plain SVO without the 把 object-fronting: the bound variable is the\n // semantic destination (not a fronted patient), and `到` marks the\n // target element. Custom so the patient does not pick up 把.\n roleOrder: ['action', 'patient', 'destination'],\n custom: parsed => {\n const action = parsed.roles.get('action');\n const patient = parsed.roles.get('patient');\n const destination = parsed.roles.get('destination');\n const verb = action?.translated || action?.value || '';\n const v = patient?.translated || patient?.value || '';\n const d = destination?.translated || destination?.value || '';\n return [verb, v, '到', d].filter(Boolean).join(' ');\n },\n },\n },\n ],\n};\n\n// =============================================================================\n// Arabic (VSO, RTL)\n// =============================================================================\n\nexport const arabicProfile: LanguageProfile = {\n code: 'ar',\n name: 'العربية',\n\n wordOrder: 'VSO',\n adpositionType: 'preposition',\n morphology: 'fusional', // Root-pattern morphology\n direction: 'rtl',\n\n // Arabic VSO: Verb first, then subject, then object\n canonicalOrder: ['action', 'agent', 'patient', 'destination', 'source'],\n\n markers: [\n { form: 'عند', role: 'event', position: 'preposition', required: true },\n { form: 'إلى', role: 'destination', position: 'preposition', required: false },\n { form: 'في', role: 'destination', position: 'preposition', required: false },\n { form: 'من', role: 'source', position: 'preposition', required: false },\n // بـ- notation: trailing hyphen indicates prefix that attaches without space\n { form: 'بـ-', role: 'style', position: 'preposition', required: false },\n { form: 'مع', role: 'style', position: 'preposition', required: false },\n // كـ- notation: \"as/like\" prefix for manner\n { form: 'كـ-', role: 'method', position: 'preposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-vso',\n description: 'VSO event handler: VERB TARGET عند EVENT',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n // زِد #count عند النقر (increment #count on click)\n roleOrder: ['action', 'patient', 'event'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Turkish (SOV, Agglutinative)\n// =============================================================================\n\nexport const turkishProfile: LanguageProfile = {\n code: 'tr',\n name: 'Türkçe',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n // NOTE: roles absent from this order are safety-net-appended AFTER the verb\n // by reorderRoles. That stranding is what the semantic parser's generated\n // patterns + reclaim tolerances were built around, so extending this order\n // wholesale re-renders (and breaks) the whole tr corpus — fix individual\n // defective shapes with per-command `rules` below instead (see the\n // wait/repeat-until rules from the transformer-rendering arc).\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Turkish case suffixes - using spaced form for tokenization\n // Note: Real Turkish attaches these as suffixes, but we use spaces\n // so the semantic tokenizer can properly parse them\n {\n form: 'i',\n role: 'patient',\n position: 'postposition',\n required: true,\n alternatives: ['ı', 'u', 'ü'],\n },\n {\n form: 'e',\n role: 'destination',\n position: 'postposition',\n required: true,\n alternatives: ['a'],\n },\n {\n form: 'den',\n role: 'source',\n position: 'postposition',\n required: true,\n alternatives: ['dan'],\n },\n { form: 'de', role: 'event', position: 'postposition', required: true, alternatives: ['da'] },\n { form: 'ile', role: 'style', position: 'postposition', required: false },\n { form: 'olarak', role: 'method', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-sov',\n description: 'SOV event handler',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Turkish verb-final order',\n priority: 90,\n match: {\n commands: ['put', 'koy'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Standalone put only (e.g. a then-chain clause): an event handler whose\n // action is `put` must keep the event mid-stream, so don't verb-final it.\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // X i Y e koy (patient, destination, verb-last)\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Turkish verb-final order',\n priority: 90,\n match: {\n commands: ['set', 'ayarla'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X i Y e ayarla — verb-final, matching the generated SOV set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Turkish verb-final order',\n priority: 90,\n match: {\n commands: ['bind'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var i #el e bağla\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'wait-oblique-verb-final',\n description: \"Keep wait's from-phrase and or-run inside the clause, verb-final\",\n priority: 90,\n match: {\n commands: ['wait', 'bekle'],\n // Only the multi-argument form (`wait for X or Y from Z`) strands:\n // without this rule the safety-net appends duration+source AFTER the\n // verb (`bekle … belge den`), and the stranded from-phrase is captured\n // by the NEXT statement as a junk trigger event (behavior-sortable R3).\n requiredRoles: ['action', 'duration', 'source'],\n // Never reorder a fused single-line handler — its event must stay put.\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // belge den pointermove(clientY) veya pointerup(clientY) bekle\n roleOrder: ['patient', 'source', 'duration', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'repeat-until-event-verb-final',\n description: \"Keep repeat-until-event's from-phrase before the verb\",\n priority: 90,\n match: {\n commands: ['repeat', 'tekrarla'],\n requiredRoles: ['action', 'patient', 'source'],\n // Gate to the until-event head; `repeat for item in .items` also\n // carries patient+source and must keep its (parseable) default order.\n predicate: parsed => /^repeat\\s+until\\s+event\\b/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // kadar olay pointerup i belge den tekrarla — matched semantic-side by\n // repeat-tr-until-head-verb-final.\n roleOrder: ['patient', 'source', 'action'],\n insertMarkers: true,\n },\n },\n // the olay i gönder de durdur ardından validateForm() i çağır\n sovHaltCallFusedRule({\n callVerb: 'çağır',\n patientMarker: 'i',\n eventMarker: 'de',\n connective: 'ardından',\n }),\n // #note nin karakterler 0 ile 5 i tıklama de seç\n sovPickRangeRule({\n genitive: 'nin',\n rangeSep: 'ile',\n patientMarker: 'i',\n eventMarker: 'de',\n }),\n ],\n};\n\n// =============================================================================\n// Spanish (SVO, Romance)\n// =============================================================================\n\nexport const spanishProfile: LanguageProfile = {\n code: 'es',\n name: 'Español',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n // Event: \"En hacer clic\" or \"Al hacer clic\"\n { form: 'en', role: 'event', position: 'preposition', required: true },\n // Destination: Prioritize 'a' over 'en' to avoid collision with event marker\n { form: 'a', role: 'destination', position: 'preposition', required: false },\n { form: 'hacia', role: 'destination', position: 'preposition', required: false }, // \"Towards\"\n { form: 'de', role: 'source', position: 'preposition', required: false },\n { form: 'con', role: 'style', position: 'preposition', required: false },\n { form: 'por', role: 'quantity', position: 'preposition', required: false },\n { form: 'como', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// German (SVO, Germanic)\n// =============================================================================\n\nexport const germanProfile: LanguageProfile = {\n code: 'de',\n name: 'Deutsch',\n\n wordOrder: 'SVO', // V2 in main clauses, but SVO for our purposes\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'bei', role: 'event', position: 'preposition', required: true },\n { form: 'zu', role: 'destination', position: 'preposition', required: false },\n { form: 'in', role: 'destination', position: 'preposition', required: false },\n { form: 'von', role: 'source', position: 'preposition', required: false },\n { form: 'aus', role: 'source', position: 'preposition', required: false },\n { form: 'mit', role: 'style', position: 'preposition', required: false },\n { form: 'um', role: 'quantity', position: 'preposition', required: false },\n { form: 'als', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// French (SVO, Romance)\n// =============================================================================\n\nexport const frenchProfile: LanguageProfile = {\n code: 'fr',\n name: 'Français',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'sur', role: 'event', position: 'preposition', required: true },\n { form: 'à', role: 'destination', position: 'preposition', required: false },\n { form: 'dans', role: 'destination', position: 'preposition', required: false },\n { form: 'de', role: 'source', position: 'preposition', required: false },\n { form: 'avec', role: 'style', position: 'preposition', required: false },\n { form: 'par', role: 'quantity', position: 'preposition', required: false },\n { form: 'comme', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Portuguese (SVO, Romance)\n// =============================================================================\n\nexport const portugueseProfile: LanguageProfile = {\n code: 'pt',\n name: 'Português',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'em', role: 'event', position: 'preposition', required: true },\n { form: 'para', role: 'destination', position: 'preposition', required: false },\n { form: 'em', role: 'destination', position: 'preposition', required: false },\n { form: 'de', role: 'source', position: 'preposition', required: false },\n { form: 'com', role: 'style', position: 'preposition', required: false },\n { form: 'por', role: 'quantity', position: 'preposition', required: false },\n { form: 'como', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Indonesian (SVO, Austronesian)\n// =============================================================================\n\nexport const indonesianProfile: LanguageProfile = {\n code: 'id',\n name: 'Bahasa Indonesia',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'pada', role: 'event', position: 'preposition', required: true },\n { form: 'ke', role: 'destination', position: 'preposition', required: false },\n { form: 'dari', role: 'source', position: 'preposition', required: false },\n { form: 'dengan', role: 'style', position: 'preposition', required: false },\n { form: 'sebagai', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Malay (SVO, Austronesian) — grammar mirrors Indonesian (shared function words:\n// pada / ke / dari / dengan / sebagai). Without this profile the transformer threw\n// \"Unknown target locale: ms\", so no ms translation could be generated at all.\n// =============================================================================\n\nexport const malayProfile: LanguageProfile = {\n code: 'ms',\n name: 'Bahasa Melayu',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n // ms marks the event clause with `apabila` (\"when/on\") — matching the semantic\n // ms event-handler pattern (`apabila {event} {body}`) and the ms dict's\n // `on: apabila`. (Indonesian uses `pada` here; the two diverge on the event head.)\n { form: 'apabila', role: 'event', position: 'preposition', required: true },\n { form: 'ke', role: 'destination', position: 'preposition', required: false },\n { form: 'dari', role: 'source', position: 'preposition', required: false },\n { form: 'dengan', role: 'style', position: 'preposition', required: false },\n { form: 'sebagai', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Quechua (SOV, Quechuan)\n// =============================================================================\n\nexport const quechuaProfile: LanguageProfile = {\n code: 'qu',\n name: 'Runasimi',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative', // Actually polysynthetic\n direction: 'ltr',\n\n // NOTE: roles absent from this order are safety-net-appended AFTER the verb\n // (see the Turkish profile note) — extend via per-command `rules`, not here.\n canonicalOrder: ['patient', 'source', 'destination', 'event', 'action'],\n\n markers: [\n // Quechua case suffixes - using spaced form for tokenization\n // Note: Real Quechua attaches these as suffixes, but we use spaces\n // so the semantic tokenizer can properly parse them\n { form: 'ta', role: 'patient', position: 'postposition', required: true },\n { form: 'man', role: 'destination', position: 'postposition', required: true },\n { form: 'manta', role: 'source', position: 'postposition', required: true },\n { form: 'pi', role: 'event', position: 'postposition', required: true },\n { form: 'wan', role: 'style', position: 'postposition', required: false },\n { form: 'hina', role: 'method', position: 'postposition', required: false }, // \"as/like\"\n ],\n\n rules: [\n {\n name: 'wait-oblique-verb-final',\n description: \"Keep wait's from-phrase and or-run inside the clause, verb-final\",\n priority: 90,\n match: {\n commands: ['wait', 'suyay'],\n // Only `wait for X or Y from Z` strands: duration is missing from\n // canonicalOrder, so the or-run lands AFTER the verb and the next\n // trigger glues it into its event (behavior-sortable R3). See the\n // matching Turkish rule.\n requiredRoles: ['action', 'duration', 'source'],\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // qillqa manta pointermove(clientY) utaq pointerup(clientY) suyay\n roleOrder: ['patient', 'source', 'duration', 'action'],\n insertMarkers: true,\n },\n },\n // the ruway ta kachay pi sayay chayqa validateForm() ta qayay\n sovHaltCallFusedRule({\n callVerb: 'qayay',\n patientMarker: 'ta',\n eventMarker: 'pi',\n connective: 'chayqa',\n }),\n // #note pa sanampa 0 kama 5 ta ñitiy pi akllay\n sovPickRangeRule({\n genitive: 'pa',\n rangeSep: 'kama',\n patientMarker: 'ta',\n eventMarker: 'pi',\n }),\n ],\n};\n\n// =============================================================================\n// Swahili (SVO, Bantu)\n// =============================================================================\n\nexport const swahiliProfile: LanguageProfile = {\n code: 'sw',\n name: 'Kiswahili',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'kwenye', role: 'event', position: 'preposition', required: true },\n { form: 'kwa', role: 'destination', position: 'preposition', required: false },\n { form: 'kutoka', role: 'source', position: 'preposition', required: false },\n { form: 'na', role: 'style', position: 'preposition', required: false },\n // `kuwa`, not `kama`: sw `kama` is the IF keyword — rendering the method\n // role (\"as X\") with it grew a phantom `if` at semantic parse time. See the\n // matching comment in dictionaries/sw.ts (modifiers.as).\n { form: 'kuwa', role: 'method', position: 'preposition', required: false }, // \"as/become\"\n ],\n};\n\n// =============================================================================\n// Bengali (SOV, Postpositions - similar to Japanese/Korean)\n// =============================================================================\n\nexport const bengaliProfile: LanguageProfile = {\n code: 'bn',\n name: 'বাংলা',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n // Bengali: Object comes before verb, postpositions follow nouns\n // \"on click increment #count\" → \"#count কে ক্লিক এ বৃদ্ধি\"\n // NOTE: roles absent from this order are safety-net-appended AFTER the verb\n // (see the Turkish profile note) — extend via per-command `rules`, not here.\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n // Postpositions\n { form: 'কে', role: 'patient', position: 'postposition', required: true },\n { form: 'তে', role: 'destination', position: 'postposition', required: true },\n { form: 'এ', role: 'event', position: 'postposition', required: true },\n { form: 'থেকে', role: 'source', position: 'postposition', required: true },\n { form: 'দিয়ে', role: 'style', position: 'postposition', required: false },\n { form: 'জন্য', role: 'duration', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Bengali SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n optionalRoles: ['patient'],\n },\n transform: {\n // #count কে ক্লিক এ বৃদ্ধি\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Bengali verb-final order',\n priority: 90,\n match: {\n commands: ['put', 'রাখুন'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Standalone put only (e.g. a then-chain clause): an event handler whose\n // action is `put` must keep the event mid-stream, so don't verb-final it.\n predicate: parsed => !parsed.roles.has('event'),\n },\n transform: {\n // X কে Y তে রাখুন (patient, destination, verb-last)\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Bengali verb-final order',\n priority: 90,\n match: {\n commands: ['set', 'সেট'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // X কে Y তে সেট — verb-final, matching the generated SOV set pattern.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Bengali verb-final order',\n priority: 90,\n match: {\n commands: ['bind', 'বাইন্ড'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $var কে #el তে বাইন্ড\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n // the ঘটনা কে জমা এ থামুন তারপর validateForm() কে কল\n sovHaltCallFusedRule({\n callVerb: 'কল',\n patientMarker: 'কে',\n eventMarker: 'এ',\n connective: 'তারপর',\n }),\n // #note র অক্ষর 0 থেকে 5 কে ক্লিক এ বাছুন\n sovPickRangeRule({\n genitive: 'র',\n rangeSep: 'থেকে',\n patientMarker: 'কে',\n eventMarker: 'এ',\n }),\n ],\n};\n\n// =============================================================================\n// Italian (SVO, Romance)\n// =============================================================================\n\nexport const italianProfile: LanguageProfile = {\n code: 'it',\n name: 'Italiano',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'su', role: 'event', position: 'preposition', required: true },\n { form: 'in', role: 'destination', position: 'preposition', required: false },\n { form: 'a', role: 'destination', position: 'preposition', required: false },\n { form: 'da', role: 'source', position: 'preposition', required: false },\n { form: 'di', role: 'source', position: 'preposition', required: false },\n { form: 'con', role: 'style', position: 'preposition', required: false },\n { form: 'come', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Russian (SVO, Slavic)\n// =============================================================================\n\nexport const russianProfile: LanguageProfile = {\n code: 'ru',\n name: 'Русский',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'при', role: 'event', position: 'preposition', required: true },\n { form: 'в', role: 'destination', position: 'preposition', required: false },\n { form: 'на', role: 'destination', position: 'preposition', required: false },\n { form: 'к', role: 'destination', position: 'preposition', required: false },\n { form: 'из', role: 'source', position: 'preposition', required: false },\n { form: 'от', role: 'source', position: 'preposition', required: false },\n { form: 'с', role: 'source', position: 'preposition', required: false },\n { form: 'с', role: 'style', position: 'preposition', required: false },\n { form: 'со', role: 'style', position: 'preposition', required: false },\n { form: 'как', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Ukrainian (SVO, Slavic)\n// =============================================================================\n\nexport const ukrainianProfile: LanguageProfile = {\n code: 'uk',\n name: 'Українська',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'при', role: 'event', position: 'preposition', required: true },\n { form: 'в', role: 'destination', position: 'preposition', required: false },\n { form: 'на', role: 'destination', position: 'preposition', required: false },\n { form: 'до', role: 'destination', position: 'preposition', required: false },\n { form: 'з', role: 'source', position: 'preposition', required: false },\n { form: 'від', role: 'source', position: 'preposition', required: false },\n { form: 'із', role: 'source', position: 'preposition', required: false },\n { form: 'з', role: 'style', position: 'preposition', required: false },\n { form: 'із', role: 'style', position: 'preposition', required: false },\n { form: 'як', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Vietnamese (SVO, Isolating)\n// =============================================================================\n\nexport const vietnameseProfile: LanguageProfile = {\n code: 'vi',\n name: 'Tiếng Việt',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'khi', role: 'event', position: 'preposition', required: true },\n { form: 'vào', role: 'destination', position: 'preposition', required: false },\n { form: 'cho', role: 'destination', position: 'preposition', required: false },\n { form: 'đến', role: 'destination', position: 'preposition', required: false },\n { form: 'từ', role: 'source', position: 'preposition', required: false },\n { form: 'khỏi', role: 'source', position: 'preposition', required: false },\n { form: 'với', role: 'style', position: 'preposition', required: false },\n { form: 'như', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Hindi (SOV, Postpositions)\n// =============================================================================\n\nexport const hindiProfile: LanguageProfile = {\n code: 'hi',\n name: 'हिन्दी',\n\n wordOrder: 'SOV',\n adpositionType: 'postposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n // Hindi: Object comes before verb, postpositions follow nouns\n // \"on click increment #count\" → \"#count को क्लिक पर बढ़ाएं\"\n canonicalOrder: ['patient', 'event', 'action'],\n\n markers: [\n { form: 'को', role: 'patient', position: 'postposition', required: true },\n { form: 'में', role: 'destination', position: 'postposition', required: true },\n { form: 'पर', role: 'destination', position: 'postposition', required: false },\n { form: 'पर', role: 'event', position: 'postposition', required: true },\n { form: 'से', role: 'source', position: 'postposition', required: true },\n { form: 'से', role: 'style', position: 'postposition', required: false },\n { form: 'साथ', role: 'style', position: 'postposition', required: false },\n { form: 'के रूप में', role: 'method', position: 'postposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler',\n description: 'Transform event handlers to Hindi SOV order',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n optionalRoles: ['patient'],\n },\n transform: {\n // #count को क्लिक पर बढ़ाएं\n roleOrder: ['patient', 'event', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'put-into',\n description: 'Transform put X into Y to Hindi verb-final order',\n priority: 90,\n match: {\n commands: ['put', 'रखें'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // \"hi\" को #out में रखें\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'set-to',\n description: 'Transform set X to Y to Hindi verb-final order',\n priority: 90,\n match: {\n commands: ['set', 'सेट'],\n requiredRoles: ['action', 'patient', 'destination'],\n // Skip a set whose value swept up a trailing block terminator (`set X to Y\n // end` — the body of an inline `if … then set … end`): verb-final reorder\n // would push the verb past `end` and break the block. These parse fine\n // verb-medial (the default).\n predicate: parsed => !/(^|\\s)end$/i.test((parsed.original ?? '').trim()),\n },\n transform: {\n // #x.innerText को इसका.name में सेट — verb-final, matching the generated\n // SOV set pattern (set schema markerOverride puts को on the destination /\n // में on the value). The default reorder emitted verb-MEDIAL\n // (`#x को सेट … में`), which no set pattern matched → bare-event fallback.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n {\n name: 'bind-to',\n description: 'Transform bind $var to #el to Hindi verb-final order',\n priority: 90,\n match: {\n commands: ['bind', 'बाइंड', 'बांधें'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // $greeting को #name-input में bind — verb-final, matching the generated SOV\n // bind pattern (`{destination} को {source} में bind`). The default reorder\n // emitted verb-MEDIAL (`$greeting को bind #name-input में`), which the\n // verb-final pattern never matched → the bare-event fallback mis-anchored\n // the fronted `$greeting` as a phantom `on` event (the rf=0.00 bind residue).\n // ja/ko/zh/tr/bn already carry this rule; hi was the only SOV gap.\n roleOrder: ['patient', 'destination', 'action'],\n insertMarkers: true,\n },\n },\n // the घटना को जमा पर रोकें फिर validateForm() को कॉल\n sovHaltCallFusedRule({\n callVerb: 'कॉल',\n patientMarker: 'को',\n eventMarker: 'पर',\n connective: 'फिर',\n }),\n // #note का अक्षर 0 से 5 को क्लिक पर चुनें\n sovPickRangeRule({\n genitive: 'का',\n rangeSep: 'से',\n patientMarker: 'को',\n eventMarker: 'पर',\n }),\n ],\n};\n\n// =============================================================================\n// Tagalog (VSO, Prepositions)\n// =============================================================================\n\nexport const tagalogProfile: LanguageProfile = {\n code: 'tl',\n name: 'Tagalog',\n\n wordOrder: 'VSO',\n adpositionType: 'preposition',\n morphology: 'agglutinative',\n direction: 'ltr',\n\n // Tagalog VSO: Verb first, then subject, then object\n canonicalOrder: ['action', 'agent', 'patient', 'destination', 'source'],\n\n markers: [\n { form: 'kapag', role: 'event', position: 'preposition', required: true },\n { form: 'sa', role: 'destination', position: 'preposition', required: false },\n // mula_sa (underscore) matches the tl dict and the semantic profile's\n // source marker — the spaced form emitted two tokens the generated\n // patterns' single mula_sa literal could never match, so `remove X\n // mula sa Y` lost its source and the schema default fabricated me.\n { form: 'mula_sa', role: 'source', position: 'preposition', required: false },\n { form: 'nang', role: 'style', position: 'preposition', required: false },\n { form: 'bilang', role: 'method', position: 'preposition', required: false },\n ],\n\n rules: [\n {\n name: 'event-handler-vso',\n description: 'VSO event handler: VERB TARGET kapag EVENT',\n priority: 100,\n match: {\n commands: ['on'],\n requiredRoles: ['event', 'action'],\n },\n transform: {\n // palitan #count kapag click (toggle #count on click)\n roleOrder: ['action', 'patient', 'event'],\n insertMarkers: true,\n },\n },\n ],\n};\n\n// =============================================================================\n// Thai (SVO, Isolating, No Spaces)\n// =============================================================================\n\nexport const thaiProfile: LanguageProfile = {\n code: 'th',\n name: 'ไทย',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'isolating',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'เมื่อ', role: 'event', position: 'preposition', required: true },\n { form: 'ใน', role: 'destination', position: 'preposition', required: false },\n { form: 'ไปยัง', role: 'destination', position: 'preposition', required: false },\n { form: 'จาก', role: 'source', position: 'preposition', required: false },\n { form: 'ด้วย', role: 'style', position: 'preposition', required: false },\n { form: 'เป็น', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Polish (SVO, Fusional, Imperative)\n// =============================================================================\n\nexport const polishProfile: LanguageProfile = {\n code: 'pl',\n name: 'Polski',\n\n wordOrder: 'SVO',\n adpositionType: 'preposition',\n morphology: 'fusional',\n direction: 'ltr',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n markers: [\n { form: 'gdy', role: 'event', position: 'preposition', required: true },\n { form: 'przy', role: 'event', position: 'preposition', required: false },\n { form: 'do', role: 'destination', position: 'preposition', required: false },\n { form: 'w', role: 'destination', position: 'preposition', required: false },\n { form: 'na', role: 'destination', position: 'preposition', required: false },\n { form: 'z', role: 'source', position: 'preposition', required: false },\n { form: 'od', role: 'source', position: 'preposition', required: false },\n { form: 'ze', role: 'source', position: 'preposition', required: false },\n { form: 'z', role: 'style', position: 'preposition', required: false },\n { form: 'ze', role: 'style', position: 'preposition', required: false },\n { form: 'jako', role: 'method', position: 'preposition', required: false },\n ],\n};\n\n// =============================================================================\n// Hebrew (SVO, RTL, Prepositions)\n// =============================================================================\n\nexport const hebrewProfile: LanguageProfile = {\n code: 'he',\n name: 'עברית',\n\n wordOrder: 'SVO', // Modern Hebrew is predominantly SVO (Biblical Hebrew was VSO)\n adpositionType: 'preposition',\n morphology: 'fusional', // Root-and-pattern (Semitic), like Arabic\n direction: 'rtl',\n\n canonicalOrder: ['event', 'action', 'patient', 'destination'],\n\n // Hebrew uses single-letter prefix prepositions (ב, ל, מ, כ) that attach to\n // the following word. For tokenization we treat them as spaced forms.\n markers: [\n { form: 'ב', role: 'event', position: 'preposition', required: true },\n { form: 'על', role: 'destination', position: 'preposition', required: false },\n { form: 'אל', role: 'destination', position: 'preposition', required: false },\n { form: 'ל', role: 'destination', position: 'preposition', required: false },\n { form: 'את', role: 'patient', position: 'preposition', required: false }, // Direct object marker\n { form: 'מ', role: 'source', position: 'preposition', required: false },\n { form: 'מן', role: 'source', position: 'preposition', required: false },\n { form: 'עם', role: 'style', position: 'preposition', required: false },\n { form: 'כ', role: 'method', position: 'preposition', required: false },\n ],\n\n rules: [\n {\n name: 'bind-to',\n description: 'Bind binds a variable to an element: קשור X ל Y',\n priority: 90,\n match: {\n commands: ['bind', 'קשור'],\n requiredRoles: ['action', 'patient', 'destination'],\n },\n transform: {\n // The bound variable is the semantic destination (kept bare, no את\n // object marker), and ל marks the target element. Custom so the\n // variable does not pick up את and the element uses ל (not על).\n roleOrder: ['action', 'patient', 'destination'],\n custom: parsed => {\n const action = parsed.roles.get('action');\n const patient = parsed.roles.get('patient');\n const destination = parsed.roles.get('destination');\n const verb = action?.translated || action?.value || '';\n const v = patient?.translated || patient?.value || '';\n const d = destination?.translated || destination?.value || '';\n return [verb, v, 'ל', d].filter(Boolean).join(' ');\n },\n },\n },\n ],\n};\n\n// =============================================================================\n// Profile Registry\n// =============================================================================\n\nexport const profiles: Record<string, LanguageProfile> = {\n en: englishProfile,\n ja: japaneseProfile,\n ko: koreanProfile,\n zh: chineseProfile,\n ar: arabicProfile,\n tr: turkishProfile,\n es: spanishProfile,\n de: germanProfile,\n fr: frenchProfile,\n pt: portugueseProfile,\n id: indonesianProfile,\n ms: malayProfile,\n qu: quechuaProfile,\n sw: swahiliProfile,\n bn: bengaliProfile,\n // New profiles\n it: italianProfile,\n ru: russianProfile,\n uk: ukrainianProfile,\n vi: vietnameseProfile,\n hi: hindiProfile,\n tl: tagalogProfile,\n th: thaiProfile,\n pl: polishProfile,\n he: hebrewProfile,\n};\n\nexport function getProfile(locale: string): LanguageProfile | undefined {\n return profiles[locale];\n}\n\nexport function getSupportedLocales(): string[] {\n return Object.keys(profiles);\n}\n","/**\n * Direct Language-Pair Mappings\n *\n * Enables translation between language pairs without English pivot.\n * This reduces error compounding and provides more natural translations\n * for closely related languages or those with shared vocabulary.\n *\n * Currently supported pairs:\n * - Japanese ↔ Chinese (shared Kanji concepts)\n * - Spanish ↔ Portuguese (Romance language mutual intelligibility)\n * - Korean ↔ Japanese (SOV grammar similarity)\n */\n\nimport type { Dictionary } from '../types';\nimport { ja } from '../dictionaries/ja';\nimport { zh } from '../dictionaries/zh';\nimport { ko } from '../dictionaries/ko';\n// Note: es and pt use hand-crafted mappings for better quality\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface DirectMapping {\n /** Source language code */\n source: string;\n /** Target language code */\n target: string;\n /** Word mappings: source word -> target word */\n words: Record<string, string>;\n /** Category mappings for structured translation */\n categories?: Record<string, Record<string, string>>;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Create reverse mapping from an existing mapping\n */\nfunction reverseMapping(mapping: DirectMapping): DirectMapping {\n const reversedWords: Record<string, string> = {};\n for (const [source, target] of Object.entries(mapping.words)) {\n reversedWords[target] = source;\n }\n\n const reversedCategories: Record<string, Record<string, string>> = {};\n if (mapping.categories) {\n for (const [category, words] of Object.entries(mapping.categories)) {\n reversedCategories[category] = {};\n for (const [source, target] of Object.entries(words)) {\n reversedCategories[category][target] = source;\n }\n }\n }\n\n const result: DirectMapping = {\n source: mapping.target,\n target: mapping.source,\n words: reversedWords,\n };\n\n if (Object.keys(reversedCategories).length > 0) {\n result.categories = reversedCategories;\n }\n\n return result;\n}\n\n/**\n * Build direct mapping from two dictionaries via English keys\n */\nfunction buildMappingFromDictionaries(\n sourceDict: Dictionary,\n targetDict: Dictionary,\n sourceCode: string,\n targetCode: string\n): DirectMapping {\n const words: Record<string, string> = {};\n const categories: Record<string, Record<string, string>> = {};\n\n // Map each category\n for (const category of [\n 'commands',\n 'modifiers',\n 'events',\n 'logical',\n 'temporal',\n 'values',\n 'attributes',\n ] as const) {\n const sourceCategory = sourceDict[category] as Record<string, string> | undefined;\n const targetCategory = targetDict[category] as Record<string, string> | undefined;\n\n if (sourceCategory && targetCategory) {\n categories[category] = {};\n\n for (const [englishKey, sourceWord] of Object.entries(sourceCategory)) {\n const targetWord = targetCategory[englishKey];\n if (targetWord && sourceWord !== targetWord) {\n words[sourceWord] = targetWord;\n categories[category][sourceWord] = targetWord;\n }\n }\n }\n }\n\n return {\n source: sourceCode,\n target: targetCode,\n words,\n categories,\n };\n}\n\n// =============================================================================\n// Japanese ↔ Chinese Direct Mapping\n// =============================================================================\n\n/**\n * Japanese to Chinese mapping\n *\n * These languages share many concepts through Kanji/Hanzi,\n * making direct translation more accurate than pivot translation.\n */\nexport const jaZhMapping: DirectMapping = buildMappingFromDictionaries(ja, zh, 'ja', 'zh');\n\n/**\n * Chinese to Japanese mapping (reverse of jaZh)\n */\nexport const zhJaMapping: DirectMapping = reverseMapping(jaZhMapping);\n\n// =============================================================================\n// Korean ↔ Japanese Direct Mapping\n// =============================================================================\n\n/**\n * Korean to Japanese mapping\n *\n * Both are SOV languages with postposition particles,\n * sharing grammatical structure that enables more natural translation.\n */\nexport const koJaMapping: DirectMapping = buildMappingFromDictionaries(ko, ja, 'ko', 'ja');\n\n/**\n * Japanese to Korean mapping (reverse of koJa)\n */\nexport const jaKoMapping: DirectMapping = reverseMapping(koJaMapping);\n\n// =============================================================================\n// Spanish ↔ Portuguese Direct Mapping\n// =============================================================================\n\n/**\n * Spanish to Portuguese mapping\n *\n * These Romance languages have high mutual intelligibility,\n * with many cognates that translate directly.\n */\nexport const esPtMapping: DirectMapping = {\n source: 'es',\n target: 'pt',\n words: {\n // Commands - many are cognates\n en: 'em', // on (event)\n decir: 'dizer', // tell\n disparar: 'disparar', // trigger\n enviar: 'enviar', // send\n tomar: 'pegar', // take\n poner: 'colocar', // put\n establecer: 'definir', // set\n obtener: 'obter', // get\n agregar: 'adicionar', // add\n quitar: 'remover', // remove\n alternar: 'alternar', // toggle\n ocultar: 'esconder', // hide\n mostrar: 'mostrar', // show\n si: 'se', // if\n menos: 'a menos', // unless\n repetir: 'repetir', // repeat\n para: 'para', // for\n mientras: 'enquanto', // while\n hasta: 'até', // until\n continuar: 'continuar', // continue\n romper: 'parar', // break\n detener: 'parar', // halt\n esperar: 'esperar', // wait\n buscar: 'buscar', // fetch\n llamar: 'chamar', // call\n retornar: 'retornar', // return\n hacer: 'fazer', // make\n registrar: 'registrar', // log\n lanzar: 'lançar', // throw\n atrapar: 'capturar', // catch\n medir: 'medir', // measure\n transición: 'transição', // transition\n incrementar: 'incrementar', // increment\n decrementar: 'decrementar', // decrement\n predeterminar: 'padrão', // default\n ir: 'ir', // go\n copiar: 'copiar', // copy\n escoger: 'escolher', // pick\n intercambiar: 'trocar', // swap\n transformar: 'transformar', // morph\n añadir: 'anexar', // append\n salir: 'sair', // exit\n\n // Modifiers\n a: 'para', // to\n de: 'de', // from\n dentro: 'em', // into\n con: 'com', // with\n como: 'como', // as\n por: 'por', // by\n\n // Events\n clic: 'clique', // click\n cambio: 'mudança', // change\n entrada: 'entrada', // input\n envío: 'envio', // submit\n carga: 'carregar', // load\n enfoque: 'foco', // focus\n desenfoque: 'desfoque', // blur\n\n // Logical\n verdadero: 'verdadeiro', // true\n falso: 'falso', // false\n y: 'e', // and\n o: 'ou', // or\n no: 'não', // not\n es: 'é', // is\n\n // Temporal\n segundos: 'segundos', // seconds\n milisegundos: 'milissegundos', // milliseconds\n\n // Values\n nulo: 'nulo', // null\n indefinido: 'indefinido', // undefined\n vacío: 'vazio', // empty\n },\n categories: {\n commands: {\n en: 'em',\n decir: 'dizer',\n tomar: 'pegar',\n poner: 'colocar',\n establecer: 'definir',\n obtener: 'obter',\n agregar: 'adicionar',\n quitar: 'remover',\n ocultar: 'esconder',\n si: 'se',\n mientras: 'enquanto',\n hasta: 'até',\n romper: 'parar',\n detener: 'parar',\n llamar: 'chamar',\n hacer: 'fazer',\n lanzar: 'lançar',\n atrapar: 'capturar',\n escoger: 'escolher',\n intercambiar: 'trocar',\n añadir: 'anexar',\n salir: 'sair',\n },\n events: {\n clic: 'clique',\n cambio: 'mudança',\n carga: 'carregar',\n enfoque: 'foco',\n desenfoque: 'desfoque',\n },\n logical: {\n verdadero: 'verdadeiro',\n y: 'e',\n o: 'ou',\n no: 'não',\n es: 'é',\n },\n },\n};\n\n/**\n * Portuguese to Spanish mapping (reverse of esPt)\n */\nexport const ptEsMapping: DirectMapping = reverseMapping(esPtMapping);\n\n// =============================================================================\n// Mapping Registry\n// =============================================================================\n\n/**\n * Registry of direct translation pairs.\n * Key format: \"source->target\" (e.g., \"ja->zh\")\n */\nexport const directMappings: Map<string, DirectMapping> = new Map([\n // Japanese ↔ Chinese\n ['ja->zh', jaZhMapping],\n ['zh->ja', zhJaMapping],\n\n // Korean ↔ Japanese\n ['ko->ja', koJaMapping],\n ['ja->ko', jaKoMapping],\n\n // Spanish ↔ Portuguese\n ['es->pt', esPtMapping],\n ['pt->es', ptEsMapping],\n]);\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Check if direct mapping exists for a language pair\n */\nexport function hasDirectMapping(source: string, target: string): boolean {\n return directMappings.has(`${source}->${target}`);\n}\n\n/**\n * Get direct mapping for a language pair\n */\nexport function getDirectMapping(source: string, target: string): DirectMapping | undefined {\n return directMappings.get(`${source}->${target}`);\n}\n\n/**\n * Translate a single word using direct mapping\n */\nexport function translateWordDirect(\n word: string,\n source: string,\n target: string\n): string | undefined {\n const mapping = getDirectMapping(source, target);\n if (!mapping) return undefined;\n return mapping.words[word];\n}\n\n/**\n * Get all supported direct translation pairs\n */\nexport function getSupportedDirectPairs(): Array<{ source: string; target: string }> {\n return Array.from(directMappings.keys()).map(key => {\n const [source, target] = key.split('->');\n return { source, target };\n });\n}\n","/**\n * Dictionary Index\n *\n * Exports dictionaries for all supported languages.\n * Each dictionary maps English canonical keywords to locale-specific translations\n * across 8 categories: commands, modifiers, events, logical, temporal, values,\n * attributes, and expressions.\n *\n * Derivation utilities (deriveFromProfile, createEnglishDictionary) are available\n * for generating dictionaries from semantic language profiles. See ./derive.ts.\n */\n\nimport { Dictionary } from '../types';\n\n// Import per-language dictionaries\nimport { en as enDict } from './en';\nimport { es as esDict } from './es';\nimport { ko as koDict } from './ko';\nimport { zh as zhDict } from './zh';\nimport { fr as frDict } from './fr';\nimport { de as deDict } from './de';\nimport { ja as jaDict } from './ja';\nimport { ar as arDict } from './ar';\nimport { tr as trDict } from './tr';\nimport { id as idDict } from './id';\nimport { qu as quDict } from './qu';\nimport { sw as swDict } from './sw';\nimport { pt as ptDict } from './pt';\nimport { it as itDict } from './it';\nimport { vi as viDict } from './vi';\nimport { pl as plDict } from './pl';\nimport { russianDictionary as ruDict } from './ru';\nimport { ukrainianDictionary as ukDict } from './uk';\nimport { hindiDictionary as hiDict } from './hi';\nimport { bengaliDictionary as bnDict } from './bn';\nimport { thaiDictionary as thDict } from './th';\nimport { malayDictionary as msDict } from './ms';\nimport { tagalogDictionary as tlDict } from './tl';\nimport { he as heDict } from './he';\n\n// =============================================================================\n// Dictionary Exports\n// =============================================================================\n\n/** English dictionary */\nexport const en: Dictionary = enDict;\n/** Spanish dictionary */\nexport const es: Dictionary = esDict;\n/** Japanese dictionary */\nexport const ja: Dictionary = jaDict;\n/** Korean dictionary */\nexport const ko: Dictionary = koDict;\n/** Chinese dictionary */\nexport const zh: Dictionary = zhDict;\n/** French dictionary */\nexport const fr: Dictionary = frDict;\n/** German dictionary */\nexport const de: Dictionary = deDict;\n/** Arabic dictionary */\nexport const ar: Dictionary = arDict;\n/** Turkish dictionary */\nexport const tr: Dictionary = trDict;\n/** Indonesian dictionary */\nexport const id: Dictionary = idDict;\n/** Portuguese dictionary */\nexport const pt: Dictionary = ptDict;\n/** Quechua dictionary */\nexport const qu: Dictionary = quDict;\n/** Swahili dictionary */\nexport const sw: Dictionary = swDict;\n/** Italian dictionary */\nexport const it: Dictionary = itDict;\n/** Vietnamese dictionary */\nexport const vi: Dictionary = viDict;\n/** Polish dictionary */\nexport const pl: Dictionary = plDict;\n/** Russian dictionary */\nexport const ru: Dictionary = ruDict;\n/** Ukrainian dictionary */\nexport const uk: Dictionary = ukDict;\n/** Hindi dictionary */\nexport const hi: Dictionary = hiDict;\n/** Bengali dictionary */\nexport const bn: Dictionary = bnDict;\n/** Thai dictionary */\nexport const th: Dictionary = thDict;\n/** Malay dictionary */\nexport const ms: Dictionary = msDict;\n/** Tagalog dictionary */\nexport const tl: Dictionary = tlDict;\n/** Hebrew dictionary */\nexport const he: Dictionary = heDict;\n\n// =============================================================================\n// Dictionary Registry\n// =============================================================================\n\n/**\n * All available dictionaries indexed by locale code.\n */\nexport const dictionaries: Record<string, Dictionary> = {\n en,\n es,\n ko,\n zh,\n fr,\n de,\n ja,\n ar,\n tr,\n id,\n qu,\n sw,\n pt,\n it,\n vi,\n pl,\n ru,\n uk,\n hi,\n bn,\n th,\n ms,\n tl,\n he,\n};\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Get all supported locale codes.\n */\nexport const supportedLocales = Object.keys(dictionaries);\n\n/**\n * Check if a locale is supported.\n */\nexport const isLocaleSupported = (locale: string): boolean => {\n return locale in dictionaries;\n};\n\n/**\n * Get dictionary with fallback to another locale.\n */\nexport const getDictionary = (locale: string, fallback: string = 'en'): Dictionary | null => {\n return dictionaries[locale] || dictionaries[fallback] || null;\n};\n\n// =============================================================================\n// Derivation Utilities\n// =============================================================================\n\n/**\n * Re-export derivation utilities for generating dictionaries from semantic profiles.\n */\nexport { deriveFromProfile, createEnglishDictionary, validateDictionary } from './derive';\n","// packages/i18n/src/types.ts\n\n/**\n * Dictionary category names as a union type for type-safe access.\n */\nexport type DictionaryCategory =\n | 'commands'\n | 'modifiers'\n | 'events'\n | 'logical'\n | 'temporal'\n | 'values'\n | 'attributes'\n | 'expressions';\n\n/**\n * All valid dictionary categories.\n */\nexport const DICTIONARY_CATEGORIES: readonly DictionaryCategory[] = [\n 'commands',\n 'modifiers',\n 'events',\n 'logical',\n 'temporal',\n 'values',\n 'attributes',\n 'expressions',\n] as const;\n\n/**\n * Dictionary structure for i18n translations.\n * Maps English canonical keywords to locale-specific translations.\n *\n * Note: Index signature removed for stricter type safety.\n * Use DICTIONARY_CATEGORIES to iterate over categories.\n */\nexport interface Dictionary {\n commands: Record<string, string>;\n modifiers: Record<string, string>;\n events: Record<string, string>;\n logical: Record<string, string>;\n temporal: Record<string, string>;\n values: Record<string, string>;\n attributes: Record<string, string>;\n expressions: Record<string, string>;\n}\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\n/**\n * Type guard to check if a string is a valid dictionary category.\n */\nexport function isDictionaryCategory(key: string): key is DictionaryCategory {\n return DICTIONARY_CATEGORIES.includes(key as DictionaryCategory);\n}\n\n/**\n * Safely get a category from a dictionary with type narrowing.\n * Returns undefined if the category doesn't exist.\n */\nexport function getDictionaryCategory(\n dict: Dictionary,\n category: string\n): Record<string, string> | undefined {\n if (isDictionaryCategory(category)) {\n return dict[category];\n }\n return undefined;\n}\n\n/**\n * Iterate over all categories in a dictionary with proper typing.\n */\nexport function forEachCategory(\n dict: Dictionary,\n callback: (category: DictionaryCategory, entries: Record<string, string>) => void\n): void {\n for (const category of DICTIONARY_CATEGORIES) {\n callback(category, dict[category]);\n }\n}\n\n/**\n * Find a translation in any category of a dictionary.\n * Returns the English key if found, undefined otherwise.\n */\nexport function findInDictionary(\n dict: Dictionary,\n localizedWord: string\n): { category: DictionaryCategory; englishKey: string } | undefined {\n const normalized = localizedWord.toLowerCase();\n for (const category of DICTIONARY_CATEGORIES) {\n const entries = dict[category];\n for (const [english, localized] of Object.entries(entries)) {\n if (localized.toLowerCase() === normalized) {\n return { category, englishKey: english };\n }\n }\n }\n return undefined;\n}\n\n/**\n * Find a translation for an English word in any category.\n * Returns the localized word if found, undefined otherwise.\n */\nexport function translateFromEnglish(dict: Dictionary, englishWord: string): string | undefined {\n const normalized = englishWord.toLowerCase();\n for (const category of DICTIONARY_CATEGORIES) {\n const entries = dict[category];\n const translated = entries[normalized];\n if (translated) {\n return translated;\n }\n }\n return undefined;\n}\n\nexport interface I18nConfig {\n locale: string;\n fallbackLocale?: string;\n dictionaries?: Record<string, Dictionary>;\n detectLocale?: boolean;\n rtlLocales?: string[];\n preserveOriginalAttribute?: string;\n}\n\nexport interface TranslationOptions {\n from?: string;\n to: string;\n preserveOriginal?: boolean;\n validate?: boolean;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n coverage: {\n total: number;\n translated: number;\n missing: string[];\n };\n}\n\nexport interface ValidationError {\n type: 'missing' | 'invalid' | 'duplicate';\n key: string;\n message: string;\n}\n\nexport interface ValidationWarning {\n type: 'unused' | 'deprecated' | 'inconsistent';\n key: string;\n message: string;\n}\n\nexport interface LocaleMetadata {\n code: string;\n name: string;\n nativeName: string;\n rtl: boolean;\n pluralRules?: (n: number) => string;\n}\n\nexport interface TranslationContext {\n locale: string;\n direction: 'ltr' | 'rtl';\n dictionary: Dictionary;\n metadata: LocaleMetadata;\n}\n\nexport type TokenType =\n | 'command'\n | 'modifier'\n | 'event'\n | 'logical'\n | 'temporal'\n | 'value'\n | 'attribute'\n | 'expression'\n | 'identifier'\n | 'operator'\n | 'literal';\n\nexport interface Token {\n type: TokenType;\n value: string;\n translated?: string;\n position: {\n start: number;\n end: number;\n line: number;\n column: number;\n };\n}\n\nexport interface TranslationResult {\n translated: string;\n original?: string;\n tokens: Token[];\n locale: {\n from: string;\n to: string;\n };\n warnings?: string[];\n}\n","/**\n * Grammar-Aware Transformer\n *\n * Transforms hyperscript statements between languages using the\n * generalized grammar system. The key insight is that semantic\n * roles are universal - only their surface realization differs.\n */\n\nimport type {\n LanguageProfile,\n ParsedStatement,\n ParsedElement,\n SemanticRole,\n GrammarRule,\n LineMetadata,\n} from './types';\nimport { reorderRoles, insertMarkers, joinTokens } from './types';\nimport { getProfile, profiles } from './profiles';\nimport { hasDirectMapping, getDirectMapping } from './direct-mappings';\nimport { dictionaries } from '../dictionaries';\nimport { findInDictionary, translateFromEnglish } from '../types';\nimport {\n ENGLISH_MODIFIER_ROLES,\n ENGLISH_COMMANDS,\n COMMAND_PRIMARY_ROLES,\n CONDITIONAL_KEYWORDS,\n THEN_KEYWORDS,\n} from '../constants';\n\n// =============================================================================\n// Compound Statement Handling\n// =============================================================================\n\n/**\n * Get all command keywords including translated ones for a locale.\n */\nfunction getCommandKeywordsForLocale(locale: string): Set<string> {\n const keywords = new Set(ENGLISH_COMMANDS);\n\n // Add translated command keywords from dictionaries\n const dict = dictionaries[locale];\n if (dict?.commands) {\n Object.values(dict.commands).forEach(cmd => {\n if (typeof cmd === 'string') {\n keywords.add(cmd.toLowerCase());\n }\n });\n }\n\n return keywords;\n}\n\n/**\n * English copula forms. A command keyword IMMEDIATELY after one of these is a\n * predicate adjective, not a command verb: in `if my value is empty add .error\n * to me` the `empty` belongs to the condition (`empty` is also a hyperscript\n * command, v0.9.90). Without this guard the condition/body scans cut the\n * condition at `is` and displace the adjective into the body's argument zone,\n * where it anchors a spurious `empty-{lang}-generated` parse AND steals a\n * neighboring role (the empty ×8 bn/hi/tr family). Source-locale copulas are\n * added via the dictionary in `isPredicateAdjectivePosition`.\n */\nconst EN_COPULAS = ['is', 'are', 'was', 'were', 'am', 'be'];\n\nfunction getCopulasForLocale(locale: string): Set<string> {\n const copulas = new Set(EN_COPULAS);\n if (locale !== 'en') {\n for (const form of EN_COPULAS) {\n copulas.add(translateWord(form, 'en', locale).toLowerCase());\n }\n }\n return copulas;\n}\n\n/**\n * True when tokens[i] sits right after a copula — a predicate-adjective\n * position that must never be read as the start of a body command.\n */\nfunction isPredicateAdjectivePosition(tokens: string[], i: number, copulas: Set<string>): boolean {\n const prev = tokens[i - 1]?.toLowerCase();\n return !!prev && copulas.has(prev);\n}\n\n/**\n * Source-locale surface forms of the `for` command keyword and the loop's\n * `in` preposition, for the loop-head test below.\n */\nfunction getForLoopWordsForLocale(locale: string): { forWords: Set<string>; inWords: Set<string> } {\n const forWords = new Set(['for']);\n const inWords = new Set(['in']);\n if (locale !== 'en') {\n forWords.add(translateWord('for', 'en', locale).toLowerCase());\n inWords.add(translateWord('in', 'en', locale).toLowerCase());\n }\n return { forWords, inWords };\n}\n\n/**\n * True when a `for` at tokens[i] heads a real loop. Hyperscript's only\n * statement-head `for` is `for <var> in <iterable>`, so a `for` with no `in`\n * among the tokens before the next command keyword is a ROLE PHRASE — take's\n * target (`take .active from .tab-button for me`) or a duration (`for 2s`) —\n * and must never split the statement: the split shattered the phrase into a\n * dangling `then for me` clause, which six SOV languages then parsed as a\n * spurious `for` loop with patient \"me\" (the take-class ×6 family).\n */\nfunction isLoopHeadFor(\n tokens: string[],\n i: number,\n inWords: Set<string>,\n commandKeywords: Set<string>\n): boolean {\n for (let j = i + 1; j < tokens.length; j++) {\n const lt = tokens[j].toLowerCase();\n if (inWords.has(lt)) return true;\n if (commandKeywords.has(lt)) return false;\n }\n return false;\n}\n\n/**\n * Repair a FRONTED Hebrew accusative marker in transformed output.\n *\n * When an event-handler body leads with a command-modifier (`on click once add …`,\n * via {@link GrammarTransformer.tryTransformEventWithModifierBody}) or is a control\n * block (`on blur if … add … end`, via `tryTransformEventWithBlockBody`), the body\n * command's accusative marker את can be emitted AHEAD of its verb — `add .error to me`\n * renders `… את הוסף .error …` instead of the canonical `… הוסף את .error …`. את before\n * a verb is always ungrammatical Hebrew (it only ever marks a FOLLOWING definite\n * object), and the semantic parser drops the command in every parse path (fused-event,\n * multi-clause, conditional-body) when the marker is fronted but parses it when the\n * marker follows the verb. So an `<accusative-marker> <command-verb>` adjacency is a\n * pure transformer artifact: swap it back. Idempotent and safe — only touches `את\n * <verb>`, never the ~40 generated `<verb> את {patient}` patterns that embed את legitimately.\n */\nfunction repairHebrewFrontedAccusative(text: string): string {\n const ACC = 'את'; // hebrewProfile.markers patient marker\n const verbs = getCommandKeywordsForLocale('he');\n const tokens = text.split(/\\s+/);\n let changed = false;\n for (let i = 0; i + 1 < tokens.length; i++) {\n if (tokens[i] === ACC && verbs.has(tokens[i + 1].toLowerCase())) {\n [tokens[i], tokens[i + 1]] = [tokens[i + 1], tokens[i]];\n changed = true;\n i++; // skip the marker we just moved\n }\n }\n return changed ? tokens.join(' ') : text;\n}\n\n/**\n * Split a compound statement into parts at \"then\" boundaries, newlines,\n * AND command keyword boundaries.\n *\n * Example: \"on click wait 1s then increment #count then toggle .active\"\n * Returns: [\"on click wait 1s\", \"increment #count\", \"toggle .active\"]\n *\n * Example: \"on click\\n increment #count\\n toggle .highlight\"\n * Returns: [\"on click\", \"increment #count\", \"toggle .highlight\"]\n *\n * Example: \"wait 2s toggle .highlight\"\n * Returns: [\"wait 2s\", \"toggle .highlight\"]\n */\n/**\n * A reactive-block structure pulled apart by `extractBlockStructure`.\n * Block-syntactic tokens (head, optional condition expression, optional\n * connector, optional `end` tail) live outside the inner body so the\n * body can be transformed by the regular pipeline (SOV reordering,\n * possessives, etc.) without having block delimiters dragged into role\n * values or moved by the canonical-order reorder.\n */\ninterface BlockStructure {\n headKeyword: string;\n /** Condition expression for `when X changes Y` / `unless X Y`. */\n prefixExpr?: string;\n /** `changes` for `when`; undefined for `live`/`unless`. */\n connector?: string;\n body: string;\n /** `end` if the source had one; undefined otherwise. */\n tailKeyword?: string;\n}\n\n/**\n * Detect a reactive block (`live ... end`, `when X changes Y [end]`,\n * `unless X Y [end]`) and decompose it. Returns `null` when the input\n * is not a reactive block, when there's content after the matched\n * `end`, or when the heuristic can't locate a body — all of which fall\n * through to the standard `parseStatement` path.\n */\nfunction extractBlockStructure(input: string, sourceLocale: string): BlockStructure | null {\n const tokens = input.split(/\\s+/);\n const head = tokens[0]?.toLowerCase();\n if (!head || !BLOCK_HEAD_KEYWORDS.has(head)) return null;\n\n // Depth-aware match for the closing `end` so nested blocks\n // (`live when X changes Y end end`) slice correctly.\n let depth = 1;\n let endIdx = -1;\n for (let i = 1; i < tokens.length; i++) {\n const t = tokens[i].toLowerCase();\n if (BLOCK_HEAD_KEYWORDS.has(t)) depth++;\n else if (t === 'end') {\n depth--;\n if (depth === 0) {\n endIdx = i;\n break;\n }\n }\n }\n\n // If there's trailing content after the matched `end`, bail out and\n // let the existing splitter handle it. (`splitOnThen` normally\n // separates trailing code before we get here.)\n if (endIdx !== -1 && endIdx !== tokens.length - 1) return null;\n\n const inner = endIdx !== -1 ? tokens.slice(1, endIdx) : tokens.slice(1);\n const base: BlockStructure = { headKeyword: tokens[0], body: '' };\n if (endIdx !== -1) base.tailKeyword = tokens[endIdx];\n\n if (head === 'live') {\n return { ...base, body: inner.join(' ') };\n }\n\n if (head === 'when') {\n // Reactive: `when <expr> changes <body>`. Without `changes`, fall\n // through to the standard event-wait path (parseConditional).\n const idx = inner.findIndex(t => t.toLowerCase() === 'changes');\n if (idx >= 0) {\n return {\n ...base,\n prefixExpr: inner.slice(0, idx).join(' '),\n connector: inner[idx],\n body: inner.slice(idx + 1).join(' '),\n };\n }\n return null;\n }\n\n // `unless <cond> <body>`: condition runs up to the first command\n // keyword in `inner`. Heuristic — works because hyperscript bodies\n // always start with a command verb, and `unless` conditions rarely\n // contain bare command keywords as values. A candidate right after a\n // copula (`… is empty`) is a predicate adjective inside the condition,\n // not a body verb — skip it.\n const commands = getCommandKeywordsForLocale(sourceLocale);\n const copulas = getCopulasForLocale(sourceLocale);\n let bodyStart = -1;\n for (let i = 0; i < inner.length; i++) {\n if (commands.has(inner[i].toLowerCase()) && !isPredicateAdjectivePosition(inner, i, copulas)) {\n bodyStart = i;\n break;\n }\n }\n if (bodyStart <= 0) return null;\n return {\n ...base,\n prefixExpr: inner.slice(0, bodyStart).join(' '),\n body: inner.slice(bodyStart).join(' '),\n };\n}\n\nfunction splitCompoundStatement(input: string, sourceLocale: string): string[] {\n // First, split on newlines (preserving non-empty lines)\n const lines = input\n .split(/\\n/)\n .map(line => line.trim())\n .filter(line => line.length > 0);\n\n // If we have multiple lines, treat each as a separate part\n // (but still need to handle \"then\" within each line)\n const parts: string[] = [];\n\n for (const line of lines) {\n const lineParts = splitOnThen(line, sourceLocale);\n // Further split each part on command boundaries\n for (const part of lineParts) {\n const commandParts = splitOnCommandBoundaries(part, sourceLocale);\n parts.push(...commandParts);\n }\n }\n\n return parts;\n}\n\n// =============================================================================\n// Line Structure Preservation\n// =============================================================================\n\n/**\n * Result of splitting with preserved line metadata.\n */\ninterface SplitWithMetadataResult {\n /** The processed parts (commands/statements) */\n parts: string[];\n /** Metadata for each original line (for reconstruction) */\n lineMetadata: LineMetadata[];\n /** Mapping from parts back to their original line indices */\n partToLineIndex: number[];\n}\n\n/**\n * Split a compound statement while preserving line structure metadata.\n * This tracks indentation and blank lines for reconstruction.\n */\nfunction splitCompoundStatementWithMetadata(\n input: string,\n sourceLocale: string\n): SplitWithMetadataResult {\n const rawLines = input.split('\\n');\n const lineMetadata: LineMetadata[] = [];\n const parts: string[] = [];\n const partToLineIndex: number[] = [];\n\n for (let lineIndex = 0; lineIndex < rawLines.length; lineIndex++) {\n const rawLine = rawLines[lineIndex];\n\n // Capture leading whitespace\n const indentMatch = rawLine.match(/^(\\s*)/);\n const originalIndent = indentMatch ? indentMatch[1] : '';\n const trimmed = rawLine.trim();\n\n lineMetadata.push({\n content: trimmed,\n originalIndent,\n isBlank: trimmed.length === 0,\n });\n\n if (trimmed.length > 0) {\n // Process non-empty lines for \"then\" and command boundaries\n const lineParts = splitOnThen(trimmed, sourceLocale);\n for (const part of lineParts) {\n const commandParts = splitOnCommandBoundaries(part, sourceLocale);\n for (const cmdPart of commandParts) {\n parts.push(cmdPart);\n partToLineIndex.push(lineIndex);\n }\n }\n }\n }\n\n return { parts, lineMetadata, partToLineIndex };\n}\n\n/**\n * Normalize indentation to consistent 4-space levels.\n * Preserves relative indentation structure while standardizing spacing.\n */\nfunction normalizeIndentation(lineMetadata: LineMetadata[]): string[] {\n // Find non-blank lines with indentation\n const indentedLines = lineMetadata.filter(m => !m.isBlank && m.originalIndent.length > 0);\n\n if (indentedLines.length === 0) {\n // No indented lines, return empty strings\n return lineMetadata.map(() => '');\n }\n\n // Find minimum non-zero indent (the base unit)\n const indentLengths = indentedLines.map(m => {\n // Convert tabs to 4 spaces for consistent measurement\n const normalized = m.originalIndent.replace(/\\t/g, ' ');\n return normalized.length;\n });\n const minIndent = Math.min(...indentLengths);\n const baseUnit = minIndent > 0 ? minIndent : 4;\n\n // Normalize each line's indentation\n return lineMetadata.map(meta => {\n if (meta.isBlank) {\n return ''; // Blank lines get no indentation\n }\n if (meta.originalIndent.length === 0) {\n return ''; // No original indent\n }\n\n // Convert tabs and calculate level\n const normalized = meta.originalIndent.replace(/\\t/g, ' ');\n const level = Math.round(normalized.length / baseUnit);\n return ' '.repeat(level); // 4 spaces per level\n });\n}\n\n/**\n * Reconstruct output with preserved line structure.\n * Maps transformed parts back to their original lines with proper indentation.\n */\nfunction reconstructWithLineStructure(\n transformedParts: string[],\n lineMetadata: LineMetadata[],\n partToLineIndex: number[],\n targetThen: string\n): string {\n // If there's only one non-blank line, simple case\n const nonBlankCount = lineMetadata.filter(m => !m.isBlank).length;\n if (nonBlankCount <= 1 && transformedParts.length <= 1) {\n const normalizedIndents = normalizeIndentation(lineMetadata);\n const result: string[] = [];\n\n for (let i = 0; i < lineMetadata.length; i++) {\n if (lineMetadata[i].isBlank) {\n result.push('');\n } else if (transformedParts.length > 0) {\n result.push(normalizedIndents[i] + transformedParts[0]);\n }\n }\n return result.join('\\n');\n }\n\n // Normalize indentation\n const normalizedIndents = normalizeIndentation(lineMetadata);\n\n // Group transformed parts by their original line\n const partsPerLine: Map<number, string[]> = new Map();\n for (let i = 0; i < transformedParts.length; i++) {\n const lineIdx = partToLineIndex[i];\n if (!partsPerLine.has(lineIdx)) {\n partsPerLine.set(lineIdx, []);\n }\n partsPerLine.get(lineIdx)!.push(transformedParts[i]);\n }\n\n // Build result lines\n const result: string[] = [];\n for (let i = 0; i < lineMetadata.length; i++) {\n const meta = lineMetadata[i];\n const indent = normalizedIndents[i];\n\n if (meta.isBlank) {\n result.push('');\n } else {\n const lineParts = partsPerLine.get(i) || [];\n if (lineParts.length > 0) {\n // Join multiple parts on same line with \"then\"\n const lineContent = lineParts.join(` ${targetThen} `);\n result.push(indent + lineContent);\n }\n }\n }\n\n return result.join('\\n');\n}\n\n/**\n * Split a statement on command keyword boundaries.\n * E.g., \"wait 2s toggle .highlight\" → [\"wait 2s\", \"toggle .highlight\"]\n *\n * Special cases:\n * - \"on <event> <command>\" stays together (event handler with first command)\n * - Modifiers like \"to\", \"from\" don't trigger splits\n */\n/**\n * English modifier keywords that should not trigger command boundary splits.\n * These are the base set; localized equivalents (e.g. Japanese `に`, Spanish\n * `a`, Arabic `إلى`) are layered on per source locale by\n * `getBoundaryModifiersForLocale`, so a preposition in a non-English source\n * is also recognized as a modifier rather than a spurious command boundary.\n */\nconst BOUNDARY_MODIFIERS = new Set([\n 'to',\n 'into',\n 'from',\n 'with',\n 'by',\n 'as',\n 'at',\n 'in',\n 'on',\n 'of',\n 'over',\n]);\n\n/**\n * Boundary modifiers resolved for a given source locale: the English base set\n * (always kept, since input may mix English keywords) plus every grammatical\n * marker form declared by the locale's profile. Profile markers are the\n * surface realizations of semantic roles (destination, source, style, …) —\n * they always bind to a following value, so none should be treated as a\n * command boundary. Cached per locale because profiles are static.\n */\nconst boundaryModifiersCache = new Map<string, Set<string>>();\n\nfunction getBoundaryModifiersForLocale(locale: string): Set<string> {\n const cached = boundaryModifiersCache.get(locale);\n if (cached) return cached;\n\n const modifiers = new Set(BOUNDARY_MODIFIERS);\n\n const profile = getProfile(locale);\n profile?.markers.forEach(marker => {\n const form = marker.form.replace(/^-|-$/g, '').toLowerCase();\n if (form) modifiers.add(form);\n\n marker.alternatives?.forEach(alt => {\n const altForm = alt.replace(/^-|-$/g, '').toLowerCase();\n if (altForm) modifiers.add(altForm);\n });\n });\n\n boundaryModifiersCache.set(locale, modifiers);\n return modifiers;\n}\n\n/**\n * Commands for which a trailing `on <element>` is the TARGET the command acts\n * on (a destination), not a new event-handler clause. For these, the locative\n * `on` must neither split the statement (`splitOnCommandBoundaries`) nor be read\n * as a fresh `event` role (`buildArgumentModifierMap`) — see those call sites.\n *\n * Deliberately narrow. `on` is overloaded (event-handler head vs. locative\n * target), and the change has cross-language blast radius, so we only enable\n * the locative reading for the DOM class/attribute mutators where it's the\n * documented idiom (`toggle .open on #menu`, `toggle @hidden on #panel`).\n *\n * `trigger`/`send` — `trigger X on Y` / `send X on Y` fire an event on a target\n * element; the trailing `on Y` is that target (destination), not a new clause.\n * Previously excluded: keeping `on Y` attached produced `trigger X → #y` output\n * that was thought to destabilise the semantic parser's multi-line behaviour\n * fallback (behavior-sortable's `trigger sortable:start on me`). That concern is\n * stale — the recent semantic-parser body increments fold the surrounding block\n * cleanly, and splitting instead injected a spurious `then` (`disparar\n * sortable:start entonces en yo`) that glued the following `repeat until event`\n * loop into a then-chain and dropped it. Keeping `on Y` attached restores\n * behavior-sortable to faithful across the SVO languages.\n *\n * Excluded on purpose:\n * - `set` — `set @attr to V on Y` carries BOTH `to` (value) and `on` (target);\n * English marks both as `destination`, so remapping `on` would collide with\n * and clobber the value. Needs distinct value/target roles first (deferred).\n * - `put` — `put X on Y into Z` has the same dual-destination collision.\n *\n * `add`/`remove` use `to`/`from` for their target in practice (not `on`), so\n * their inclusion is a harmless no-op that documents intent.\n */\nconst ON_TARGET_COMMANDS = new Set(['toggle', 'add', 'remove', 'trigger', 'send']);\n\n/**\n * Find the command verb of a partially-collected statement: the first command\n * keyword that is neither the event-handler head (`on`/その他 event markers) nor\n * an argument-introducing preposition. For `on click toggle .open` → `toggle`;\n * for `trigger sortable:start` → `trigger`.\n */\nfunction commandVerbOf(tokens: string[], commandKeywords: Set<string>): string | null {\n for (const token of tokens) {\n const lt = token.toLowerCase();\n if (commandKeywords.has(lt) && !BOUNDARY_MODIFIERS.has(lt) && !EVENT_KEYWORDS.has(lt)) {\n return lt;\n }\n }\n return null;\n}\n\n/**\n * Block-introducing keywords whose body should not be split at command\n * boundaries by `splitOnCommandBoundaries`. Inputs starting with one of\n * these are also routed around `parseStatement` entirely by\n * `extractBlockStructure` + `transformBlock` so block-syntactic tokens\n * never reach `parseCommand`/`parseConditional` (where they'd be\n * misinterpreted as command verbs or swept into role values).\n *\n * `if` deliberately stays out: `if X then Y end` already works via the\n * `splitOnThen` + `parseConditional` path.\n */\nconst BLOCK_HEAD_KEYWORDS = new Set(['live', 'when', 'unless']);\n\n/**\n * Source-language block-introducing command keywords whose body is a clause plus a\n * branch/loop body (harness source is English, so these are English-keyed). Used to\n * locate a block body inside an event handler and to track block depth when finding\n * a top-level `else`.\n */\nconst BLOCK_BODY_KEYWORDS = new Set(['if', 'repeat', 'unless', 'while', 'for']);\n\n/**\n * SVO targets that mark the object/patient with a particle (he את, zh 把) and so\n * mangle an inline `on <event> unless <cond> <body>` guard — the unless tail is\n * swept into one patient blob and the marker lands ahead of the condition. These\n * route through `tryTransformEventWithUnlessGuard`. SOV/VSO object-markers\n * (ja/ko/tr/ar) are excluded: their event does not lead, so the SVO event-first\n * emission there would be wrong (and they don't exhibit the artifact today).\n */\nconst UNLESS_GUARD_OBJECT_MARKING_LOCALES = new Set(['he', 'zh']);\n\nfunction splitOnCommandBoundaries(input: string, sourceLocale: string): string[] {\n const commandKeywords = getCommandKeywordsForLocale(sourceLocale);\n const boundaryModifiers = getBoundaryModifiersForLocale(sourceLocale);\n const { forWords, inWords } = getForLoopWordsForLocale(sourceLocale);\n const tokens = input.split(/\\s+/);\n\n if (tokens.length === 0) return [input];\n\n const parts: string[] = [];\n let currentPart: string[] = [];\n\n // Check if this starts with an event handler pattern (on/em/en/bei/で + event)\n const firstTokenLower = tokens[0]?.toLowerCase();\n const isEventHandler = EVENT_KEYWORDS.has(firstTokenLower);\n\n // If it's an event handler, the first command after the event is part of the handler\n // So we need to track whether we've seen the first command yet\n let seenFirstCommand = !isEventHandler; // If not event handler, we're already past the \"first command\" phase\n\n // Track block-scope depth (live/when/bind/if/unless/for/while/...). While\n // inside a block, do not split on command boundaries — the body belongs\n // to the block head and must transform as one unit. See comments on\n // BLOCK_HEAD_KEYWORDS for the failure mode this prevents.\n let blockDepth = 0;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const lowerToken = token.toLowerCase();\n\n // Update block-scope depth before any split decision.\n if (BLOCK_HEAD_KEYWORDS.has(lowerToken)) {\n blockDepth++;\n } else if (lowerToken === 'end' && blockDepth > 0) {\n blockDepth--;\n }\n\n // If this is a command keyword and we already have tokens in current part\n if (commandKeywords.has(lowerToken) && currentPart.length > 0) {\n // Check if the previous token looks like it could end a command\n const prevToken = currentPart[currentPart.length - 1];\n const prevLower = prevToken.toLowerCase();\n\n // For event handlers: don't split before the first command\n // E.g., \"on click wait 1s\" should stay together\n if (!seenFirstCommand) {\n // Mark that we've now seen the first command\n seenFirstCommand = true;\n currentPart.push(token);\n continue;\n }\n\n // Don't split inside a block (live/when/bind/unless body, etc.).\n // The block head and its body must transform as one statement.\n if (blockDepth > 0) {\n currentPart.push(token);\n continue;\n }\n\n // A `for` that doesn't head a real loop (`for <var> in <iterable>`) is a\n // role phrase of the current command — see isLoopHeadFor.\n if (forWords.has(lowerToken) && !isLoopHeadFor(tokens, i, inWords, commandKeywords)) {\n currentPart.push(token);\n continue;\n }\n\n // Locative `on` for a DOM-target command (`toggle X on Y`) is the target\n // element, NOT a new command. `on` lands in `commandKeywords` only\n // incidentally — the EN dictionary registers `commands.on = 'on'` for the\n // event-handler head — so without this guard the destination `on` split\n // the statement, the join re-inserted a spurious `then` (ثم/pagkatapos/…),\n // and the dangling `on Y` was misread as a second event handler. Keep it\n // attached so the role parser can assign it to `destination`. Restricted\n // to ON_TARGET_COMMANDS so `trigger X on me` etc. keep their prior split.\n if (BOUNDARY_MODIFIERS.has(lowerToken)) {\n const verb = commandVerbOf(currentPart, commandKeywords);\n if (verb && ON_TARGET_COMMANDS.has(verb)) {\n currentPart.push(token);\n continue;\n }\n // `set @attr to V on <scope>` (S1 tabs-aria): the trailing `on <scope>`\n // is the element(s) the attribute is set on, not a new command. `set` is\n // deliberately NOT in ON_TARGET_COMMANDS (its role parser would clobber\n // the value), so this is a dedicated guard — kept attached only when a\n // selector/reference scope follows, then positioned by transformSingle's\n // set-scope handler (transformSetWithScope). A `set` whose `on` is\n // followed by a verb is left to split as before.\n if (lowerToken === 'on' && verb === 'set') {\n const nextTok = tokens[i + 1];\n const nextLower = nextTok?.toLowerCase();\n const scopeLike =\n !!nextTok &&\n (/^[#.<@[]/.test(nextTok) ||\n nextLower === 'me' ||\n nextLower === 'it' ||\n nextLower === 'you');\n if (scopeLike) {\n currentPart.push(token);\n continue;\n }\n }\n }\n\n if (!boundaryModifiers.has(prevLower) && !commandKeywords.has(prevLower)) {\n // This looks like a command boundary - save current part and start new one\n parts.push(currentPart.join(' '));\n currentPart = [token];\n continue;\n }\n }\n\n currentPart.push(token);\n }\n\n // Add the last part\n if (currentPart.length > 0) {\n parts.push(currentPart.join(' '));\n }\n\n return parts.filter(p => p.length > 0);\n}\n\n/**\n * Split a single line on \"then\" keywords.\n */\nfunction splitOnThen(input: string, sourceLocale: string): string[] {\n // Build regex pattern from all known \"then\" keywords\n const thenKeywords = Array.from(THEN_KEYWORDS);\n\n // Add any dictionary-specific \"then\" keyword for the source locale\n const sourceDict = sourceLocale === 'en' ? null : dictionaries[sourceLocale];\n if (sourceDict?.modifiers?.then) {\n thenKeywords.push(sourceDict.modifiers.then);\n }\n // Also check logical.then since some dictionaries put it there\n if ((sourceDict?.logical as Record<string, string>)?.then) {\n thenKeywords.push((sourceDict?.logical as Record<string, string>).then);\n }\n\n // Create a regex that matches any \"then\" keyword as a whole word\n // Use word boundaries to avoid matching \"then\" inside other words\n const escapedKeywords = thenKeywords.map(k => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n const pattern = new RegExp(`\\\\s+(${escapedKeywords.join('|')})\\\\s+`, 'gi');\n\n // Split on \"then\" keywords\n const parts = input.split(pattern).filter(part => {\n // Filter out the \"then\" keywords themselves (captured by the group)\n const lowerPart = part.toLowerCase().trim();\n return lowerPart && !thenKeywords.some(k => k.toLowerCase() === lowerPart);\n });\n\n return parts.map(p => p.trim()).filter(p => p.length > 0);\n}\n\n/**\n * Get the \"then\" keyword in the target language.\n * Checks both modifiers and logical sections since dictionaries vary.\n */\nfunction getTargetThenKeyword(targetLocale: string): string {\n if (targetLocale === 'en') return 'then';\n\n const targetDict = dictionaries[targetLocale];\n if (!targetDict) return 'then';\n\n // Check modifiers first, then logical (dictionaries vary)\n return (\n targetDict.modifiers?.then || (targetDict.logical as Record<string, string>)?.then || 'then'\n );\n}\n\n// =============================================================================\n// Derived Constants from Profiles\n// =============================================================================\n\n/**\n * Derive event keywords from all language profiles.\n * This replaces the hardcoded eventKeywords array.\n */\nfunction deriveEventKeywordsFromProfiles(): Set<string> {\n const keywords = new Set<string>();\n\n // Add 'on' as the English default\n keywords.add('on');\n\n // Extract event markers from all profiles\n for (const profile of Object.values(profiles)) {\n for (const marker of profile.markers) {\n if (marker.role === 'event') {\n // Strip hyphen notation and add\n const form = marker.form.replace(/^-|-$/g, '').toLowerCase();\n if (form) keywords.add(form);\n\n // Add alternatives\n marker.alternatives?.forEach(alt => {\n const altForm = alt.replace(/^-|-$/g, '').toLowerCase();\n if (altForm) keywords.add(altForm);\n });\n }\n }\n }\n\n return keywords;\n}\n\n/** Event keywords derived from language profiles */\nconst EVENT_KEYWORDS = deriveEventKeywordsFromProfiles();\n\n/**\n * Conjunctions that join multiple events in an event handler head\n * (`on click or keypress ...`). Source hyperscript is English, so the\n * canonical form is `or`; localized equivalents are added defensively for\n * non-English sources.\n */\nconst EVENT_CONJUNCTIONS = new Set(['or']);\n\n/**\n * Command-modifier keywords that may lead an event handler body\n * (`on click async fetch …`, `on click once add …`). They modify the handler /\n * following command rather than acting as the verb, so the transformer must lift\n * them out before role assignment instead of treating them as the action.\n * Source hyperscript is English, so these are the canonical English forms — the\n * semantic parser recognizes the same literals when stripping them pre-parse.\n */\nconst BODY_MODIFIER_KEYWORDS = new Set([\n 'async',\n 'once',\n 'debounced',\n 'debounce',\n 'throttled',\n 'throttle',\n]);\n\n// =============================================================================\n// Helper: Dynamic Modifier Map\n// =============================================================================\n\n/**\n * Generates a lookup map for semantic roles based on the language profile.\n * Maps markers (e.g., 'to', 'に', 'into', 'إلى') to their semantic roles.\n * This enables parsing non-English input by using the profile's markers.\n */\nfunction generateModifierMap(profile: LanguageProfile): Record<string, SemanticRole> {\n const map: Record<string, SemanticRole> = {};\n\n // Map markers to roles from the profile\n profile.markers.forEach(marker => {\n // Strip hyphen notation for suffix/prefix markers\n const form = marker.form.replace(/^-|-$/g, '').toLowerCase();\n if (form) {\n map[form] = marker.role;\n }\n\n // Map alternatives if they exist (e.g., Korean vowel harmony variants)\n marker.alternatives?.forEach(alt => {\n const altForm = alt.replace(/^-|-$/g, '').toLowerCase();\n if (altForm) {\n map[altForm] = marker.role;\n }\n });\n });\n\n // Add English modifiers as fallback (don't override profile-specific markers)\n for (const [key, role] of Object.entries(ENGLISH_MODIFIER_ROLES)) {\n if (!(key in map)) {\n map[key] = role;\n }\n }\n\n return map;\n}\n\n/**\n * Modifier map for parsing the ARGUMENTS of a statement (everything after the\n * command verb), as opposed to the statement head.\n *\n * Why a separate map: a few languages reuse one word for both the event-handler\n * head marker and a locative/target preposition. English is the prime case —\n * `on` is the event head (`on click …`) AND the toggle/set target preposition\n * (`toggle .x on #y`). `generateModifierMap` maps `on → event` (from the EN\n * profile's event marker), so when the destination `on` was read in argument\n * position it overwrote the already-captured head event (the `click` got\n * dropped, e.g. `toggle @hidden on #panel` → `… عند #panel` with نقر/click gone).\n *\n * The fix: in argument position, remap the event role to `destination`. This is\n * safe because a trigger event only ever appears at the statement head (which is\n * consumed before argument parsing begins). Any \"event marker\" reached while\n * scanning arguments is therefore being used as a locative — i.e. the element\n * the command acts ON — which is exactly the `destination` role (the semantic\n * parser also models `toggle .x on #y` as patient `.x` + destination `#y`).\n *\n * Restricted to (a) SVO source profiles and (b) ON_TARGET_COMMANDS:\n * - SVO: in VSO/SOV languages the event marker can legitimately appear\n * mid-statement (Arabic VSO renders an event handler as `بدل X عند نقر`,\n * classified as a command), so remapping there would mis-read a real event\n * as a destination. English — and the en→lang gate path — is SVO.\n * - command: only the DOM class/attr mutators use a locative `on` target.\n * For other commands (`trigger X on me`, `set X to V on Y`) the remap is\n * either destabilising or collides with `to`/`into` — see ON_TARGET_COMMANDS.\n *\n * When neither applies the unmodified map is returned (event stays event).\n */\nfunction buildArgumentModifierMap(\n profile: LanguageProfile,\n actionVerb: string | undefined\n): Record<string, SemanticRole> {\n const map = generateModifierMap(profile);\n const verb = actionVerb?.toLowerCase();\n if (profile.wordOrder !== 'SVO' || !verb || !ON_TARGET_COMMANDS.has(verb)) {\n return map;\n }\n\n const remapped: Record<string, SemanticRole> = {};\n for (const [form, role] of Object.entries(map)) {\n remapped[form] = role === 'event' ? 'destination' : role;\n }\n return remapped;\n}\n\n// =============================================================================\n// Statement Parser\n// =============================================================================\n\n/**\n * Parse a hyperscript statement into semantic roles\n * This is the core analysis step that identifies WHAT each part means\n */\nexport function parseStatement(input: string, sourceLocale: string = 'en'): ParsedStatement | null {\n const profile = getProfile(sourceLocale);\n if (!profile) return null;\n\n const tokens = tokenize(input, profile);\n\n // Identify statement type and extract roles\n const statementType = identifyStatementType(tokens, profile);\n\n switch (statementType) {\n case 'event-handler':\n return parseEventHandler(tokens, profile);\n case 'command':\n return parseCommand(tokens, profile);\n case 'conditional':\n return parseConditional(tokens, profile);\n default:\n return null;\n }\n}\n\n/**\n * Known suffixes that may attach to words without spaces.\n * These are split off during tokenization for proper parsing.\n */\nconst ATTACHED_SUFFIXES: Record<string, string[]> = {\n // Chinese: 时 (time/when) often attaches to events like 点击时 (when clicking)\n zh: ['时', '的', '地', '得'],\n // Japanese: Some particles may attach in casual writing\n ja: [],\n // Korean: Particles sometimes written without spaces\n ko: [],\n};\n\n/**\n * Known prefixes that may attach to words without spaces.\n */\nconst ATTACHED_PREFIXES: Record<string, string[]> = {\n // Chinese: 当 (when) sometimes written attached\n zh: ['当'],\n // Arabic: Prepositions that attach\n ar: ['بـ', 'كـ', 'و'],\n};\n\n/**\n * Post-process tokens to split attached suffixes/prefixes.\n * E.g., \"点击时\" → [\"点击\", \"时\"]\n */\nfunction splitAttachedAffixes(tokens: string[], locale: string): string[] {\n const suffixes = ATTACHED_SUFFIXES[locale] || [];\n const prefixes = ATTACHED_PREFIXES[locale] || [];\n\n if (suffixes.length === 0 && prefixes.length === 0) {\n return tokens;\n }\n\n const result: string[] = [];\n\n for (const token of tokens) {\n // Skip CSS selectors and numbers\n if (/^[#.<@]/.test(token) || /^\\d+/.test(token)) {\n result.push(token);\n continue;\n }\n\n let processed = token;\n let prefix = '';\n let suffix = '';\n\n // Check for attached prefixes\n for (const p of prefixes) {\n if (processed.startsWith(p) && processed.length > p.length) {\n prefix = p;\n processed = processed.slice(p.length);\n break;\n }\n }\n\n // Check for attached suffixes\n for (const s of suffixes) {\n if (processed.endsWith(s) && processed.length > s.length) {\n suffix = s;\n processed = processed.slice(0, -s.length);\n break;\n }\n }\n\n // Add tokens in order: prefix, main, suffix\n if (prefix) result.push(prefix);\n if (processed) result.push(processed);\n if (suffix) result.push(suffix);\n }\n\n return result;\n}\n\n/**\n * Simple tokenizer that handles:\n * - Keywords (from dictionary)\n * - CSS selectors (#id, .class, <tag/>)\n * - String literals\n * - Numbers\n * - Attached suffixes/prefixes (language-specific)\n */\nfunction tokenize(input: string, profile: LanguageProfile): string[] {\n // Split on whitespace, preserving selectors and strings\n const tokens: string[] = [];\n let current = '';\n let inSelector = false;\n let selectorDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n\n // Track CSS selector context\n if (char === '<') {\n inSelector = true;\n selectorDepth++;\n } else if (char === '>' && inSelector) {\n selectorDepth--;\n if (selectorDepth === 0) inSelector = false;\n }\n\n // Track event-guard / attribute brackets so `[key is 'Escape']` (which has\n // internal spaces) stays a single token instead of splitting into\n // `[key` / `is` / `'Escape']` — which mis-assigns `is` as the action verb.\n if (char === '[') {\n bracketDepth++;\n } else if (char === ']' && bracketDepth > 0) {\n bracketDepth--;\n }\n\n // Track EVERY parenthesized group as a depth scope so it stays ONE token:\n //\n // - An ATTACHED `(` (a call or event destructure: `pointerdown(clientX,\n // clientY)`, `Resizable(a, b)`) must not split at the comma-space — the\n // event-handler-head reorder would separate the halves and drop the\n // whole handler (tl behavior-resizable degenerate).\n // - A STANDALONE `(` opening an expression (`to (the value of #price as\n // Number) * (my value as Number)`) must be OPAQUE to role segmentation:\n // left loose, its interior `of`/`as`/`from` keywords hit the argument\n // modifier map, so the parser split the expression across roles — the\n // R1 cluster E mangle (computed-value: the transformer reordered INSIDE\n // the parens, embedded the event phrase mid-expression, and dropped the\n // whole second operand in every language). Interior keywords still\n // translate IN PLACE: role values are re-split on whitespace by\n // translateMultiWordValue, and translateWord strips paren punctuation\n // before its dictionary lookup (`($count or 0)` → `($count o 0)` in tl —\n // the operator translates without the group being torn apart).\n if (char === '(') {\n parenDepth++;\n } else if (char === ')' && parenDepth > 0) {\n parenDepth--;\n }\n\n // Split on whitespace unless inside a selector, a bracket guard, or an\n // attached parenthesized argument list\n if (/\\s/.test(char) && !inSelector && bracketDepth === 0 && parenDepth === 0) {\n if (current) {\n tokens.push(current);\n current = '';\n }\n } else {\n current += char;\n }\n }\n\n if (current) {\n tokens.push(current);\n }\n\n // Post-process to split attached affixes for languages that need it\n return splitAttachedAffixes(tokens, profile.code);\n}\n\n/**\n * Identify what type of statement this is\n */\nfunction identifyStatementType(\n tokens: string[],\n profile: LanguageProfile\n): 'event-handler' | 'command' | 'conditional' | 'unknown' {\n if (tokens.length === 0) return 'unknown';\n\n const firstToken = tokens[0].toLowerCase();\n\n // Check for event handler\n const eventMarker = profile.markers.find(m => m.role === 'event' && m.position === 'preposition');\n if (eventMarker && firstToken === eventMarker.form.toLowerCase()) {\n return 'event-handler';\n }\n\n // Check if first token is a known event keyword (derived from profiles)\n if (EVENT_KEYWORDS.has(firstToken)) {\n return 'event-handler';\n }\n\n // Check for conditional using shared constants\n if (CONDITIONAL_KEYWORDS.has(firstToken)) {\n return 'conditional';\n }\n\n return 'command';\n}\n\n/**\n * Parse an event handler statement\n * Pattern: on {event} {command} {target?} {modifiers?}\n *\n * Now handles modifiers like \"by 3\" in \"on click increment #count by 3\"\n */\nfunction parseEventHandler(tokens: string[], profile: LanguageProfile): ParsedStatement {\n const roles = new Map<SemanticRole, ParsedElement>();\n\n // Skip the event keyword (e.g., 'on', 'で', '当', etc.) - derived from profiles\n let startIndex = EVENT_KEYWORDS.has(tokens[0]?.toLowerCase()) ? 1 : 0;\n\n // Next token is the event\n if (tokens[startIndex]) {\n const eventTokens: string[] = [tokens[startIndex]];\n startIndex++;\n\n // Fold \"or\"-conjoined events into the event value (e.g.\n // \"on click or keypress[...] toggle .active\"). Without this, \"or\" would be\n // read as the action verb and the second event swept into role values,\n // hoisting \"or <event2>\" ahead of the command on reorder. Keeping the whole\n // \"<event1> or <event2>\" string in the event role lets it translate and\n // reorder as a single event clause. Only consumes \"or\" that immediately\n // follows the event, before any source/action — so a later \"or\" in a guard\n // or value is untouched.\n while (\n tokens[startIndex] &&\n EVENT_CONJUNCTIONS.has(tokens[startIndex].toLowerCase()) &&\n tokens[startIndex + 1]\n ) {\n eventTokens.push(tokens[startIndex], tokens[startIndex + 1]);\n startIndex += 2;\n }\n\n roles.set('event', {\n role: 'event',\n value: eventTokens.join(' '),\n });\n }\n\n // Check for event source modifier before the action (e.g., \"from #source\" in \"on input from #firstName set ...\")\n // Only handle 'from' (event source) — other modifiers like circumfix markers (Chinese 时) should not be consumed.\n if (tokens[startIndex] && tokens[startIndex].toLowerCase() === 'from' && tokens[startIndex + 1]) {\n startIndex++; // skip 'from'\n // Collect source value tokens until a command keyword is found\n const sourceValue: string[] = [];\n while (tokens[startIndex]) {\n if (ENGLISH_COMMANDS.has(tokens[startIndex].toLowerCase())) break;\n sourceValue.push(tokens[startIndex]);\n startIndex++;\n }\n if (sourceValue.length > 0) {\n const value = sourceValue.join(' ');\n roles.set('source', {\n role: 'source',\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n }\n\n // Next token is the action (command verb)\n if (tokens[startIndex]) {\n roles.set('action', {\n role: 'action',\n value: tokens[startIndex],\n });\n startIndex++;\n }\n\n // Parse remaining tokens with modifier awareness (like parseCommand does)\n // This handles \"by 3\" in \"on click increment #count by 3\".\n // Argument map: for DOM-target commands the head event is already captured, so\n // a locative `on` (`toggle @hidden on #panel`) maps to `destination` rather\n // than overwriting the head `event`.\n if (tokens[startIndex]) {\n const modifierMap = buildArgumentModifierMap(profile, roles.get('action')?.value);\n let currentRole: SemanticRole = 'patient';\n let currentValue: string[] = [];\n\n for (let i = startIndex; i < tokens.length; i++) {\n const token = tokens[i];\n const mappedRole = modifierMap[token.toLowerCase()];\n\n if (mappedRole) {\n // Save previous role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n currentRole = mappedRole;\n currentValue = [];\n } else {\n currentValue.push(token);\n }\n }\n\n // Save final role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n }\n\n return {\n type: 'event-handler',\n roles,\n original: tokens.join(' '),\n };\n}\n\n/**\n * Parse a command statement\n * Pattern: {command} {args...}\n */\nfunction parseCommand(tokens: string[], profile: LanguageProfile): ParsedStatement {\n const roles = new Map<SemanticRole, ParsedElement>();\n\n if (tokens.length === 0) {\n return { type: 'command', roles, original: '' };\n }\n\n // First token is the command\n roles.set('action', {\n role: 'action',\n value: tokens[0],\n });\n\n // Generate dynamic modifier map from language profile (argument position).\n // This enables parsing non-English input (e.g., Japanese に, Korean 에, Arabic إلى).\n // For a DOM-target command a locative `on` (`toggle .active on me`) maps to\n // `destination` (SVO sources) rather than spawning a bogus `event` role.\n const modifierMap = buildArgumentModifierMap(profile, tokens[0]);\n\n let currentRole: SemanticRole = 'patient';\n let currentValue: string[] = [];\n\n for (let i = 1; i < tokens.length; i++) {\n const token = tokens[i];\n const mappedRole = modifierMap[token.toLowerCase()];\n\n if (mappedRole) {\n // Save previous role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n currentRole = mappedRole;\n currentValue = [];\n } else {\n currentValue.push(token);\n }\n }\n\n // Save final role\n if (currentValue.length > 0) {\n const value = currentValue.join(' ');\n roles.set(currentRole, {\n role: currentRole,\n value,\n isSelector: /^[#.<@]/.test(value),\n });\n }\n\n return {\n type: 'command',\n roles,\n original: tokens.join(' '),\n };\n}\n\n/**\n * Re-assign a command's mis-marked primary argument from the default `patient`\n * role to its true primary role (e.g. `wait`'s leading argument is a `duration`,\n * not a fronted object).\n *\n * The generic argument parser in `parseCommand` / `parseEventHandler` defaults the\n * first unmarked argument to `patient`. For most commands that is correct, but for a\n * command whose primary role is a non-patient *and which the target language does not\n * give a marker* (a duration, a measure — never a BA/object construction), the\n * `patient` assignment makes `insertMarkers` emit a spurious object-marker (Chinese\n * `把`, Japanese `を`, Korean `를`). The marked form is ungrammatical and the semantic\n * parser fails to match it, dropping the command.\n *\n * The fix is deliberately scoped to **literal/measure** primary roles\n * ({@link LITERAL_PRIMARY_ROLES}: `duration`, `quantity`) — values that are *never*\n * the object of an object-marking construction in any supported language, so moving\n * them off `patient` can only ever *remove* a spurious marker. Marker-bearing\n * primaries are intentionally left alone:\n * - `set`→destination `到`, `fetch`→source `从` carry a *correct* marker; touching\n * them risks no benefit.\n * - `send`/`trigger`→event: in a language without an event marker (e.g. Korean has\n * no event particle) un-marking the leading argument makes the semantic parser\n * mis-read it as a bare event handler and emit a phantom `on` action — an\n * over-generation that recall-based fidelity would not catch. So `event`-primary\n * commands stay on the `patient` default.\n *\n * Roles are still reordered by the safety-net in `reorderRoles`, so no value is lost.\n * A belt-and-suspenders target-marker guard keeps the change inert should a profile\n * ever add a marker for one of these literal roles.\n *\n * Must run *before* `translateElements`, while the `action` value is still the\n * source-language (English) keyword, so the schema lookup resolves.\n *\n * @see docs-internal/ZH_BLOCK_BODY_SCOPE.md (#1 — transformer role model)\n */\nconst LITERAL_PRIMARY_ROLES: ReadonlySet<SemanticRole> = new Set<SemanticRole>([\n 'duration',\n 'quantity',\n]);\n\nfunction applyPrimaryRole(parsed: ParsedStatement, targetProfile: LanguageProfile): void {\n // Only re-mark standalone command statements. In an event handler (`on click\n // wait 2s …`) a verb-final SOV language without an event particle (e.g. Korean)\n // relies on the leading argument's patient marker as the structural cue that\n // anchors the handler; un-marking it makes the semantic parser lose the event.\n // The block-body / then-chain `wait` clauses this fix targets are each parsed as\n // their own command statement, so they are still covered.\n if (parsed.type !== 'command') return;\n\n const action = parsed.roles.get('action')?.value;\n if (!action) return;\n\n const primaryRole = COMMAND_PRIMARY_ROLES[action.toLowerCase()];\n if (!primaryRole || !LITERAL_PRIMARY_ROLES.has(primaryRole)) return;\n\n // Only act on a leading argument the generic parser defaulted to `patient`,\n // and only when the primary slot isn't already filled by an explicit marker.\n const patientEl = parsed.roles.get('patient');\n if (!patientEl || parsed.roles.has(primaryRole)) return;\n\n // Guard: never introduce a marker that wasn't there. If the target language\n // marks the primary role, leave the command as-is.\n if (targetProfile.markers.some(m => m.role === primaryRole)) return;\n\n parsed.roles.delete('patient');\n parsed.roles.set(primaryRole, { ...patientEl, role: primaryRole });\n}\n\n/**\n * Parse a conditional statement\n */\nfunction parseConditional(tokens: string[], _profile: LanguageProfile): ParsedStatement {\n const roles = new Map<SemanticRole, ParsedElement>();\n\n // First token is the 'if' keyword\n roles.set('action', {\n role: 'action',\n value: tokens[0],\n });\n\n // Find 'then' to split condition from body - using shared constants\n const thenIndex = tokens.findIndex(t => THEN_KEYWORDS.has(t.toLowerCase()));\n\n if (thenIndex > 1) {\n const conditionValue = tokens.slice(1, thenIndex).join(' ');\n roles.set('condition', {\n role: 'condition',\n value: conditionValue,\n });\n } else if (thenIndex === -1 && tokens.length > 1) {\n // Block-style `if <cond>` with the body on following lines (no inline\n // `then`). Capture everything after `if` as the condition; otherwise the\n // condition is silently dropped and the rendered block becomes a bare\n // `if`/`אם`/`如果`, which the semantic block parser then rejects (null\n // parse). This is the dominant failure for nested control-flow bodies in\n // non-Latin languages (he, zh).\n roles.set('condition', {\n role: 'condition',\n value: tokens.slice(1).join(' '),\n });\n }\n\n return {\n type: 'conditional',\n roles,\n original: tokens.join(' '),\n };\n}\n\n// =============================================================================\n// Translation\n// =============================================================================\n\n/**\n * Translate words using dictionary with type-safe access.\n */\nfunction translateWord(word: string, sourceLocale: string, targetLocale: string): string {\n // Don't translate CSS selectors\n if (/^[#.<@]/.test(word)) {\n return word;\n }\n\n // Don't translate numbers\n if (/^\\d+/.test(word)) {\n return word;\n }\n\n // A whole parenthesized group fused by the tokenizer (`(the value of #price\n // as Number)`) reaching a single-token translate path: translate its\n // interior word-by-word IN ORDER — never reordered, never re-segmented.\n if (/\\s/.test(word) && word.startsWith('(')) {\n return word\n .split(/\\s+/)\n .map(w => translateWord(w, sourceLocale, targetLocale))\n .join(' ');\n }\n\n // A word carrying paren punctuation from a fused group after whitespace\n // re-splitting (`(my` / `valor)` / `(($x`): strip the parens for the\n // dictionary lookup and re-attach, so interior keywords still translate.\n if (word.length > 1 && (word.startsWith('(') || word.endsWith(')'))) {\n const m = word.match(/^(\\(*)([^()]+)(\\)*)$/);\n if (m && (m[1] || m[3])) {\n return m[1] + translateWord(m[2], sourceLocale, targetLocale) + m[3];\n }\n }\n\n const sourceDict = sourceLocale === 'en' ? null : dictionaries[sourceLocale];\n const targetDict = dictionaries[targetLocale];\n\n if (!targetDict) return word;\n\n // If source is not English, first map to English using type-safe lookup\n let englishWord = word;\n if (sourceDict) {\n const found = findInDictionary(sourceDict, word);\n if (found) {\n englishWord = found.englishKey;\n }\n }\n\n // Now map English to target locale using type-safe lookup\n const translated = translateFromEnglish(targetDict, englishWord);\n return translated ?? word;\n}\n\n/**\n * Possessive markers for each language.\n * Used to transform \"X's Y\" patterns to target language structure.\n */\nconst POSSESSIVE_MARKERS: Record<\n string,\n { type: 'prefix' | 'suffix' | 'preposition' | 'particle'; marker: string }\n> = {\n en: { type: 'suffix', marker: \"'s\" },\n es: { type: 'preposition', marker: 'de' },\n pt: { type: 'preposition', marker: 'de' },\n fr: { type: 'preposition', marker: 'de' },\n de: { type: 'preposition', marker: 'von' },\n ja: { type: 'suffix', marker: 'の' },\n ko: { type: 'suffix', marker: '의' },\n zh: { type: 'suffix', marker: '的' },\n ar: { type: 'preposition', marker: 'لـ' },\n // Spaced genitive particle (not the glued `'ın`), so the tokenizer can split\n // it off the selector — consistent with Turkish's other spaced case markers.\n tr: { type: 'particle', marker: 'ın' },\n id: { type: 'preposition', marker: 'dari' },\n // Latin-script genitive: must be a *spaced* particle (`#picker pa`), since a\n // glued `#pickerpa` can't be split from the selector by the tokenizer the\n // way a non-Latin suffix (の/의/র) can.\n qu: { type: 'particle', marker: 'pa' },\n // Bengali SOV postposition genitive, like ja/ko — a spaced suffix the\n // tokenizer splits off as a particle. Previously absent, so it fell back to\n // the English `'s` marker and its possessive property paths never parsed.\n // (Hindi `का` is intentionally omitted: its `bind` lacks a verb-final\n // grammar rule, so fixing its possessive alone yields a wrong `on` parse —\n // tracked as separate follow-up.)\n bn: { type: 'suffix', marker: 'র' },\n sw: { type: 'preposition', marker: 'ya' },\n};\n\n/**\n * Transform possessive 's syntax to target language.\n *\n * Examples:\n * me's value → mi valor (Spanish - pronoun becomes possessive adjective)\n * #button's textContent → textContent de #button (Spanish - prepositional)\n * me's value → 私の値 (Japanese - の particle)\n */\nfunction translatePossessive(token: string, sourceLocale: string, targetLocale: string): string {\n // Check for 's possessive pattern\n const possessiveMatch = token.match(/^(.+)'s$/i);\n if (!possessiveMatch) {\n return token;\n }\n\n const owner = possessiveMatch[1];\n const targetMarker = POSSESSIVE_MARKERS[targetLocale] || POSSESSIVE_MARKERS.en;\n\n // Check if owner is a pronoun that has a possessive form\n const pronounPossessives: Record<string, string> = {\n me: 'my',\n it: 'its',\n you: 'your',\n };\n\n const lowerOwner = owner.toLowerCase();\n if (pronounPossessives[lowerOwner]) {\n // Convert \"me's\" to \"my\" then translate\n const possessiveForm = pronounPossessives[lowerOwner];\n return translateWord(possessiveForm, 'en', targetLocale);\n }\n\n // For selectors and other owners, translate owner and apply target possessive marker\n const translatedOwner = translateWord(owner, sourceLocale, targetLocale);\n\n switch (targetMarker.type) {\n case 'suffix':\n // Japanese/Korean/Chinese: owner + marker (e.g., #buttonの, #button의)\n return `${translatedOwner}${targetMarker.marker}`;\n case 'particle':\n // Latin-script spaced genitive (Quechua `pa`): owner + space + marker\n // so the tokenizer can separate it from the selector.\n return `${translatedOwner} ${targetMarker.marker}`;\n case 'preposition':\n // Will be handled by caller - return marker + owner format\n // Store as special format to be processed later\n return `__POSS__${targetMarker.marker}__${translatedOwner}__POSS__`;\n default:\n return `${translatedOwner}'s`;\n }\n}\n\n// =============================================================================\n// Possessive Dot Notation\n// =============================================================================\n\n/**\n * Regex to match possessive dot notation patterns.\n * Matches: my.prop, its.prop, your.prop, me.prop, it.prop, you.prop\n * Also matches optional chaining: my?.prop, me?.prop, etc.\n */\nconst POSSESSIVE_DOT_REGEX = /^(my|its|your|me|it|you)(\\??\\..+)$/i;\n\n/**\n * Map pronoun forms to possessive adjective forms for dictionary lookup.\n */\nconst POSSESSIVE_DOT_PRONOUNS: Record<string, string> = {\n me: 'my',\n it: 'its',\n you: 'your',\n my: 'my',\n its: 'its',\n your: 'your',\n};\n\n/**\n * Translate possessive dot notation like my.textContent → mi.textContent.\n * Handles both possessive adjective forms (my, its, your) and pronoun forms (me, it, you).\n * Also handles optional chaining (my?.prop).\n * Returns null if the value doesn't match or no translation is available.\n */\nfunction translatePossessiveDotNotation(\n value: string,\n sourceLocale: string,\n targetLocale: string\n): string | null {\n const match = value.match(POSSESSIVE_DOT_REGEX);\n if (!match) return null;\n\n const possessiveWord = match[1].toLowerCase();\n const propertySuffix = match[2]; // \".textContent\" or \"?.textContent\"\n\n // Normalize to possessive adjective form for dictionary lookup\n const possessiveKey = POSSESSIVE_DOT_PRONOUNS[possessiveWord] || possessiveWord;\n const translated = translateWord(possessiveKey, sourceLocale, targetLocale);\n\n // Skip if translation is multi-word (can't prefix dot notation)\n if (translated.includes(' ')) return null;\n\n if (translated !== possessiveKey) {\n return translated + propertySuffix;\n }\n\n // Try original pronoun form if different from possessive key\n if (possessiveWord !== possessiveKey) {\n const alt = translateWord(possessiveWord, sourceLocale, targetLocale);\n if (alt !== possessiveWord && !alt.includes(' ')) {\n return alt + propertySuffix;\n }\n }\n\n return null;\n}\n\n// =============================================================================\n// Multi-Word Value Translation\n// =============================================================================\n\n/**\n * Translate a multi-word value, translating each word individually.\n * Handles possessives like \"my value\" → \"mi valor\" in Spanish.\n * Also handles 's possessive syntax like \"me's value\" → \"mi valor\".\n * Also handles possessive dot notation like \"my.textContent\" → \"mi.textContent\".\n */\nfunction translateMultiWordValue(\n value: string,\n sourceLocale: string,\n targetLocale: string\n): string {\n // Mask event-guard / attribute brackets (`[key is 'Escape']`): their contents\n // are expression syntax, not translatable keywords — translating `is` -> `ni`\n // etc. inside them breaks the guard. Restore verbatim after translation.\n if (value.includes('[')) {\n const guards: string[] = [];\n const masked = value.replace(/\\[[^\\]]*\\]/g, match => {\n guards.push(match);\n return `${guards.length - 1}`;\n });\n if (guards.length > 0) {\n const translated = translateMultiWordValue(masked, sourceLocale, targetLocale);\n return translated.replace(/(\\d+)/g, (_, n) => guards[Number(n)]);\n }\n }\n\n // If it's a single word, check for possessive then translate\n if (!value.includes(' ')) {\n // Check for possessive 's\n if (value.includes(\"'s\")) {\n return translatePossessive(value, sourceLocale, targetLocale);\n }\n // Check for possessive dot notation (my.prop, its.prop, me.prop, etc.)\n const dotResult = translatePossessiveDotNotation(value, sourceLocale, targetLocale);\n if (dotResult !== null) return dotResult;\n\n return translateWord(value, sourceLocale, targetLocale);\n }\n\n // Split into words and translate each\n const words = value.split(/\\s+/);\n const translated: string[] = [];\n let i = 0;\n\n while (i < words.length) {\n const word = words[i];\n\n // Check for possessive 's pattern FIRST (e.g., \"me's value\", \"#button's textContent\")\n // This must come before selector check because \"#button's\" starts with #\n if (word.includes(\"'s\")) {\n const possessiveResult = translatePossessive(word, sourceLocale, targetLocale);\n\n // Check if it's a prepositional possessive that needs reordering\n const prepMatch = possessiveResult.match(/^__POSS__(.+)__(.+)__POSS__$/);\n if (prepMatch && i + 1 < words.length) {\n // Prepositional: \"X's Y\" → \"Y marker X\" (e.g., \"textContent de #button\")\n const marker = prepMatch[1];\n const owner = prepMatch[2];\n const property = words[i + 1];\n const translatedProperty = translateWord(property, sourceLocale, targetLocale);\n translated.push(`${translatedProperty} ${marker} ${owner}`);\n i += 2; // Skip property since we consumed it\n continue;\n } else if (prepMatch) {\n // No property following - just output owner with marker prefix\n const marker = prepMatch[1];\n const owner = prepMatch[2];\n translated.push(`${marker} ${owner}`);\n i++;\n continue;\n }\n\n // Suffix-style possessive (Japanese, Korean, etc.) or pronoun\n translated.push(possessiveResult);\n i++;\n continue;\n }\n\n // Skip pure CSS selectors and numbers (but NOT possessives which were handled above)\n if (/^[#.<@]/.test(word) || /^\\d+/.test(word)) {\n translated.push(word);\n i++;\n continue;\n }\n\n // Skip quoted strings\n if (/^[\"'].*[\"']$/.test(word)) {\n translated.push(word);\n i++;\n continue;\n }\n\n // Check for possessive dot notation (my.prop, its.prop, me.prop, etc.)\n const dotResult = translatePossessiveDotNotation(word, sourceLocale, targetLocale);\n if (dotResult !== null) {\n translated.push(dotResult);\n i++;\n continue;\n }\n\n translated.push(translateWord(word, sourceLocale, targetLocale));\n i++;\n }\n\n return translated.join(' ');\n}\n\n/**\n * Translate all elements in a parsed statement\n */\nfunction translateElements(\n parsed: ParsedStatement,\n sourceLocale: string,\n targetLocale: string\n): void {\n for (const [_role, element] of parsed.roles) {\n // Always process possessive 's syntax, even for selectors\n // E.g., \"#button's textContent\" should translate the possessive\n if (element.value.includes(\"'s\")) {\n element.translated = translateMultiWordValue(element.value, sourceLocale, targetLocale);\n } else if (!element.isSelector && !element.isLiteral) {\n element.translated = translateMultiWordValue(element.value, sourceLocale, targetLocale);\n } else {\n element.translated = element.value;\n }\n }\n}\n\n// =============================================================================\n// Caret-scope masking (`^name on <selector>`)\n// =============================================================================\n\n/** Private-use sentinels bracketing a masked caret-scope index. */\nconst CARET_SCOPE_OPEN = '\\uE000';\nconst CARET_SCOPE_CLOSE = '\\uE001';\n\n/**\n * Match `^name on <selector>` and the scope's selector form (#id, .class,\n * <tag/>, [attr]). The `^name` is kept; only the ` on <selector>` scope is masked.\n */\nconst CARET_SCOPE_RE = /(\\^[A-Za-z_][\\w-]*)(\\s+on\\s+(?:[#.][\\w-]+|<[^>]*\\/>|\\[[^\\]]+\\]))/g;\n\n/**\n * Mask the ` on <selector>` scope of every `^name on <selector>` read behind an\n * opaque token attached to `^name`, so the overloaded `on` doesn't reach the\n * splitter / event-handler parser. Returns null when there's nothing to mask.\n */\nfunction maskCaretScopes(input: string): { masked: string; scopes: string[] } | null {\n const scopes: string[] = [];\n const masked = input.replace(CARET_SCOPE_RE, (_m, varTok: string, scope: string) => {\n const idx = scopes.length;\n scopes.push(scope);\n return `${varTok}${CARET_SCOPE_OPEN}${idx}${CARET_SCOPE_CLOSE}`;\n });\n return scopes.length > 0 ? { masked, scopes } : null;\n}\n\n/** Restore masked caret-scope tokens to their verbatim ` on <selector>` form. */\nfunction restoreCaretScopes(input: string, scopes: string[]): string {\n return input.replace(\n new RegExp(`${CARET_SCOPE_OPEN}(\\\\d+)${CARET_SCOPE_CLOSE}`, 'g'),\n (_m, n: string) => scopes[Number(n)] ?? ''\n );\n}\n\n// =============================================================================\n// Main Transformer\n// =============================================================================\n\nexport class GrammarTransformer {\n private sourceProfile: LanguageProfile;\n private targetProfile: LanguageProfile;\n\n constructor(sourceLocale: string = 'en', targetLocale: string) {\n const source = getProfile(sourceLocale);\n const target = getProfile(targetLocale);\n\n if (!source) throw new Error(`Unknown source locale: ${sourceLocale}`);\n if (!target) throw new Error(`Unknown target locale: ${targetLocale}`);\n\n this.sourceProfile = source;\n this.targetProfile = target;\n }\n\n /**\n * Transform a hyperscript statement from source to target language.\n * Handles compound statements with \"then\" by splitting, transforming each part,\n * and rejoining with the target language's \"then\" keyword.\n *\n * For multi-line input, preserves line structure (indentation, blank lines).\n */\n transform(input: string): string {\n const out = this.transformInternal(input);\n // Hebrew: repair a fronted accusative marker the body-split heuristics can emit\n // (`… את הוסף .x …` → `… הוסף את .x …`). Applied to the assembled output; idempotent\n // across the internal recursion. See repairHebrewFrontedAccusative.\n return this.targetProfile.code === 'he' ? repairHebrewFrontedAccusative(out) : out;\n }\n\n private transformInternal(input: string): string {\n // Caret-scoped variable reads (`^name on <selector>`) carry a second,\n // overloaded `on` that the splitter/event-parser would mistake for an event\n // or command boundary — mangling `put ^count on #host into me`. Mask the\n // ` on <selector>` scope behind an opaque token attached to `^name` so the\n // command reorders as if the patient were a single value, then restore it.\n // `on` is kept verbatim (the semantic caret-scope matcher accepts it by raw\n // value across languages — passthrough-alignment).\n const caret = maskCaretScopes(input);\n if (caret) {\n return restoreCaretScopes(this.transform(caret.masked), caret.scopes);\n }\n\n const targetThen = getTargetThenKeyword(this.targetProfile.code);\n\n // Inline JS blocks (`... js <raw js> end`) must be masked BEFORE any\n // splitting/reordering: the body is raw JavaScript, not hyperscript, so it\n // must never be tokenized, translated, or word-order reordered. (Single-line\n // only here; multi-line js bodies are handled with the behavior work.)\n if (!input.includes('\\n')) {\n const jsBlock = this.tryTransformJsBlock(input);\n if (jsBlock !== null) return jsBlock;\n\n // Event handler whose body leads with a command-modifier\n // (`on click async fetch …`, `on click once add …`): lift the modifier out\n // so the real verb isn't mistaken for the action and the SOV reorder keeps\n // the body patient-first (recoverable by the parser's SOV event extraction).\n const eventModifier = this.tryTransformEventWithModifierBody(input);\n if (eventModifier !== null) return eventModifier;\n\n // Event handler whose body is a block (`on <event> if/repeat/unless … end`):\n // the block body must be reordered as a self-contained unit, not shredded\n // across the event handler's role soup.\n const eventBlock = this.tryTransformEventWithBlockBody(input);\n if (eventBlock !== null) return eventBlock;\n\n // Event handler whose body is an un-terminated inline `unless` guard\n // (`on click unless I match .disabled toggle .selected`): route the guard\n // through the standalone block path so Hebrew's accusative marker lands on\n // the body command, not the condition. Hebrew-only; null elsewhere.\n const eventGuard = this.tryTransformEventWithUnlessGuard(input);\n if (eventGuard !== null) return eventGuard;\n }\n\n // Check if input has multi-line structure worth preserving\n const hasMultiLineStructure = input.includes('\\n');\n\n if (hasMultiLineStructure) {\n // Multi-line case - preserve structure (indentation, blank lines)\n const { parts, lineMetadata, partToLineIndex } = splitCompoundStatementWithMetadata(\n input,\n this.sourceProfile.code\n );\n\n const transformedParts = parts.map(part => this.transformSingle(part));\n\n return reconstructWithLineStructure(\n transformedParts,\n lineMetadata,\n partToLineIndex,\n targetThen\n );\n }\n\n // Single-line case - use existing logic\n const parts = splitCompoundStatement(input, this.sourceProfile.code);\n\n if (parts.length > 1) {\n const transformedParts = parts.map(part => this.transformSingle(part));\n return transformedParts.join(` ${targetThen} `);\n }\n\n // Single statement (no \"then\" splitting needed)\n return this.transformSingle(input);\n }\n\n /**\n * Transform a single hyperscript statement (no compound \"then\" chains).\n */\n private transformSingle(input: string): string {\n // 0. Reactive block? Route around parseStatement entirely so\n // block-syntactic tokens (live/when/unless/end) aren't treated\n // as command verbs or swept into role values, and so SOV/VSO\n // reorder applies only inside the body.\n const block = extractBlockStructure(input, this.sourceProfile.code);\n if (block) {\n return this.transformBlock(block);\n }\n\n // 0a. Fragment carrying a stranded trailing block terminator (`wait 200ms\n // end`, `set x to y end` — what the `then`-splitter leaves from\n // `if … then <cmd> end`). `end` is not a marker, so left in place it is\n // swept into the open role's VALUE and rendered inside that phrase\n // (bn `200ms শেষ কে অপেক্ষা`). Strip it, transform the clause alone, and\n // re-append the translated terminator after the verb — the same tail\n // position transformBlockBody emits for event-headed blocks.\n const strippedEnd = this.transformWithTrailingEnd(input);\n if (strippedEnd !== null) {\n return strippedEnd;\n }\n\n // 0b. `set @attr to V on <scope>` (S1 tabs-aria): strip the trailing\n // `on <scope>`, transform the scope-less set normally, then re-insert\n // `on <scope>` where the semantic set patterns expect it.\n const setScope = this.transformSetWithScope(input);\n if (setScope !== null) {\n return setScope;\n }\n\n // 1. Parse into semantic roles\n const parsed = parseStatement(input, this.sourceProfile.code);\n if (!parsed) {\n return input; // Return unchanged if parsing fails\n }\n\n // 1b. Re-assign a mis-marked primary argument (e.g. `wait`'s duration) off the\n // default `patient` role so the target doesn't emit a spurious object-marker.\n // Runs before translation while `action` is still the English keyword.\n applyPrimaryRole(parsed, this.targetProfile);\n\n // 2. Translate individual words\n translateElements(parsed, this.sourceProfile.code, this.targetProfile.code);\n\n // 3. Find applicable rule\n const rule = this.findRule(parsed);\n\n // 4. Apply transformation\n if (rule?.transform.custom) {\n return rule.transform.custom(parsed, this.targetProfile);\n }\n\n // 5. Reorder according to target language's canonical order\n const roleOrder = rule?.transform.roleOrder || this.targetProfile.canonicalOrder;\n const reordered = reorderRoles(parsed.roles, roleOrder);\n\n // 6. Insert grammatical markers\n const shouldInsertMarkers = rule?.transform.insertMarkers ?? true;\n if (shouldInsertMarkers) {\n const result = insertMarkers(\n reordered,\n this.targetProfile.markers,\n this.targetProfile.adpositionType\n );\n // Use joinTokens for proper suffix/prefix attachment (Turkish -i, Quechua -ta, etc.)\n return joinTokens(result);\n }\n\n // 7. Join without markers (still use joinTokens for consistency)\n return joinTokens(reordered.map(e => e.translated || e.value));\n }\n\n /**\n * `<command …> end` fragments: transform the command without its stranded\n * terminator, then re-append the translated terminator as a standalone\n * trailing token. Fragments that open a block of their own (`if … end`,\n * `repeat … end`, `js … end`) bail — their terminator belongs to them and\n * their dedicated paths handle it.\n */\n private transformWithTrailingEnd(input: string): string | null {\n const src = this.sourceProfile.code;\n const tokens = input.trim().split(/\\s+/);\n if (tokens.length < 2) {\n return null;\n }\n const sourceEnd = translateWord('end', 'en', src).toLowerCase();\n if (tokens[tokens.length - 1].toLowerCase() !== sourceEnd) {\n return null;\n }\n const openers = new Set(\n ['if', 'repeat', 'unless', 'while', 'when', 'live', 'js'].map(k =>\n translateWord(k, 'en', src).toLowerCase()\n )\n );\n if (tokens.slice(0, -1).some(t => openers.has(t.toLowerCase()))) {\n return null;\n }\n const inner = this.transformSingle(tokens.slice(0, -1).join(' '));\n const endT = translateWord(tokens[tokens.length - 1], src, this.targetProfile.code);\n return `${inner} ${endT}`;\n }\n\n /**\n * Detect and transform an inline JS block (`[on <event>] js <raw js> end`).\n *\n * The `js ... end` body is raw JavaScript: it must not be tokenized,\n * translated, or word-order reordered. We mask the whole block with a single\n * opaque placeholder, run the surrounding statement (the event-handler head,\n * if any) through the normal reorder pipeline so the placeholder lands in the\n * correct action position, then substitute the translated `js`/`end` keywords\n * around the verbatim body.\n *\n * Returns `null` (fall through to the normal path) when there is no js block,\n * no matching `end`, or trailing content after `end` (kept tight on purpose).\n */\n private tryTransformJsBlock(input: string): string | null {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n // The `js` / `end` keyword forms in the SOURCE language.\n const sourceJs = translateWord('js', 'en', src);\n const sourceEnd = translateWord('end', 'en', src).toLowerCase();\n\n const tokens = input.split(/\\s+/).filter(t => t.length > 0);\n // The js command token, optionally with a `(locals)` suffix: `js`, `js(me)`.\n const escapedJs = sourceJs.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const jsRe = new RegExp(`^${escapedJs}(\\\\(.*\\\\))?$`, 'i');\n const jsIdx = tokens.findIndex(t => jsRe.test(t));\n if (jsIdx === -1) return null;\n\n // First `end` after the js keyword closes the block (raw JS never contains a\n // bare hyperscript `end` token).\n let endIdx = -1;\n for (let i = jsIdx + 1; i < tokens.length; i++) {\n if (tokens[i].toLowerCase() === sourceEnd) {\n endIdx = i;\n break;\n }\n }\n if (endIdx === -1) return null;\n // Trailing content after `end` — leave for the normal path.\n if (endIdx !== tokens.length - 1) return null;\n\n const jsToken = tokens[jsIdx];\n const jsParen = jsToken.match(jsRe)?.[1] ?? '';\n const jsKeywordRaw = jsParen ? jsToken.slice(0, jsToken.length - jsParen.length) : jsToken;\n\n const body = tokens.slice(jsIdx + 1, endIdx).join(' ');\n const targetJs = translateWord(jsKeywordRaw, src, dst) + jsParen;\n const targetEnd = translateWord(tokens[endIdx], src, dst);\n const replacement = [targetJs, body, targetEnd].filter(s => s.length > 0).join(' ');\n\n const before = tokens.slice(0, jsIdx);\n // Bare `js ... end` with no leading event-handler head: emit directly.\n if (before.length === 0) return replacement;\n\n // Mask the block as one opaque action token, reorder the surrounding\n // statement, then restore the verbatim block.\n const placeholder = 'JSBLOCKPLACEHOLDER';\n const reordered = this.transformSingle([...before, placeholder].join(' '));\n if (!reordered.includes(placeholder)) return null; // unexpected — fall through\n return reordered.replace(placeholder, replacement);\n }\n\n /**\n * Transform an event handler whose body is a block command\n * (`on <event> [from <src>] {if|repeat|unless|while|for} … end`).\n *\n * `parseEventHandler` would treat the block keyword as the action and sweep the\n * condition/body into role values, then reorder them — shredding the block\n * (`if event.shiftKey call submitAndContinue() end` → scattered tokens). Instead\n * we mask the whole block as an opaque action placeholder, reorder the event\n * head normally, transform the block as a self-contained unit, and restitch.\n *\n * Returns `null` (fall through) when the input isn't an event handler, has no\n * block-keyword body, or has no closing `end`.\n */\n private tryTransformEventWithBlockBody(input: string): string | null {\n const tokens = tokenize(input, this.sourceProfile);\n if (tokens.length === 0) return null;\n if (!EVENT_KEYWORDS.has(tokens[0]?.toLowerCase())) return null;\n\n let blockIdx = -1;\n for (let i = 1; i < tokens.length; i++) {\n if (BLOCK_BODY_KEYWORDS.has(tokens[i].toLowerCase())) {\n blockIdx = i;\n break;\n }\n }\n if (blockIdx <= 0) return null;\n // Only handle the explicitly-terminated form; un-terminated bodies\n // (`on click unless X toggle Y`) keep the existing path.\n if (tokens[tokens.length - 1].toLowerCase() !== 'end') return null;\n\n const eventHead = tokens.slice(0, blockIdx);\n const blockTokens = tokens.slice(blockIdx);\n\n // Event heads carrying a `from <source>` modifier (`on keydown[...] from\n // .modal if … end`): for SVO/SOV targets, route them through this block-body\n // path too — masking the block and emitting the event clause (incl. the\n // translated `from <source>`, which `transformSingle` → `parseEventHandler`\n // already reorders) first, then the transformed block. This keeps the if-block\n // body from being shredded across the event handler's roles and properly\n // translates its inner keywords (`in`/`focus`/`first`/positional); the old\n // exclusion left them English and mangled the order (this is what cleared\n // `focus-trap` in tr). VSO targets (ar, tl) are kept on the existing path:\n // there the event-first emission with a `from`-source reorders incorrectly and\n // regresses `focus-trap`/`window-keydown`, while the existing path already\n // parses them. So the `from`-source exclusion is scoped to VSO only.\n if (this.targetProfile.wordOrder === 'VSO' && eventHead.some(t => t.toLowerCase() === 'from')) {\n return null;\n }\n\n const placeholder = 'EVENTBLOCKPLACEHOLDER';\n const headOut = this.transformSingle([...eventHead, placeholder].join(' '));\n if (!headOut.includes(placeholder)) return null;\n\n const blockOut = this.transformBlockBody(blockTokens);\n\n // Always emit the event clause first, then the block. An event handler's\n // event is a leading delimiter, and the semantic parser only matches a\n // block body when it follows the event — even in verb-first (VSO) languages\n // whose normal command order would push the event to the end. So strip the\n // placeholder out of the (possibly reordered) head and append the block,\n // rather than substituting in place.\n const eventClause = headOut.replace(placeholder, '').replace(/\\s+/g, ' ').trim();\n return [eventClause, blockOut].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform an event handler whose body is an inline `unless` guard with NO\n * `end` (`on <event> unless <cond> <body>` — the `unless-condition` shape).\n *\n * Object-marking SVO targets (he, zh). `parseEventHandler` reads `unless` as the\n * action and sweeps the whole `<cond> <body>` tail into a single `patient` blob;\n * the target then prefixes that blob with its object marker — Hebrew's accusative\n * את (`… אלא את I match .disabled מתג .selected`) or Chinese's BA particle 把\n * (`… 除非 把 I match .disabled 切换 .selected`) — and the inner toggle loses its\n * own marker. The semantic parser can't recover the guard from that: the marker\n * ahead of the condition blocks the `unless` pattern AND the now-markerless body\n * command fails its object-marked toggle pattern, so the body collapses (`unless`\n * dropped). Marker-less languages (de/it/ar/pl) tolerate the same role-blob and\n * stay faithful, so this is an object-marker artifact, not a general parse gap.\n *\n * The standalone `unless <cond> <body>` path already produces the correct shape\n * (`extractBlockStructure` → `transformBlock`: condition kept marker-free, body\n * command keeps its marker — he `אלא I match .disabled מתג את .selected`, zh\n * `除非 I match .disabled 切换 把 .selected`). So we split the event head off,\n * transform the guard through that path, and emit the event clause first (he and\n * zh are both SVO — event leads). Returns `null` (fall through) when the input\n * isn't an object-marking event handler with an un-terminated inline `unless`\n * guard.\n */\n private tryTransformEventWithUnlessGuard(input: string): string | null {\n // SVO object-marking targets only — these front the unless tail with an object\n // marker (he את / zh 把) that breaks the parse. Event-leads emission below\n // assumes SVO, so SOV/VSO object-markers (ja/ko/tr/ar) are intentionally out.\n if (!UNLESS_GUARD_OBJECT_MARKING_LOCALES.has(this.targetProfile.code)) return null;\n\n const tokens = tokenize(input, this.sourceProfile);\n if (tokens.length === 0) return null;\n if (!EVENT_KEYWORDS.has(tokens[0]?.toLowerCase())) return null;\n\n let guardIdx = -1;\n for (let i = 1; i < tokens.length; i++) {\n if (tokens[i].toLowerCase() === 'unless') {\n guardIdx = i;\n break;\n }\n }\n if (guardIdx <= 0) return null;\n // The terminated form (`… unless … end`) is handled by\n // tryTransformEventWithBlockBody's masking path; only take the inline guard.\n if (tokens[tokens.length - 1].toLowerCase() === 'end') return null;\n\n const eventHead = tokens.slice(0, guardIdx);\n const guard = tokens.slice(guardIdx).join(' ');\n\n // `unless` is a BLOCK_HEAD keyword, so transform() routes the guard through\n // extractBlockStructure → transformBlock (the standalone shape that parses).\n const guardOut = this.transform(guard);\n if (!guardOut) return null;\n\n const placeholder = 'EVENTGUARDPLACEHOLDER';\n const headOut = this.transformSingle([...eventHead, placeholder].join(' '));\n if (!headOut.includes(placeholder)) return null;\n const eventClause = headOut.replace(placeholder, '').replace(/\\s+/g, ' ').trim();\n return [eventClause, guardOut].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform an event handler whose body leads with a command-modifier\n * (`on <event> [from <src>] {async|once|debounced [at N]|throttled [at N]} <body>`).\n *\n * `parseEventHandler` reads the first token after the event as the **action**, so\n * a leading modifier is mistaken for the verb and the real verb (`fetch`/`add`) is\n * swept into the patient. For SOV targets the reorder then surfaces that verb\n * **first** (`取得 /api/data を クリック …`), and the semantic parser matches the\n * leading `<verb> <patient>` with the low-priority `*-generated-verb-first`\n * command pattern — returning a bare command and discarding the event + the rest\n * of the body (degenerate parse).\n *\n * Instead, lift the modifier out, transform the modifier-free handler through the\n * normal path (which keeps the body in canonical patient-first SOV order so the\n * event sits mid-stream and the existing SOV event-extraction recovers it), then\n * re-emit the modifier as a **leading English literal**. The semantic parser\n * strips a leading `once`/`debounced`/`throttled` (`extractStandaloneModifiers`)\n * and an `async` anywhere (`stripAsyncModifier`) before parsing, so the modifier\n * is consumed as handler metadata rather than shadowing the body.\n *\n * Returns `null` (fall through) when the input isn't an event handler or the body\n * doesn't lead with a modifier — leaving simple/Mode-B handlers byte-identical.\n */\n private tryTransformEventWithModifierBody(input: string): string | null {\n // The verb-first degenerate parse this works around is specific to SOV\n // reorder: only there does a leading modifier displace the patient-first\n // order and surface the verb first. SVO/VSO/V2/other targets keep the body\n // in an order the parser already handles, so leave them byte-identical.\n if (this.targetProfile.wordOrder !== 'SOV') return null;\n\n const tokens = tokenize(input, this.sourceProfile);\n if (tokens.length === 0) return null;\n if (!EVENT_KEYWORDS.has(tokens[0]?.toLowerCase())) return null;\n\n // Walk past the event clause head: event keyword, event token, any\n // `or`-conjoined events, and an optional `from <source>` modifier — mirroring\n // parseEventHandler's head parsing — to find where the body begins.\n let i = 1; // past the event keyword\n if (!tokens[i]) return null;\n i++; // past the event token\n while (tokens[i] && EVENT_CONJUNCTIONS.has(tokens[i].toLowerCase()) && tokens[i + 1]) {\n i += 2;\n }\n if (tokens[i]?.toLowerCase() === 'from' && tokens[i + 1]) {\n i++; // skip 'from'\n // Collect source tokens until a command verb or a body modifier.\n while (\n tokens[i] &&\n !ENGLISH_COMMANDS.has(tokens[i].toLowerCase()) &&\n !BODY_MODIFIER_KEYWORDS.has(tokens[i].toLowerCase())\n ) {\n i++;\n }\n }\n\n const modWord = tokens[i]?.toLowerCase();\n if (!modWord || !BODY_MODIFIER_KEYWORDS.has(modWord)) return null;\n\n // Consume the modifier phrase. `debounced`/`throttled` may carry an optional\n // `at <duration>` (or a bare duration). `async`/`once` are single tokens.\n const modStart = i;\n let modEnd = i + 1;\n if (modWord !== 'async' && modWord !== 'once') {\n if (tokens[modEnd]?.toLowerCase() === 'at') modEnd++;\n if (tokens[modEnd] && /^\\d+(ms|s|m)?$/.test(tokens[modEnd])) modEnd++;\n }\n\n const modifierPhrase = tokens.slice(modStart, modEnd).join(' ');\n const rebuilt = [...tokens.slice(0, modStart), ...tokens.slice(modEnd)].join(' ');\n\n // A handler with only a modifier and no body has nothing to keep patient-first.\n if (tokens.length - (modEnd - modStart) <= 2) return null;\n\n // Re-run the full transform on the modifier-free handler so then-chains and\n // juxtaposed bodies route through the existing (working) paths. The rebuilt\n // input no longer leads with a modifier, so this never re-enters here.\n const bodyOut = this.transform(rebuilt);\n return [modifierPhrase, bodyOut].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform a `set <stuff> on <scope>` clause (S1 tabs-aria). The trailing\n * `on <scope>` is the element(s) the attribute is set on — kept attached by\n * splitOnCommandBoundaries. The semantic parser captures it as a `scope` role\n * via the passthrough literal `on` (setSchema's scope markerOverride is `on`\n * in every language), so `on` is emitted verbatim and only the scope *value*\n * is translated (selectors pass through; `me`/`it`/`you` translate to the\n * native reference, which the parser also accepts).\n *\n * Positioning matches where the set patterns expect the scope: at the clause\n * end for verb-first orders (SVO/VSO), and immediately before the clause-final\n * verb for SOV (the generated SOV pattern is `{dest} {patient} on {scope}\n * {verb}`). Returns null (fall through) when there is no trailing `on <scope>`.\n *\n * Source is English in the sync-translations pipeline, so the `set` verb and\n * `on` marker are matched as English literals.\n */\n private transformSetWithScope(input: string): string | null {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const m = input.match(/^(.*\\bset\\b.*\\S)\\s+on\\s+([#.<@[]\\S*|me|it|you)\\s*$/i);\n if (!m) return null;\n const head = m[1];\n const scopeRaw = m[2];\n\n // Transform the scope-less clause via the normal path; `head` no longer ends\n // in `on <scope>`, so this never re-enters transformSetWithScope.\n const headOut = this.transformSingle(head);\n\n const scopeT = /^[#.<@[]/.test(scopeRaw) ? scopeRaw : translateWord(scopeRaw, src, dst);\n\n // SOV needs the scope positioned per how the semantic set patterns match:\n // - Event-handler set (`on <event> set …`): the dest-first SOV event-handler\n // pattern is verb-MEDIAL and carries an optional trailing `[on {scope}]`,\n // so append the scope at the clause end.\n // - Standalone then-clause set: SOV emits verb-MEDIAL (`{dest} {verb}\n // {patient}`), but the only command set pattern with scope is verb-LAST\n // (`{dest} {patient} on {scope} {verb}`). Move the medial verb to the end\n // and place `on {scope}` before it, so the generated command pattern matches.\n if (this.targetProfile.wordOrder === 'SOV') {\n const verb = translateWord('set', 'en', dst);\n const firstTok = input.trim().split(/\\s+/)[0]?.toLowerCase();\n const isEventHandler = !!firstTok && EVENT_KEYWORDS.has(firstTok);\n const toks = headOut.split(/\\s+/).filter(Boolean);\n if (!isEventHandler) {\n // Standalone then-clause set: SOV emits verb-MEDIAL; move the verb to the\n // end and place `on {scope}` before it so the verb-last command set\n // pattern (scope before verb) matches.\n const vIdx = toks.indexOf(verb);\n if (vIdx >= 0) {\n toks.splice(vIdx, 1);\n toks.push('on', scopeT, verb);\n return toks.join(' ');\n }\n } else if (toks.length > 0 && toks[toks.length - 1] === verb) {\n // Event-handler set whose verb is clause-final (e.g. qu\n // `{dest} ta {patient} man {event} pi {verb}`): the parser extracts the\n // event and matches the body as a verb-last command, so the scope must\n // sit before the verb. Verb-MEDIAL SOV event handlers (ja/ko/tr/bn/hi)\n // fall through to the append branch, where their fused event-handler set\n // pattern carries the trailing `[on {scope}]` group.\n toks.splice(toks.length - 1, 0, 'on', scopeT);\n return toks.join(' ');\n }\n return `${headOut} on ${scopeT}`;\n }\n\n // Verb-first (SVO/VSO/V2): append `on <scope>` at the clause end, which the\n // trailing `[on {scope}]` group on the set patterns matches.\n return `${headOut} on ${scopeT}`;\n }\n\n /**\n * Transform a self-contained block command (`{head} {clause?} {body} {end}`),\n * where head ∈ {if, repeat, unless, …}. The clause (condition / `until event …`)\n * runs up to the first command verb and is translated word-by-word; the body is\n * recursively transformed (so its inner commands reorder for the target); the\n * head/tail keywords are translated. The block is never word-order reordered as\n * a whole — delimiters stay at the edges regardless of target word order.\n */\n private transformBlockBody(blockTokens: string[]): string {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const head = blockTokens[0];\n const hasEnd = blockTokens[blockTokens.length - 1]?.toLowerCase() === 'end';\n const tail = hasEnd ? blockTokens[blockTokens.length - 1] : '';\n const inner = blockTokens.slice(1, hasEnd ? -1 : undefined);\n\n // Skip predicate-adjective positions (`… is empty`): the adjective is\n // part of the condition clause, not the body's first verb — cutting there\n // displaced it into the next command's argument zone (empty ×8 bn/hi/tr).\n const commands = getCommandKeywordsForLocale(src);\n const copulas = getCopulasForLocale(src);\n let bodyStart = inner.findIndex(\n (t, i) => commands.has(t.toLowerCase()) && !isPredicateAdjectivePosition(inner, i, copulas)\n );\n if (bodyStart < 0) bodyStart = inner.length;\n\n const clause = inner.slice(0, bodyStart).join(' ');\n const bodyTokens = inner.slice(bodyStart);\n\n const headT = translateWord(head, src, dst);\n const tailT = tail ? translateWord(tail, src, dst) : '';\n const clauseT = clause ? translateMultiWordValue(clause, src, dst) : '';\n const bodyT = this.transformConditionalBody(bodyTokens);\n\n // SOV condition/branch boundary (R1 deferred-tail Family G): the SOV body\n // renders its first command operand-first (`最初 <button/> の中 .modal を\n // フォーカス`), so nothing marks where the condition ends and the branch\n // operand begins — the semantic fold's command-start detection needs a\n // `{value}{particle}` run followed by a verb, which a POSITIONAL-headed\n // operand (`first <button/> …`) never forms, and the condition scan\n // swallows the operand's head (focus-trap: ja focus.patient fell to the\n // `me` default, ko/qu to the `.modal` tail). Emit the target's\n // then-connective at the seam — the boundary the fold already respects\n // (isThenKeyword) — gated to exactly the blind shape: SOV target, a\n // positional keyword right after the branch's command verb, and no `then`\n // already ending the condition.\n const POSITIONAL_BRANCH_HEADS = new Set(['first', 'last', 'next', 'previous', 'closest']);\n const thenT =\n this.targetProfile.wordOrder === 'SOV' &&\n clauseT &&\n POSITIONAL_BRANCH_HEADS.has(bodyTokens[1]?.toLowerCase()) &&\n inner[bodyStart - 1]?.toLowerCase() !== 'then'\n ? translateWord('then', src, dst)\n : '';\n\n return [headT, clauseT, thenT, bodyT, tailT].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Transform an `if`/`unless` block body, splitting it at a top-level `else` into\n * a then-branch and an else-branch so each is reordered as a self-contained unit\n * and the `else` keyword itself is translated. Without this, the body is reordered\n * as one stream: `else` rides along glued to the preceding clause (and, when that\n * clause begins with a selector, is marked a selector and left *untranslated*),\n * and a spurious `then` is inserted around it — both of which break the target\n * text and the downstream parse. The split is depth-aware so an `else` belonging\n * to a nested block is not mistaken for this block's separator. Bodies without an\n * `else` transform exactly as before.\n */\n private transformConditionalBody(bodyTokens: string[]): string {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const sourceElse = translateWord('else', 'en', src).toLowerCase();\n let depth = 0;\n let elseIdx = -1;\n for (let i = 0; i < bodyTokens.length; i++) {\n const t = bodyTokens[i].toLowerCase();\n if (BLOCK_BODY_KEYWORDS.has(t)) depth++;\n else if (t === 'end' && depth > 0) depth--;\n else if (t === sourceElse && depth === 0) {\n elseIdx = i;\n break;\n }\n }\n\n if (elseIdx === -1) {\n const body = bodyTokens.join(' ');\n return body ? this.transform(body) : '';\n }\n\n const thenBranch = bodyTokens.slice(0, elseIdx).join(' ');\n const elseBranch = bodyTokens.slice(elseIdx + 1).join(' ');\n const elseT = translateWord(bodyTokens[elseIdx], src, dst);\n\n return [\n thenBranch ? this.transform(thenBranch) : '',\n elseT,\n elseBranch ? this.transform(elseBranch) : '',\n ]\n .filter(s => s.length > 0)\n .join(' ');\n }\n\n /**\n * Translate a reactive block by translating the head/tail/connector\n * via the dictionary, recursively transforming the body through the\n * regular pipeline, and rejoining in source-language position order.\n * Block-syntactic tokens are never reordered: they're delimiters, not\n * arguments, and authors expect them at start/end positions\n * regardless of target word order.\n */\n private transformBlock(block: BlockStructure): string {\n const src = this.sourceProfile.code;\n const dst = this.targetProfile.code;\n\n const head = translateWord(block.headKeyword, src, dst);\n const tail = block.tailKeyword ? translateWord(block.tailKeyword, src, dst) : '';\n const connector = block.connector ? translateWord(block.connector, src, dst) : '';\n const prefix = block.prefixExpr ? translateMultiWordValue(block.prefixExpr, src, dst) : '';\n\n // Recurse through `transform()` (not `transformSingle`) so the body\n // gets `then`-splitting and nested-block handling for free.\n const body = this.transform(block.body);\n\n return [head, prefix, connector, body, tail].filter(s => s.length > 0).join(' ');\n }\n\n /**\n * Find the best matching rule for this statement\n */\n private findRule(parsed: ParsedStatement): GrammarRule | undefined {\n if (!this.targetProfile.rules) return undefined;\n\n const matchingRules = this.targetProfile.rules\n .filter(rule => this.matchesRule(parsed, rule))\n .sort((a, b) => b.priority - a.priority);\n\n return matchingRules[0];\n }\n\n /**\n * Check if a parsed statement matches a rule\n */\n private matchesRule(parsed: ParsedStatement, rule: GrammarRule): boolean {\n const { match } = rule;\n\n // Check required roles\n for (const role of match.requiredRoles) {\n if (!parsed.roles.has(role)) {\n return false;\n }\n }\n\n // Check command match if specified\n if (match.commands && match.commands.length > 0) {\n const action = parsed.roles.get('action');\n if (!action) return false;\n\n const actionValue = action.value.toLowerCase();\n if (!match.commands.some(cmd => cmd.toLowerCase() === actionValue)) {\n return false;\n }\n }\n\n // Check custom predicate\n if (match.predicate && !match.predicate(parsed)) {\n return false;\n }\n\n return true;\n }\n}\n\n// =============================================================================\n// Convenience Functions\n// =============================================================================\n\n/**\n * Transform hyperscript from English to target language\n */\nexport function toLocale(input: string, targetLocale: string): string {\n const transformer = new GrammarTransformer('en', targetLocale);\n return transformer.transform(input);\n}\n\n/**\n * Transform hyperscript from source language to English\n */\nexport function toEnglish(input: string, sourceLocale: string): string {\n const transformer = new GrammarTransformer(sourceLocale, 'en');\n return transformer.transform(input);\n}\n\n/**\n * Transform between any two languages.\n *\n * Uses direct translation for supported language pairs (ja↔zh, es↔pt, ko↔ja),\n * falling back to English pivot for other pairs.\n */\nexport function translate(input: string, sourceLocale: string, targetLocale: string): string {\n if (sourceLocale === targetLocale) return input;\n if (sourceLocale === 'en') return toLocale(input, targetLocale);\n if (targetLocale === 'en') return toEnglish(input, sourceLocale);\n\n // Try direct translation for supported pairs\n if (hasDirectMapping(sourceLocale, targetLocale)) {\n return translateDirect(input, sourceLocale, targetLocale);\n }\n\n // Fallback: Via English pivot\n const english = toEnglish(input, sourceLocale);\n return toLocale(english, targetLocale);\n}\n\n/**\n * Direct translation between language pairs without English pivot.\n * More accurate for closely related languages (ja↔zh, es↔pt).\n */\nfunction translateDirect(input: string, sourceLocale: string, targetLocale: string): string {\n const mapping = getDirectMapping(sourceLocale, targetLocale);\n if (!mapping) {\n // Fallback to pivot translation\n return toLocale(toEnglish(input, sourceLocale), targetLocale);\n }\n\n // Tokenize input\n const tokens = input.split(/\\s+/);\n\n // Translate each token using direct mapping\n const translated = tokens.map(token => {\n // Preserve CSS selectors and literals\n if (token.startsWith('#') || token.startsWith('.') || token.startsWith('@')) {\n return token;\n }\n if (token.startsWith('\"') || token.startsWith(\"'\")) {\n return token;\n }\n\n // Look up in direct mapping\n const directTranslation = mapping.words[token];\n if (directTranslation) {\n return directTranslation;\n }\n\n // Check for suffix-attached tokens (e.g., \"#count-ta\" in Quechua)\n const suffixMatch = token.match(/^(.+?)(-.+)$/);\n if (suffixMatch) {\n const [, base, suffix] = suffixMatch;\n const translatedBase = mapping.words[base] || base;\n return translatedBase + suffix;\n }\n\n // Return unchanged if no mapping found\n return token;\n });\n\n return translated.join(' ');\n}\n\n// =============================================================================\n// Examples (for testing)\n// =============================================================================\n\nexport const examples = {\n english: {\n eventHandler: 'on click increment #count',\n putInto: 'put my value into #output',\n toggle: 'toggle .active',\n wait: 'wait 2 seconds',\n },\n\n // Expected outputs (approximate, for reference)\n japanese: {\n eventHandler: '#count を クリック で 増加',\n putInto: '私の 値 を #output に 置く',\n toggle: '.active を 切り替え',\n wait: '2秒 待つ',\n },\n\n chinese: {\n eventHandler: '当 点击 时 增加 #count',\n putInto: '把 我的值 放 到 #output',\n toggle: '切换 .active',\n wait: '等待 2秒',\n },\n\n arabic: {\n eventHandler: 'زِد #count عند النقر',\n putInto: 'ضع قيمتي في #output',\n toggle: 'بدّل .active',\n wait: 'انتظر ثانيتين',\n },\n};\n"]}