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