@lokascript/i18n 2.7.2 → 2.9.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 (61) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +1 -1
  3. package/dist/browser.cjs +649 -180
  4. package/dist/browser.cjs.map +1 -1
  5. package/dist/browser.d.cts +2 -2
  6. package/dist/browser.d.ts +2 -2
  7. package/dist/browser.js +649 -180
  8. package/dist/browser.js.map +1 -1
  9. package/dist/dictionaries/index.cjs +370 -174
  10. package/dist/dictionaries/index.cjs.map +1 -1
  11. package/dist/dictionaries/index.js +370 -174
  12. package/dist/dictionaries/index.js.map +1 -1
  13. package/dist/index.cjs +649 -180
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js +649 -180
  18. package/dist/index.js.map +1 -1
  19. package/dist/lokascript-i18n.min.js +1 -1
  20. package/dist/lokascript-i18n.min.js.map +1 -1
  21. package/dist/lokascript-i18n.mjs +678 -175
  22. package/dist/lokascript-i18n.mjs.map +1 -1
  23. package/dist/plugins/vite.cjs +370 -174
  24. package/dist/plugins/vite.cjs.map +1 -1
  25. package/dist/plugins/vite.js +370 -174
  26. package/dist/plugins/vite.js.map +1 -1
  27. package/dist/plugins/webpack.cjs +370 -174
  28. package/dist/plugins/webpack.cjs.map +1 -1
  29. package/dist/plugins/webpack.js +370 -174
  30. package/dist/plugins/webpack.js.map +1 -1
  31. package/dist/{transformer-DM7iplCU.d.cts → transformer--W46PGaW.d.cts} +8 -0
  32. package/dist/{transformer-BA8YX9u1.d.ts → transformer-FU06J6kG.d.ts} +8 -0
  33. package/package.json +9 -10
  34. package/src/dictionaries/ar.ts +20 -15
  35. package/src/dictionaries/bn.ts +10 -5
  36. package/src/dictionaries/de.ts +20 -8
  37. package/src/dictionaries/es.ts +10 -5
  38. package/src/dictionaries/fr.ts +15 -6
  39. package/src/dictionaries/he.ts +4 -0
  40. package/src/dictionaries/hi.ts +3 -2
  41. package/src/dictionaries/id.ts +31 -16
  42. package/src/dictionaries/it.ts +11 -4
  43. package/src/dictionaries/ja.ts +23 -15
  44. package/src/dictionaries/ko.ts +10 -5
  45. package/src/dictionaries/ms.ts +4 -1
  46. package/src/dictionaries/pl.ts +12 -5
  47. package/src/dictionaries/pt.ts +10 -5
  48. package/src/dictionaries/qu.ts +30 -19
  49. package/src/dictionaries/ru.ts +5 -2
  50. package/src/dictionaries/sw.ts +29 -14
  51. package/src/dictionaries/th.ts +5 -2
  52. package/src/dictionaries/tl.ts +4 -1
  53. package/src/dictionaries/tr.ts +24 -16
  54. package/src/dictionaries/uk.ts +5 -2
  55. package/src/dictionaries/vi.ts +23 -17
  56. package/src/dictionaries/zh.ts +24 -9
  57. package/src/grammar/grammar.test.ts +152 -0
  58. package/src/grammar/profiles/index.ts +316 -1
  59. package/src/grammar/transformer.ts +64 -1
  60. package/src/new-languages.test.ts +9 -3
  61. package/src/positional-keyword-drift.test.ts +6 -19
