@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
@@ -341,17 +341,20 @@ var es = {
341
341
  mouseup: "rat\xF3narriba",
342
342
  mouseenter: "rat\xF3nentrar",
343
343
  mouseleave: "rat\xF3nsalir",
344
- mouseover: "rat\xF3nencima",
345
- mouseout: "rat\xF3nfuera",
344
+ // V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused
345
+ // spellings captured event=expression:undefined — broken listeners)
346
+ mouseover: "rat\xF3n encima",
347
+ mouseout: "rat\xF3n fuera",
346
348
  mousemove: "rat\xF3nmover",
347
- keydown: "teclaabajo",
348
- keyup: "teclaarriba",
349
+ keydown: "tecla abajo",
350
+ keyup: "tecla arriba",
349
351
  keypress: "teclapresar",
350
352
  focus: "enfocar",
351
353
  blur: "desenfocar",
352
354
  change: "cambiar",
353
355
  input: "entrada",
354
- submit: "enviar",
356
+ submit: "env\xEDo",
357
+ // Batch 3: enviar is the send verb — on-submit listener captured event "send"
355
358
  reset: "reiniciar",
356
359
  load: "cargar",
357
360
  unload: "descargar",
@@ -431,6 +434,9 @@ var es = {
431
434
  properties: "propiedades"
432
435
  },
433
436
  expressions: {
437
+ characters: "caracteres",
438
+ inclusive: "inclusivo",
439
+ exclusive: "exclusivo",
434
440
  first: "primero",
435
441
  last: "\xFAltimo",
436
442
  next: "siguiente",
@@ -518,7 +524,8 @@ var ko = {
518
524
  clear: "\uC9C0\uC6B0\uAE30",
519
525
  close: "\uB2EB\uAE30",
520
526
  open: "\uC5F4\uAE30",
521
- select: "\uC120\uD0DD",
527
+ select: "\uACE0\uB974\uAE30",
528
+ // Batch 3: 선택 is the pick keyword — bare select rendered with it parses null
522
529
  clone: "\uBCF5\uC81C",
523
530
  prepend: "\uC55E\uC5D0\uCD94\uAC00",
524
531
  socket: "\uC18C\uCF13"
@@ -559,14 +566,17 @@ var ko = {
559
566
  change: "\uBCC0\uACBD",
560
567
  input: "\uC785\uB825",
561
568
  submit: "\uC81C\uCD9C",
562
- reset: "\uB9AC\uC14B",
569
+ reset: "\uC7AC\uC124\uC815",
570
+ // Batch 3: 리셋 captured on.event as expression (broken listener) — profile word round-trips
563
571
  load: "\uB85C\uB4DC",
564
- unload: "\uC5B8\uB85C\uB4DC",
572
+ unload: "unload",
565
573
  resize: "\uB9AC\uC0AC\uC774\uC988",
566
574
  scroll: "\uC2A4\uD06C\uB864",
567
- touchstart: "\uD130\uCE58\uC2DC\uC791",
575
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
576
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
577
+ touchstart: "touchstart",
568
578
  touchend: "\uD130\uCE58\uC885\uB8CC",
569
- touchmove: "\uD130\uCE58\uC774\uB3D9",
579
+ touchmove: "touchmove",
570
580
  touchcancel: "\uD130\uCE58\uCDE8\uC18C"
571
581
  },
572
582
  logical: {
@@ -639,6 +649,9 @@ var ko = {
639
649
  properties: "\uD504\uB85C\uD37C\uD2F0\uB4E4"
640
650
  },
641
651
  expressions: {
652
+ characters: "\uBB38\uC790",
653
+ inclusive: "\uD3EC\uD568",
654
+ exclusive: "\uC81C\uC678",
642
655
  first: "\uCCAB\uBC88\uC9F8",
643
656
  last: "\uB9C8\uC9C0\uB9C9",
644
657
  next: "\uB2E4\uC74C",
@@ -752,16 +765,26 @@ var zh = {
752
765
  events: {
753
766
  click: "\u70B9\u51FB",
754
767
  dblclick: "\u53CC\u51FB",
755
- mousedown: "\u9F20\u6807\u6309\u4E0B",
756
- mouseup: "\u9F20\u6807\u62AC\u8D77",
757
- mouseenter: "\u9F20\u6807\u8FDB\u5165",
758
- mouseleave: "\u9F20\u6807\u79BB\u5F00",
759
- mouseover: "\u9F20\u6807\u60AC\u505C",
768
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
769
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
770
+ // shattered to their first word — live broken listeners in repeat-until-event).
771
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
772
+ mousedown: "mousedown",
773
+ mouseup: "mouseup",
774
+ mouseenter: "mouseenter",
775
+ mouseleave: "mouseleave",
776
+ // V3 Batch 2: 鼠标悬停 captured no event (expression:undefined) — realigned
777
+ // to the tokenizer-registered 鼠标移入 (also S5b-listed). 按键抬起
778
+ // prefix-shattered to 按键 and captured `keydown` (a keyup handler firing
779
+ // on keydown) → 松键, the S5b/tokenizer form. keydown keeps 按键按下
780
+ // (captures keydown via the registered 按键 prefix; S5b-aliased) — fixing
781
+ // it to bare 按键 would collide with keypress below.
782
+ mouseover: "\u9F20\u6807\u79FB\u5165",
760
783
  mouseout: "\u9F20\u6807\u79FB\u51FA",
761
784
  mousemove: "\u9F20\u6807\u79FB\u52A8",
762
785
  keydown: "\u6309\u952E\u6309\u4E0B",
763
- keyup: "\u6309\u952E\u62AC\u8D77",
764
- keypress: "\u6309\u952E",
786
+ keyup: "\u677E\u952E",
787
+ keypress: "keypress",
765
788
  focus: "\u805A\u7126",
766
789
  blur: "\u5931\u7126",
767
790
  change: "\u6539\u53D8",
@@ -773,9 +796,11 @@ var zh = {
773
796
  resize: "\u8C03\u6574\u5927\u5C0F",
774
797
  scroll: "\u6EDA\u52A8",
775
798
  touchstart: "\u89E6\u6478\u5F00\u59CB",
776
- touchend: "\u89E6\u6478\u7ED3\u675F",
799
+ touchend: "touchend",
777
800
  touchmove: "\u89E6\u6478\u79FB\u52A8",
778
- touchcancel: "\u89E6\u6478\u53D6\u6D88"
801
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
802
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
803
+ touchcancel: "touchcancel"
779
804
  },
780
805
  logical: {
781
806
  when: "\u5F53",
@@ -847,6 +872,9 @@ var zh = {
847
872
  properties: "\u7279\u6027\u96C6"
848
873
  },
849
874
  expressions: {
875
+ characters: "\u5B57\u7B26",
876
+ inclusive: "\u5305\u542B",
877
+ exclusive: "\u6392\u9664",
850
878
  first: "\u7B2C\u4E00\u4E2A",
851
879
  last: "\u6700\u540E\u4E00\u4E2A",
852
880
  next: "\u4E0B\u4E00\u4E2A",
@@ -958,15 +986,21 @@ var fr = {
958
986
  events: {
959
987
  click: "clic",
960
988
  dblclick: "doubleclic",
961
- mousedown: "sourisappuy\xE9e",
962
- mouseup: "sourisrel\xE2ch\xE9e",
989
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
990
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
991
+ // shattered to their first word — live broken listeners in repeat-until-event).
992
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
993
+ mousedown: "mousedown",
994
+ mouseup: "mouseup",
963
995
  mouseenter: "sourisentrer",
964
996
  mouseleave: "sourissortir",
965
- mouseover: "sourissur",
966
- mouseout: "sourisdehors",
997
+ // V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused
998
+ // spellings captured event=expression:undefined — broken listeners)
999
+ mouseover: "souris dessus",
1000
+ mouseout: "souris dehors",
967
1001
  mousemove: "sourisbouger",
968
- keydown: "toucheappuy\xE9e",
969
- keyup: "toucherel\xE2ch\xE9e",
1002
+ keydown: "touche bas",
1003
+ keyup: "touche haut",
970
1004
  keypress: "touchepress\xE9e",
971
1005
  focus: "focus",
972
1006
  blur: "flou",
@@ -1052,6 +1086,9 @@ var fr = {
1052
1086
  properties: "propri\xE9t\xE9s"
1053
1087
  },
1054
1088
  expressions: {
1089
+ characters: "caract\xE8res",
1090
+ inclusive: "inclusif",
1091
+ exclusive: "exclusif",
1055
1092
  first: "premier",
1056
1093
  last: "dernier",
1057
1094
  next: "suivant",
@@ -1142,7 +1179,8 @@ var de = {
1142
1179
  // löschen is a remove alternative in the profile
1143
1180
  close: "schlie\xDFen",
1144
1181
  open: "\xF6ffnen",
1145
- select: "ausw\xE4hlen",
1182
+ select: "markieren",
1183
+ // Batch 3: auswählen is the pick keyword — bare select rendered with it parses null
1146
1184
  clone: "klonen",
1147
1185
  prepend: "voranstellen",
1148
1186
  focus: "fokussieren"
@@ -1168,18 +1206,27 @@ var de = {
1168
1206
  events: {
1169
1207
  click: "klick",
1170
1208
  dblclick: "doppelklick",
1171
- mousedown: "mausunten",
1172
- mouseup: "mausoben",
1209
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
1210
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
1211
+ // shattered to their first word — live broken listeners in repeat-until-event).
1212
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
1213
+ mousedown: "mousedown",
1214
+ mouseup: "mouseup",
1173
1215
  mouseenter: "mauseintreten",
1174
1216
  mouseleave: "mausverlassen",
1175
- mouseover: "maus\xFCber",
1176
- mouseout: "maushinaus",
1217
+ // V3 Batch 2: fused/dead event words realigned to the de tokenizer's
1218
+ // registered forms (S5b's `maus über`/`taste runter` are aspirational — they
1219
+ // do not tokenize; `mausüber` etc. captured event=expression:undefined).
1220
+ mouseover: "maus dr\xFCber",
1221
+ mouseout: "maus weg",
1177
1222
  mousemove: "mausbewegen",
1178
- keydown: "tasteunten",
1179
- keyup: "tasteoben",
1223
+ keydown: "taste unten",
1224
+ keyup: "taste oben",
1180
1225
  keypress: "tastedr\xFCcken",
1181
1226
  focus: "fokus",
1182
- blur: "unscharf",
1227
+ // matches commands.blur (which shadows this at render time) and the live
1228
+ // corpus render; `unscharf` was dead vocab that captured no event
1229
+ blur: "defokussieren",
1183
1230
  change: "\xE4ndern",
1184
1231
  input: "eingabe",
1185
1232
  submit: "absenden",
@@ -1262,6 +1309,9 @@ var de = {
1262
1309
  properties: "eigenschaften"
1263
1310
  },
1264
1311
  expressions: {
1312
+ characters: "Zeichen",
1313
+ inclusive: "inklusiv",
1314
+ exclusive: "exklusiv",
1265
1315
  first: "erste",
1266
1316
  last: "letzte",
1267
1317
  next: "n\xE4chste",
@@ -1354,7 +1404,8 @@ var ja = {
1354
1404
  clear: "\u30AF\u30EA\u30A2",
1355
1405
  close: "\u9589\u3058\u308B",
1356
1406
  open: "\u958B\u304F",
1357
- select: "\u9078\u629E",
1407
+ select: "\u9078\u3076",
1408
+ // Batch 3: 選択 is the pick keyword — bare select rendered with it parses null
1358
1409
  clone: "\u8907\u88FD",
1359
1410
  prepend: "\u5148\u982D\u8FFD\u52A0",
1360
1411
  socket: "\u30BD\u30B1\u30C3\u30C8"
@@ -1379,17 +1430,22 @@ var ja = {
1379
1430
  },
1380
1431
  events: {
1381
1432
  click: "\u30AF\u30EA\u30C3\u30AF",
1382
- dblclick: "\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF",
1433
+ dblclick: "dblclick",
1383
1434
  mousedown: "\u30DE\u30A6\u30B9\u62BC\u4E0B",
1384
1435
  mouseup: "\u30DE\u30A6\u30B9\u89E3\u653E",
1385
- mouseenter: "\u30DE\u30A6\u30B9\u5165\u308B",
1386
- mouseleave: "\u30DE\u30A6\u30B9\u96E2\u308C\u308B",
1387
- mouseover: "\u30DE\u30A6\u30B9\u4E0A",
1388
- mouseout: "\u30DE\u30A6\u30B9\u5916",
1389
- mousemove: "\u30DE\u30A6\u30B9\u79FB\u52D5",
1390
- keydown: "\u30AD\u30FC\u62BC\u4E0B",
1391
- keyup: "\u30AD\u30FC\u89E3\u653E",
1392
- keypress: "\u30AD\u30FC\u62BC\u3059",
1436
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
1437
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
1438
+ mouseenter: "mouseenter",
1439
+ mouseleave: "mouseleave",
1440
+ // V3 Batch 2: kanji compounds realigned to the S5b/tokenizer katakana
1441
+ // loanwords (the standard JS event terms; the compounds captured
1442
+ // event=expression:undefined — broken listeners)
1443
+ mouseover: "\u30DE\u30A6\u30B9\u30AA\u30FC\u30D0\u30FC",
1444
+ mouseout: "\u30DE\u30A6\u30B9\u30A2\u30A6\u30C8",
1445
+ mousemove: "mousemove",
1446
+ keydown: "\u30AD\u30FC\u30C0\u30A6\u30F3",
1447
+ keyup: "\u30AD\u30FC\u30A2\u30C3\u30D7",
1448
+ keypress: "\u30AD\u30FC\u30D7\u30EC\u30B9",
1393
1449
  focus: "\u30D5\u30A9\u30FC\u30AB\u30B9",
1394
1450
  blur: "\u307C\u304B\u3057",
1395
1451
  change: "\u5909\u66F4",
@@ -1397,13 +1453,13 @@ var ja = {
1397
1453
  submit: "\u9001\u4FE1",
1398
1454
  reset: "\u30EA\u30BB\u30C3\u30C8",
1399
1455
  load: "\u8AAD\u307F\u8FBC\u307F",
1400
- unload: "\u8AAD\u307F\u8FBC\u307F\u89E3\u9664",
1456
+ unload: "unload",
1401
1457
  resize: "\u30B5\u30A4\u30BA\u5909\u66F4",
1402
1458
  scroll: "\u30B9\u30AF\u30ED\u30FC\u30EB",
1403
- touchstart: "\u30BF\u30C3\u30C1\u958B\u59CB",
1404
- touchend: "\u30BF\u30C3\u30C1\u7D42\u4E86",
1405
- touchmove: "\u30BF\u30C3\u30C1\u79FB\u52D5",
1406
- touchcancel: "\u30BF\u30C3\u30C1\u30AD\u30E3\u30F3\u30BB\u30EB"
1459
+ touchstart: "touchstart",
1460
+ touchend: "touchend",
1461
+ touchmove: "touchmove",
1462
+ touchcancel: "touchcancel"
1407
1463
  },
1408
1464
  logical: {
1409
1465
  when: "\u6642",
@@ -1475,6 +1531,9 @@ var ja = {
1475
1531
  properties: "\u30D7\u30ED\u30D1\u30C6\u30A3\u7FA4"
1476
1532
  },
1477
1533
  expressions: {
1534
+ characters: "\u6587\u5B57",
1535
+ inclusive: "\u542B\u3080",
1536
+ exclusive: "\u9664\u304F",
1478
1537
  first: "\u6700\u521D",
1479
1538
  last: "\u6700\u5F8C",
1480
1539
  next: "\u6B21",
@@ -1561,7 +1620,8 @@ var ar = {
1561
1620
  // امسح is a remove alternative in the profile
1562
1621
  close: "\u0623\u063A\u0644\u0642",
1563
1622
  open: "\u0627\u0641\u062A\u062D",
1564
- select: "\u0627\u062E\u062A\u0631",
1623
+ select: "\u0638\u0644\u0644",
1624
+ // Batch 3: اختر is the pick keyword — bare select rendered with it parses null
1565
1625
  clone: "\u0627\u0633\u062A\u0646\u0633\u062E",
1566
1626
  prepend: "\u0633\u0628\u0642",
1567
1627
  socket: "\u0645\u0642\u0628\u0633"
@@ -1586,31 +1646,33 @@ var ar = {
1586
1646
  },
1587
1647
  events: {
1588
1648
  click: "\u0646\u0642\u0631",
1589
- dblclick: "\u0646\u0642\u0631 \u0645\u0632\u062F\u0648\u062C",
1590
- mousedown: "\u0641\u0623\u0631\u0629 \u0623\u0633\u0641\u0644",
1591
- mouseup: "\u0641\u0623\u0631\u0629 \u0623\u0639\u0644\u0649",
1592
- mouseenter: "\u0641\u0623\u0631\u0629 \u062F\u062E\u0648\u0644",
1593
- mouseleave: "\u0641\u0623\u0631\u0629 \u062E\u0631\u0648\u062C",
1649
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
1650
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
1651
+ dblclick: "dblclick",
1652
+ mousedown: "mousedown",
1653
+ mouseup: "mouseup",
1654
+ mouseenter: "mouseenter",
1655
+ mouseleave: "mouseleave",
1594
1656
  mouseover: "\u0641\u0623\u0631\u0629 \u0641\u0648\u0642",
1595
- mouseout: "\u0641\u0623\u0631\u0629 \u062E\u0627\u0631\u062C",
1596
- mousemove: "\u0641\u0623\u0631\u0629 \u062A\u062D\u0631\u0643",
1657
+ mouseout: "mouseout",
1658
+ mousemove: "mousemove",
1597
1659
  keydown: "\u0645\u0641\u062A\u0627\u062D \u0623\u0633\u0641\u0644",
1598
1660
  keyup: "\u0645\u0641\u062A\u0627\u062D \u0623\u0639\u0644\u0649",
1599
- keypress: "\u0645\u0641\u062A\u0627\u062D \u0636\u063A\u0637",
1661
+ keypress: "keypress",
1600
1662
  focus: "\u062A\u0631\u0643\u064A\u0632",
1601
1663
  blur: "\u0636\u0628\u0627\u0628\u064A\u0629",
1602
1664
  change: "\u062A\u063A\u064A\u064A\u0631",
1603
1665
  input: "\u0625\u062F\u062E\u0627\u0644",
1604
1666
  submit: "\u0625\u0631\u0633\u0627\u0644",
1605
- reset: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646",
1667
+ reset: "reset",
1606
1668
  load: "\u062A\u062D\u0645\u064A\u0644",
1607
- unload: "\u0625\u0644\u063A\u0627\u0621 \u062A\u062D\u0645\u064A\u0644",
1669
+ unload: "unload",
1608
1670
  resize: "\u062A\u063A\u064A\u064A\u0631 \u062D\u062C\u0645",
1609
1671
  scroll: "\u062A\u0645\u0631\u064A\u0631",
1610
- touchstart: "\u0628\u062F\u0627\u064A\u0629 \u0644\u0645\u0633",
1611
- touchend: "\u0646\u0647\u0627\u064A\u0629 \u0644\u0645\u0633",
1612
- touchmove: "\u062A\u062D\u0631\u0643 \u0644\u0645\u0633",
1613
- touchcancel: "\u0625\u0644\u063A\u0627\u0621 \u0644\u0645\u0633"
1672
+ touchstart: "touchstart",
1673
+ touchend: "touchend",
1674
+ touchmove: "touchmove",
1675
+ touchcancel: "touchcancel"
1614
1676
  },
1615
1677
  logical: {
1616
1678
  when: "\u0639\u0646\u062F\u0645\u0627",
@@ -1682,6 +1744,9 @@ var ar = {
1682
1744
  properties: "\u062E\u0635\u0627\u0626\u0635"
1683
1745
  },
1684
1746
  expressions: {
1747
+ characters: "\u062D\u0631\u0648\u0641",
1748
+ inclusive: "\u0634\u0627\u0645\u0644",
1749
+ exclusive: "\u062D\u0635\u0631\u064A",
1685
1750
  first: "\u0623\u0648\u0644",
1686
1751
  last: "\u0622\u062E\u0631",
1687
1752
  next: "\u0627\u0644\u062A\u0627\u0644\u064A",
@@ -1769,7 +1834,8 @@ var tr = {
1769
1834
  clear: "temizle",
1770
1835
  close: "kapat",
1771
1836
  open: "a\xE7",
1772
- select: "se\xE7",
1837
+ select: "vurgula",
1838
+ // Batch 3: seç is the pick keyword — bare select rendered with it parses null
1773
1839
  clone: "klonla",
1774
1840
  prepend: "ba\u015F\u0131naekle",
1775
1841
  socket: "soket"
@@ -1794,34 +1860,40 @@ var tr = {
1794
1860
  },
1795
1861
  events: {
1796
1862
  click: "t\u0131klama",
1797
- dblclick: "\xE7ift_t\u0131klama",
1863
+ dblclick: "dblclick",
1798
1864
  // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event
1799
1865
  // recognition (mousedown → "bas" / mouseup mis-captured). Mirrors the #535
1800
1866
  // ru/uk fuse + #510 resize fix.
1801
1867
  mousedown: "farebas",
1802
1868
  mouseup: "fareb\u0131rak",
1803
- mouseenter: "fare_gir",
1804
- mouseleave: "fare_\xE7\u0131k",
1805
- mouseover: "fare_\xFCst\xFC",
1806
- mouseout: "fare_d\u0131\u015F\u0131",
1807
- mousemove: "fare_hareket",
1808
- keydown: "tu\u015F_bas",
1809
- keyup: "tu\u015F_b\u0131rak",
1810
- keypress: "tu\u015F_bas\u0131m",
1869
+ mouseenter: "mouseenter",
1870
+ mouseleave: "mouseleave",
1871
+ // V3 Batch 2: same `_`-split class (tuş_bas captured verbatim `bas` — a
1872
+ // listener for a DOM event named "bas") — realigned to the S5b/tokenizer
1873
+ // fused forms.
1874
+ mouseover: "farei\xE7inde",
1875
+ mouseout: "fared\u0131\u015F\u0131nda",
1876
+ mousemove: "mousemove",
1877
+ keydown: "tu\u015Fbasma",
1878
+ keyup: "tu\u015Fb\u0131rakma",
1879
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
1880
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
1881
+ keypress: "keypress",
1811
1882
  focus: "odak",
1812
1883
  blur: "bulan\u0131k",
1813
1884
  change: "de\u011Fi\u015Fim",
1814
1885
  input: "giri\u015F",
1815
- submit: "g\xF6nder",
1886
+ submit: "g\xF6nderme",
1887
+ // Batch 3: gönder is the send verb — on-submit listener captured event "send"
1816
1888
  reset: "s\u0131f\u0131rla",
1817
1889
  load: "y\xFCkle",
1818
- unload: "y\xFCkle_kald\u0131r",
1890
+ unload: "unload",
1819
1891
  resize: "boyutland\u0131rma",
1820
1892
  scroll: "kayd\u0131r",
1821
- touchstart: "dokunma_ba\u015Fla",
1822
- touchend: "dokunma_bitir",
1823
- touchmove: "dokunma_hareket",
1824
- touchcancel: "dokunma_iptal"
1893
+ touchstart: "touchstart",
1894
+ touchend: "touchend",
1895
+ touchmove: "touchmove",
1896
+ touchcancel: "touchcancel"
1825
1897
  },
1826
1898
  logical: {
1827
1899
  when: "iken",
@@ -1892,6 +1964,9 @@ var tr = {
1892
1964
  properties: "\xF6zellikler"
1893
1965
  },
1894
1966
  expressions: {
1967
+ characters: "karakterler",
1968
+ inclusive: "dahil",
1969
+ exclusive: "hari\xE7",
1895
1970
  first: "ilk",
1896
1971
  // 'son' is also the END keyword emission (block terminator), and the
1897
1972
  // parser's end-recognizers match it by value — so a positional `last`
@@ -1988,9 +2063,11 @@ var id = {
1988
2063
  breakpoint: "titik-henti",
1989
2064
  clear: "bersihkan",
1990
2065
  // hapus is the remove PRIMARY in the profile
1991
- close: "tutup",
2066
+ close: "tutupkan",
2067
+ // Batch 3: tutup is the hide keyword — rendered close parsed as action=hide
1992
2068
  open: "buka",
1993
- select: "pilih",
2069
+ select: "tandai",
2070
+ // Batch 3: pilih is the pick keyword — bare select rendered with it parses null
1994
2071
  clone: "klon",
1995
2072
  prepend: "awali"
1996
2073
  },
@@ -2014,17 +2091,27 @@ var id = {
2014
2091
  },
2015
2092
  events: {
2016
2093
  click: "klik",
2017
- dblclick: "klik_ganda",
2018
- mousedown: "tekan_mouse",
2019
- mouseup: "lepas_mouse",
2020
- mouseenter: "mouse_masuk",
2021
- mouseleave: "mouse_keluar",
2022
- mouseover: "mouse_atas",
2023
- mouseout: "mouse_luar",
2024
- mousemove: "gerak_mouse",
2094
+ dblclick: "dblclick",
2095
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
2096
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
2097
+ // shattered to their first word — live broken listeners in repeat-until-event).
2098
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
2099
+ mousedown: "mousedown",
2100
+ mouseup: "mouseup",
2101
+ mouseenter: "mouseenter",
2102
+ mouseleave: "mouseleave",
2103
+ // V3 Batch 2: mouse_atas/mouse_luar captured no event (the S5b forms
2104
+ // `mouse masuk`/`mouse keluar` are aspirational — they don't tokenize
2105
+ // either) — realigned to the tokenizer-registered natives. keydown keeps
2106
+ // tekan_tombol (captures keydown via the registered `tekan`; S5b-aliased).
2107
+ // keyup has NO parseable native (lepas is unregistered) → English
2108
+ // passthrough, matching the blur/reset precedent below.
2109
+ mouseover: "arahkan",
2110
+ mouseout: "tinggalkan",
2111
+ mousemove: "mousemove",
2025
2112
  keydown: "tekan_tombol",
2026
- keyup: "lepas_tombol",
2027
- keypress: "pencet_tombol",
2113
+ keyup: "keyup",
2114
+ keypress: "keypress",
2028
2115
  focus: "fokus",
2029
2116
  blur: "blur",
2030
2117
  change: "ubah",
@@ -2035,10 +2122,12 @@ var id = {
2035
2122
  unload: "bongkar",
2036
2123
  resize: "ubah_ukuran",
2037
2124
  scroll: "gulir",
2038
- touchstart: "mulai_sentuh",
2039
- touchend: "akhir_sentuh",
2040
- touchmove: "gerak_sentuh",
2041
- touchcancel: "batal_sentuh"
2125
+ touchstart: "touchstart",
2126
+ touchend: "touchend",
2127
+ touchmove: "touchmove",
2128
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
2129
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
2130
+ touchcancel: "touchcancel"
2042
2131
  },
2043
2132
  logical: {
2044
2133
  when: "ketika",
@@ -2109,6 +2198,9 @@ var id = {
2109
2198
  properties: "properti_properti"
2110
2199
  },
2111
2200
  expressions: {
2201
+ characters: "karakter",
2202
+ inclusive: "inklusif",
2203
+ exclusive: "eksklusif",
2112
2204
  first: "pertama",
2113
2205
  last: "terakhir",
2114
2206
  next: "berikutnya",
@@ -2214,8 +2306,10 @@ var qu = {
2214
2306
  breakpoint: "sayachinay",
2215
2307
  clear: "pichay",
2216
2308
  close: "wichqay",
2217
- open: "kichay",
2218
- select: "akllay",
2309
+ open: "paskay",
2310
+ // Batch 3: kichay is the trigger keyword — rendered open parsed null
2311
+ select: "marcay",
2312
+ // Batch 3: akllay is the pick keyword — bare select rendered with it parses null
2219
2313
  clone: "kikinchay",
2220
2314
  prepend: "\xF1awpachiy",
2221
2315
  socket: "tinkina"
@@ -2240,33 +2334,42 @@ var qu = {
2240
2334
  },
2241
2335
  events: {
2242
2336
  click: "\xF1itiy",
2243
- dblclick: "iskay_\xF1itiy",
2337
+ dblclick: "dblclick",
2244
2338
  // Fused (no `_`): the semantic tokenizer splits on `_` — and `rat_ñitiy` then
2245
2339
  // mis-captured as the `click` event (ñitiy→click). Mirrors the #535 ru/uk fuse.
2246
2340
  mousedown: "rat\xF1itiy",
2247
2341
  mouseup: "rathuqariy",
2248
- mouseenter: "rat_yaykuy",
2249
- mouseleave: "rat_lluqsiy",
2250
- mouseover: "rat_hawapi",
2251
- mouseout: "rat_hawamanta",
2252
- mousemove: "rat_kuyuy",
2253
- keydown: "yupana_\xF1itiy",
2254
- keyup: "yupana_huqariy",
2255
- keypress: "yupana_\xF1itana",
2342
+ mouseenter: "mouseenter",
2343
+ mouseleave: "mouseleave",
2344
+ mouseover: "mouseover",
2345
+ mouseout: "mouseout",
2346
+ mousemove: "mousemove",
2347
+ // V3 Batch 2: `yupana_ñitiy` split at `_` and mis-captured as the `click`
2348
+ // event (ñitiy→click, the same mechanism as the mousedown fuse above);
2349
+ // `yupana_huqariy` captured verbatim `huqariy`. Realigned to the
2350
+ // S5b/tokenizer forms.
2351
+ keydown: "llave uray",
2352
+ keyup: "llave hawa",
2353
+ keypress: "keypress",
2256
2354
  focus: "qhaway",
2257
2355
  blur: "paqariy",
2258
- change: "tikray",
2356
+ change: "kambiay",
2357
+ // Batch 3: tikray is the toggle verb — on-change listener captured event "toggle"
2259
2358
  input: "yaykuchiy",
2260
- submit: "kachay",
2261
- reset: "qallariy",
2359
+ submit: "apaykachay",
2360
+ // Batch 3: kachay is the send verb — on-submit captured "send" in one corpus slot
2361
+ reset: "musuqchay",
2362
+ // Batch 3: qallariy is the init/start word — on-reset listener captured event "default"
2262
2363
  load: "apakuy",
2263
- unload: "urmay",
2364
+ unload: "unload",
2264
2365
  resize: "hatun_kay",
2265
2366
  scroll: "kunray",
2266
- touchstart: "llamiy_qallay",
2267
- touchend: "llamiy_tukuy",
2268
- touchmove: "llamiy_kuyuy",
2269
- touchcancel: "llamiy_hark_ay"
2367
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
2368
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
2369
+ touchstart: "touchstart",
2370
+ touchend: "touchend",
2371
+ touchmove: "touchmove",
2372
+ touchcancel: "touchcancel"
2270
2373
  },
2271
2374
  logical: {
2272
2375
  when: "maykama",
@@ -2341,6 +2444,11 @@ var qu = {
2341
2444
  properties: "kanaykuna"
2342
2445
  },
2343
2446
  expressions: {
2447
+ // Pick unit word (arc 3): native-first per qu convention — `sanampa`
2448
+ // ("sign/letter", the standard term for alphabet characters) over a
2449
+ // loanword. Paired with the QUECHUA_EXTRAS entry in the semantic
2450
+ // tokenizer; both surfaces must match verbatim.
2451
+ characters: "sanampa",
2344
2452
  first: "\xF1awpaq",
2345
2453
  last: "qhipa",
2346
2454
  next: "qhipantin",
@@ -2399,7 +2507,10 @@ var sw = {
2399
2507
  wait: "ngoja",
2400
2508
  fetch: "leta",
2401
2509
  call: "ita",
2402
- return: "rudi",
2510
+ // `rudisha` (transitive, "give back a value"), not `rudi` ("go back"): the
2511
+ // semantic profile reads `rudisha`/`rejea`, so emitting `rudi` produced sw code
2512
+ // the parser could not read back. Kept clear of `rudia` (= `repeat`).
2513
+ return: "rudisha",
2403
2514
  make: "tengeneza",
2404
2515
  // auditor: dict emitted a word the profile reads differently
2405
2516
  log: "andika",
@@ -2413,7 +2524,8 @@ var sw = {
2413
2524
  go: "nenda",
2414
2525
  pushUrl: "sukumaUrl",
2415
2526
  replaceUrl: "badilishaUrl",
2416
- copy: "nakili",
2527
+ copy: "nakala",
2528
+ // Batch 3: nakili is the clone keyword — rendered copy parsed as action=clone
2417
2529
  pick: "chagua",
2418
2530
  beep: "lia",
2419
2531
  js: "js",
@@ -2432,7 +2544,8 @@ var sw = {
2432
2544
  // futa is a remove alternative in the profile
2433
2545
  close: "funga",
2434
2546
  open: "fungua",
2435
- select: "chagua",
2547
+ select: "alama",
2548
+ // Batch 3: chagua is the pick keyword — bare select rendered with it parses null
2436
2549
  clone: "nakili",
2437
2550
  prepend: "tanguliza",
2438
2551
  focus: "lenga",
@@ -2465,31 +2578,42 @@ var sw = {
2465
2578
  },
2466
2579
  events: {
2467
2580
  click: "bonyeza",
2468
- dblclick: "bonyeza_mara_mbili",
2581
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
2582
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
2583
+ dblclick: "dblclick",
2469
2584
  mousedown: "panya_shuka",
2470
2585
  mouseup: "panya_juu",
2471
2586
  mouseenter: "panya_ingia",
2472
2587
  mouseleave: "panya_toka",
2473
- mouseover: "panya_juu",
2588
+ // V3 Batch 2: panya_juu is mouseup's form (shared here by mistake — the
2589
+ // tokenizer deliberately maps it to mouseup for the corpus row, so a
2590
+ // mouseover handler captured `mouseup`) — realigned to the
2591
+ // tokenizer-registered `sogeza juu`.
2592
+ mouseover: "sogeza juu",
2474
2593
  mouseout: "panya_nje",
2475
2594
  mousemove: "panya_sogea",
2476
2595
  keydown: "kitufe_shuka",
2477
2596
  keyup: "kitufe_juu",
2478
- keypress: "kitufe_bonyeza",
2479
- focus: "zingatia",
2480
- blur: "poteza_macho",
2481
- change: "badilisha",
2597
+ keypress: "keypress",
2598
+ // V3 Batch 2: zingatia captured no event → lenga (S5b/tokenizer form);
2599
+ // poteza_macho was a null parse → `blur` (the S5b identity form — matches
2600
+ // the live corpus render `kwenye blur`); badilisha is the toggle VERB
2601
+ // homonym (a change handler captured event=`toggle` — a listener for a DOM
2602
+ // event named "toggle") → kubadilisha (S5b/tokenizer form).
2603
+ focus: "lenga",
2604
+ blur: "blur",
2605
+ change: "kubadilisha",
2482
2606
  input: "ingizo",
2483
2607
  submit: "wasilisha",
2484
- reset: "weka_upya",
2608
+ reset: "reset",
2485
2609
  load: "pakia",
2486
2610
  unload: "shuka",
2487
2611
  resize: "badilisha_ukubwa",
2488
2612
  scroll: "sogeza",
2489
- touchstart: "gusa_anza",
2490
- touchend: "gusa_mwisho",
2491
- touchmove: "gusa_sogea",
2492
- touchcancel: "gusa_ghairi"
2613
+ touchstart: "touchstart",
2614
+ touchend: "touchend",
2615
+ touchmove: "touchmove",
2616
+ touchcancel: "touchcancel"
2493
2617
  },
2494
2618
  logical: {
2495
2619
  when: "wakati",
@@ -2560,6 +2684,7 @@ var sw = {
2560
2684
  properties: "mali"
2561
2685
  },
2562
2686
  expressions: {
2687
+ characters: "herufi",
2563
2688
  first: "kwanza",
2564
2689
  // 'mwisho' is the END keyword (block terminator) — the tokenizer's keyword
2565
2690
  // map is last-wins, so a positional `last` emission of 'mwisho' reads as
@@ -2689,18 +2814,21 @@ var pt = {
2689
2814
  mouseup: "mouseCima",
2690
2815
  mouseenter: "mouseEntrar",
2691
2816
  mouseleave: "mouseSair",
2692
- mouseover: "mouseSobre",
2693
- mouseout: "mouseFora",
2817
+ // V3 Batch 2: camelCase forms split to the S5b/tokenizer-known forms (the
2818
+ // fused spellings captured event=expression:undefined — broken listeners)
2819
+ mouseover: "mouse sobre",
2820
+ mouseout: "mouse fora",
2694
2821
  mousemove: "mouseMover",
2695
- keydown: "teclaBaixo",
2696
- keyup: "teclaCima",
2822
+ keydown: "tecla baixo",
2823
+ keyup: "tecla cima",
2697
2824
  keypress: "teclaPressionar",
2698
2825
  focus: "foco",
2699
2826
  blur: "desfoque",
2700
2827
  change: "mudan\xE7a",
2701
2828
  input: "entrada",
2702
2829
  submit: "envio",
2703
- reset: "reiniciar",
2830
+ reset: "redefinir",
2831
+ // Batch 3: reiniciar captured on.event as expression (broken listener) — profile word round-trips
2704
2832
  load: "carregar",
2705
2833
  unload: "descarregar",
2706
2834
  resize: "redimensionar",
@@ -2779,6 +2907,9 @@ var pt = {
2779
2907
  properties: "propriedades"
2780
2908
  },
2781
2909
  expressions: {
2910
+ characters: "caracteres",
2911
+ inclusive: "inclusivo",
2912
+ exclusive: "exclusivo",
2782
2913
  first: "primeiro",
2783
2914
  last: "\xFAltimo",
2784
2915
  next: "pr\xF3ximo",
@@ -2889,8 +3020,12 @@ var it = {
2889
3020
  events: {
2890
3021
  click: "clic",
2891
3022
  dblclick: "doppioclic",
2892
- mousedown: "mousegi\xF9",
2893
- mouseup: "mousesu",
3023
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
3024
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
3025
+ // shattered to their first word — live broken listeners in repeat-until-event).
3026
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
3027
+ mousedown: "mousedown",
3028
+ mouseup: "mouseup",
2894
3029
  mouseenter: "mouseentra",
2895
3030
  mouseleave: "mouseesce",
2896
3031
  mouseover: "mousesopra",
@@ -2900,11 +3035,13 @@ var it = {
2900
3035
  keyup: "tastosu",
2901
3036
  keypress: "tastopremi",
2902
3037
  focus: "fuoco",
2903
- blur: "sfuocatura",
3038
+ blur: "sfuocare",
3039
+ // Batch 3: the noun form parsed the blur command with no patient; the verb round-trips both event and command slots
2904
3040
  change: "cambio",
2905
3041
  input: "input",
2906
3042
  submit: "invio",
2907
- reset: "reset",
3043
+ reset: "reimpostare",
3044
+ // Batch 3: English passthrough captured on.event as expression — profile verb round-trips
2908
3045
  load: "carica",
2909
3046
  unload: "scarica",
2910
3047
  resize: "ridimensiona",
@@ -2983,6 +3120,9 @@ var it = {
2983
3120
  properties: "propriet\xE0"
2984
3121
  },
2985
3122
  expressions: {
3123
+ characters: "caratteri",
3124
+ inclusive: "inclusivo",
3125
+ exclusive: "esclusivo",
2986
3126
  first: "primo",
2987
3127
  last: "ultimo",
2988
3128
  next: "prossimo",
@@ -3065,15 +3205,18 @@ var vi = {
3065
3205
  init: "kh\u1EDFi t\u1EA1o",
3066
3206
  behavior: "h\xE0nh vi",
3067
3207
  install: "c\xE0i \u0111\u1EB7t",
3068
- clone: "sao ch\xE9p",
3069
- prepend: "th\xEAm \u0111\u1EA7u",
3208
+ clone: "nh\xE2n b\u1EA3n",
3209
+ // Batch 3: 'sao chép' is the copy verb — rendered clone parsed as action=copy
3210
+ prepend: "th\xEAm v\xE0o \u0111\u1EA7u",
3211
+ // Batch 3: 'thêm đầu' shatters at 'thêm' (add) — parsed as action=add
3070
3212
  else: "kh\xF4ng th\xEC",
3071
3213
  breakpoint: "\u0111i\u1EC3m-d\u1EEBng",
3072
3214
  clear: "t\u1EA9y",
3073
3215
  // xóa is the remove PRIMARY in the profile
3074
3216
  close: "\u0111\xF3ng",
3075
3217
  open: "m\u1EDF",
3076
- select: "ch\u1ECDn"
3218
+ select: "\u0111\xE1nh-d\u1EA5u"
3219
+ // Batch 3: 'chọn' is the pick keyword — bare select rendered with it parses null
3077
3220
  },
3078
3221
  modifiers: {
3079
3222
  into: "v\xE0o",
@@ -3096,21 +3239,24 @@ var vi = {
3096
3239
  },
3097
3240
  events: {
3098
3241
  click: "nh\u1EA5p",
3099
- dblclick: "nh\u1EA5p \u0111\xFAp",
3242
+ dblclick: "dblclick",
3100
3243
  input: "nh\u1EADp",
3101
- change: "thay \u0111\u1ED5i",
3102
- submit: "g\u1EEDi",
3103
- keydown: "ph\xEDm xu\u1ED1ng",
3104
- keyup: "ph\xEDm l\xEAn",
3105
- keypress: "nh\u1EA5n ph\xEDm",
3106
- mouseover: "chu\u1ED9t v\xE0o",
3107
- mouseout: "chu\u1ED9t ra",
3108
- mouseenter: "chu\u1ED9t v\xE0o",
3109
- mouseleave: "chu\u1ED9t r\u1EDDi",
3110
- focus: "t\u1EADp trung",
3111
- blur: "m\u1EA5t t\u1EADp trung",
3112
- reset: "\u0111\u1EB7t-l\u1EA1i",
3113
- load: "t\u1EA3i",
3244
+ change: "change",
3245
+ submit: "n\u1ED9p",
3246
+ // Batch 3: 'gửi' is the send verb — on-submit listener captured event "send"
3247
+ keydown: "keydown",
3248
+ keyup: "keyup",
3249
+ keypress: "keypress",
3250
+ mouseover: "mouseover",
3251
+ mouseout: "mouseout",
3252
+ mouseenter: "mouseenter",
3253
+ mouseleave: "mouseleave",
3254
+ focus: "focus",
3255
+ blur: "blur",
3256
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
3257
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
3258
+ reset: "reset",
3259
+ load: "load",
3114
3260
  scroll: "cu\u1ED9n",
3115
3261
  resize: "\u0111\u1ED5i k\xEDch th\u01B0\u1EDBc"
3116
3262
  },
@@ -3186,6 +3332,10 @@ var vi = {
3186
3332
  selected: "\u0111\u01B0\u1EE3c ch\u1ECDn"
3187
3333
  },
3188
3334
  expressions: {
3335
+ random: "ng\u1EABu nhi\xEAn",
3336
+ characters: "k\xFD t\u1EF1",
3337
+ inclusive: "bao g\u1ED3m",
3338
+ exclusive: "lo\u1EA1i tr\u1EEB",
3189
3339
  me: "t\xF4i",
3190
3340
  my: "c\u1EE7a t\xF4i",
3191
3341
  it: "n\xF3",
@@ -3277,7 +3427,8 @@ var pl = {
3277
3427
  // wyczyść is a remove alternative in the profile
3278
3428
  close: "zamknij",
3279
3429
  open: "otw\xF3rz",
3280
- select: "wybierz",
3430
+ select: "zaznacz",
3431
+ // Batch 3: wybierz is the pick keyword — bare select rendered with it parses null
3281
3432
  clone: "sklonuj",
3282
3433
  prepend: "poprzed\u017A",
3283
3434
  focus: "skup"
@@ -3303,8 +3454,12 @@ var pl = {
3303
3454
  events: {
3304
3455
  click: "klikni\u0119cie",
3305
3456
  dblclick: "podw\xF3jneklikni\u0119cie",
3306
- mousedown: "myszd\xF3\u0142",
3307
- mouseup: "myszg\xF3ra",
3457
+ // mousedown/mouseup: English passthrough — no native form round-trips on the
3458
+ // parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
3459
+ // shattered to their first word — live broken listeners in repeat-until-event).
3460
+ // The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
3461
+ mousedown: "mousedown",
3462
+ mouseup: "mouseup",
3308
3463
  mouseenter: "myszwej\u015Bcie",
3309
3464
  mouseleave: "myszwyj\u015Bcie",
3310
3465
  mouseover: "mysznad",
@@ -3317,8 +3472,10 @@ var pl = {
3317
3472
  blur: "rozmycie",
3318
3473
  change: "zmiana",
3319
3474
  input: "wej\u015Bcie",
3320
- submit: "wy\u015Blij",
3321
- reset: "resetuj",
3475
+ submit: "wys\u0142aniu",
3476
+ // Batch 3: wyślij is the send verb — on-submit listener captured event "send"
3477
+ reset: "zresetuj",
3478
+ // Batch 3: resetuj captured on.event as expression (broken listener) — profile word round-trips
3322
3479
  load: "za\u0142aduj",
3323
3480
  unload: "wy\u0142aduj",
3324
3481
  resize: "zmie\u0144rozmiar",
@@ -3397,6 +3554,9 @@ var pl = {
3397
3554
  properties: "w\u0142a\u015Bciwo\u015Bci"
3398
3555
  },
3399
3556
  expressions: {
3557
+ characters: "znaki",
3558
+ inclusive: "w\u0142\u0105cznie",
3559
+ exclusive: "wy\u0142\u0105cznie",
3400
3560
  first: "pierwszy",
3401
3561
  last: "ostatni",
3402
3562
  next: "nast\u0119pny",
@@ -3492,7 +3652,8 @@ var russianDictionary = {
3492
3652
  clear: "\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C",
3493
3653
  close: "\u0437\u0430\u043A\u0440\u044B\u0442\u044C",
3494
3654
  open: "\u043E\u0442\u043A\u0440\u044B\u0442\u044C",
3495
- select: "\u0432\u044B\u0431\u0440\u0430\u0442\u044C"
3655
+ select: "\u0432\u044B\u0434\u0435\u043B\u0438\u0442\u044C"
3656
+ // Batch 3: выбрать is the pick keyword — bare select rendered with it parses null
3496
3657
  },
3497
3658
  modifiers: {
3498
3659
  to: "\u043A",
@@ -3534,7 +3695,8 @@ var russianDictionary = {
3534
3695
  change: "\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435",
3535
3696
  input: "\u0432\u0432\u043E\u0434",
3536
3697
  submit: "\u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0430",
3537
- reset: "\u0441\u0431\u0440\u043E\u0441",
3698
+ reset: "\u0441\u0431\u0440\u043E\u0441\u0438\u0442\u044C",
3699
+ // Batch 3: сброс captured on.event as expression (broken listener) — profile verb round-trips
3538
3700
  load: "\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430",
3539
3701
  unload: "\u0432\u044B\u0433\u0440\u0443\u0437\u043A\u0430",
3540
3702
  resize: "\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u0440\u0430\u0437\u043C\u0435\u0440\u0430",
@@ -3634,6 +3796,9 @@ var russianDictionary = {
3634
3796
  html: "html"
3635
3797
  },
3636
3798
  expressions: {
3799
+ characters: "\u0441\u0438\u043C\u0432\u043E\u043B\u044B",
3800
+ inclusive: "\u0432\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E",
3801
+ exclusive: "\u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E",
3637
3802
  first: "\u043F\u0435\u0440\u0432\u044B\u0439",
3638
3803
  last: "\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439",
3639
3804
  next: "\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439",
@@ -3729,7 +3894,8 @@ var ukrainianDictionary = {
3729
3894
  clear: "\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u0438",
3730
3895
  close: "\u0437\u0430\u043A\u0440\u0438\u0442\u0438",
3731
3896
  open: "\u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438",
3732
- select: "\u0432\u0438\u0431\u0440\u0430\u0442\u0438"
3897
+ select: "\u0432\u0438\u0434\u0456\u043B\u0438\u0442\u0438"
3898
+ // Batch 3: вибрати is the pick keyword — bare select rendered with it parses null
3733
3899
  },
3734
3900
  modifiers: {
3735
3901
  to: "\u0434\u043E",
@@ -3770,7 +3936,8 @@ var ukrainianDictionary = {
3770
3936
  change: "\u0437\u043C\u0456\u043D\u0430",
3771
3937
  input: "\u0432\u0432\u0435\u0434\u0435\u043D\u043D\u044F",
3772
3938
  submit: "\u043D\u0430\u0434\u0441\u0438\u043B\u0430\u043D\u043D\u044F",
3773
- reset: "\u0441\u043A\u0438\u0434\u0430\u043D\u043D\u044F",
3939
+ reset: "\u0441\u043A\u0438\u043D\u0443\u0442\u0438",
3940
+ // Batch 3: скидання captured on.event as expression (broken listener) — profile verb round-trips
3774
3941
  load: "\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",
3775
3942
  unload: "\u0432\u0438\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",
3776
3943
  resize: "\u0437\u043C\u0456\u043D\u0430\u0440\u043E\u0437\u043C\u0456\u0440\u0443",
@@ -3870,6 +4037,9 @@ var ukrainianDictionary = {
3870
4037
  html: "html"
3871
4038
  },
3872
4039
  expressions: {
4040
+ characters: "\u0441\u0438\u043C\u0432\u043E\u043B\u0438",
4041
+ inclusive: "\u0432\u043A\u043B\u044E\u0447\u043D\u043E",
4042
+ exclusive: "\u0432\u0438\u043A\u043B\u044E\u0447\u043D\u043E",
3873
4043
  first: "\u043F\u0435\u0440\u0448\u0438\u0439",
3874
4044
  last: "\u043E\u0441\u0442\u0430\u043D\u043D\u0456\u0439",
3875
4045
  next: "\u043D\u0430\u0441\u0442\u0443\u043F\u043D\u0438\u0439",
@@ -3954,13 +4124,15 @@ var hindiDictionary = {
3954
4124
  behavior: "\u0935\u094D\u092F\u0935\u0939\u093E\u0930",
3955
4125
  focus: "\u092B\u094B\u0915\u0938",
3956
4126
  blur: "\u0927\u0941\u0902\u0927\u0932\u093E",
3957
- clone: "\u0915\u0949\u092A\u0940",
4127
+ clone: "\u0915\u094D\u0932\u094B\u0928",
4128
+ // Batch 3: कॉपी is the copy verb — rendered clone parsed as action=copy
3958
4129
  prepend: "\u091C\u094B\u0921\u093C\u0947\u0902_\u0936\u0941\u0930\u0942",
3959
4130
  breakpoint: "\u092C\u094D\u0930\u0947\u0915\u092A\u094D\u0935\u093E\u0907\u0902\u091F",
3960
4131
  clear: "\u0938\u093E\u092B\u093C-\u0915\u0930\u0947\u0902",
3961
4132
  close: "\u092C\u0902\u0926-\u0915\u0930\u0947\u0902",
3962
4133
  open: "\u0916\u094B\u0932\u0947\u0902",
3963
- select: "\u091A\u0941\u0928\u0947\u0902",
4134
+ select: "\u091A\u093F\u0939\u094D\u0928\u093F\u0924-\u0915\u0930\u0947\u0902",
4135
+ // Batch 3: चुनें is the pick keyword — bare select rendered with it parses null
3964
4136
  socket: "\u0938\u0949\u0915\u0947\u091F"
3965
4137
  },
3966
4138
  modifiers: {
@@ -4105,6 +4277,7 @@ var hindiDictionary = {
4105
4277
  html: "html"
4106
4278
  },
4107
4279
  expressions: {
4280
+ characters: "\u0905\u0915\u094D\u0937\u0930",
4108
4281
  first: "\u092A\u0939\u0932\u093E",
4109
4282
  last: "\u0905\u0902\u0924\u093F\u092E",
4110
4283
  next: "\u0905\u0917\u0932\u093E",
@@ -4174,7 +4347,8 @@ var bengaliDictionary = {
4174
4347
  init: "\u09B6\u09C1\u09B0\u09C1",
4175
4348
  behavior: "\u0986\u099A\u09B0\u09A3",
4176
4349
  install: "\u0987\u09A8\u09B8\u09CD\u099F\u09B2",
4177
- clone: "\u0995\u09AA\u09BF",
4350
+ clone: "\u0995\u09CD\u09B2\u09CB\u09A8",
4351
+ // Batch 3: কপি is the copy verb — rendered clone parsed as action=copy
4178
4352
  swap: "\u09AC\u09A6\u09B2",
4179
4353
  morph: "\u09B0\u09C2\u09AA\u09BE\u09A8\u09CD\u09A4\u09B0",
4180
4354
  beep: "\u09AC\u09C0\u09AA",
@@ -4221,10 +4395,12 @@ var bengaliDictionary = {
4221
4395
  focus: "\u09AB\u09CB\u0995\u09BE\u09B8",
4222
4396
  blur: "\u099D\u09BE\u09AA\u09B8\u09BE",
4223
4397
  reset: "\u09B0\u09BF\u09B8\u09C7\u099F",
4224
- keydown: "\u0995\u09BF-\u09A1\u09BE\u0989\u09A8",
4225
- keyup: "\u0995\u09BF-\u0986\u09AA",
4226
- mouseover: "\u09AE\u09BE\u0989\u09B8-\u0993\u09AD\u09BE\u09B0",
4227
- mouseout: "\u09AE\u09BE\u0989\u09B8-\u0986\u0989\u099F",
4398
+ keydown: "keydown",
4399
+ keyup: "keyup",
4400
+ // V3c burn-down (2026-07-14): English passthrough — no native form round-trips
4401
+ // on the parse side (probe: split forms shatter, fused forms capture verbatim).
4402
+ mouseover: "mouseover",
4403
+ mouseout: "mouseout",
4228
4404
  scroll: "\u09B8\u09CD\u0995\u09CD\u09B0\u09CB\u09B2",
4229
4405
  resize: "\u09B0\u09BF\u09B8\u09BE\u0987\u099C",
4230
4406
  every: "\u09AA\u09CD\u09B0\u09A4\u09BF"
@@ -4286,6 +4462,9 @@ var bengaliDictionary = {
4286
4462
  checked: "\u099A\u09C7\u0995 \u0995\u09B0\u09BE"
4287
4463
  },
4288
4464
  expressions: {
4465
+ characters: "\u0985\u0995\u09CD\u09B7\u09B0",
4466
+ inclusive: "\u0985\u09A8\u09CD\u09A4\u09B0\u09CD\u09AD\u09C1\u0995\u09CD\u09A4",
4467
+ exclusive: "\u09AC\u09BE\u09A6",
4289
4468
  first: "\u09AA\u09CD\u09B0\u09A5\u09AE",
4290
4469
  last: "\u09B6\u09C7\u09B7",
4291
4470
  next: "\u09AA\u09B0\u09AC\u09B0\u09CD\u09A4\u09C0",
@@ -4354,7 +4533,8 @@ var thaiDictionary = {
4354
4533
  init: "\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19",
4355
4534
  behavior: "\u0E1E\u0E24\u0E15\u0E34\u0E01\u0E23\u0E23\u0E21",
4356
4535
  install: "\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",
4357
- clone: "\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01",
4536
+ clone: "\u0E42\u0E04\u0E25\u0E19",
4537
+ // Batch 3: คัดลอก is the copy verb — rendered clone parsed as action=copy
4358
4538
  swap: "\u0E2A\u0E25\u0E31\u0E1A\u0E17\u0E35\u0E48",
4359
4539
  morph: "\u0E41\u0E1B\u0E25\u0E07\u0E23\u0E48\u0E32\u0E07",
4360
4540
  beep: "\u0E1A\u0E35\u0E4A\u0E1A",
@@ -4369,7 +4549,8 @@ var thaiDictionary = {
4369
4549
  clear: "\u0E40\u0E04\u0E25\u0E35\u0E22\u0E23\u0E4C",
4370
4550
  close: "\u0E1B\u0E34\u0E14",
4371
4551
  open: "\u0E40\u0E1B\u0E34\u0E14",
4372
- select: "\u0E40\u0E25\u0E37\u0E2D\u0E01"
4552
+ select: "\u0E17\u0E33\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E2B\u0E21\u0E32\u0E22"
4553
+ // Batch 3: เลือก is the pick keyword — bare select rendered with it parses null
4373
4554
  },
4374
4555
  modifiers: {
4375
4556
  to: "\u0E44\u0E1B\u0E22\u0E31\u0E07",
@@ -4464,6 +4645,9 @@ var thaiDictionary = {
4464
4645
  checked: "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27"
4465
4646
  },
4466
4647
  expressions: {
4648
+ characters: "\u0E2D\u0E31\u0E01\u0E02\u0E23\u0E30",
4649
+ inclusive: "\u0E23\u0E27\u0E21",
4650
+ exclusive: "\u0E22\u0E01\u0E40\u0E27\u0E49\u0E19",
4467
4651
  first: "\u0E41\u0E23\u0E01",
4468
4652
  last: "\u0E2A\u0E38\u0E14\u0E17\u0E49\u0E32\u0E22",
4469
4653
  next: "\u0E16\u0E31\u0E14\u0E44\u0E1B",
@@ -4550,7 +4734,8 @@ var malayDictionary = {
4550
4734
  // padam is a remove alternative in the profile
4551
4735
  close: "tutup",
4552
4736
  open: "buka",
4553
- select: "pilih",
4737
+ select: "tandai",
4738
+ // Batch 3: pilih is the pick keyword — bare select rendered with it parses null
4554
4739
  socket: "soket"
4555
4740
  // derived from the ms profile (socket.primary); see generate-i18n-dictionaries
4556
4741
  },
@@ -4690,6 +4875,9 @@ var malayDictionary = {
4690
4875
  checked: "ditanda"
4691
4876
  },
4692
4877
  expressions: {
4878
+ characters: "aksara",
4879
+ inclusive: "inklusif",
4880
+ exclusive: "eksklusif",
4693
4881
  first: "pertama",
4694
4882
  last: "terakhir",
4695
4883
  next: "seterusnya",
@@ -4782,7 +4970,8 @@ var tagalogDictionary = {
4782
4970
  install: "ikabit",
4783
4971
  behavior: "ugali",
4784
4972
  init: "simulan",
4785
- clone: "kopyahin",
4973
+ clone: "i-clone",
4974
+ // Batch 3: kopyahin is the copy verb — rendered clone parsed as action=copy
4786
4975
  breakpoint: "breakpoint",
4787
4976
  clear: "burahin",
4788
4977
  close: "isara",
@@ -4929,6 +5118,9 @@ var tagalogDictionary = {
4929
5118
  checked: "naka_tsek"
4930
5119
  },
4931
5120
  expressions: {
5121
+ characters: "karakter",
5122
+ inclusive: "kasama",
5123
+ exclusive: "bukod",
4932
5124
  first: "una",
4933
5125
  last: "huli",
4934
5126
  next: "susunod",
@@ -5051,6 +5243,10 @@ var he = {
5051
5243
  },
5052
5244
  attributes: {},
5053
5245
  expressions: {
5246
+ random: "\u05D0\u05E7\u05E8\u05D0\u05D9",
5247
+ characters: "\u05EA\u05D5\u05D5\u05D9\u05DD",
5248
+ inclusive: "\u05DB\u05D5\u05DC\u05DC",
5249
+ exclusive: "\u05D1\u05DC\u05E2\u05D3\u05D9",
5054
5250
  last: "\u05D0\u05D7\u05E8\u05D5\u05DF"
5055
5251
  }
5056
5252
  };