@@ -322,17 +322,20 @@ var es = {
322
322
  mouseup: "rat\xF3narriba",
323
323
  mouseenter: "rat\xF3nentrar",
324
324
  mouseleave: "rat\xF3nsalir",
325
- mouseover: "rat\xF3nencima",
326
- mouseout: "rat\xF3nfuera",
325
+ // V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused
326
+ // spellings captured event=expression:undefined — broken listeners)
327
+ mouseover: "rat\xF3n encima",
328
+ mouseout: "rat\xF3n fuera",
327
329
  mousemove: "rat\xF3nmover",
328
- keydown: "teclaabajo",
329
- keyup: "teclaarriba",
330
+ keydown: "tecla abajo",
331
+ keyup: "tecla arriba",
330
332
  keypress: "teclapresar",
331
333
  focus: "enfocar",
332
334
  blur: "desenfocar",
333
335
  change: "cambiar",
334
336
  input: "entrada",
335
- submit: "enviar",
337
+ submit: "env\xEDo",
338
+ // Batch 3: enviar is the send verb — on-submit listener captured event "send"
336
339
  reset: "reiniciar",
337
340
  load: "cargar",
338
341
  unload: "descargar",
@@ -412,6 +415,9 @@ var es = {
412
415
  properties: "propiedades"
413
416
  },
414
417
  expressions: {
418
+ characters: "caracteres",
419
+ inclusive: "inclusivo",
420
+ exclusive: "exclusivo",
415
421
  first: "primero",
416
422
  last: "\xFAltimo",
417
423
  next: "siguiente",
@@ -499,7 +505,8 @@ var ko = {
499
505
  clear: "\uC9C0\uC6B0\uAE30",
500
506
  close: "\uB2EB\uAE30",
501
507
  open: "\uC5F4\uAE30",
502
- select: "\uC120\uD0DD",
508
+ select: "\uACE0\uB974\uAE30",
509
+ // Batch 3: 선택 is the pick keyword — bare select rendered with it parses null
503
510
  clone: "\uBCF5\uC81C",
504
511
  prepend: "\uC55E\uC5D0\uCD94\uAC00",
505
512
  socket: "\uC18C\uCF13"
@@ -540,14 +547,17 @@ var ko = {
540
547
  change: "\uBCC0\uACBD",
541
548
  input: "\uC785\uB825",
542
549
  submit: "\uC81C\uCD9C",
543
- reset: "\uB9AC\uC14B",
550
+ reset: "\uC7AC\uC124\uC815",
551
+ // Batch 3: 리셋 captured on.event as expression (broken listener) — profile word round-trips
544
552
  load: "\uB85C\uB4DC",
545
- unload: "\uC5B8\uB85C\uB4DC",
553
+ unload: "unload",
546
554
  resize: "\uB9AC\uC0AC\uC774\uC988",
547
555
  scroll: "\uC2A4\uD06C\uB864",
548
- touchstart: "\uD130\uCE58\uC2DC\uC791",
556
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
557
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
558
+ touchstart: "touchstart",
549
559
  touchend: "\uD130\uCE58\uC885\uB8CC",
550
- touchmove: "\uD130\uCE58\uC774\uB3D9",
560
+ touchmove: "touchmove",
551
561
  touchcancel: "\uD130\uCE58\uCDE8\uC18C"
552
562
  },
553
563
  logical: {
@@ -620,6 +630,9 @@ var ko = {
620
630
  properties: "\uD504\uB85C\uD37C\uD2F0\uB4E4"
621
631
  },
622
632
  expressions: {
633
+ characters: "\uBB38\uC790",
634
+ inclusive: "\uD3EC\uD568",
635
+ exclusive: "\uC81C\uC678",
623
636
  first: "\uCCAB\uBC88\uC9F8",
624
637
  last: "\uB9C8\uC9C0\uB9C9",
625
638
  next: "\uB2E4\uC74C",
@@ -733,16 +746,26 @@ var zh = {
733
746
  events: {
734
747
  click: "\u70B9\u51FB",
735
748
  dblclick: "\u53CC\u51FB",
736
- mousedown: "\u9F20\u6807\u6309\u4E0B",
737
- mouseup: "\u9F20\u6807\u62AC\u8D77",
738
- mouseenter: "\u9F20\u6807\u8FDB\u5165",
739
- mouseleave: "\u9F20\u6807\u79BB\u5F00",
740
- mouseover: "\u9F20\u6807\u60AC\u505C",
749
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
750
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
751
+ // shattered to their first word — live broken listeners in repeat-until-event).
752
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
753
+ mousedown: "mousedown",
754
+ mouseup: "mouseup",
755
+ mouseenter: "mouseenter",
756
+ mouseleave: "mouseleave",
757
+ // V3 Batch 2: 鼠标悬停 captured no event (expression:undefined) — realigned
758
+ // to the tokenizer-registered 鼠标移入 (also S5b-listed). 按键抬起
759
+ // prefix-shattered to 按键 and captured `keydown` (a keyup handler firing
760
+ // on keydown) → 松键, the S5b/tokenizer form. keydown keeps 按键按下
761
+ // (captures keydown via the registered 按键 prefix; S5b-aliased) — fixing
762
+ // it to bare 按键 would collide with keypress below.
763
+ mouseover: "\u9F20\u6807\u79FB\u5165",
741
764
  mouseout: "\u9F20\u6807\u79FB\u51FA",
742
765
  mousemove: "\u9F20\u6807\u79FB\u52A8",
743
766
  keydown: "\u6309\u952E\u6309\u4E0B",
744
- keyup: "\u6309\u952E\u62AC\u8D77",
745
- keypress: "\u6309\u952E",
767
+ keyup: "\u677E\u952E",
768
+ keypress: "keypress",
746
769
  focus: "\u805A\u7126",
747
770
  blur: "\u5931\u7126",
748
771
  change: "\u6539\u53D8",
@@ -754,9 +777,11 @@ var zh = {
754
777
  resize: "\u8C03\u6574\u5927\u5C0F",
755
778
  scroll: "\u6EDA\u52A8",
756
779
  touchstart: "\u89E6\u6478\u5F00\u59CB",
757
- touchend: "\u89E6\u6478\u7ED3\u675F",
780
+ touchend: "touchend",
758
781
  touchmove: "\u89E6\u6478\u79FB\u52A8",
759
- touchcancel: "\u89E6\u6478\u53D6\u6D88"
782
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
783
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
784
+ touchcancel: "touchcancel"
760
785
  },
761
786
  logical: {
762
787
  when: "\u5F53",
@@ -828,6 +853,9 @@ var zh = {
828
853
  properties: "\u7279\u6027\u96C6"
829
854
  },
830
855
  expressions: {
856
+ characters: "\u5B57\u7B26",
857
+ inclusive: "\u5305\u542B",
858
+ exclusive: "\u6392\u9664",
831
859
  first: "\u7B2C\u4E00\u4E2A",
832
860
  last: "\u6700\u540E\u4E00\u4E2A",
833
861
  next: "\u4E0B\u4E00\u4E2A",
@@ -939,15 +967,21 @@ var fr = {
939
967
  events: {
940
968
  click: "clic",
941
969
  dblclick: "doubleclic",
942
- mousedown: "sourisappuy\xE9e",
943
- mouseup: "sourisrel\xE2ch\xE9e",
970
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
971
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
972
+ // shattered to their first word — live broken listeners in repeat-until-event).
973
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
974
+ mousedown: "mousedown",
975
+ mouseup: "mouseup",
944
976
  mouseenter: "sourisentrer",
945
977
  mouseleave: "sourissortir",
946
- mouseover: "sourissur",
947
- mouseout: "sourisdehors",
978
+ // V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused
979
+ // spellings captured event=expression:undefined — broken listeners)
980
+ mouseover: "souris dessus",
981
+ mouseout: "souris dehors",
948
982
  mousemove: "sourisbouger",
949
- keydown: "toucheappuy\xE9e",
950
- keyup: "toucherel\xE2ch\xE9e",
983
+ keydown: "touche bas",
984
+ keyup: "touche haut",
951
985
  keypress: "touchepress\xE9e",
952
986
  focus: "focus",
953
987
  blur: "flou",
@@ -1033,6 +1067,9 @@ var fr = {
1033
1067
  properties: "propri\xE9t\xE9s"
1034
1068
  },
1035
1069
  expressions: {
1070
+ characters: "caract\xE8res",
1071
+ inclusive: "inclusif",
1072
+ exclusive: "exclusif",
1036
1073
  first: "premier",
1037
1074
  last: "dernier",
1038
1075
  next: "suivant",
@@ -1123,7 +1160,8 @@ var de = {
1123
1160
  // löschen is a remove alternative in the profile
1124
1161
  close: "schlie\xDFen",
1125
1162
  open: "\xF6ffnen",
1126
- select: "ausw\xE4hlen",
1163
+ select: "markieren",
1164
+ // Batch 3: auswählen is the pick keyword — bare select rendered with it parses null
1127
1165
  clone: "klonen",
1128
1166
  prepend: "voranstellen",
1129
1167
  focus: "fokussieren"
@@ -1149,18 +1187,27 @@ var de = {
1149
1187
  events: {
1150
1188
  click: "klick",
1151
1189
  dblclick: "doppelklick",
1152
- mousedown: "mausunten",
1153
- mouseup: "mausoben",
1190
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
1191
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
1192
+ // shattered to their first word — live broken listeners in repeat-until-event).
1193
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
1194
+ mousedown: "mousedown",
1195
+ mouseup: "mouseup",
1154
1196
  mouseenter: "mauseintreten",
1155
1197
  mouseleave: "mausverlassen",
1156
- mouseover: "maus\xFCber",
1157
- mouseout: "maushinaus",
1198
+ // V3 Batch 2: fused/dead event words realigned to the de tokenizer's
1199
+ // registered forms (S5b's `maus über`/`taste runter` are aspirational — they
1200
+ // do not tokenize; `mausüber` etc. captured event=expression:undefined).
1201
+ mouseover: "maus dr\xFCber",
1202
+ mouseout: "maus weg",
1158
1203
  mousemove: "mausbewegen",
1159
- keydown: "tasteunten",
1160
- keyup: "tasteoben",
1204
+ keydown: "taste unten",
1205
+ keyup: "taste oben",
1161
1206
  keypress: "tastedr\xFCcken",
1162
1207
  focus: "fokus",
1163
- blur: "unscharf",
1208
+ // matches commands.blur (which shadows this at render time) and the live
1209
+ // corpus render; `unscharf` was dead vocab that captured no event
1210
+ blur: "defokussieren",
1164
1211
  change: "\xE4ndern",
1165
1212
  input: "eingabe",
1166
1213
  submit: "absenden",
@@ -1243,6 +1290,9 @@ var de = {
1243
1290
  properties: "eigenschaften"
1244
1291
  },
1245
1292
  expressions: {
1293
+ characters: "Zeichen",
1294
+ inclusive: "inklusiv",
1295
+ exclusive: "exklusiv",
1246
1296
  first: "erste",
1247
1297
  last: "letzte",
1248
1298
  next: "n\xE4chste",
@@ -1335,7 +1385,8 @@ var ja = {
1335
1385
  clear: "\u30AF\u30EA\u30A2",
1336
1386
  close: "\u9589\u3058\u308B",
1337
1387
  open: "\u958B\u304F",
1338
- select: "\u9078\u629E",
1388
+ select: "\u9078\u3076",
1389
+ // Batch 3: 選択 is the pick keyword — bare select rendered with it parses null
1339
1390
  clone: "\u8907\u88FD",
1340
1391
  prepend: "\u5148\u982D\u8FFD\u52A0",
1341
1392
  socket: "\u30BD\u30B1\u30C3\u30C8"
@@ -1360,17 +1411,22 @@ var ja = {
1360
1411
  },
1361
1412
  events: {
1362
1413
  click: "\u30AF\u30EA\u30C3\u30AF",
1363
- dblclick: "\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF",
1414
+ dblclick: "dblclick",
1364
1415
  mousedown: "\u30DE\u30A6\u30B9\u62BC\u4E0B",
1365
1416
  mouseup: "\u30DE\u30A6\u30B9\u89E3\u653E",
1366
- mouseenter: "\u30DE\u30A6\u30B9\u5165\u308B",
1367
- mouseleave: "\u30DE\u30A6\u30B9\u96E2\u308C\u308B",
1368
- mouseover: "\u30DE\u30A6\u30B9\u4E0A",
1369
- mouseout: "\u30DE\u30A6\u30B9\u5916",
1370
- mousemove: "\u30DE\u30A6\u30B9\u79FB\u52D5",
1371
- keydown: "\u30AD\u30FC\u62BC\u4E0B",
1372
- keyup: "\u30AD\u30FC\u89E3\u653E",
1373
- keypress: "\u30AD\u30FC\u62BC\u3059",
1417
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
1418
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
1419
+ mouseenter: "mouseenter",
1420
+ mouseleave: "mouseleave",
1421
+ // V3 Batch 2: kanji compounds realigned to the S5b/tokenizer katakana
1422
+ // loanwords (the standard JS event terms; the compounds captured
1423
+ // event=expression:undefined — broken listeners)
1424
+ mouseover: "\u30DE\u30A6\u30B9\u30AA\u30FC\u30D0\u30FC",
1425
+ mouseout: "\u30DE\u30A6\u30B9\u30A2\u30A6\u30C8",
1426
+ mousemove: "mousemove",
1427
+ keydown: "\u30AD\u30FC\u30C0\u30A6\u30F3",
1428
+ keyup: "\u30AD\u30FC\u30A2\u30C3\u30D7",
1429
+ keypress: "\u30AD\u30FC\u30D7\u30EC\u30B9",
1374
1430
  focus: "\u30D5\u30A9\u30FC\u30AB\u30B9",
1375
1431
  blur: "\u307C\u304B\u3057",
1376
1432
  change: "\u5909\u66F4",
@@ -1378,13 +1434,13 @@ var ja = {
1378
1434
  submit: "\u9001\u4FE1",
1379
1435
  reset: "\u30EA\u30BB\u30C3\u30C8",
1380
1436
  load: "\u8AAD\u307F\u8FBC\u307F",
1381
- unload: "\u8AAD\u307F\u8FBC\u307F\u89E3\u9664",
1437
+ unload: "unload",
1382
1438
  resize: "\u30B5\u30A4\u30BA\u5909\u66F4",
1383
1439
  scroll: "\u30B9\u30AF\u30ED\u30FC\u30EB",
1384
- touchstart: "\u30BF\u30C3\u30C1\u958B\u59CB",
1385
- touchend: "\u30BF\u30C3\u30C1\u7D42\u4E86",
1386
- touchmove: "\u30BF\u30C3\u30C1\u79FB\u52D5",
1387
- touchcancel: "\u30BF\u30C3\u30C1\u30AD\u30E3\u30F3\u30BB\u30EB"
1440
+ touchstart: "touchstart",
1441
+ touchend: "touchend",
1442
+ touchmove: "touchmove",
1443
+ touchcancel: "touchcancel"
1388
1444
  },
1389
1445
  logical: {
1390
1446
  when: "\u6642",
@@ -1456,6 +1512,9 @@ var ja = {
1456
1512
  properties: "\u30D7\u30ED\u30D1\u30C6\u30A3\u7FA4"
1457
1513
  },
1458
1514
  expressions: {
1515
+ characters: "\u6587\u5B57",
1516
+ inclusive: "\u542B\u3080",
1517
+ exclusive: "\u9664\u304F",
1459
1518
  first: "\u6700\u521D",
1460
1519
  last: "\u6700\u5F8C",
1461
1520
  next: "\u6B21",
@@ -1542,7 +1601,8 @@ var ar = {
1542
1601
  // امسح is a remove alternative in the profile
1543
1602
  close: "\u0623\u063A\u0644\u0642",
1544
1603
  open: "\u0627\u0641\u062A\u062D",
1545
- select: "\u0627\u062E\u062A\u0631",
1604
+ select: "\u0638\u0644\u0644",
1605
+ // Batch 3: اختر is the pick keyword — bare select rendered with it parses null
1546
1606
  clone: "\u0627\u0633\u062A\u0646\u0633\u062E",
1547
1607
  prepend: "\u0633\u0628\u0642",
1548
1608
  socket: "\u0645\u0642\u0628\u0633"
@@ -1567,31 +1627,33 @@ var ar = {
1567
1627
  },
1568
1628
  events: {
1569
1629
  click: "\u0646\u0642\u0631",
1570
- dblclick: "\u0646\u0642\u0631 \u0645\u0632\u062F\u0648\u062C",
1571
- mousedown: "\u0641\u0623\u0631\u0629 \u0623\u0633\u0641\u0644",
1572
- mouseup: "\u0641\u0623\u0631\u0629 \u0623\u0639\u0644\u0649",
1573
- mouseenter: "\u0641\u0623\u0631\u0629 \u062F\u062E\u0648\u0644",
1574
- mouseleave: "\u0641\u0623\u0631\u0629 \u062E\u0631\u0648\u062C",
1630
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
1631
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
1632
+ dblclick: "dblclick",
1633
+ mousedown: "mousedown",
1634
+ mouseup: "mouseup",
1635
+ mouseenter: "mouseenter",
1636
+ mouseleave: "mouseleave",
1575
1637
  mouseover: "\u0641\u0623\u0631\u0629 \u0641\u0648\u0642",
1576
- mouseout: "\u0641\u0623\u0631\u0629 \u062E\u0627\u0631\u062C",
1577
- mousemove: "\u0641\u0623\u0631\u0629 \u062A\u062D\u0631\u0643",
1638
+ mouseout: "mouseout",
1639
+ mousemove: "mousemove",
1578
1640
  keydown: "\u0645\u0641\u062A\u0627\u062D \u0623\u0633\u0641\u0644",
1579
1641
  keyup: "\u0645\u0641\u062A\u0627\u062D \u0623\u0639\u0644\u0649",
1580
- keypress: "\u0645\u0641\u062A\u0627\u062D \u0636\u063A\u0637",
1642
+ keypress: "keypress",
1581
1643
  focus: "\u062A\u0631\u0643\u064A\u0632",
1582
1644
  blur: "\u0636\u0628\u0627\u0628\u064A\u0629",
1583
1645
  change: "\u062A\u063A\u064A\u064A\u0631",
1584
1646
  input: "\u0625\u062F\u062E\u0627\u0644",
1585
1647
  submit: "\u0625\u0631\u0633\u0627\u0644",
1586
- reset: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646",
1648
+ reset: "reset",
1587
1649
  load: "\u062A\u062D\u0645\u064A\u0644",
1588
- unload: "\u0625\u0644\u063A\u0627\u0621 \u062A\u062D\u0645\u064A\u0644",
1650
+ unload: "unload",
1589
1651
  resize: "\u062A\u063A\u064A\u064A\u0631 \u062D\u062C\u0645",
1590
1652
  scroll: "\u062A\u0645\u0631\u064A\u0631",
1591
- touchstart: "\u0628\u062F\u0627\u064A\u0629 \u0644\u0645\u0633",
1592
- touchend: "\u0646\u0647\u0627\u064A\u0629 \u0644\u0645\u0633",
1593
- touchmove: "\u062A\u062D\u0631\u0643 \u0644\u0645\u0633",
1594
- touchcancel: "\u0625\u0644\u063A\u0627\u0621 \u0644\u0645\u0633"
1653
+ touchstart: "touchstart",
1654
+ touchend: "touchend",
1655
+ touchmove: "touchmove",
1656
+ touchcancel: "touchcancel"
1595
1657
  },
1596
1658
  logical: {
1597
1659
  when: "\u0639\u0646\u062F\u0645\u0627",
@@ -1663,6 +1725,9 @@ var ar = {
1663
1725
  properties: "\u062E\u0635\u0627\u0626\u0635"
1664
1726
  },
1665
1727
  expressions: {
1728
+ characters: "\u062D\u0631\u0648\u0641",
1729
+ inclusive: "\u0634\u0627\u0645\u0644",
1730
+ exclusive: "\u062D\u0635\u0631\u064A",
1666
1731
  first: "\u0623\u0648\u0644",
1667
1732
  last: "\u0622\u062E\u0631",
1668
1733
  next: "\u0627\u0644\u062A\u0627\u0644\u064A",
@@ -1750,7 +1815,8 @@ var tr = {
1750
1815
  clear: "temizle",
1751
1816
  close: "kapat",
1752
1817
  open: "a\xE7",
1753
- select: "se\xE7",
1818
+ select: "vurgula",
1819
+ // Batch 3: seç is the pick keyword — bare select rendered with it parses null
1754
1820
  clone: "klonla",
1755
1821
  prepend: "ba\u015F\u0131naekle",
1756
1822
  socket: "soket"
@@ -1775,34 +1841,40 @@ var tr = {
1775
1841
  },
1776
1842
  events: {
1777
1843
  click: "t\u0131klama",
1778
- dblclick: "\xE7ift_t\u0131klama",
1844
+ dblclick: "dblclick",
1779
1845
  // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event
1780
1846
  // recognition (mousedown → "bas" / mouseup mis-captured). Mirrors the #535
1781
1847
  // ru/uk fuse + #510 resize fix.
1782
1848
  mousedown: "farebas",
1783
1849
  mouseup: "fareb\u0131rak",
1784
- mouseenter: "fare_gir",
1785
- mouseleave: "fare_\xE7\u0131k",
1786
- mouseover: "fare_\xFCst\xFC",
1787
- mouseout: "fare_d\u0131\u015F\u0131",
1788
- mousemove: "fare_hareket",
1789
- keydown: "tu\u015F_bas",
1790
- keyup: "tu\u015F_b\u0131rak",
1791
- keypress: "tu\u015F_bas\u0131m",
1850
+ mouseenter: "mouseenter",
1851
+ mouseleave: "mouseleave",
1852
+ // V3 Batch 2: same `_`-split class (tuş_bas captured verbatim `bas` — a
1853
+ // listener for a DOM event named "bas") — realigned to the S5b/tokenizer
1854
+ // fused forms.
1855
+ mouseover: "farei\xE7inde",
1856
+ mouseout: "fared\u0131\u015F\u0131nda",
1857
+ mousemove: "mousemove",
1858
+ keydown: "tu\u015Fbasma",
1859
+ keyup: "tu\u015Fb\u0131rakma",
1860
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
1861
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
1862
+ keypress: "keypress",
1792
1863
  focus: "odak",
1793
1864
  blur: "bulan\u0131k",
1794
1865
  change: "de\u011Fi\u015Fim",
1795
1866
  input: "giri\u015F",
1796
- submit: "g\xF6nder",
1867
+ submit: "g\xF6nderme",
1868
+ // Batch 3: gönder is the send verb — on-submit listener captured event "send"
1797
1869
  reset: "s\u0131f\u0131rla",
1798
1870
  load: "y\xFCkle",
1799
- unload: "y\xFCkle_kald\u0131r",
1871
+ unload: "unload",
1800
1872
  resize: "boyutland\u0131rma",
1801
1873
  scroll: "kayd\u0131r",
1802
- touchstart: "dokunma_ba\u015Fla",
1803
- touchend: "dokunma_bitir",
1804
- touchmove: "dokunma_hareket",
1805
- touchcancel: "dokunma_iptal"
1874
+ touchstart: "touchstart",
1875
+ touchend: "touchend",
1876
+ touchmove: "touchmove",
1877
+ touchcancel: "touchcancel"
1806
1878
  },
1807
1879
  logical: {
1808
1880
  when: "iken",
@@ -1873,6 +1945,9 @@ var tr = {
1873
1945
  properties: "\xF6zellikler"
1874
1946
  },
1875
1947
  expressions: {
1948
+ characters: "karakterler",
1949
+ inclusive: "dahil",
1950
+ exclusive: "hari\xE7",
1876
1951
  first: "ilk",
1877
1952
  // 'son' is also the END keyword emission (block terminator), and the
1878
1953
  // parser's end-recognizers match it by value — so a positional `last`
@@ -1969,9 +2044,11 @@ var id = {
1969
2044
  breakpoint: "titik-henti",
1970
2045
  clear: "bersihkan",
1971
2046
  // hapus is the remove PRIMARY in the profile
1972
- close: "tutup",
2047
+ close: "tutupkan",
2048
+ // Batch 3: tutup is the hide keyword — rendered close parsed as action=hide
1973
2049
  open: "buka",
1974
- select: "pilih",
2050
+ select: "tandai",
2051
+ // Batch 3: pilih is the pick keyword — bare select rendered with it parses null
1975
2052
  clone: "klon",
1976
2053
  prepend: "awali"
1977
2054
  },
@@ -1995,17 +2072,27 @@ var id = {
1995
2072
  },
1996
2073
  events: {
1997
2074
  click: "klik",
1998
- dblclick: "klik_ganda",
1999
- mousedown: "tekan_mouse",
2000
- mouseup: "lepas_mouse",
2001
- mouseenter: "mouse_masuk",
2002
- mouseleave: "mouse_keluar",
2003
- mouseover: "mouse_atas",
2004
- mouseout: "mouse_luar",
2005
- mousemove: "gerak_mouse",
2075
+ dblclick: "dblclick",
2076
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
2077
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
2078
+ // shattered to their first word — live broken listeners in repeat-until-event).
2079
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
2080
+ mousedown: "mousedown",
2081
+ mouseup: "mouseup",
2082
+ mouseenter: "mouseenter",
2083
+ mouseleave: "mouseleave",
2084
+ // V3 Batch 2: mouse_atas/mouse_luar captured no event (the S5b forms
2085
+ // `mouse masuk`/`mouse keluar` are aspirational — they don't tokenize
2086
+ // either) — realigned to the tokenizer-registered natives. keydown keeps
2087
+ // tekan_tombol (captures keydown via the registered `tekan`; S5b-aliased).
2088
+ // keyup has NO parseable native (lepas is unregistered) → English
2089
+ // passthrough, matching the blur/reset precedent below.
2090
+ mouseover: "arahkan",
2091
+ mouseout: "tinggalkan",
2092
+ mousemove: "mousemove",
2006
2093
  keydown: "tekan_tombol",
2007
- keyup: "lepas_tombol",
2008
- keypress: "pencet_tombol",
2094
+ keyup: "keyup",
2095
+ keypress: "keypress",
2009
2096
  focus: "fokus",
2010
2097
  blur: "blur",
2011
2098
  change: "ubah",
@@ -2016,10 +2103,12 @@ var id = {
2016
2103
  unload: "bongkar",
2017
2104
  resize: "ubah_ukuran",
2018
2105
  scroll: "gulir",
2019
- touchstart: "mulai_sentuh",
2020
- touchend: "akhir_sentuh",
2021
- touchmove: "gerak_sentuh",
2022
- touchcancel: "batal_sentuh"
2106
+ touchstart: "touchstart",
2107
+ touchend: "touchend",
2108
+ touchmove: "touchmove",
2109
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
2110
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
2111
+ touchcancel: "touchcancel"
2023
2112
  },
2024
2113
  logical: {
2025
2114
  when: "ketika",
@@ -2090,6 +2179,9 @@ var id = {
2090
2179
  properties: "properti_properti"
2091
2180
  },
2092
2181
  expressions: {
2182
+ characters: "karakter",
2183
+ inclusive: "inklusif",
2184
+ exclusive: "eksklusif",
2093
2185
  first: "pertama",
2094
2186
  last: "terakhir",
2095
2187
  next: "berikutnya",
@@ -2195,8 +2287,10 @@ var qu = {
2195
2287
  breakpoint: "sayachinay",
2196
2288
  clear: "pichay",
2197
2289
  close: "wichqay",
2198
- open: "kichay",
2199
- select: "akllay",
2290
+ open: "paskay",
2291
+ // Batch 3: kichay is the trigger keyword — rendered open parsed null
2292
+ select: "marcay",
2293
+ // Batch 3: akllay is the pick keyword — bare select rendered with it parses null
2200
2294
  clone: "kikinchay",
2201
2295
  prepend: "\xF1awpachiy",
2202
2296
  socket: "tinkina"
@@ -2221,33 +2315,42 @@ var qu = {
2221
2315
  },
2222
2316
  events: {
2223
2317
  click: "\xF1itiy",
2224
- dblclick: "iskay_\xF1itiy",
2318
+ dblclick: "dblclick",
2225
2319
  // Fused (no `_`): the semantic tokenizer splits on `_` — and `rat_ñitiy` then
2226
2320
  // mis-captured as the `click` event (ñitiy→click). Mirrors the #535 ru/uk fuse.
2227
2321
  mousedown: "rat\xF1itiy",
2228
2322
  mouseup: "rathuqariy",
2229
- mouseenter: "rat_yaykuy",
2230
- mouseleave: "rat_lluqsiy",
2231
- mouseover: "rat_hawapi",
2232
- mouseout: "rat_hawamanta",
2233
- mousemove: "rat_kuyuy",
2234
- keydown: "yupana_\xF1itiy",
2235
- keyup: "yupana_huqariy",
2236
- keypress: "yupana_\xF1itana",
2323
+ mouseenter: "mouseenter",
2324
+ mouseleave: "mouseleave",
2325
+ mouseover: "mouseover",
2326
+ mouseout: "mouseout",
2327
+ mousemove: "mousemove",
2328
+ // V3 Batch 2: `yupana_ñitiy` split at `_` and mis-captured as the `click`
2329
+ // event (ñitiy→click, the same mechanism as the mousedown fuse above);
2330
+ // `yupana_huqariy` captured verbatim `huqariy`. Realigned to the
2331
+ // S5b/tokenizer forms.
2332
+ keydown: "llave uray",
2333
+ keyup: "llave hawa",
2334
+ keypress: "keypress",
2237
2335
  focus: "qhaway",
2238
2336
  blur: "paqariy",
2239
- change: "tikray",
2337
+ change: "kambiay",
2338
+ // Batch 3: tikray is the toggle verb — on-change listener captured event "toggle"
2240
2339
  input: "yaykuchiy",
2241
- submit: "kachay",
2242
- reset: "qallariy",
2340
+ submit: "apaykachay",
2341
+ // Batch 3: kachay is the send verb — on-submit captured "send" in one corpus slot
2342
+ reset: "musuqchay",
2343
+ // Batch 3: qallariy is the init/start word — on-reset listener captured event "default"
2243
2344
  load: "apakuy",
2244
- unload: "urmay",
2345
+ unload: "unload",
2245
2346
  resize: "hatun_kay",
2246
2347
  scroll: "kunray",
2247
- touchstart: "llamiy_qallay",
2248
- touchend: "llamiy_tukuy",
2249
- touchmove: "llamiy_kuyuy",
2250
- touchcancel: "llamiy_hark_ay"
2348
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
2349
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
2350
+ touchstart: "touchstart",
2351
+ touchend: "touchend",
2352
+ touchmove: "touchmove",
2353
+ touchcancel: "touchcancel"
2251
2354
  },
2252
2355
  logical: {
2253
2356
  when: "maykama",
@@ -2322,6 +2425,11 @@ var qu = {
2322
2425
  properties: "kanaykuna"
2323
2426
  },
2324
2427
  expressions: {
2428
+ // Pick unit word (arc 3): native-first per qu convention — `sanampa`
2429
+ // ("sign/letter", the standard term for alphabet characters) over a
2430
+ // loanword. Paired with the QUECHUA_EXTRAS entry in the semantic
2431
+ // tokenizer; both surfaces must match verbatim.
2432
+ characters: "sanampa",
2325
2433
  first: "\xF1awpaq",
2326
2434
  last: "qhipa",
2327
2435
  next: "qhipantin",
@@ -2380,7 +2488,10 @@ var sw = {
2380
2488
  wait: "ngoja",
2381
2489
  fetch: "leta",
2382
2490
  call: "ita",
2383
- return: "rudi",
2491
+ // `rudisha` (transitive, "give back a value"), not `rudi` ("go back"): the
2492
+ // semantic profile reads `rudisha`/`rejea`, so emitting `rudi` produced sw code
2493
+ // the parser could not read back. Kept clear of `rudia` (= `repeat`).
2494
+ return: "rudisha",
2384
2495
  make: "tengeneza",
2385
2496
  // auditor: dict emitted a word the profile reads differently
2386
2497
  log: "andika",
@@ -2394,7 +2505,8 @@ var sw = {
2394
2505
  go: "nenda",
2395
2506
  pushUrl: "sukumaUrl",
2396
2507
  replaceUrl: "badilishaUrl",
2397
- copy: "nakili",
2508
+ copy: "nakala",
2509
+ // Batch 3: nakili is the clone keyword — rendered copy parsed as action=clone
2398
2510
  pick: "chagua",
2399
2511
  beep: "lia",
2400
2512
  js: "js",
@@ -2413,7 +2525,8 @@ var sw = {
2413
2525
  // futa is a remove alternative in the profile
2414
2526
  close: "funga",
2415
2527
  open: "fungua",
2416
- select: "chagua",
2528
+ select: "alama",
2529
+ // Batch 3: chagua is the pick keyword — bare select rendered with it parses null
2417
2530
  clone: "nakili",
2418
2531
  prepend: "tanguliza",
2419
2532
  focus: "lenga",
@@ -2446,31 +2559,42 @@ var sw = {
2446
2559
  },
2447
2560
  events: {
2448
2561
  click: "bonyeza",
2449
- dblclick: "bonyeza_mara_mbili",
2562
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
2563
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
2564
+ dblclick: "dblclick",
2450
2565
  mousedown: "panya_shuka",
2451
2566
  mouseup: "panya_juu",
2452
2567
  mouseenter: "panya_ingia",
2453
2568
  mouseleave: "panya_toka",
2454
- mouseover: "panya_juu",
2569
+ // V3 Batch 2: panya_juu is mouseup's form (shared here by mistake — the
2570
+ // tokenizer deliberately maps it to mouseup for the corpus row, so a
2571
+ // mouseover handler captured `mouseup`) — realigned to the
2572
+ // tokenizer-registered `sogeza juu`.
2573
+ mouseover: "sogeza juu",
2455
2574
  mouseout: "panya_nje",
2456
2575
  mousemove: "panya_sogea",
2457
2576
  keydown: "kitufe_shuka",
2458
2577
  keyup: "kitufe_juu",
2459
- keypress: "kitufe_bonyeza",
2460
- focus: "zingatia",
2461
- blur: "poteza_macho",
2462
- change: "badilisha",
2578
+ keypress: "keypress",
2579
+ // V3 Batch 2: zingatia captured no event → lenga (S5b/tokenizer form);
2580
+ // poteza_macho was a null parse → `blur` (the S5b identity form — matches
2581
+ // the live corpus render `kwenye blur`); badilisha is the toggle VERB
2582
+ // homonym (a change handler captured event=`toggle` — a listener for a DOM
2583
+ // event named "toggle") → kubadilisha (S5b/tokenizer form).
2584
+ focus: "lenga",
2585
+ blur: "blur",
2586
+ change: "kubadilisha",
2463
2587
  input: "ingizo",
2464
2588
  submit: "wasilisha",
2465
- reset: "weka_upya",
2589
+ reset: "reset",
2466
2590
  load: "pakia",
2467
2591
  unload: "shuka",
2468
2592
  resize: "badilisha_ukubwa",
2469
2593
  scroll: "sogeza",
2470
- touchstart: "gusa_anza",
2471
- touchend: "gusa_mwisho",
2472
- touchmove: "gusa_sogea",
2473
- touchcancel: "gusa_ghairi"
2594
+ touchstart: "touchstart",
2595
+ touchend: "touchend",
2596
+ touchmove: "touchmove",
2597
+ touchcancel: "touchcancel"
2474
2598
  },
2475
2599
  logical: {
2476
2600
  when: "wakati",
@@ -2541,6 +2665,7 @@ var sw = {
2541
2665
  properties: "mali"
2542
2666
  },
2543
2667
  expressions: {
2668
+ characters: "herufi",
2544
2669
  first: "kwanza",
2545
2670
  // 'mwisho' is the END keyword (block terminator) — the tokenizer's keyword
2546
2671
  // map is last-wins, so a positional `last` emission of 'mwisho' reads as
@@ -2670,18 +2795,21 @@ var pt = {
2670
2795
  mouseup: "mouseCima",
2671
2796
  mouseenter: "mouseEntrar",
2672
2797
  mouseleave: "mouseSair",
2673
- mouseover: "mouseSobre",
2674
- mouseout: "mouseFora",
2798
+ // V3 Batch 2: camelCase forms split to the S5b/tokenizer-known forms (the
2799
+ // fused spellings captured event=expression:undefined — broken listeners)
2800
+ mouseover: "mouse sobre",
2801
+ mouseout: "mouse fora",
2675
2802
  mousemove: "mouseMover",
2676
- keydown: "teclaBaixo",
2677
- keyup: "teclaCima",
2803
+ keydown: "tecla baixo",
2804
+ keyup: "tecla cima",
2678
2805
  keypress: "teclaPressionar",
2679
2806
  focus: "foco",
2680
2807
  blur: "desfoque",
2681
2808
  change: "mudan\xE7a",
2682
2809
  input: "entrada",
2683
2810
  submit: "envio",
2684
- reset: "reiniciar",
2811
+ reset: "redefinir",
2812
+ // Batch 3: reiniciar captured on.event as expression (broken listener) — profile word round-trips
2685
2813
  load: "carregar",
2686
2814
  unload: "descarregar",
2687
2815
  resize: "redimensionar",
@@ -2760,6 +2888,9 @@ var pt = {
2760
2888
  properties: "propriedades"
2761
2889
  },
2762
2890
  expressions: {
2891
+ characters: "caracteres",
2892
+ inclusive: "inclusivo",
2893
+ exclusive: "exclusivo",
2763
2894
  first: "primeiro",
2764
2895
  last: "\xFAltimo",
2765
2896
  next: "pr\xF3ximo",
@@ -2870,8 +3001,12 @@ var it = {
2870
3001
  events: {
2871
3002
  click: "clic",
2872
3003
  dblclick: "doppioclic",
2873
- mousedown: "mousegi\xF9",
2874
- mouseup: "mousesu",
3004
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
3005
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
3006
+ // shattered to their first word — live broken listeners in repeat-until-event).
3007
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
3008
+ mousedown: "mousedown",
3009
+ mouseup: "mouseup",
2875
3010
  mouseenter: "mouseentra",
2876
3011
  mouseleave: "mouseesce",
2877
3012
  mouseover: "mousesopra",
@@ -2881,11 +3016,13 @@ var it = {
2881
3016
  keyup: "tastosu",
2882
3017
  keypress: "tastopremi",
2883
3018
  focus: "fuoco",
2884
- blur: "sfuocatura",
3019
+ blur: "sfuocare",
3020
+ // Batch 3: the noun form parsed the blur command with no patient; the verb round-trips both event and command slots
2885
3021
  change: "cambio",
2886
3022
  input: "input",
2887
3023
  submit: "invio",
2888
- reset: "reset",
3024
+ reset: "reimpostare",
3025
+ // Batch 3: English passthrough captured on.event as expression — profile verb round-trips
2889
3026
  load: "carica",
2890
3027
  unload: "scarica",
2891
3028
  resize: "ridimensiona",
@@ -2964,6 +3101,9 @@ var it = {
2964
3101
  properties: "propriet\xE0"
2965
3102
  },
2966
3103
  expressions: {
3104
+ characters: "caratteri",
3105
+ inclusive: "inclusivo",
3106
+ exclusive: "esclusivo",
2967
3107
  first: "primo",
2968
3108
  last: "ultimo",
2969
3109
  next: "prossimo",
@@ -3046,15 +3186,18 @@ var vi = {
3046
3186
  init: "kh\u1EDFi t\u1EA1o",
3047
3187
  behavior: "h\xE0nh vi",
3048
3188
  install: "c\xE0i \u0111\u1EB7t",
3049
- clone: "sao ch\xE9p",
3050
- prepend: "th\xEAm \u0111\u1EA7u",
3189
+ clone: "nh\xE2n b\u1EA3n",
3190
+ // Batch 3: 'sao chép' is the copy verb — rendered clone parsed as action=copy
3191
+ prepend: "th\xEAm v\xE0o \u0111\u1EA7u",
3192
+ // Batch 3: 'thêm đầu' shatters at 'thêm' (add) — parsed as action=add
3051
3193
  else: "kh\xF4ng th\xEC",
3052
3194
  breakpoint: "\u0111i\u1EC3m-d\u1EEBng",
3053
3195
  clear: "t\u1EA9y",
3054
3196
  // xóa is the remove PRIMARY in the profile
3055
3197
  close: "\u0111\xF3ng",
3056
3198
  open: "m\u1EDF",
3057
- select: "ch\u1ECDn"
3199
+ select: "\u0111\xE1nh-d\u1EA5u"
3200
+ // Batch 3: 'chọn' is the pick keyword — bare select rendered with it parses null
3058
3201
  },
3059
3202
  modifiers: {
3060
3203
  into: "v\xE0o",
@@ -3077,21 +3220,24 @@ var vi = {
3077
3220
  },
3078
3221
  events: {
3079
3222
  click: "nh\u1EA5p",
3080
- dblclick: "nh\u1EA5p \u0111\xFAp",
3223
+ dblclick: "dblclick",
3081
3224
  input: "nh\u1EADp",
3082
- change: "thay \u0111\u1ED5i",
3083
- submit: "g\u1EEDi",
3084
- keydown: "ph\xEDm xu\u1ED1ng",
3085
- keyup: "ph\xEDm l\xEAn",
3086
- keypress: "nh\u1EA5n ph\xEDm",
3087
- mouseover: "chu\u1ED9t v\xE0o",
3088
- mouseout: "chu\u1ED9t ra",
3089
- mouseenter: "chu\u1ED9t v\xE0o",
3090
- mouseleave: "chu\u1ED9t r\u1EDDi",
3091
- focus: "t\u1EADp trung",
3092
- blur: "m\u1EA5t t\u1EADp trung",
3093
- reset: "\u0111\u1EB7t-l\u1EA1i",
3094
- load: "t\u1EA3i",
3225
+ change: "change",
3226
+ submit: "n\u1ED9p",
3227
+ // Batch 3: 'gửi' is the send verb — on-submit listener captured event "send"
3228
+ keydown: "keydown",
3229
+ keyup: "keyup",
3230
+ keypress: "keypress",
3231
+ mouseover: "mouseover",
3232
+ mouseout: "mouseout",
3233
+ mouseenter: "mouseenter",
3234
+ mouseleave: "mouseleave",
3235
+ focus: "focus",
3236
+ blur: "blur",
3237
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
3238
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
3239
+ reset: "reset",
3240
+ load: "load",
3095
3241
  scroll: "cu\u1ED9n",
3096
3242
  resize: "\u0111\u1ED5i k\xEDch th\u01B0\u1EDBc"
3097
3243
  },
@@ -3167,6 +3313,10 @@ var vi = {
3167
3313
  selected: "\u0111\u01B0\u1EE3c ch\u1ECDn"
3168
3314
  },
3169
3315
  expressions: {
3316
+ random: "ng\u1EABu nhi\xEAn",
3317
+ characters: "k\xFD t\u1EF1",
3318
+ inclusive: "bao g\u1ED3m",
3319
+ exclusive: "lo\u1EA1i tr\u1EEB",
3170
3320
  me: "t\xF4i",
3171
3321
  my: "c\u1EE7a t\xF4i",
3172
3322
  it: "n\xF3",
@@ -3258,7 +3408,8 @@ var pl = {
3258
3408
  // wyczyść is a remove alternative in the profile
3259
3409
  close: "zamknij",
3260
3410
  open: "otw\xF3rz",
3261
- select: "wybierz",
3411
+ select: "zaznacz",
3412
+ // Batch 3: wybierz is the pick keyword — bare select rendered with it parses null
3262
3413
  clone: "sklonuj",
3263
3414
  prepend: "poprzed\u017A",
3264
3415
  focus: "skup"
@@ -3284,8 +3435,12 @@ var pl = {
3284
3435
  events: {
3285
3436
  click: "klikni\u0119cie",
3286
3437
  dblclick: "podw\xF3jneklikni\u0119cie",
3287
- mousedown: "myszd\xF3\u0142",
3288
- mouseup: "myszg\xF3ra",
3438
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
3439
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
3440
+ // shattered to their first word — live broken listeners in repeat-until-event).
3441
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
3442
+ mousedown: "mousedown",
3443
+ mouseup: "mouseup",
3289
3444
  mouseenter: "myszwej\u015Bcie",
3290
3445
  mouseleave: "myszwyj\u015Bcie",
3291
3446
  mouseover: "mysznad",
@@ -3298,8 +3453,10 @@ var pl = {
3298
3453
  blur: "rozmycie",
3299
3454
  change: "zmiana",
3300
3455
  input: "wej\u015Bcie",
3301
- submit: "wy\u015Blij",
3302
- reset: "resetuj",
3456
+ submit: "wys\u0142aniu",
3457
+ // Batch 3: wyślij is the send verb — on-submit listener captured event "send"
3458
+ reset: "zresetuj",
3459
+ // Batch 3: resetuj captured on.event as expression (broken listener) — profile word round-trips
3303
3460
  load: "za\u0142aduj",
3304
3461
  unload: "wy\u0142aduj",
3305
3462
  resize: "zmie\u0144rozmiar",
@@ -3378,6 +3535,9 @@ var pl = {
3378
3535
  properties: "w\u0142a\u015Bciwo\u015Bci"
3379
3536
  },
3380
3537
  expressions: {
3538
+ characters: "znaki",
3539
+ inclusive: "w\u0142\u0105cznie",
3540
+ exclusive: "wy\u0142\u0105cznie",
3381
3541
  first: "pierwszy",
3382
3542
  last: "ostatni",
3383
3543
  next: "nast\u0119pny",
@@ -3473,7 +3633,8 @@ var russianDictionary = {
3473
3633
  clear: "\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C",
3474
3634
  close: "\u0437\u0430\u043A\u0440\u044B\u0442\u044C",
3475
3635
  open: "\u043E\u0442\u043A\u0440\u044B\u0442\u044C",
3476
- select: "\u0432\u044B\u0431\u0440\u0430\u0442\u044C"
3636
+ select: "\u0432\u044B\u0434\u0435\u043B\u0438\u0442\u044C"
3637
+ // Batch 3: выбрать is the pick keyword — bare select rendered with it parses null
3477
3638
  },
3478
3639
  modifiers: {
3479
3640
  to: "\u043A",
@@ -3515,7 +3676,8 @@ var russianDictionary = {
3515
3676
  change: "\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435",
3516
3677
  input: "\u0432\u0432\u043E\u0434",
3517
3678
  submit: "\u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0430",
3518
- reset: "\u0441\u0431\u0440\u043E\u0441",
3679
+ reset: "\u0441\u0431\u0440\u043E\u0441\u0438\u0442\u044C",
3680
+ // Batch 3: сброс captured on.event as expression (broken listener) — profile verb round-trips
3519
3681
  load: "\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430",
3520
3682
  unload: "\u0432\u044B\u0433\u0440\u0443\u0437\u043A\u0430",
3521
3683
  resize: "\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u0440\u0430\u0437\u043C\u0435\u0440\u0430",
@@ -3615,6 +3777,9 @@ var russianDictionary = {
3615
3777
  html: "html"
3616
3778
  },
3617
3779
  expressions: {
3780
+ characters: "\u0441\u0438\u043C\u0432\u043E\u043B\u044B",
3781
+ inclusive: "\u0432\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E",
3782
+ exclusive: "\u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E",
3618
3783
  first: "\u043F\u0435\u0440\u0432\u044B\u0439",
3619
3784
  last: "\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439",
3620
3785
  next: "\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439",
@@ -3710,7 +3875,8 @@ var ukrainianDictionary = {
3710
3875
  clear: "\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u0438",
3711
3876
  close: "\u0437\u0430\u043A\u0440\u0438\u0442\u0438",
3712
3877
  open: "\u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438",
3713
- select: "\u0432\u0438\u0431\u0440\u0430\u0442\u0438"
3878
+ select: "\u0432\u0438\u0434\u0456\u043B\u0438\u0442\u0438"
3879
+ // Batch 3: вибрати is the pick keyword — bare select rendered with it parses null
3714
3880
  },
3715
3881
  modifiers: {
3716
3882
  to: "\u0434\u043E",
@@ -3751,7 +3917,8 @@ var ukrainianDictionary = {
3751
3917
  change: "\u0437\u043C\u0456\u043D\u0430",
3752
3918
  input: "\u0432\u0432\u0435\u0434\u0435\u043D\u043D\u044F",
3753
3919
  submit: "\u043D\u0430\u0434\u0441\u0438\u043B\u0430\u043D\u043D\u044F",
3754
- reset: "\u0441\u043A\u0438\u0434\u0430\u043D\u043D\u044F",
3920
+ reset: "\u0441\u043A\u0438\u043D\u0443\u0442\u0438",
3921
+ // Batch 3: скидання captured on.event as expression (broken listener) — profile verb round-trips
3755
3922
  load: "\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",
3756
3923
  unload: "\u0432\u0438\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",
3757
3924
  resize: "\u0437\u043C\u0456\u043D\u0430\u0440\u043E\u0437\u043C\u0456\u0440\u0443",
@@ -3851,6 +4018,9 @@ var ukrainianDictionary = {
3851
4018
  html: "html"
3852
4019
  },
3853
4020
  expressions: {
4021
+ characters: "\u0441\u0438\u043C\u0432\u043E\u043B\u0438",
4022
+ inclusive: "\u0432\u043A\u043B\u044E\u0447\u043D\u043E",
4023
+ exclusive: "\u0432\u0438\u043A\u043B\u044E\u0447\u043D\u043E",
3854
4024
  first: "\u043F\u0435\u0440\u0448\u0438\u0439",
3855
4025
  last: "\u043E\u0441\u0442\u0430\u043D\u043D\u0456\u0439",
3856
4026
  next: "\u043D\u0430\u0441\u0442\u0443\u043F\u043D\u0438\u0439",
@@ -3935,13 +4105,15 @@ var hindiDictionary = {
3935
4105
  behavior: "\u0935\u094D\u092F\u0935\u0939\u093E\u0930",
3936
4106
  focus: "\u092B\u094B\u0915\u0938",
3937
4107
  blur: "\u0927\u0941\u0902\u0927\u0932\u093E",
3938
- clone: "\u0915\u0949\u092A\u0940",
4108
+ clone: "\u0915\u094D\u0932\u094B\u0928",
4109
+ // Batch 3: कॉपी is the copy verb — rendered clone parsed as action=copy
3939
4110
  prepend: "\u091C\u094B\u0921\u093C\u0947\u0902_\u0936\u0941\u0930\u0942",
3940
4111
  breakpoint: "\u092C\u094D\u0930\u0947\u0915\u092A\u094D\u0935\u093E\u0907\u0902\u091F",
3941
4112
  clear: "\u0938\u093E\u092B\u093C-\u0915\u0930\u0947\u0902",
3942
4113
  close: "\u092C\u0902\u0926-\u0915\u0930\u0947\u0902",
3943
4114
  open: "\u0916\u094B\u0932\u0947\u0902",
3944
- select: "\u091A\u0941\u0928\u0947\u0902",
4115
+ select: "\u091A\u093F\u0939\u094D\u0928\u093F\u0924-\u0915\u0930\u0947\u0902",
4116
+ // Batch 3: चुनें is the pick keyword — bare select rendered with it parses null
3945
4117
  socket: "\u0938\u0949\u0915\u0947\u091F"
3946
4118
  },
3947
4119
  modifiers: {
@@ -4086,6 +4258,7 @@ var hindiDictionary = {
4086
4258
  html: "html"
4087
4259
  },
4088
4260
  expressions: {
4261
+ characters: "\u0905\u0915\u094D\u0937\u0930",
4089
4262
  first: "\u092A\u0939\u0932\u093E",
4090
4263
  last: "\u0905\u0902\u0924\u093F\u092E",
4091
4264
  next: "\u0905\u0917\u0932\u093E",
@@ -4155,7 +4328,8 @@ var bengaliDictionary = {
4155
4328
  init: "\u09B6\u09C1\u09B0\u09C1",
4156
4329
  behavior: "\u0986\u099A\u09B0\u09A3",
4157
4330
  install: "\u0987\u09A8\u09B8\u09CD\u099F\u09B2",
4158
- clone: "\u0995\u09AA\u09BF",
4331
+ clone: "\u0995\u09CD\u09B2\u09CB\u09A8",
4332
+ // Batch 3: কপি is the copy verb — rendered clone parsed as action=copy
4159
4333
  swap: "\u09AC\u09A6\u09B2",
4160
4334
  morph: "\u09B0\u09C2\u09AA\u09BE\u09A8\u09CD\u09A4\u09B0",
4161
4335
  beep: "\u09AC\u09C0\u09AA",
@@ -4202,10 +4376,12 @@ var bengaliDictionary = {
4202
4376
  focus: "\u09AB\u09CB\u0995\u09BE\u09B8",
4203
4377
  blur: "\u099D\u09BE\u09AA\u09B8\u09BE",
4204
4378
  reset: "\u09B0\u09BF\u09B8\u09C7\u099F",
4205
- keydown: "\u0995\u09BF-\u09A1\u09BE\u0989\u09A8",
4206
- keyup: "\u0995\u09BF-\u0986\u09AA",
4207
- mouseover: "\u09AE\u09BE\u0989\u09B8-\u0993\u09AD\u09BE\u09B0",
4208
- mouseout: "\u09AE\u09BE\u0989\u09B8-\u0986\u0989\u099F",
4379
+ keydown: "keydown",
4380
+ keyup: "keyup",
4381
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
4382
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
4383
+ mouseover: "mouseover",
4384
+ mouseout: "mouseout",
4209
4385
  scroll: "\u09B8\u09CD\u0995\u09CD\u09B0\u09CB\u09B2",
4210
4386
  resize: "\u09B0\u09BF\u09B8\u09BE\u0987\u099C",
4211
4387
  every: "\u09AA\u09CD\u09B0\u09A4\u09BF"
@@ -4267,6 +4443,9 @@ var bengaliDictionary = {
4267
4443
  checked: "\u099A\u09C7\u0995 \u0995\u09B0\u09BE"
4268
4444
  },
4269
4445
  expressions: {
4446
+ characters: "\u0985\u0995\u09CD\u09B7\u09B0",
4447
+ inclusive: "\u0985\u09A8\u09CD\u09A4\u09B0\u09CD\u09AD\u09C1\u0995\u09CD\u09A4",
4448
+ exclusive: "\u09AC\u09BE\u09A6",
4270
4449
  first: "\u09AA\u09CD\u09B0\u09A5\u09AE",
4271
4450
  last: "\u09B6\u09C7\u09B7",
4272
4451
  next: "\u09AA\u09B0\u09AC\u09B0\u09CD\u09A4\u09C0",
@@ -4335,7 +4514,8 @@ var thaiDictionary = {
4335
4514
  init: "\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19",
4336
4515
  behavior: "\u0E1E\u0E24\u0E15\u0E34\u0E01\u0E23\u0E23\u0E21",
4337
4516
  install: "\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",
4338
- clone: "\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01",
4517
+ clone: "\u0E42\u0E04\u0E25\u0E19",
4518
+ // Batch 3: คัดลอก is the copy verb — rendered clone parsed as action=copy
4339
4519
  swap: "\u0E2A\u0E25\u0E31\u0E1A\u0E17\u0E35\u0E48",
4340
4520
  morph: "\u0E41\u0E1B\u0E25\u0E07\u0E23\u0E48\u0E32\u0E07",
4341
4521
  beep: "\u0E1A\u0E35\u0E4A\u0E1A",
@@ -4350,7 +4530,8 @@ var thaiDictionary = {
4350
4530
  clear: "\u0E40\u0E04\u0E25\u0E35\u0E22\u0E23\u0E4C",
4351
4531
  close: "\u0E1B\u0E34\u0E14",
4352
4532
  open: "\u0E40\u0E1B\u0E34\u0E14",
4353
- select: "\u0E40\u0E25\u0E37\u0E2D\u0E01"
4533
+ select: "\u0E17\u0E33\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E2B\u0E21\u0E32\u0E22"
4534
+ // Batch 3: เลือก is the pick keyword — bare select rendered with it parses null
4354
4535
  },
4355
4536
  modifiers: {
4356
4537
  to: "\u0E44\u0E1B\u0E22\u0E31\u0E07",
@@ -4445,6 +4626,9 @@ var thaiDictionary = {
4445
4626
  checked: "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27"
4446
4627
  },
4447
4628
  expressions: {
4629
+ characters: "\u0E2D\u0E31\u0E01\u0E02\u0E23\u0E30",
4630
+ inclusive: "\u0E23\u0E27\u0E21",
4631
+ exclusive: "\u0E22\u0E01\u0E40\u0E27\u0E49\u0E19",
4448
4632
  first: "\u0E41\u0E23\u0E01",
4449
4633
  last: "\u0E2A\u0E38\u0E14\u0E17\u0E49\u0E32\u0E22",
4450
4634
  next: "\u0E16\u0E31\u0E14\u0E44\u0E1B",
@@ -4531,7 +4715,8 @@ var malayDictionary = {
4531
4715
  // padam is a remove alternative in the profile
4532
4716
  close: "tutup",
4533
4717
  open: "buka",
4534
- select: "pilih",
4718
+ select: "tandai",
4719
+ // Batch 3: pilih is the pick keyword — bare select rendered with it parses null
4535
4720
  socket: "soket"
4536
4721
  // derived from the ms profile (socket.primary); see generate-i18n-dictionaries
4537
4722
  },
@@ -4671,6 +4856,9 @@ var malayDictionary = {
4671
4856
  checked: "ditanda"
4672
4857
  },
4673
4858
  expressions: {
4859
+ characters: "aksara",
4860
+ inclusive: "inklusif",
4861
+ exclusive: "eksklusif",
4674
4862
  first: "pertama",
4675
4863
  last: "terakhir",
4676
4864
  next: "seterusnya",
@@ -4763,7 +4951,8 @@ var tagalogDictionary = {
4763
4951
  install: "ikabit",
4764
4952
  behavior: "ugali",
4765
4953
  init: "simulan",
4766
- clone: "kopyahin",
4954
+ clone: "i-clone",
4955
+ // Batch 3: kopyahin is the copy verb — rendered clone parsed as action=copy
4767
4956
  breakpoint: "breakpoint",
4768
4957
  clear: "burahin",
4769
4958
  close: "isara",
@@ -4910,6 +5099,9 @@ var tagalogDictionary = {
4910
5099
  checked: "naka_tsek"
4911
5100
  },
4912
5101
  expressions: {
5102
+ characters: "karakter",
5103
+ inclusive: "kasama",
5104
+ exclusive: "bukod",
4913
5105
  first: "una",
4914
5106
  last: "huli",
4915
5107
  next: "susunod",
@@ -5032,6 +5224,10 @@ var he = {
5032
5224
  },
5033
5225
  attributes: {},
5034
5226
  expressions: {
5227
+ random: "\u05D0\u05E7\u05E8\u05D0\u05D9",
5228
+ characters: "\u05EA\u05D5\u05D5\u05D9\u05DD",
5229
+ inclusive: "\u05DB\u05D5\u05DC\u05DC",
5230
+ exclusive: "\u05D1\u05DC\u05E2\u05D3\u05D9",
5035
5231
  last: "\u05D0\u05D7\u05E8\u05D5\u05DF"
5036
5232
  }
5037
5233
  };