@lokascript/i18n 2.3.1 → 2.4.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 (71) hide show
  1. package/dist/browser.cjs +626 -473
  2. package/dist/browser.cjs.map +1 -1
  3. package/dist/browser.d.cts +25 -3
  4. package/dist/browser.d.ts +25 -3
  5. package/dist/browser.js +623 -474
  6. package/dist/browser.js.map +1 -1
  7. package/dist/dictionaries/index.cjs +489 -472
  8. package/dist/dictionaries/index.cjs.map +1 -1
  9. package/dist/dictionaries/index.d.cts +5 -3
  10. package/dist/dictionaries/index.d.ts +5 -3
  11. package/dist/dictionaries/index.js +489 -473
  12. package/dist/dictionaries/index.js.map +1 -1
  13. package/dist/index.cjs +617 -473
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +37 -37
  16. package/dist/index.d.ts +37 -37
  17. package/dist/index.js +617 -473
  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 +730 -478
  22. package/dist/lokascript-i18n.mjs.map +1 -1
  23. package/dist/plugins/vite.cjs +488 -472
  24. package/dist/plugins/vite.cjs.map +1 -1
  25. package/dist/plugins/vite.js +488 -472
  26. package/dist/plugins/vite.js.map +1 -1
  27. package/dist/plugins/webpack.cjs +488 -472
  28. package/dist/plugins/webpack.cjs.map +1 -1
  29. package/dist/plugins/webpack.js +488 -472
  30. package/dist/plugins/webpack.js.map +1 -1
  31. package/dist/{transformer-B0zy-kti.d.ts → transformer-BLv389qz.d.ts} +12 -47
  32. package/dist/{transformer-CzY_vHU0.d.cts → transformer-PFsYELrc.d.cts} +12 -47
  33. package/dist/{types-BYtpqGq3.d.cts → types-BcALAO6h.d.cts} +1 -1
  34. package/dist/{types-BYtpqGq3.d.ts → types-BcALAO6h.d.ts} +1 -1
  35. package/package.json +5 -5
  36. package/src/browser.ts +3 -0
  37. package/src/constants.ts +9 -0
  38. package/src/dictionaries/ar.ts +22 -43
  39. package/src/dictionaries/bn.ts +17 -0
  40. package/src/dictionaries/de.ts +19 -40
  41. package/src/dictionaries/en.ts +26 -0
  42. package/src/dictionaries/es.ts +19 -40
  43. package/src/dictionaries/fr.ts +19 -40
  44. package/src/dictionaries/he.ts +2 -0
  45. package/src/dictionaries/hi.ts +18 -48
  46. package/src/dictionaries/id.ts +22 -43
  47. package/src/dictionaries/index.ts +5 -1
  48. package/src/dictionaries/it.ts +18 -39
  49. package/src/dictionaries/ja.ts +18 -39
  50. package/src/dictionaries/ko.ts +22 -43
  51. package/src/dictionaries/ms.ts +16 -50
  52. package/src/dictionaries/pl.ts +18 -45
  53. package/src/dictionaries/pt.ts +23 -48
  54. package/src/dictionaries/qu.ts +22 -43
  55. package/src/dictionaries/ru.ts +18 -48
  56. package/src/dictionaries/sw.ts +22 -43
  57. package/src/dictionaries/th.ts +17 -0
  58. package/src/dictionaries/tl.ts +16 -50
  59. package/src/dictionaries/tr.ts +24 -45
  60. package/src/dictionaries/uk.ts +18 -48
  61. package/src/dictionaries/vi.ts +17 -0
  62. package/src/dictionaries/zh.ts +22 -43
  63. package/src/grammar/grammar.test.ts +143 -24
  64. package/src/grammar/index.ts +1 -0
  65. package/src/grammar/profiles/index.ts +31 -0
  66. package/src/grammar/transformer.ts +161 -0
  67. package/src/parser/he.ts +29 -0
  68. package/src/parser/index.ts +1 -0
  69. package/src/schema-alignment.test.ts +154 -0
  70. package/src/test-utils/complete-languages.ts +40 -0
  71. package/src/translation-validation.test.ts +1 -26
@@ -45,13 +45,19 @@ const ENGLISH_COMMANDS = new Set([
45
45
  'append',
46
46
  'async',
47
47
  'beep',
48
+ 'blur', // v0.9.90 phase 1
48
49
  'break',
50
+ 'breakpoint', // v0.9.90 phase 1
49
51
  'call',
52
+ 'clear', // v0.9.90 phase 1
53
+ 'close', // v0.9.90 phase 1
50
54
  'continue',
51
55
  'decrement',
52
56
  'default',
57
+ 'empty', // v0.9.90 phase 1
53
58
  'exit',
54
59
  'fetch',
60
+ 'focus', // v0.9.90 phase 1
55
61
  'for',
56
62
  'get',
57
63
  'go',
@@ -65,6 +71,7 @@ const ENGLISH_COMMANDS = new Set([
65
71
  'make',
66
72
  'measure',
67
73
  'morph',
74
+ 'open', // v0.9.90 phase 1
68
75
  'pick',
69
76
  'process',
70
77
  'push',
@@ -73,7 +80,9 @@ const ENGLISH_COMMANDS = new Set([
73
80
  'render',
74
81
  'repeat',
75
82
  'replace',
83
+ 'reset', // v0.9.90 phase 1
76
84
  'return',
85
+ 'select', // v0.9.90 phase 1
77
86
  'send',
78
87
  'set',
79
88
  'settle',
@@ -562,15 +571,14 @@ function createEnglishProvider() {
562
571
  };
563
572
  }
564
573
 
565
- // packages/i18n/src/dictionaries/es.ts
574
+ // Generated/merged from semantic profiles — hand-written entries are preserved
575
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
566
576
  const es$1 = {
567
577
  commands: {
568
- // Event handling
569
578
  on: 'en',
570
579
  tell: 'decir',
571
580
  trigger: 'disparar',
572
581
  send: 'enviar',
573
- // DOM manipulation
574
582
  take: 'tomar',
575
583
  put: 'poner',
576
584
  set: 'establecer',
@@ -580,7 +588,6 @@ const es$1 = {
580
588
  toggle: 'alternar',
581
589
  hide: 'ocultar',
582
590
  show: 'mostrar',
583
- // Control flow
584
591
  if: 'si',
585
592
  unless: 'menos',
586
593
  repeat: 'repetir',
@@ -590,44 +597,41 @@ const es$1 = {
590
597
  continue: 'continuar',
591
598
  break: 'romper',
592
599
  halt: 'detener',
593
- // Async
594
600
  wait: 'esperar',
595
601
  fetch: 'buscar',
596
602
  call: 'llamar',
597
603
  return: 'retornar',
598
- // Other commands
599
604
  make: 'hacer',
600
605
  log: 'registrar',
601
606
  throw: 'lanzar',
602
607
  catch: 'atrapar',
603
608
  measure: 'medir',
604
609
  transition: 'transición',
605
- // Data Commands
606
610
  increment: 'incrementar',
607
611
  decrement: 'decrementar',
608
612
  default: 'predeterminar',
609
- // Navigation Commands
610
613
  go: 'ir',
611
614
  pushUrl: 'pushUrl',
612
615
  replaceUrl: 'reemplazarUrl',
613
- // Utility Commands
614
616
  copy: 'copiar',
615
617
  pick: 'escoger',
616
618
  beep: 'pitido',
617
- // Advanced Commands
618
619
  js: 'js',
619
620
  async: 'asíncrono',
620
621
  render: 'renderizar',
621
- // Animation Commands
622
622
  swap: 'intercambiar',
623
623
  morph: 'transformar',
624
624
  settle: 'estabilizar',
625
- // Content Commands
626
625
  append: 'añadir',
627
- // Control Flow
628
626
  exit: 'salir',
629
- // Behaviors
630
627
  install: 'instalar',
628
+ breakpoint: 'punto-interrupción',
629
+ clear: 'limpiar',
630
+ close: 'cerrar',
631
+ open: 'abrir',
632
+ select: 'seleccionar',
633
+ clone: 'clonar',
634
+ prepend: 'anteponer',
631
635
  },
632
636
  modifiers: {
633
637
  to: 'a',
@@ -687,12 +691,14 @@ const es$1 = {
687
691
  contains: 'contiene',
688
692
  includes: 'incluye',
689
693
  equals: 'iguala',
690
- has: 'tiene', // third-person: él/ella tiene
691
- have: 'tengo', // first-person: yo tengo
694
+ has: 'tiene',
695
+ have: 'tengo',
692
696
  then: 'entonces',
693
697
  else: 'sino',
694
698
  otherwise: 'delocontrario',
695
699
  end: 'fin',
700
+ live: 'vivo',
701
+ changes: 'cambia',
696
702
  },
697
703
  temporal: {
698
704
  seconds: 'segundos',
@@ -719,7 +725,7 @@ const es$1 = {
719
725
  my: 'mi',
720
726
  you: 'tu',
721
727
  your: 'tu',
722
- yourself: 'ti mismo', // REVIEW: native speaker
728
+ yourself: 'ti mismo',
723
729
  myself: 'yo mismo',
724
730
  element: 'elemento',
725
731
  target: 'objetivo',
@@ -742,7 +748,6 @@ const es$1 = {
742
748
  properties: 'propiedades',
743
749
  },
744
750
  expressions: {
745
- // Positional
746
751
  first: 'primero',
747
752
  last: 'último',
748
753
  next: 'siguiente',
@@ -750,18 +755,20 @@ const es$1 = {
750
755
  prev: 'ant',
751
756
  at: 'en',
752
757
  random: 'aleatorio',
753
- // DOM Traversal
754
758
  closest: 'máscercano',
755
759
  parent: 'padre',
756
760
  children: 'hijos',
757
761
  within: 'dentro',
758
- // Emptiness/Existence
759
762
  no: 'ningún',
760
763
  empty: 'vacío',
761
764
  some: 'algún',
762
- // String operations
763
765
  'starts with': 'empieza con',
764
766
  'ends with': 'termina con',
767
+ 'ignoring case': 'ignorando mayúsculas',
768
+ 'sorted by': 'ordenado por',
769
+ 'mapped to': 'transformado a',
770
+ 'split by': 'dividido por',
771
+ 'joined by': 'unido por',
765
772
  },
766
773
  };
767
774
 
@@ -789,15 +796,14 @@ const esKeywords = createKeywordProvider(es$1, 'es', {
789
796
  allowEnglishFallback: true,
790
797
  });
791
798
 
792
- // packages/i18n/src/dictionaries/ja.ts
799
+ // Generated/merged from semantic profiles — hand-written entries are preserved
800
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
793
801
  const ja$1 = {
794
802
  commands: {
795
- // Event handling
796
803
  on: 'で',
797
804
  tell: '伝える',
798
805
  trigger: '引き金',
799
806
  send: '送る',
800
- // DOM manipulation
801
807
  take: '取る',
802
808
  put: '置く',
803
809
  set: '設定',
@@ -807,7 +813,6 @@ const ja$1 = {
807
813
  toggle: '切り替え',
808
814
  hide: '隠す',
809
815
  show: '表示',
810
- // Control flow
811
816
  if: 'もし',
812
817
  unless: 'でなければ',
813
818
  repeat: '繰り返し',
@@ -817,44 +822,41 @@ const ja$1 = {
817
822
  continue: '続ける',
818
823
  break: '中断',
819
824
  halt: '停止',
820
- // Async
821
825
  wait: '待つ',
822
826
  fetch: '取得',
823
827
  call: '呼び出し',
824
828
  return: '戻る',
825
- // Other commands
826
829
  make: '作る',
827
830
  log: '記録',
828
831
  throw: '投げる',
829
832
  catch: '捕まえる',
830
833
  measure: '測定',
831
834
  transition: '遷移',
832
- // Data Commands
833
835
  increment: '増加',
834
836
  decrement: '減少',
835
837
  default: '既定',
836
- // Navigation Commands
837
838
  go: '移動',
838
839
  pushUrl: 'URLプッシュ',
839
840
  replaceUrl: 'URL置換',
840
- // Utility Commands
841
841
  copy: 'コピー',
842
842
  pick: '選択',
843
843
  beep: 'ビープ',
844
- // Advanced Commands
845
844
  js: 'JS実行',
846
845
  async: '非同期',
847
846
  render: '描画',
848
- // Animation Commands
849
847
  swap: '交換',
850
848
  morph: '変形',
851
849
  settle: '安定',
852
- // Content Commands
853
850
  append: '末尾追加',
854
- // Control Flow
855
851
  exit: '終了',
856
- // Behaviors
857
852
  install: 'インストール',
853
+ breakpoint: 'ブレークポイント',
854
+ clear: 'クリア',
855
+ close: '閉じる',
856
+ open: '開く',
857
+ select: '選択',
858
+ clone: '複製',
859
+ prepend: '先頭追加',
858
860
  },
859
861
  modifiers: {
860
862
  to: 'に',
@@ -914,12 +916,14 @@ const ja$1 = {
914
916
  contains: '含む',
915
917
  includes: '含める',
916
918
  equals: '等しい',
917
- has: 'ある', // existence verb (context-based)
918
- have: 'ある', // same verb for first/third person
919
+ has: 'ある',
920
+ have: 'ある',
919
921
  then: 'それから',
920
922
  else: 'そうでなければ',
921
923
  otherwise: 'そうでなければ',
922
924
  end: '終わり',
925
+ live: 'ライブ',
926
+ changes: '変わったら',
923
927
  },
924
928
  temporal: {
925
929
  seconds: '秒',
@@ -969,7 +973,6 @@ const ja$1 = {
969
973
  properties: 'プロパティ群',
970
974
  },
971
975
  expressions: {
972
- // Positional
973
976
  first: '最初',
974
977
  last: '最後',
975
978
  next: '次',
@@ -977,18 +980,20 @@ const ja$1 = {
977
980
  prev: '前',
978
981
  at: 'で',
979
982
  random: 'ランダム',
980
- // DOM Traversal
981
983
  closest: '最も近い',
982
984
  parent: '親',
983
985
  children: '子',
984
986
  within: '以内',
985
- // Emptiness/Existence
986
987
  no: 'ない',
987
988
  empty: '空',
988
989
  some: 'いくつか',
989
- // String operations
990
990
  'starts with': 'で始まる',
991
991
  'ends with': 'で終わる',
992
+ 'ignoring case': '大文字小文字を無視',
993
+ 'sorted by': 'でソート',
994
+ 'mapped to': 'に変換',
995
+ 'split by': 'で分割',
996
+ 'joined by': 'で結合',
992
997
  },
993
998
  };
994
999
 
@@ -1021,15 +1026,14 @@ const jaKeywords = createKeywordProvider(ja$1, 'ja', {
1021
1026
  allowEnglishFallback: true,
1022
1027
  });
1023
1028
 
1024
- // packages/i18n/src/dictionaries/fr.ts
1029
+ // Generated/merged from semantic profiles — hand-written entries are preserved
1030
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
1025
1031
  const fr$1 = {
1026
1032
  commands: {
1027
- // Event handling
1028
1033
  on: 'sur',
1029
1034
  tell: 'dire',
1030
1035
  trigger: 'déclencher',
1031
1036
  send: 'envoyer',
1032
- // DOM manipulation
1033
1037
  take: 'prendre',
1034
1038
  put: 'mettre',
1035
1039
  set: 'définir',
@@ -1039,7 +1043,6 @@ const fr$1 = {
1039
1043
  toggle: 'basculer',
1040
1044
  hide: 'cacher',
1041
1045
  show: 'montrer',
1042
- // Control flow
1043
1046
  if: 'si',
1044
1047
  unless: 'saufsi',
1045
1048
  repeat: 'répéter',
@@ -1049,44 +1052,41 @@ const fr$1 = {
1049
1052
  continue: 'continuer',
1050
1053
  break: 'arrêter',
1051
1054
  halt: 'stopper',
1052
- // Async
1053
1055
  wait: 'attendre',
1054
1056
  fetch: 'récupérer',
1055
1057
  call: 'appeler',
1056
1058
  return: 'retourner',
1057
- // Other commands
1058
1059
  make: 'créer',
1059
1060
  log: 'enregistrer',
1060
1061
  throw: 'lancer',
1061
1062
  catch: 'attraper',
1062
1063
  measure: 'mesurer',
1063
1064
  transition: 'transition',
1064
- // Data Commands
1065
1065
  increment: 'incrémenter',
1066
1066
  decrement: 'décrémenter',
1067
1067
  default: 'défaut',
1068
- // Navigation Commands
1069
1068
  go: 'aller',
1070
1069
  pushUrl: 'pousserUrl',
1071
1070
  replaceUrl: 'remplacerUrl',
1072
- // Utility Commands
1073
1071
  copy: 'copier',
1074
1072
  pick: 'choisir',
1075
1073
  beep: 'bip',
1076
- // Advanced Commands
1077
1074
  js: 'js',
1078
1075
  async: 'asynchrone',
1079
1076
  render: 'rendu',
1080
- // Animation Commands
1081
1077
  swap: 'échanger',
1082
1078
  morph: 'transformer',
1083
1079
  settle: 'stabiliser',
1084
- // Content Commands
1085
1080
  append: 'ajouter',
1086
- // Control Flow
1087
1081
  exit: 'sortir',
1088
- // Behaviors
1089
1082
  install: 'installer',
1083
+ breakpoint: 'point-arrêt',
1084
+ clear: 'effacer',
1085
+ close: 'fermer',
1086
+ open: 'ouvrir',
1087
+ select: 'sélectionner',
1088
+ clone: 'cloner',
1089
+ prepend: 'préfixer',
1090
1090
  },
1091
1091
  modifiers: {
1092
1092
  to: 'à',
@@ -1146,12 +1146,14 @@ const fr$1 = {
1146
1146
  contains: 'contient',
1147
1147
  includes: 'inclut',
1148
1148
  equals: 'égale',
1149
- has: 'a', // third-person: il/elle a
1150
- have: 'ai', // first-person: j'ai
1149
+ has: 'a',
1150
+ have: 'ai',
1151
1151
  then: 'alors',
1152
1152
  else: 'sinon',
1153
1153
  otherwise: 'autrement',
1154
1154
  end: 'fin',
1155
+ live: 'vif',
1156
+ changes: 'change',
1155
1157
  },
1156
1158
  temporal: {
1157
1159
  seconds: 'secondes',
@@ -1178,7 +1180,7 @@ const fr$1 = {
1178
1180
  my: 'mon',
1179
1181
  you: 'tu',
1180
1182
  your: 'ton',
1181
- yourself: 'toi-même', // REVIEW: native speaker
1183
+ yourself: 'toi-même',
1182
1184
  myself: 'moi-même',
1183
1185
  element: 'élément',
1184
1186
  target: 'cible',
@@ -1201,7 +1203,6 @@ const fr$1 = {
1201
1203
  properties: 'propriétés',
1202
1204
  },
1203
1205
  expressions: {
1204
- // Positional
1205
1206
  first: 'premier',
1206
1207
  last: 'dernier',
1207
1208
  next: 'suivant',
@@ -1209,18 +1210,20 @@ const fr$1 = {
1209
1210
  prev: 'préc',
1210
1211
  at: 'à',
1211
1212
  random: 'aléatoire',
1212
- // DOM Traversal
1213
1213
  closest: 'plusproche',
1214
1214
  parent: 'parent',
1215
1215
  children: 'enfants',
1216
1216
  within: 'dans',
1217
- // Emptiness/Existence
1218
1217
  no: 'aucun',
1219
1218
  empty: 'vide',
1220
1219
  some: 'quelques',
1221
- // String operations
1222
1220
  'starts with': 'commence par',
1223
1221
  'ends with': 'finit par',
1222
+ 'ignoring case': 'en ignorant la casse',
1223
+ 'sorted by': 'trié par',
1224
+ 'mapped to': 'transformé en',
1225
+ 'split by': 'divisé par',
1226
+ 'joined by': 'joint par',
1224
1227
  },
1225
1228
  };
1226
1229
 
@@ -1248,15 +1251,14 @@ const frKeywords = createKeywordProvider(fr$1, 'fr', {
1248
1251
  allowEnglishFallback: true,
1249
1252
  });
1250
1253
 
1251
- // packages/i18n/src/dictionaries/de.ts
1254
+ // Generated/merged from semantic profiles — hand-written entries are preserved
1255
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
1252
1256
  const de$1 = {
1253
1257
  commands: {
1254
- // Event handling
1255
1258
  on: 'bei',
1256
1259
  tell: 'sagen',
1257
1260
  trigger: 'auslösen',
1258
1261
  send: 'senden',
1259
- // DOM manipulation
1260
1262
  take: 'nehmen',
1261
1263
  put: 'setzen',
1262
1264
  set: 'festlegen',
@@ -1266,7 +1268,6 @@ const de$1 = {
1266
1268
  toggle: 'umschalten',
1267
1269
  hide: 'verstecken',
1268
1270
  show: 'zeigen',
1269
- // Control flow
1270
1271
  if: 'wenn',
1271
1272
  unless: 'wennnicht',
1272
1273
  repeat: 'wiederholen',
@@ -1276,44 +1277,41 @@ const de$1 = {
1276
1277
  continue: 'weiter',
1277
1278
  break: 'unterbrechen',
1278
1279
  halt: 'anhalten',
1279
- // Async
1280
1280
  wait: 'warten',
1281
1281
  fetch: 'holen',
1282
1282
  call: 'aufrufen',
1283
1283
  return: 'zurückgeben',
1284
- // Other commands
1285
1284
  make: 'erstellen',
1286
1285
  log: 'protokollieren',
1287
1286
  throw: 'werfen',
1288
1287
  catch: 'fangen',
1289
1288
  measure: 'messen',
1290
1289
  transition: 'übergang',
1291
- // Data Commands
1292
1290
  increment: 'erhöhen',
1293
1291
  decrement: 'verringern',
1294
1292
  default: 'standard',
1295
- // Navigation Commands
1296
1293
  go: 'gehen',
1297
1294
  pushUrl: 'urlHinzufügen',
1298
1295
  replaceUrl: 'urlErsetzen',
1299
- // Utility Commands
1300
1296
  copy: 'kopieren',
1301
1297
  pick: 'auswählen',
1302
1298
  beep: 'piepton',
1303
- // Advanced Commands
1304
1299
  js: 'js',
1305
1300
  async: 'asynchron',
1306
1301
  render: 'rendern',
1307
- // Animation Commands
1308
1302
  swap: 'tauschen',
1309
1303
  morph: 'verwandeln',
1310
1304
  settle: 'stabilisieren',
1311
- // Content Commands
1312
1305
  append: 'anhängen',
1313
- // Control Flow
1314
1306
  exit: 'beenden',
1315
- // Behaviors
1316
1307
  install: 'installieren',
1308
+ breakpoint: 'haltepunkt',
1309
+ clear: 'löschen',
1310
+ close: 'schließen',
1311
+ open: 'öffnen',
1312
+ select: 'auswählen',
1313
+ clone: 'klonen',
1314
+ prepend: 'voranstellen',
1317
1315
  },
1318
1316
  modifiers: {
1319
1317
  to: 'zu',
@@ -1373,12 +1371,14 @@ const de$1 = {
1373
1371
  contains: 'enthält',
1374
1372
  includes: 'beinhaltet',
1375
1373
  equals: 'gleicht',
1376
- has: 'hat', // third-person: es hat
1377
- have: 'habe', // first-person: ich habe
1374
+ has: 'hat',
1375
+ have: 'habe',
1378
1376
  then: 'dann',
1379
1377
  else: 'sonst',
1380
1378
  otherwise: 'andernfalls',
1381
1379
  end: 'ende',
1380
+ live: 'live',
1381
+ changes: 'ändert',
1382
1382
  },
1383
1383
  temporal: {
1384
1384
  seconds: 'sekunden',
@@ -1405,7 +1405,7 @@ const de$1 = {
1405
1405
  my: 'mein',
1406
1406
  you: 'du',
1407
1407
  your: 'dein',
1408
- yourself: 'dich selbst', // REVIEW: native speaker
1408
+ yourself: 'dich selbst',
1409
1409
  myself: 'ich selbst',
1410
1410
  element: 'element',
1411
1411
  target: 'ziel',
@@ -1428,7 +1428,6 @@ const de$1 = {
1428
1428
  properties: 'eigenschaften',
1429
1429
  },
1430
1430
  expressions: {
1431
- // Positional
1432
1431
  first: 'erste',
1433
1432
  last: 'letzte',
1434
1433
  next: 'nächste',
@@ -1436,18 +1435,20 @@ const de$1 = {
1436
1435
  prev: 'vorh',
1437
1436
  at: 'bei',
1438
1437
  random: 'zufällig',
1439
- // DOM Traversal
1440
1438
  closest: 'nächste',
1441
1439
  parent: 'elternteil',
1442
1440
  children: 'kinder',
1443
1441
  within: 'innerhalb',
1444
- // Emptiness/Existence
1445
1442
  no: 'kein',
1446
1443
  empty: 'leer',
1447
1444
  some: 'einige',
1448
- // String operations
1449
1445
  'starts with': 'beginnt mit',
1450
1446
  'ends with': 'endet mit',
1447
+ 'ignoring case': 'ohne Groß-/Kleinschreibung',
1448
+ 'sorted by': 'sortiert nach',
1449
+ 'mapped to': 'zugeordnet zu',
1450
+ 'split by': 'geteilt durch',
1451
+ 'joined by': 'verbunden mit',
1451
1452
  },
1452
1453
  };
1453
1454
 
@@ -1480,15 +1481,14 @@ const deKeywords = createKeywordProvider(de$1, 'de', {
1480
1481
  allowEnglishFallback: true,
1481
1482
  });
1482
1483
 
1483
- // packages/i18n/src/dictionaries/ar.ts
1484
+ // Generated/merged from semantic profiles — hand-written entries are preserved
1485
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
1484
1486
  const ar$1 = {
1485
1487
  commands: {
1486
- // Event handling
1487
1488
  on: 'على',
1488
1489
  tell: 'أخبر',
1489
1490
  trigger: 'تشغيل',
1490
1491
  send: 'أرسل',
1491
- // DOM manipulation
1492
1492
  take: 'خذ',
1493
1493
  put: 'ضع',
1494
1494
  set: 'اضبط',
@@ -1498,7 +1498,6 @@ const ar$1 = {
1498
1498
  toggle: 'بدل',
1499
1499
  hide: 'اخف',
1500
1500
  show: 'اظهر',
1501
- // Control flow
1502
1501
  if: 'إذا',
1503
1502
  unless: 'إلا إذا',
1504
1503
  repeat: 'كرر',
@@ -1508,44 +1507,41 @@ const ar$1 = {
1508
1507
  continue: 'واصل',
1509
1508
  break: 'توقف',
1510
1509
  halt: 'أوقف',
1511
- // Async
1512
1510
  wait: 'انتظر',
1513
1511
  fetch: 'احضر',
1514
1512
  call: 'استدع',
1515
1513
  return: 'ارجع',
1516
- // Other commands
1517
1514
  make: 'اصنع',
1518
1515
  log: 'سجل',
1519
1516
  throw: 'ارم',
1520
1517
  catch: 'التقط',
1521
1518
  measure: 'قس',
1522
1519
  transition: 'انتقال',
1523
- // Data Commands
1524
1520
  increment: 'زِد',
1525
1521
  decrement: 'أنقص',
1526
1522
  default: 'افتراضي',
1527
- // Navigation Commands
1528
1523
  go: 'اذهب',
1529
1524
  pushUrl: 'ادفع رابط',
1530
1525
  replaceUrl: 'استبدل رابط',
1531
- // Utility Commands
1532
1526
  copy: 'انسخ',
1533
1527
  pick: 'اختر',
1534
1528
  beep: 'صفّر',
1535
- // Advanced Commands
1536
1529
  js: 'جافاسكربت',
1537
1530
  async: 'متزامن',
1538
1531
  render: 'ارسم',
1539
- // Animation Commands
1540
1532
  swap: 'بدّل',
1541
1533
  morph: 'حوّل',
1542
1534
  settle: 'استقر',
1543
- // Content Commands
1544
1535
  append: 'ألحق',
1545
- // Control Flow
1546
1536
  exit: 'اخرج',
1547
- // Behaviors
1548
1537
  install: 'ثبّت',
1538
+ breakpoint: 'نقطة-توقف',
1539
+ clear: 'امسح',
1540
+ close: 'أغلق',
1541
+ open: 'افتح',
1542
+ select: 'اختر',
1543
+ clone: 'استنسخ',
1544
+ prepend: 'سبق',
1549
1545
  },
1550
1546
  modifiers: {
1551
1547
  to: 'إلى',
@@ -1605,12 +1601,14 @@ const ar$1 = {
1605
1601
  contains: 'يحتوي',
1606
1602
  includes: 'يشمل',
1607
1603
  equals: 'يساوي',
1608
- has: 'لديه', // third-person: he/it has
1609
- have: 'لدي', // first-person: I have
1604
+ has: 'لديه',
1605
+ have: 'لدي',
1610
1606
  then: 'ثم',
1611
1607
  else: 'وإلا',
1612
1608
  otherwise: 'خلاف ذلك',
1613
1609
  end: 'النهاية',
1610
+ live: 'حي',
1611
+ changes: 'يتغير',
1614
1612
  },
1615
1613
  temporal: {
1616
1614
  seconds: 'ثوانِ',
@@ -1632,13 +1630,13 @@ const ar$1 = {
1632
1630
  null: 'فارغ',
1633
1631
  undefined: 'غير معرف',
1634
1632
  it: 'هو',
1635
- its: 'له', // REVIEW: native speaker
1633
+ its: 'له',
1636
1634
  me: 'أنا',
1637
1635
  my: 'لي',
1638
1636
  myself: 'نفسي',
1639
- you: 'أنت', // REVIEW: native speaker
1640
- your: 'لك', // REVIEW: native speaker
1641
- yourself: 'نفسك', // REVIEW: native speaker
1637
+ you: 'أنت',
1638
+ your: 'لك',
1639
+ yourself: 'نفسك',
1642
1640
  element: 'عنصر',
1643
1641
  target: 'هدف',
1644
1642
  detail: 'تفاصيل',
@@ -1660,7 +1658,6 @@ const ar$1 = {
1660
1658
  properties: 'خصائص',
1661
1659
  },
1662
1660
  expressions: {
1663
- // Positional
1664
1661
  first: 'أول',
1665
1662
  last: 'آخر',
1666
1663
  next: 'التالي',
@@ -1668,18 +1665,20 @@ const ar$1 = {
1668
1665
  prev: 'سابق',
1669
1666
  at: 'عند',
1670
1667
  random: 'عشوائي',
1671
- // DOM Traversal
1672
1668
  closest: 'الأقرب',
1673
1669
  parent: 'والد',
1674
1670
  children: 'أطفال',
1675
1671
  within: 'داخل',
1676
- // Emptiness/Existence
1677
1672
  no: 'لا يوجد',
1678
1673
  empty: 'فارغ',
1679
1674
  some: 'بعض',
1680
- // String operations
1681
1675
  'starts with': 'يبدأ بـ',
1682
1676
  'ends with': 'ينتهي بـ',
1677
+ 'ignoring case': 'مع تجاهل الحالة',
1678
+ 'sorted by': 'مرتب حسب',
1679
+ 'mapped to': 'محول إلى',
1680
+ 'split by': 'مقسم بواسطة',
1681
+ 'joined by': 'مدموج بواسطة',
1683
1682
  },
1684
1683
  };
1685
1684
 
@@ -1716,15 +1715,14 @@ const arKeywords = createKeywordProvider(ar$1, 'ar', {
1716
1715
  allowEnglishFallback: true,
1717
1716
  });
1718
1717
 
1719
- // packages/i18n/src/dictionaries/ko.ts
1718
+ // Generated/merged from semantic profiles — hand-written entries are preserved
1719
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
1720
1720
  const ko$1 = {
1721
1721
  commands: {
1722
- // Event handling
1723
1722
  on: '에',
1724
1723
  tell: '말하다',
1725
1724
  trigger: '트리거',
1726
1725
  send: '보내다',
1727
- // DOM manipulation
1728
1726
  take: '가져오다',
1729
1727
  put: '넣다',
1730
1728
  set: '설정',
@@ -1734,7 +1732,6 @@ const ko$1 = {
1734
1732
  toggle: '토글',
1735
1733
  hide: '숨기다',
1736
1734
  show: '보이다',
1737
- // Control flow
1738
1735
  if: '만약',
1739
1736
  unless: '아니면',
1740
1737
  repeat: '반복',
@@ -1744,44 +1741,41 @@ const ko$1 = {
1744
1741
  continue: '계속',
1745
1742
  break: '중단',
1746
1743
  halt: '정지',
1747
- // Async
1748
1744
  wait: '대기',
1749
1745
  fetch: '가져오기',
1750
1746
  call: '호출',
1751
1747
  return: '반환',
1752
- // Other commands
1753
1748
  make: '만들다',
1754
1749
  log: '로그',
1755
1750
  throw: '던지다',
1756
1751
  catch: '잡다',
1757
1752
  measure: '측정',
1758
1753
  transition: '전환',
1759
- // Data Commands
1760
1754
  increment: '증가',
1761
1755
  decrement: '감소',
1762
1756
  default: '기본값',
1763
- // Navigation Commands
1764
1757
  go: '이동',
1765
1758
  pushUrl: 'URL푸시',
1766
1759
  replaceUrl: 'URL교체',
1767
- // Utility Commands
1768
1760
  copy: '복사',
1769
1761
  pick: '선택',
1770
1762
  beep: '비프',
1771
- // Advanced Commands
1772
1763
  js: 'JS실행',
1773
1764
  async: '비동기',
1774
1765
  render: '렌더링',
1775
- // Animation Commands
1776
1766
  swap: '교환',
1777
1767
  morph: '변형',
1778
1768
  settle: '안정',
1779
- // Content Commands
1780
1769
  append: '추가',
1781
- // Control Flow
1782
1770
  exit: '종료',
1783
- // Behaviors
1784
1771
  install: '설치',
1772
+ breakpoint: '중단점',
1773
+ clear: '지우기',
1774
+ close: '닫기',
1775
+ open: '열기',
1776
+ select: '선택',
1777
+ clone: '복제',
1778
+ prepend: '앞에추가',
1785
1779
  },
1786
1780
  modifiers: {
1787
1781
  to: '에',
@@ -1841,12 +1835,14 @@ const ko$1 = {
1841
1835
  contains: '포함',
1842
1836
  includes: '포함하다',
1843
1837
  equals: '같다',
1844
- has: '있다', // existence verb (context-based)
1845
- have: '있다', // same verb for first/third person
1838
+ has: '있다',
1839
+ have: '있다',
1846
1840
  then: '그러면',
1847
1841
  else: '아니면',
1848
1842
  otherwise: '그렇지않으면',
1849
1843
  end: '끝',
1844
+ live: '라이브',
1845
+ changes: '변경되면',
1850
1846
  },
1851
1847
  temporal: {
1852
1848
  seconds: '초',
@@ -1868,13 +1864,13 @@ const ko$1 = {
1868
1864
  null: '널',
1869
1865
  undefined: '정의안됨',
1870
1866
  it: '그것',
1871
- its: '그것의', // REVIEW: native speaker
1867
+ its: '그것의',
1872
1868
  me: '나',
1873
1869
  my: '내',
1874
1870
  myself: '나자신',
1875
- you: '너', // REVIEW: native speaker - formal/informal
1876
- your: '네', // REVIEW: native speaker - formal/informal
1877
- yourself: '너자신', // REVIEW: native speaker
1871
+ you: '너',
1872
+ your: '네',
1873
+ yourself: '너자신',
1878
1874
  element: '요소',
1879
1875
  target: '대상',
1880
1876
  detail: '세부',
@@ -1896,7 +1892,6 @@ const ko$1 = {
1896
1892
  properties: '프로퍼티들',
1897
1893
  },
1898
1894
  expressions: {
1899
- // Positional
1900
1895
  first: '첫번째',
1901
1896
  last: '마지막',
1902
1897
  next: '다음',
@@ -1904,18 +1899,20 @@ const ko$1 = {
1904
1899
  prev: '이전',
1905
1900
  at: '에서',
1906
1901
  random: '무작위',
1907
- // DOM Traversal
1908
1902
  closest: '가장가까운',
1909
1903
  parent: '부모',
1910
1904
  children: '자식',
1911
1905
  within: '이내',
1912
- // Emptiness/Existence
1913
1906
  no: '없음',
1914
1907
  empty: '비어있는',
1915
1908
  some: '일부',
1916
- // String operations
1917
1909
  'starts with': '로시작',
1918
1910
  'ends with': '로끝나는',
1911
+ 'ignoring case': '대소문자_무시',
1912
+ 'sorted by': '로_정렬',
1913
+ 'mapped to': '로_변환',
1914
+ 'split by': '로_분할',
1915
+ 'joined by': '로_결합',
1919
1916
  },
1920
1917
  };
1921
1918
 
@@ -1949,15 +1946,14 @@ const koKeywords = createKeywordProvider(ko$1, 'ko', {
1949
1946
  allowEnglishFallback: true,
1950
1947
  });
1951
1948
 
1952
- // packages/i18n/src/dictionaries/zh.ts
1949
+ // Generated/merged from semantic profiles — hand-written entries are preserved
1950
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
1953
1951
  const zh$1 = {
1954
1952
  commands: {
1955
- // Event handling
1956
1953
  on: '当',
1957
1954
  tell: '告诉',
1958
1955
  trigger: '触发',
1959
1956
  send: '发送',
1960
- // DOM manipulation
1961
1957
  take: '获取',
1962
1958
  put: '放置',
1963
1959
  set: '设置',
@@ -1967,7 +1963,6 @@ const zh$1 = {
1967
1963
  toggle: '切换',
1968
1964
  hide: '隐藏',
1969
1965
  show: '显示',
1970
- // Control flow
1971
1966
  if: '如果',
1972
1967
  unless: '除非',
1973
1968
  repeat: '重复',
@@ -1977,44 +1972,41 @@ const zh$1 = {
1977
1972
  continue: '继续',
1978
1973
  break: '中断',
1979
1974
  halt: '停止',
1980
- // Async
1981
1975
  wait: '等待',
1982
1976
  fetch: '获取',
1983
1977
  call: '调用',
1984
1978
  return: '返回',
1985
- // Other commands
1986
1979
  make: '制作',
1987
1980
  log: '日志',
1988
1981
  throw: '抛出',
1989
1982
  catch: '捕获',
1990
1983
  measure: '测量',
1991
1984
  transition: '过渡',
1992
- // Data Commands
1993
1985
  increment: '增加',
1994
1986
  decrement: '减少',
1995
1987
  default: '默认',
1996
- // Navigation Commands
1997
1988
  go: '前往',
1998
1989
  pushUrl: '推送网址',
1999
1990
  replaceUrl: '替换网址',
2000
- // Utility Commands
2001
1991
  copy: '复制',
2002
1992
  pick: '选取',
2003
1993
  beep: '蜂鸣',
2004
- // Advanced Commands
2005
1994
  js: 'JS执行',
2006
1995
  async: '异步',
2007
1996
  render: '渲染',
2008
- // Animation Commands
2009
1997
  swap: '交换',
2010
1998
  morph: '变形',
2011
1999
  settle: '稳定',
2012
- // Content Commands
2013
2000
  append: '追加',
2014
- // Control Flow
2015
2001
  exit: '退出',
2016
- // Behaviors
2017
2002
  install: '安装',
2003
+ breakpoint: '断点',
2004
+ clear: '清除',
2005
+ close: '关闭',
2006
+ open: '打开',
2007
+ select: '选择',
2008
+ clone: '克隆',
2009
+ prepend: '前置',
2018
2010
  },
2019
2011
  modifiers: {
2020
2012
  to: '到',
@@ -2074,12 +2066,14 @@ const zh$1 = {
2074
2066
  contains: '包含',
2075
2067
  includes: '包括',
2076
2068
  equals: '等于',
2077
- has: '有', // universal "have"
2078
- have: '有', // same character for first/third person
2069
+ has: '有',
2070
+ have: '有',
2079
2071
  then: '那么',
2080
2072
  else: '否则',
2081
2073
  otherwise: '要不然',
2082
2074
  end: '结束',
2075
+ live: '实时',
2076
+ changes: '改变时',
2083
2077
  },
2084
2078
  temporal: {
2085
2079
  seconds: '秒',
@@ -2101,13 +2095,13 @@ const zh$1 = {
2101
2095
  null: '空',
2102
2096
  undefined: '未定义',
2103
2097
  it: '它',
2104
- its: '它的', // REVIEW: native speaker
2098
+ its: '它的',
2105
2099
  me: '我',
2106
2100
  my: '我的',
2107
2101
  myself: '我自己',
2108
- you: '你', // REVIEW: native speaker
2109
- your: '你的', // REVIEW: native speaker
2110
- yourself: '你自己', // REVIEW: native speaker
2102
+ you: '你',
2103
+ your: '你的',
2104
+ yourself: '你自己',
2111
2105
  element: '元素',
2112
2106
  target: '目标',
2113
2107
  detail: '详情',
@@ -2129,7 +2123,6 @@ const zh$1 = {
2129
2123
  properties: '特性集',
2130
2124
  },
2131
2125
  expressions: {
2132
- // Positional
2133
2126
  first: '第一个',
2134
2127
  last: '最后一个',
2135
2128
  next: '下一个',
@@ -2137,18 +2130,20 @@ const zh$1 = {
2137
2130
  prev: '上个',
2138
2131
  at: '在',
2139
2132
  random: '随机',
2140
- // DOM Traversal
2141
2133
  closest: '最近的',
2142
2134
  parent: '父级',
2143
2135
  children: '子级',
2144
2136
  within: '之内',
2145
- // Emptiness/Existence
2146
2137
  no: '没有',
2147
2138
  empty: '空的',
2148
2139
  some: '一些',
2149
- // String operations
2150
2140
  'starts with': '以开头',
2151
2141
  'ends with': '以结尾',
2142
+ 'ignoring case': '忽略大小写',
2143
+ 'sorted by': '按_排序',
2144
+ 'mapped to': '映射为',
2145
+ 'split by': '按_分割',
2146
+ 'joined by': '用_连接',
2152
2147
  },
2153
2148
  };
2154
2149
 
@@ -2183,15 +2178,14 @@ const zhKeywords = createKeywordProvider(zh$1, 'zh', {
2183
2178
  allowEnglishFallback: true,
2184
2179
  });
2185
2180
 
2186
- // packages/i18n/src/dictionaries/tr.ts
2181
+ // Generated/merged from semantic profiles — hand-written entries are preserved
2182
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
2187
2183
  const tr$1 = {
2188
2184
  commands: {
2189
- // Event handling
2190
2185
  on: 'üzerinde',
2191
2186
  tell: 'söyle',
2192
2187
  trigger: 'tetikle',
2193
2188
  send: 'gönder',
2194
- // DOM manipulation
2195
2189
  take: 'al',
2196
2190
  put: 'koy',
2197
2191
  set: 'ayarla',
@@ -2201,7 +2195,6 @@ const tr$1 = {
2201
2195
  toggle: 'değiştir',
2202
2196
  hide: 'gizle',
2203
2197
  show: 'göster',
2204
- // Control flow
2205
2198
  if: 'eğer',
2206
2199
  unless: 'değilse',
2207
2200
  repeat: 'tekrarla',
@@ -2211,44 +2204,41 @@ const tr$1 = {
2211
2204
  continue: 'devam',
2212
2205
  break: 'dur',
2213
2206
  halt: 'durdur',
2214
- // Async
2215
2207
  wait: 'bekle',
2216
2208
  fetch: 'getir',
2217
2209
  call: 'çağır',
2218
2210
  return: 'dön',
2219
- // Other commands
2220
2211
  make: 'yap',
2221
2212
  log: 'kaydet',
2222
2213
  throw: 'fırlat',
2223
2214
  catch: 'yakala',
2224
2215
  measure: 'ölç',
2225
2216
  transition: 'geçiş',
2226
- // Data Commands
2227
2217
  increment: 'artır',
2228
2218
  decrement: 'azalt',
2229
2219
  default: 'varsayılan',
2230
- // Navigation Commands
2231
2220
  go: 'git',
2232
2221
  pushUrl: 'urlEkle',
2233
2222
  replaceUrl: 'urlDeğiştir',
2234
- // Utility Commands
2235
2223
  copy: 'kopyala',
2236
2224
  pick: 'seç',
2237
2225
  beep: 'bip',
2238
- // Advanced Commands
2239
2226
  js: 'js',
2240
2227
  async: 'asenkron',
2241
2228
  render: 'render',
2242
- // Animation Commands
2243
2229
  swap: 'takas',
2244
2230
  morph: 'dönüştür',
2245
2231
  settle: 'sabitlen',
2246
- // Content Commands
2247
2232
  append: 'ekle',
2248
- // Control Flow
2249
2233
  exit: 'çık',
2250
- // Behaviors
2251
2234
  install: 'kur',
2235
+ breakpoint: 'kesme-noktası',
2236
+ clear: 'temizle',
2237
+ close: 'kapat',
2238
+ open: 'aç',
2239
+ select: 'seç',
2240
+ clone: 'klonla',
2241
+ prepend: 'başınaekle',
2252
2242
  },
2253
2243
  modifiers: {
2254
2244
  to: 'e',
@@ -2297,8 +2287,8 @@ const tr$1 = {
2297
2287
  touchcancel: 'dokunma_iptal',
2298
2288
  },
2299
2289
  logical: {
2300
- when: 'iken', // REVIEW: native speaker - could also be 'durumunda' (in case of) or 'olduğunda' (when it happens)
2301
- where: 'nerede', // REVIEW: native speaker - element filter context
2290
+ when: 'iken',
2291
+ where: 'nerede',
2302
2292
  and: 've',
2303
2293
  or: 'veya',
2304
2294
  not: 'değil',
@@ -2308,12 +2298,14 @@ const tr$1 = {
2308
2298
  contains: 'içerir',
2309
2299
  includes: 'dahil',
2310
2300
  equals: 'eşittir',
2311
- has: 'var', // existence marker (context-based)
2312
- have: 'var', // same for first/third person in Turkish
2301
+ has: 'var',
2302
+ have: 'var',
2313
2303
  then: 'sonra',
2314
2304
  else: 'yoksa',
2315
2305
  otherwise: 'aksi_halde',
2316
2306
  end: 'son',
2307
+ live: 'canlı',
2308
+ changes: 'değiştiğinde',
2317
2309
  },
2318
2310
  temporal: {
2319
2311
  seconds: 'saniye',
@@ -2335,13 +2327,13 @@ const tr$1 = {
2335
2327
  null: 'boş',
2336
2328
  undefined: 'tanımsız',
2337
2329
  it: 'o',
2338
- its: 'onun', // REVIEW: native speaker
2330
+ its: 'onun',
2339
2331
  me: 'ben',
2340
2332
  my: 'benim',
2341
2333
  myself: 'kendim',
2342
- you: 'sen', // REVIEW: native speaker - formal/informal
2343
- your: 'senin', // REVIEW: native speaker - formal/informal
2344
- yourself: 'kendin', // REVIEW: native speaker
2334
+ you: 'sen',
2335
+ your: 'senin',
2336
+ yourself: 'kendin',
2345
2337
  element: 'öğe',
2346
2338
  target: 'hedef',
2347
2339
  detail: 'detay',
@@ -2363,7 +2355,6 @@ const tr$1 = {
2363
2355
  properties: 'özellikler',
2364
2356
  },
2365
2357
  expressions: {
2366
- // Positional
2367
2358
  first: 'ilk',
2368
2359
  last: 'son',
2369
2360
  next: 'sonraki',
@@ -2371,18 +2362,20 @@ const tr$1 = {
2371
2362
  prev: 'önc',
2372
2363
  at: 'de',
2373
2364
  random: 'rastgele',
2374
- // DOM Traversal
2375
2365
  closest: 'en_yakın',
2376
2366
  parent: 'ebeveyn',
2377
2367
  children: 'çocuklar',
2378
2368
  within: 'içinde',
2379
- // Emptiness/Existence
2380
2369
  no: 'yok',
2381
2370
  empty: 'boş',
2382
2371
  some: 'bazı',
2383
- // String operations
2384
2372
  'starts with': 'ile başlar',
2385
2373
  'ends with': 'ile biter',
2374
+ 'ignoring case': 'büyük küçük harf duyarsız',
2375
+ 'sorted by': 'göre sıralı',
2376
+ 'mapped to': 'ye dönüştürülmüş',
2377
+ 'split by': 'ile bölünmüş',
2378
+ 'joined by': 'ile birleştirilmiş',
2386
2379
  },
2387
2380
  };
2388
2381
 
@@ -2417,15 +2410,14 @@ const trKeywords = createKeywordProvider(tr$1, 'tr', {
2417
2410
  allowEnglishFallback: true,
2418
2411
  });
2419
2412
 
2420
- // packages/i18n/src/dictionaries/id.ts
2413
+ // Generated/merged from semantic profiles — hand-written entries are preserved
2414
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
2421
2415
  const id$1 = {
2422
2416
  commands: {
2423
- // Event handling
2424
2417
  on: 'pada',
2425
2418
  tell: 'katakan',
2426
2419
  trigger: 'picu',
2427
2420
  send: 'kirim',
2428
- // DOM manipulation
2429
2421
  take: 'ambil',
2430
2422
  put: 'taruh',
2431
2423
  set: 'atur',
@@ -2435,7 +2427,6 @@ const id$1 = {
2435
2427
  toggle: 'ganti',
2436
2428
  hide: 'sembunyikan',
2437
2429
  show: 'tampilkan',
2438
- // Control flow
2439
2430
  if: 'jika',
2440
2431
  unless: 'kecuali',
2441
2432
  repeat: 'ulangi',
@@ -2445,44 +2436,41 @@ const id$1 = {
2445
2436
  continue: 'lanjutkan',
2446
2437
  break: 'hentikan',
2447
2438
  halt: 'berhenti',
2448
- // Async
2449
2439
  wait: 'tunggu',
2450
2440
  fetch: 'ambil',
2451
2441
  call: 'panggil',
2452
2442
  return: 'kembali',
2453
- // Other commands
2454
2443
  make: 'buat',
2455
2444
  log: 'catat',
2456
2445
  throw: 'lempar',
2457
2446
  catch: 'tangkap',
2458
2447
  measure: 'ukur',
2459
2448
  transition: 'transisi',
2460
- // Data Commands
2461
2449
  increment: 'tambahkan',
2462
2450
  decrement: 'kurangi',
2463
2451
  default: 'bawaan',
2464
- // Navigation Commands
2465
2452
  go: 'pergi',
2466
2453
  pushUrl: 'tambahUrl',
2467
2454
  replaceUrl: 'gantiUrl',
2468
- // Utility Commands
2469
2455
  copy: 'salin',
2470
2456
  pick: 'pilih',
2471
2457
  beep: 'bunyi',
2472
- // Advanced Commands
2473
2458
  js: 'js',
2474
2459
  async: 'asinkron',
2475
2460
  render: 'tampilkan',
2476
- // Animation Commands
2477
2461
  swap: 'tukar',
2478
2462
  morph: 'ubah_bentuk',
2479
2463
  settle: 'stabil',
2480
- // Content Commands
2481
2464
  append: 'tambah_akhir',
2482
- // Control Flow
2483
2465
  exit: 'keluar',
2484
- // Behaviors
2485
2466
  install: 'pasang',
2467
+ breakpoint: 'titik-henti',
2468
+ clear: 'hapus',
2469
+ close: 'tutup',
2470
+ open: 'buka',
2471
+ select: 'pilih',
2472
+ clone: 'klon',
2473
+ prepend: 'awali',
2486
2474
  },
2487
2475
  modifiers: {
2488
2476
  to: 'ke',
@@ -2542,12 +2530,14 @@ const id$1 = {
2542
2530
  contains: 'berisi',
2543
2531
  includes: 'termasuk',
2544
2532
  equals: 'sama',
2545
- has: 'punya', // possession verb (context-based)
2546
- have: 'punya', // same for first/third person
2533
+ has: 'punya',
2534
+ have: 'punya',
2547
2535
  then: 'lalu',
2548
2536
  else: 'lainnya',
2549
2537
  otherwise: 'sebaliknya',
2550
2538
  end: 'akhir',
2539
+ live: 'langsung',
2540
+ changes: 'berubah',
2551
2541
  },
2552
2542
  temporal: {
2553
2543
  seconds: 'detik',
@@ -2569,13 +2559,13 @@ const id$1 = {
2569
2559
  null: 'kosong',
2570
2560
  undefined: 'tidak_terdefinisi',
2571
2561
  it: 'itu',
2572
- its: 'miliknya', // REVIEW: native speaker
2562
+ its: 'miliknya',
2573
2563
  me: 'saya',
2574
2564
  my: 'saya punya',
2575
2565
  myself: 'saya sendiri',
2576
- you: 'kamu', // REVIEW: native speaker - formal/informal
2577
- your: 'kamu punya', // REVIEW: native speaker
2578
- yourself: 'kamu sendiri', // REVIEW: native speaker
2566
+ you: 'kamu',
2567
+ your: 'kamu punya',
2568
+ yourself: 'kamu sendiri',
2579
2569
  element: 'elemen',
2580
2570
  target: 'target',
2581
2571
  detail: 'detail',
@@ -2597,7 +2587,6 @@ const id$1 = {
2597
2587
  properties: 'properti_properti',
2598
2588
  },
2599
2589
  expressions: {
2600
- // Positional
2601
2590
  first: 'pertama',
2602
2591
  last: 'terakhir',
2603
2592
  next: 'berikutnya',
@@ -2605,18 +2594,20 @@ const id$1 = {
2605
2594
  prev: 'sblm',
2606
2595
  at: 'di',
2607
2596
  random: 'acak',
2608
- // DOM Traversal
2609
2597
  closest: 'terdekat',
2610
2598
  parent: 'induk',
2611
2599
  children: 'anak_anak',
2612
2600
  within: 'dalam',
2613
- // Emptiness/Existence
2614
2601
  no: 'tidak_ada',
2615
2602
  empty: 'kosong',
2616
2603
  some: 'beberapa',
2617
- // String operations
2618
2604
  'starts with': 'dimulai dengan',
2619
2605
  'ends with': 'diakhiri dengan',
2606
+ 'ignoring case': 'abaikan kapital',
2607
+ 'sorted by': 'diurutkan berdasarkan',
2608
+ 'mapped to': 'dipetakan ke',
2609
+ 'split by': 'dipisah oleh',
2610
+ 'joined by': 'digabung oleh',
2620
2611
  },
2621
2612
  };
2622
2613
 
@@ -2647,15 +2638,14 @@ const idKeywords = createKeywordProvider(id$1, 'id', {
2647
2638
  allowEnglishFallback: true,
2648
2639
  });
2649
2640
 
2650
- // packages/i18n/src/dictionaries/qu.ts
2641
+ // Generated/merged from semantic profiles — hand-written entries are preserved
2642
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
2651
2643
  const qu$1 = {
2652
2644
  commands: {
2653
- // Event handling
2654
2645
  on: 'kaqpi',
2655
2646
  tell: 'niy',
2656
2647
  trigger: 'kichay',
2657
2648
  send: 'kachay',
2658
- // DOM manipulation
2659
2649
  take: 'hurquy',
2660
2650
  put: 'churay',
2661
2651
  set: 'churay',
@@ -2665,7 +2655,6 @@ const qu$1 = {
2665
2655
  toggle: 'tikray',
2666
2656
  hide: 'pakay',
2667
2657
  show: 'rikuchiy',
2668
- // Control flow
2669
2658
  if: 'sichus',
2670
2659
  unless: 'mana_sichus',
2671
2660
  repeat: 'kutichiy',
@@ -2675,44 +2664,41 @@ const qu$1 = {
2675
2664
  continue: 'purichiy',
2676
2665
  break: 'p_akiy',
2677
2666
  halt: 'sayay',
2678
- // Async
2679
2667
  wait: 'suyay',
2680
2668
  fetch: 'apamuy',
2681
2669
  call: 'qayay',
2682
2670
  return: 'kutimuy',
2683
- // Other commands
2684
2671
  make: 'ruray',
2685
2672
  log: 'qillqay',
2686
2673
  throw: 'wikchuy',
2687
2674
  catch: 'hapsiy',
2688
2675
  measure: 'tupuy',
2689
2676
  transition: 'tikray',
2690
- // Data Commands
2691
2677
  increment: 'yapay',
2692
2678
  decrement: 'pisiyachiy',
2693
2679
  default: 'ñawpaq_kaq',
2694
- // Navigation Commands
2695
2680
  go: 'riy',
2696
2681
  pushUrl: 'url_tanqay',
2697
2682
  replaceUrl: 'url_tikray',
2698
- // Utility Commands
2699
2683
  copy: 'qillqay',
2700
2684
  pick: 'akllay',
2701
2685
  beep: 'waqay',
2702
- // Advanced Commands
2703
2686
  js: 'js',
2704
2687
  async: 'mana_suyaspa',
2705
2688
  render: 'rikuchiy',
2706
- // Animation Commands
2707
2689
  swap: 'rantin_tikray',
2708
2690
  morph: 'tikrachiy',
2709
2691
  settle: 'tiyay',
2710
- // Content Commands
2711
2692
  append: 'qhipaman_yapay',
2712
- // Control Flow
2713
2693
  exit: 'lluqsiy',
2714
- // Behaviors
2715
2694
  install: 'churay',
2695
+ breakpoint: 'sayachinay',
2696
+ clear: 'pichay',
2697
+ close: 'wichqay',
2698
+ open: 'kichay',
2699
+ select: 'akllay',
2700
+ clone: 'kikinchay',
2701
+ prepend: 'ñawpachiy',
2716
2702
  },
2717
2703
  modifiers: {
2718
2704
  to: 'man',
@@ -2772,12 +2758,14 @@ const qu$1 = {
2772
2758
  contains: 'ukupi_kan',
2773
2759
  includes: 'churasqa',
2774
2760
  equals: 'kikin',
2775
- has: 'kachkan', // existence suffix (context-based)
2776
- have: 'kachkani', // first-person with suffix
2761
+ has: 'kachkan',
2762
+ have: 'kachkani',
2777
2763
  then: 'chayqa',
2778
2764
  else: 'mana_chayqa',
2779
2765
  otherwise: 'huk_kaqpi',
2780
2766
  end: 'tukuy',
2767
+ live: 'kawsay',
2768
+ changes: 'tukurikun',
2781
2769
  },
2782
2770
  temporal: {
2783
2771
  seconds: 'sikundukuna',
@@ -2799,13 +2787,13 @@ const qu$1 = {
2799
2787
  null: 'ch_usaq',
2800
2788
  undefined: 'mana_riqsisqa',
2801
2789
  it: 'chay',
2802
- its: 'chaypaq', // REVIEW: native speaker
2790
+ its: 'chaypaq',
2803
2791
  me: 'noqa',
2804
2792
  my: 'noqaq',
2805
2793
  myself: 'noqa killa',
2806
- you: 'qam', // REVIEW: native speaker
2807
- your: 'qampaq', // REVIEW: native speaker
2808
- yourself: 'qam killa', // REVIEW: native speaker
2794
+ you: 'qam',
2795
+ your: 'qampaq',
2796
+ yourself: 'qam killa',
2809
2797
  element: 'raku',
2810
2798
  target: 'punta',
2811
2799
  detail: 'sut_iy',
@@ -2827,7 +2815,6 @@ const qu$1 = {
2827
2815
  properties: 'kanaykuna',
2828
2816
  },
2829
2817
  expressions: {
2830
- // Positional
2831
2818
  first: 'ñawpaq',
2832
2819
  last: 'qhipa',
2833
2820
  next: 'qhipantin',
@@ -2835,18 +2822,20 @@ const qu$1 = {
2835
2822
  prev: 'ñawpaq',
2836
2823
  at: 'pi',
2837
2824
  random: 'imaymanata',
2838
- // DOM Traversal
2839
2825
  closest: 'aswan_kaylla',
2840
2826
  parent: 'mama_tayta',
2841
2827
  children: 'wawakuna',
2842
2828
  within: 'ukupi',
2843
- // Emptiness/Existence
2844
2829
  no: 'mana_kanchu',
2845
2830
  empty: 'ch_usaq',
2846
2831
  some: 'wakin',
2847
- // String operations
2848
2832
  'starts with': 'qallarisqa wan',
2849
2833
  'ends with': 'tukusqa wan',
2834
+ 'ignoring case': 'hatun-huchuy qillqata-saqiy',
2835
+ 'sorted by': 'niqpi ruwasqa',
2836
+ 'mapped to': 'kay kaqman',
2837
+ 'split by': 'rakisqa',
2838
+ 'joined by': 'huñusqa',
2850
2839
  },
2851
2840
  };
2852
2841
 
@@ -2880,15 +2869,14 @@ const quKeywords = createKeywordProvider(qu$1, 'qu', {
2880
2869
  allowEnglishFallback: true,
2881
2870
  });
2882
2871
 
2883
- // packages/i18n/src/dictionaries/sw.ts
2872
+ // Generated/merged from semantic profiles — hand-written entries are preserved
2873
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
2884
2874
  const sw$1 = {
2885
2875
  commands: {
2886
- // Event handling
2887
2876
  on: 'kwenye',
2888
2877
  tell: 'ambia',
2889
2878
  trigger: 'chochea',
2890
2879
  send: 'tuma',
2891
- // DOM manipulation
2892
2880
  take: 'chukua',
2893
2881
  put: 'weka',
2894
2882
  set: 'weka',
@@ -2898,7 +2886,6 @@ const sw$1 = {
2898
2886
  toggle: 'badilisha',
2899
2887
  hide: 'ficha',
2900
2888
  show: 'onyesha',
2901
- // Control flow
2902
2889
  if: 'kama',
2903
2890
  unless: 'isipokuwa',
2904
2891
  repeat: 'rudia',
@@ -2908,44 +2895,41 @@ const sw$1 = {
2908
2895
  continue: 'endelea',
2909
2896
  break: 'vunja',
2910
2897
  halt: 'simama',
2911
- // Async
2912
2898
  wait: 'ngoja',
2913
2899
  fetch: 'leta',
2914
2900
  call: 'ita',
2915
2901
  return: 'rudi',
2916
- // Other commands
2917
2902
  make: 'fanya',
2918
2903
  log: 'andika',
2919
2904
  throw: 'tupa',
2920
2905
  catch: 'shika',
2921
2906
  measure: 'pima',
2922
2907
  transition: 'mpito',
2923
- // Data Commands
2924
2908
  increment: 'ongeza',
2925
2909
  decrement: 'punguza',
2926
2910
  default: 'msingi',
2927
- // Navigation Commands
2928
2911
  go: 'nenda',
2929
2912
  pushUrl: 'sukumaUrl',
2930
2913
  replaceUrl: 'badilishaUrl',
2931
- // Utility Commands
2932
2914
  copy: 'nakili',
2933
2915
  pick: 'chagua',
2934
2916
  beep: 'lia',
2935
- // Advanced Commands
2936
2917
  js: 'js',
2937
2918
  async: 'sainkroni',
2938
2919
  render: 'chora',
2939
- // Animation Commands
2940
2920
  swap: 'badilishana',
2941
2921
  morph: 'badilishaUmbo',
2942
2922
  settle: 'tulia',
2943
- // Content Commands
2944
2923
  append: 'ongezaMwisho',
2945
- // Control Flow
2946
2924
  exit: 'toka',
2947
- // Behaviors
2948
2925
  install: 'sakinisha',
2926
+ breakpoint: 'nukta-simama',
2927
+ clear: 'futa',
2928
+ close: 'funga',
2929
+ open: 'fungua',
2930
+ select: 'chagua',
2931
+ clone: 'nakili',
2932
+ prepend: 'tanguliza',
2949
2933
  },
2950
2934
  modifiers: {
2951
2935
  to: 'kwa',
@@ -3005,12 +2989,14 @@ const sw$1 = {
3005
2989
  contains: 'ina',
3006
2990
  includes: 'pamoja',
3007
2991
  equals: 'sawa',
3008
- has: 'ana', // third-person: yeye ana
3009
- have: 'nina', // first-person: mimi nina
2992
+ has: 'ana',
2993
+ have: 'nina',
3010
2994
  then: 'kisha',
3011
2995
  else: 'sivyo',
3012
2996
  otherwise: 'vinginevyo',
3013
2997
  end: 'mwisho',
2998
+ live: 'moja_kwa_moja',
2999
+ changes: 'inabadilika',
3014
3000
  },
3015
3001
  temporal: {
3016
3002
  seconds: 'sekunde',
@@ -3032,13 +3018,13 @@ const sw$1 = {
3032
3018
  null: 'tupu',
3033
3019
  undefined: 'haijafafanuliwa',
3034
3020
  it: 'hiyo',
3035
- its: 'yake', // REVIEW: native speaker
3021
+ its: 'yake',
3036
3022
  me: 'mimi',
3037
3023
  my: 'yangu',
3038
3024
  myself: 'mimi mwenyewe',
3039
- you: 'wewe', // REVIEW: native speaker
3040
- your: 'yako', // REVIEW: native speaker
3041
- yourself: 'wewe mwenyewe', // REVIEW: native speaker
3025
+ you: 'wewe',
3026
+ your: 'yako',
3027
+ yourself: 'wewe mwenyewe',
3042
3028
  element: 'kipengele',
3043
3029
  target: 'lengo',
3044
3030
  detail: 'maelezo',
@@ -3060,7 +3046,6 @@ const sw$1 = {
3060
3046
  properties: 'mali',
3061
3047
  },
3062
3048
  expressions: {
3063
- // Positional
3064
3049
  first: 'kwanza',
3065
3050
  last: 'mwisho',
3066
3051
  next: 'ijayo',
@@ -3068,18 +3053,20 @@ const sw$1 = {
3068
3053
  prev: 'awali',
3069
3054
  at: 'katika',
3070
3055
  random: 'nasibu',
3071
- // DOM Traversal
3072
3056
  closest: 'karibu_zaidi',
3073
3057
  parent: 'mzazi',
3074
3058
  children: 'watoto',
3075
3059
  within: 'ndani_ya',
3076
- // Emptiness/Existence
3077
3060
  no: 'hakuna',
3078
3061
  empty: 'tupu',
3079
3062
  some: 'baadhi',
3080
- // String operations
3081
3063
  'starts with': 'huanza na',
3082
3064
  'ends with': 'huisha na',
3065
+ 'ignoring case': 'puuza herufi kubwa ndogo',
3066
+ 'sorted by': 'kupangwa kwa',
3067
+ 'mapped to': 'kubadilishwa kuwa',
3068
+ 'split by': 'kugawanywa kwa',
3069
+ 'joined by': 'kuunganishwa kwa',
3083
3070
  },
3084
3071
  };
3085
3072
 
@@ -3113,19 +3100,14 @@ const swKeywords = createKeywordProvider(sw$1, 'sw', {
3113
3100
  allowEnglishFallback: true,
3114
3101
  });
3115
3102
 
3116
- // packages/i18n/src/dictionaries/pt.ts
3117
- /**
3118
- * Portuguese (Português) dictionary for hyperscript keywords.
3119
- * Brazilian Portuguese variant.
3120
- */
3103
+ // Generated/merged from semantic profiles — hand-written entries are preserved
3104
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
3121
3105
  const pt$1 = {
3122
3106
  commands: {
3123
- // Event handling
3124
3107
  on: 'em',
3125
3108
  tell: 'dizer',
3126
3109
  trigger: 'disparar',
3127
3110
  send: 'enviar',
3128
- // DOM manipulation
3129
3111
  take: 'pegar',
3130
3112
  put: 'colocar',
3131
3113
  set: 'definir',
@@ -3135,9 +3117,8 @@ const pt$1 = {
3135
3117
  toggle: 'alternar',
3136
3118
  hide: 'esconder',
3137
3119
  show: 'mostrar',
3138
- // Control flow
3139
3120
  if: 'se',
3140
- unless: 'a_menos', // REVIEW: native speaker - multi-word
3121
+ unless: 'a_menos',
3141
3122
  repeat: 'repetir',
3142
3123
  for: 'para',
3143
3124
  while: 'enquanto',
@@ -3145,44 +3126,41 @@ const pt$1 = {
3145
3126
  continue: 'continuar',
3146
3127
  break: 'parar',
3147
3128
  halt: 'interromper',
3148
- // Async
3149
3129
  wait: 'esperar',
3150
3130
  fetch: 'buscar',
3151
3131
  call: 'chamar',
3152
3132
  return: 'retornar',
3153
- // Other commands
3154
3133
  make: 'fazer',
3155
3134
  log: 'registrar',
3156
3135
  throw: 'lançar',
3157
3136
  catch: 'capturar',
3158
3137
  measure: 'medir',
3159
3138
  transition: 'transição',
3160
- // Data Commands
3161
3139
  increment: 'incrementar',
3162
3140
  decrement: 'decrementar',
3163
3141
  default: 'padrão',
3164
- // Navigation Commands
3165
3142
  go: 'ir',
3166
3143
  pushUrl: 'pushUrl',
3167
3144
  replaceUrl: 'substituirUrl',
3168
- // Utility Commands
3169
3145
  copy: 'copiar',
3170
3146
  pick: 'escolher',
3171
3147
  beep: 'apitar',
3172
- // Advanced Commands
3173
3148
  js: 'js',
3174
3149
  async: 'assíncrono',
3175
3150
  render: 'renderizar',
3176
- // Animation Commands
3177
3151
  swap: 'trocar',
3178
3152
  morph: 'transformar',
3179
3153
  settle: 'estabilizar',
3180
- // Content Commands
3181
3154
  append: 'anexar',
3182
- // Control Flow
3183
3155
  exit: 'sair',
3184
- // Behaviors
3185
3156
  install: 'instalar',
3157
+ breakpoint: 'ponto-interrupção',
3158
+ clear: 'limpar',
3159
+ close: 'fechar',
3160
+ open: 'abrir',
3161
+ select: 'selecionar',
3162
+ clone: 'clonar',
3163
+ prepend: 'preceder',
3186
3164
  },
3187
3165
  modifiers: {
3188
3166
  to: 'para',
@@ -3242,12 +3220,14 @@ const pt$1 = {
3242
3220
  contains: 'contém',
3243
3221
  includes: 'inclui',
3244
3222
  equals: 'igual',
3245
- has: 'tem', // third-person: ele/ela tem
3246
- have: 'tenho', // first-person: eu tenho
3223
+ has: 'tem',
3224
+ have: 'tenho',
3247
3225
  then: 'então',
3248
3226
  else: 'senão',
3249
- otherwise: 'caso_contrário', // REVIEW: native speaker
3227
+ otherwise: 'caso_contrário',
3250
3228
  end: 'fim',
3229
+ live: 'vivo',
3230
+ changes: 'muda',
3251
3231
  },
3252
3232
  temporal: {
3253
3233
  seconds: 'segundos',
@@ -3272,10 +3252,10 @@ const pt$1 = {
3272
3252
  its: 'seu',
3273
3253
  me: 'eu',
3274
3254
  my: 'meu',
3275
- myself: 'eu mesmo', // REVIEW: native speaker
3255
+ myself: 'eu mesmo',
3276
3256
  you: 'você',
3277
3257
  your: 'seu',
3278
- yourself: 'você mesmo', // REVIEW: native speaker
3258
+ yourself: 'você mesmo',
3279
3259
  element: 'elemento',
3280
3260
  target: 'alvo',
3281
3261
  detail: 'detalhe',
@@ -3297,7 +3277,6 @@ const pt$1 = {
3297
3277
  properties: 'propriedades',
3298
3278
  },
3299
3279
  expressions: {
3300
- // Positional
3301
3280
  first: 'primeiro',
3302
3281
  last: 'último',
3303
3282
  next: 'próximo',
@@ -3305,18 +3284,20 @@ const pt$1 = {
3305
3284
  prev: 'ant',
3306
3285
  at: 'em',
3307
3286
  random: 'aleatório',
3308
- // DOM Traversal
3309
- closest: 'mais_próximo', // REVIEW: native speaker - multi-word
3287
+ closest: 'mais_próximo',
3310
3288
  parent: 'pai',
3311
3289
  children: 'filhos',
3312
3290
  within: 'dentro',
3313
- // Emptiness/Existence
3314
3291
  no: 'nenhum',
3315
3292
  empty: 'vazio',
3316
3293
  some: 'algum',
3317
- // String operations
3318
3294
  'starts with': 'começa com',
3319
3295
  'ends with': 'termina com',
3296
+ 'ignoring case': 'ignorando maiúsculas',
3297
+ 'sorted by': 'ordenado por',
3298
+ 'mapped to': 'mapeado para',
3299
+ 'split by': 'dividido por',
3300
+ 'joined by': 'unido por',
3320
3301
  },
3321
3302
  };
3322
3303
 
@@ -3350,15 +3331,14 @@ const ptKeywords = createKeywordProvider(pt$1, 'pt', {
3350
3331
  allowEnglishFallback: true,
3351
3332
  });
3352
3333
 
3353
- // packages/i18n/src/dictionaries/it.ts
3334
+ // Generated/merged from semantic profiles — hand-written entries are preserved
3335
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
3354
3336
  const it$1 = {
3355
3337
  commands: {
3356
- // Event handling
3357
3338
  on: 'su',
3358
3339
  tell: 'dire',
3359
3340
  trigger: 'scatenare',
3360
3341
  send: 'inviare',
3361
- // DOM manipulation
3362
3342
  take: 'prendere',
3363
3343
  put: 'mettere',
3364
3344
  set: 'impostare',
@@ -3368,7 +3348,6 @@ const it$1 = {
3368
3348
  toggle: 'commutare',
3369
3349
  hide: 'nascondere',
3370
3350
  show: 'mostrare',
3371
- // Control flow
3372
3351
  if: 'se',
3373
3352
  unless: 'a meno che',
3374
3353
  repeat: 'ripetere',
@@ -3378,44 +3357,41 @@ const it$1 = {
3378
3357
  continue: 'continuare',
3379
3358
  break: 'interrompere',
3380
3359
  halt: 'fermare',
3381
- // Async
3382
3360
  wait: 'aspettare',
3383
3361
  fetch: 'recuperare',
3384
3362
  call: 'chiamare',
3385
3363
  return: 'ritornare',
3386
- // Other commands
3387
3364
  make: 'fare',
3388
3365
  log: 'registrare',
3389
3366
  throw: 'lanciare',
3390
3367
  catch: 'catturare',
3391
3368
  measure: 'misurare',
3392
3369
  transition: 'transizione',
3393
- // Data Commands
3394
3370
  increment: 'incrementare',
3395
3371
  decrement: 'decrementare',
3396
3372
  default: 'predefinito',
3397
- // Navigation Commands
3398
3373
  go: 'andare',
3399
3374
  pushUrl: 'pushUrl',
3400
3375
  replaceUrl: 'sostituireUrl',
3401
- // Utility Commands
3402
3376
  copy: 'copiare',
3403
3377
  pick: 'scegliere',
3404
3378
  beep: 'beep',
3405
- // Advanced Commands
3406
3379
  js: 'js',
3407
3380
  async: 'asincrono',
3408
3381
  render: 'renderizzare',
3409
- // Animation Commands
3410
3382
  swap: 'scambiare',
3411
3383
  morph: 'trasformare',
3412
3384
  settle: 'stabilizzare',
3413
- // Content Commands
3414
3385
  append: 'aggiungere',
3415
- // Control Flow
3416
3386
  exit: 'uscire',
3417
- // Behaviors
3418
3387
  install: 'installare',
3388
+ breakpoint: 'punto-interruzione',
3389
+ clear: 'cancellare',
3390
+ close: 'chiudere',
3391
+ open: 'aprire',
3392
+ select: 'selezionare',
3393
+ clone: 'clonare',
3394
+ prepend: 'anteporre',
3419
3395
  },
3420
3396
  modifiers: {
3421
3397
  to: 'a',
@@ -3475,12 +3451,14 @@ const it$1 = {
3475
3451
  contains: 'contiene',
3476
3452
  includes: 'include',
3477
3453
  equals: 'uguale',
3478
- has: 'ha', // third-person: lui/lei ha
3479
- have: 'ho', // first-person: io ho
3454
+ has: 'ha',
3455
+ have: 'ho',
3480
3456
  then: 'allora',
3481
3457
  else: 'altrimenti',
3482
3458
  otherwise: 'altrimenti',
3483
3459
  end: 'fine',
3460
+ live: 'vivo',
3461
+ changes: 'cambia',
3484
3462
  },
3485
3463
  temporal: {
3486
3464
  seconds: 'secondi',
@@ -3530,7 +3508,6 @@ const it$1 = {
3530
3508
  properties: 'proprietà',
3531
3509
  },
3532
3510
  expressions: {
3533
- // Positional
3534
3511
  first: 'primo',
3535
3512
  last: 'ultimo',
3536
3513
  next: 'prossimo',
@@ -3538,18 +3515,20 @@ const it$1 = {
3538
3515
  prev: 'prec',
3539
3516
  at: 'a',
3540
3517
  random: 'casuale',
3541
- // DOM Traversal
3542
3518
  closest: 'piùvicino',
3543
3519
  parent: 'genitore',
3544
3520
  children: 'figli',
3545
3521
  within: 'dentro',
3546
- // Emptiness/Existence
3547
3522
  no: 'nessun',
3548
3523
  empty: 'vuoto',
3549
3524
  some: 'qualche',
3550
- // String operations
3551
3525
  'starts with': 'inizia con',
3552
3526
  'ends with': 'finisce con',
3527
+ 'ignoring case': 'ignorando maiuscole',
3528
+ 'sorted by': 'ordinato per',
3529
+ 'mapped to': 'trasformato in',
3530
+ 'split by': 'diviso per',
3531
+ 'joined by': 'unito per',
3553
3532
  },
3554
3533
  };
3555
3534
 
@@ -3618,6 +3597,11 @@ const vi$1 = {
3618
3597
  clone: 'sao chép',
3619
3598
  prepend: 'thêm đầu',
3620
3599
  else: 'không thì',
3600
+ breakpoint: 'điểm-dừng',
3601
+ clear: 'xóa',
3602
+ close: 'đóng',
3603
+ open: 'mở',
3604
+ select: 'chọn',
3621
3605
  },
3622
3606
  modifiers: {
3623
3607
  into: 'vào',
@@ -3634,6 +3618,7 @@ const vi$1 = {
3634
3618
  in: 'trong',
3635
3619
  at: 'tại',
3636
3620
  of: 'của',
3621
+ between: 'giữa',
3637
3622
  the: '',
3638
3623
  times: 'lần',
3639
3624
  },
@@ -3652,6 +3637,7 @@ const vi$1 = {
3652
3637
  mouseleave: 'chuột rời',
3653
3638
  focus: 'tập trung',
3654
3639
  blur: 'mất tập trung',
3640
+ reset: 'đặt-lại',
3655
3641
  load: 'tải',
3656
3642
  scroll: 'cuộn',
3657
3643
  resize: 'đổi kích thước',
@@ -3676,6 +3662,8 @@ const vi$1 = {
3676
3662
  else: 'không thì',
3677
3663
  end: 'kết thúc',
3678
3664
  then: 'rồi',
3665
+ live: 'trực tiếp',
3666
+ changes: 'thay đổi',
3679
3667
  },
3680
3668
  temporal: {
3681
3669
  now: 'bây giờ',
@@ -3740,6 +3728,14 @@ const vi$1 = {
3740
3728
  parent: 'cha',
3741
3729
  children: 'con',
3742
3730
  closest: 'gần nhất',
3731
+ empty: 'làm-rỗng',
3732
+ 'starts with': 'bắt đầu bằng',
3733
+ 'ends with': 'kết thúc bằng',
3734
+ 'ignoring case': 'không phân biệt hoa thường',
3735
+ 'sorted by': 'sắp xếp theo',
3736
+ 'mapped to': 'ánh xạ thành',
3737
+ 'split by': 'tách bởi',
3738
+ 'joined by': 'nối bởi',
3743
3739
  },
3744
3740
  };
3745
3741
 
@@ -3747,21 +3743,14 @@ const viKeywords = createKeywordProvider(vi$1, 'vi', {
3747
3743
  allowEnglishFallback: true,
3748
3744
  });
3749
3745
 
3750
- // packages/i18n/src/dictionaries/pl.ts
3751
- /**
3752
- * Polish Dictionary
3753
- *
3754
- * Polish uses IMPERATIVE verb forms for software commands
3755
- * (unlike most languages which use infinitive).
3756
- */
3746
+ // Generated/merged from semantic profiles — hand-written entries are preserved
3747
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
3757
3748
  const pl$1 = {
3758
3749
  commands: {
3759
- // Event handling
3760
3750
  on: 'gdy',
3761
3751
  tell: 'powiedz',
3762
3752
  trigger: 'wywołaj',
3763
3753
  send: 'wyślij',
3764
- // DOM manipulation
3765
3754
  take: 'weź',
3766
3755
  put: 'umieść',
3767
3756
  set: 'ustaw',
@@ -3771,7 +3760,6 @@ const pl$1 = {
3771
3760
  toggle: 'przełącz',
3772
3761
  hide: 'ukryj',
3773
3762
  show: 'pokaż',
3774
- // Control flow
3775
3763
  if: 'jeśli',
3776
3764
  unless: 'chyba',
3777
3765
  repeat: 'powtórz',
@@ -3781,44 +3769,41 @@ const pl$1 = {
3781
3769
  continue: 'kontynuuj',
3782
3770
  break: 'przerwij',
3783
3771
  halt: 'zatrzymaj',
3784
- // Async
3785
3772
  wait: 'czekaj',
3786
3773
  fetch: 'pobierz',
3787
3774
  call: 'wywołaj',
3788
3775
  return: 'zwróć',
3789
- // Other commands
3790
3776
  make: 'utwórz',
3791
3777
  log: 'loguj',
3792
3778
  throw: 'rzuć',
3793
3779
  catch: 'złap',
3794
3780
  measure: 'zmierz',
3795
3781
  transition: 'animuj',
3796
- // Data Commands
3797
3782
  increment: 'zwiększ',
3798
3783
  decrement: 'zmniejsz',
3799
3784
  default: 'domyślnie',
3800
- // Navigation Commands
3801
3785
  go: 'idź',
3802
3786
  pushUrl: 'dodajUrl',
3803
3787
  replaceUrl: 'zamieńUrl',
3804
- // Utility Commands
3805
3788
  copy: 'kopiuj',
3806
3789
  pick: 'wybierz',
3807
3790
  beep: 'sygnał',
3808
- // Advanced Commands
3809
3791
  js: 'js',
3810
3792
  async: 'async',
3811
3793
  render: 'renderuj',
3812
- // Animation Commands
3813
3794
  swap: 'zamień',
3814
3795
  morph: 'przekształć',
3815
3796
  settle: 'ustabilizuj',
3816
- // Content Commands
3817
3797
  append: 'dołącz',
3818
- // Control Flow
3819
3798
  exit: 'wyjdź',
3820
- // Behaviors
3821
3799
  install: 'zainstaluj',
3800
+ breakpoint: 'punkt-przerwania',
3801
+ clear: 'wyczyść',
3802
+ close: 'zamknij',
3803
+ open: 'otwórz',
3804
+ select: 'wybierz',
3805
+ clone: 'sklonuj',
3806
+ prepend: 'poprzedź',
3822
3807
  },
3823
3808
  modifiers: {
3824
3809
  to: 'do',
@@ -3878,12 +3863,14 @@ const pl$1 = {
3878
3863
  contains: 'zawiera',
3879
3864
  includes: 'obejmuje',
3880
3865
  equals: 'równa się',
3881
- has: 'ma', // third-person: on/ona ma
3882
- have: 'mam', // first-person: ja mam
3866
+ has: 'ma',
3867
+ have: 'mam',
3883
3868
  then: 'wtedy',
3884
3869
  else: 'inaczej',
3885
3870
  otherwise: 'wpp',
3886
3871
  end: 'koniec',
3872
+ live: 'żywy',
3873
+ changes: 'zmienia',
3887
3874
  },
3888
3875
  temporal: {
3889
3876
  seconds: 'sekundy',
@@ -3933,7 +3920,6 @@ const pl$1 = {
3933
3920
  properties: 'właściwości',
3934
3921
  },
3935
3922
  expressions: {
3936
- // Positional
3937
3923
  first: 'pierwszy',
3938
3924
  last: 'ostatni',
3939
3925
  next: 'następny',
@@ -3941,18 +3927,20 @@ const pl$1 = {
3941
3927
  prev: 'poprz',
3942
3928
  at: 'przy',
3943
3929
  random: 'losowy',
3944
- // DOM Traversal
3945
3930
  closest: 'najbliższy',
3946
3931
  parent: 'rodzic',
3947
3932
  children: 'dzieci',
3948
3933
  within: 'wewnątrz',
3949
- // Emptiness/Existence
3950
3934
  no: 'brak',
3951
3935
  empty: 'pusty',
3952
3936
  some: 'jakiś',
3953
- // String operations
3954
3937
  'starts with': 'zaczyna się od',
3955
3938
  'ends with': 'kończy się na',
3939
+ 'ignoring case': 'ignorując wielkość liter',
3940
+ 'sorted by': 'sortowane według',
3941
+ 'mapped to': 'przekształcone na',
3942
+ 'split by': 'podzielone przez',
3943
+ 'joined by': 'połączone przez',
3956
3944
  },
3957
3945
  };
3958
3946
 
@@ -3960,20 +3948,14 @@ const plKeywords = createKeywordProvider(pl$1, 'pl', {
3960
3948
  allowEnglishFallback: true,
3961
3949
  });
3962
3950
 
3963
- /**
3964
- * Russian Dictionary
3965
- *
3966
- * Translations for Russian language support.
3967
- * Uses infinitive verbs (common in software UIs).
3968
- */
3951
+ // Generated/merged from semantic profiles — hand-written entries are preserved
3952
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
3969
3953
  const russianDictionary = {
3970
3954
  commands: {
3971
- // Event handling
3972
3955
  on: 'при',
3973
3956
  tell: 'сказать',
3974
3957
  trigger: 'вызвать',
3975
3958
  send: 'отправить',
3976
- // DOM manipulation
3977
3959
  take: 'взять',
3978
3960
  put: 'положить',
3979
3961
  set: 'установить',
@@ -3983,7 +3965,6 @@ const russianDictionary = {
3983
3965
  toggle: 'переключить',
3984
3966
  hide: 'скрыть',
3985
3967
  show: 'показать',
3986
- // Control flow
3987
3968
  if: 'если',
3988
3969
  unless: 'если_не',
3989
3970
  repeat: 'повторить',
@@ -3993,53 +3974,46 @@ const russianDictionary = {
3993
3974
  continue: 'продолжить',
3994
3975
  break: 'прервать',
3995
3976
  halt: 'остановить',
3996
- // Async
3997
3977
  wait: 'ждать',
3998
3978
  fetch: 'загрузить',
3999
3979
  call: 'вызвать',
4000
3980
  return: 'вернуть',
4001
- // Other commands
4002
3981
  make: 'создать',
4003
3982
  log: 'записать',
4004
3983
  throw: 'бросить',
4005
3984
  catch: 'поймать',
4006
3985
  measure: 'измерить',
4007
3986
  transition: 'анимировать',
4008
- // Data Commands
4009
3987
  increment: 'увеличить',
4010
3988
  decrement: 'уменьшить',
4011
3989
  default: 'по_умолчанию',
4012
- // Navigation Commands
4013
3990
  go: 'перейти',
4014
3991
  pushUrl: 'добавить_url',
4015
3992
  replaceUrl: 'заменить_url',
4016
- // Utility Commands
4017
3993
  copy: 'копировать',
4018
3994
  pick: 'выбрать',
4019
3995
  beep: 'звук',
4020
- // Advanced Commands
4021
3996
  js: 'js',
4022
3997
  async: 'асинхронно',
4023
3998
  render: 'отобразить',
4024
- // Animation Commands
4025
3999
  swap: 'поменять',
4026
4000
  morph: 'трансформировать',
4027
4001
  settle: 'стабилизировать',
4028
- // Content Commands
4029
4002
  append: 'добавить_в_конец',
4030
- // Control Flow
4031
4003
  exit: 'выйти',
4032
4004
  else: 'иначе',
4033
- // Behaviors
4034
4005
  install: 'установить',
4035
4006
  init: 'инициализировать',
4036
4007
  behavior: 'поведение',
4037
- // Focus
4038
4008
  focus: 'сфокусировать',
4039
4009
  blur: 'размыть',
4040
- // Clone
4041
4010
  clone: 'клонировать',
4042
4011
  prepend: 'добавить_в_начало',
4012
+ breakpoint: 'точка-останова',
4013
+ clear: 'очистить',
4014
+ close: 'закрыть',
4015
+ open: 'открыть',
4016
+ select: 'выбрать',
4043
4017
  },
4044
4018
  modifiers: {
4045
4019
  to: 'к',
@@ -4104,8 +4078,10 @@ const russianDictionary = {
4104
4078
  else: 'иначе',
4105
4079
  otherwise: 'в_противном_случае',
4106
4080
  end: 'конец',
4107
- has: 'имеет', // third-person: он/она имеет
4108
- have: 'имею', // first-person: я имею
4081
+ live: 'живой',
4082
+ changes: 'изменяется',
4083
+ has: 'имеет',
4084
+ have: 'имею',
4109
4085
  isNot: 'не_есть',
4110
4086
  empty: 'пустой',
4111
4087
  },
@@ -4175,7 +4151,6 @@ const russianDictionary = {
4175
4151
  html: 'html',
4176
4152
  },
4177
4153
  expressions: {
4178
- // Positional
4179
4154
  first: 'первый',
4180
4155
  last: 'последний',
4181
4156
  next: 'следующий',
@@ -4183,18 +4158,20 @@ const russianDictionary = {
4183
4158
  prev: 'пред',
4184
4159
  at: 'в',
4185
4160
  random: 'случайный',
4186
- // DOM Traversal
4187
4161
  closest: 'ближайший',
4188
4162
  parent: 'родитель',
4189
4163
  children: 'дети',
4190
4164
  within: 'внутри',
4191
- // Emptiness/Existence
4192
4165
  no: 'нет',
4193
4166
  empty: 'пустой',
4194
4167
  some: 'некоторые',
4195
- // String operations
4196
4168
  'starts with': 'начинается_с',
4197
4169
  'ends with': 'заканчивается_на',
4170
+ 'ignoring case': 'без_учёта_регистра',
4171
+ 'sorted by': 'сортировано_по',
4172
+ 'mapped to': 'преобразовано_в',
4173
+ 'split by': 'разделено_по',
4174
+ 'joined by': 'объединено_через',
4198
4175
  },
4199
4176
  };
4200
4177
 
@@ -4202,20 +4179,14 @@ const ruKeywords = createKeywordProvider(russianDictionary, 'ru', {
4202
4179
  allowEnglishFallback: true,
4203
4180
  });
4204
4181
 
4205
- /**
4206
- * Ukrainian Dictionary
4207
- *
4208
- * Translations for Ukrainian language support.
4209
- * Uses infinitive verbs (common in software UIs).
4210
- */
4182
+ // Generated/merged from semantic profiles — hand-written entries are preserved
4183
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
4211
4184
  const ukrainianDictionary = {
4212
4185
  commands: {
4213
- // Event handling
4214
4186
  on: 'при',
4215
4187
  tell: 'сказати',
4216
4188
  trigger: 'викликати',
4217
4189
  send: 'надіслати',
4218
- // DOM manipulation
4219
4190
  take: 'взяти',
4220
4191
  put: 'покласти',
4221
4192
  set: 'встановити',
@@ -4225,7 +4196,6 @@ const ukrainianDictionary = {
4225
4196
  toggle: 'перемкнути',
4226
4197
  hide: 'сховати',
4227
4198
  show: 'показати',
4228
- // Control flow
4229
4199
  if: 'якщо',
4230
4200
  unless: 'якщо_не',
4231
4201
  repeat: 'повторити',
@@ -4235,53 +4205,46 @@ const ukrainianDictionary = {
4235
4205
  continue: 'продовжити',
4236
4206
  break: 'перервати',
4237
4207
  halt: 'зупинити',
4238
- // Async
4239
4208
  wait: 'чекати',
4240
4209
  fetch: 'завантажити',
4241
4210
  call: 'викликати',
4242
4211
  return: 'повернути',
4243
- // Other commands
4244
4212
  make: 'створити',
4245
4213
  log: 'записати',
4246
4214
  throw: 'кинути',
4247
4215
  catch: 'зловити',
4248
4216
  measure: 'виміряти',
4249
4217
  transition: 'анімувати',
4250
- // Data Commands
4251
4218
  increment: 'збільшити',
4252
4219
  decrement: 'зменшити',
4253
4220
  default: 'за_замовчуванням',
4254
- // Navigation Commands
4255
4221
  go: 'перейти',
4256
4222
  pushUrl: 'додати_url',
4257
4223
  replaceUrl: 'замінити_url',
4258
- // Utility Commands
4259
4224
  copy: 'копіювати',
4260
4225
  pick: 'вибрати',
4261
4226
  beep: 'звук',
4262
- // Advanced Commands
4263
4227
  js: 'js',
4264
4228
  async: 'асинхронно',
4265
4229
  render: 'відобразити',
4266
- // Animation Commands
4267
4230
  swap: 'поміняти',
4268
4231
  morph: 'трансформувати',
4269
4232
  settle: 'стабілізувати',
4270
- // Content Commands
4271
4233
  append: 'додати_в_кінець',
4272
- // Control Flow
4273
4234
  exit: 'вийти',
4274
4235
  else: 'інакше',
4275
- // Behaviors
4276
4236
  install: 'встановити',
4277
4237
  init: 'ініціалізувати',
4278
4238
  behavior: 'поведінка',
4279
- // Focus
4280
4239
  focus: 'сфокусувати',
4281
4240
  blur: 'розфокусувати',
4282
- // Clone
4283
4241
  clone: 'клонувати',
4284
4242
  prepend: 'додати_на_початок',
4243
+ breakpoint: 'точка-зупинки',
4244
+ clear: 'очистити',
4245
+ close: 'закрити',
4246
+ open: 'відкрити',
4247
+ select: 'вибрати',
4285
4248
  },
4286
4249
  modifiers: {
4287
4250
  to: 'до',
@@ -4346,8 +4309,10 @@ const ukrainianDictionary = {
4346
4309
  else: 'інакше',
4347
4310
  otherwise: 'в_іншому_випадку',
4348
4311
  end: 'кінець',
4349
- has: 'має', // third-person: він/вона має
4350
- have: 'маю', // first-person: я маю
4312
+ live: 'живий',
4313
+ changes: 'змінюється',
4314
+ has: 'має',
4315
+ have: 'маю',
4351
4316
  isNot: 'не_є',
4352
4317
  empty: 'порожній',
4353
4318
  },
@@ -4417,7 +4382,6 @@ const ukrainianDictionary = {
4417
4382
  html: 'html',
4418
4383
  },
4419
4384
  expressions: {
4420
- // Positional
4421
4385
  first: 'перший',
4422
4386
  last: 'останній',
4423
4387
  next: 'наступний',
@@ -4425,18 +4389,20 @@ const ukrainianDictionary = {
4425
4389
  prev: 'попер',
4426
4390
  at: 'в',
4427
4391
  random: 'випадковий',
4428
- // DOM Traversal
4429
4392
  closest: 'найближчий',
4430
4393
  parent: 'батьківський',
4431
4394
  children: 'діти',
4432
4395
  within: 'всередині',
4433
- // Emptiness/Existence
4434
4396
  no: 'ні',
4435
4397
  empty: 'порожній',
4436
4398
  some: 'деякі',
4437
- // String operations
4438
4399
  'starts with': 'починається_з',
4439
4400
  'ends with': 'закінчується_на',
4401
+ 'ignoring case': 'без_урахування_регістру',
4402
+ 'sorted by': 'відсортовано_за',
4403
+ 'mapped to': 'перетворено_на',
4404
+ 'split by': 'розділено_за',
4405
+ 'joined by': "об'єднано_через",
4440
4406
  },
4441
4407
  };
4442
4408
 
@@ -4444,20 +4410,14 @@ const ukKeywords = createKeywordProvider(ukrainianDictionary, 'uk', {
4444
4410
  allowEnglishFallback: true,
4445
4411
  });
4446
4412
 
4447
- /**
4448
- * Hindi Dictionary
4449
- *
4450
- * Translations for Hindi language support.
4451
- * Uses imperative verb forms (common in software UIs).
4452
- */
4413
+ // Generated/merged from semantic profiles — hand-written entries are preserved
4414
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
4453
4415
  const hindiDictionary = {
4454
4416
  commands: {
4455
- // Event handling
4456
4417
  on: 'पर',
4457
4418
  tell: 'बताएं',
4458
4419
  trigger: 'ट्रिगर',
4459
4420
  send: 'भेजें',
4460
- // DOM manipulation
4461
4421
  take: 'लें',
4462
4422
  put: 'रखें',
4463
4423
  set: 'सेट',
@@ -4467,7 +4427,6 @@ const hindiDictionary = {
4467
4427
  toggle: 'टॉगल',
4468
4428
  hide: 'छिपाएं',
4469
4429
  show: 'दिखाएं',
4470
- // Control flow
4471
4430
  if: 'अगर',
4472
4431
  unless: 'जब_तक_नहीं',
4473
4432
  repeat: 'दोहराएं',
@@ -4477,53 +4436,46 @@ const hindiDictionary = {
4477
4436
  continue: 'जारी',
4478
4437
  break: 'रोकें',
4479
4438
  halt: 'रोकें',
4480
- // Async
4481
4439
  wait: 'प्रतीक्षा',
4482
4440
  fetch: 'लाएं',
4483
4441
  call: 'कॉल',
4484
4442
  return: 'लौटाएं',
4485
- // Other commands
4486
4443
  make: 'बनाएं',
4487
4444
  log: 'लॉग',
4488
4445
  throw: 'फेंकें',
4489
4446
  catch: 'पकड़ें',
4490
4447
  measure: 'मापें',
4491
4448
  transition: 'संक्रमण',
4492
- // Data Commands
4493
4449
  increment: 'बढ़ाएं',
4494
4450
  decrement: 'घटाएं',
4495
4451
  default: 'डिफ़ॉल्ट',
4496
- // Navigation Commands
4497
4452
  go: 'जाएं',
4498
4453
  pushUrl: 'url_जोड़ें',
4499
4454
  replaceUrl: 'url_बदलें',
4500
- // Utility Commands
4501
4455
  copy: 'कॉपी',
4502
4456
  pick: 'चुनें',
4503
4457
  beep: 'बीप',
4504
- // Advanced Commands
4505
4458
  js: 'जेएस',
4506
4459
  async: 'असिंक',
4507
4460
  render: 'रेंडर',
4508
- // Animation Commands
4509
4461
  swap: 'बदलें',
4510
4462
  morph: 'रूपांतर',
4511
4463
  settle: 'स्थिर',
4512
- // Content Commands
4513
4464
  append: 'जोड़ें_अंत',
4514
- // Control Flow
4515
4465
  exit: 'बाहर',
4516
4466
  else: 'वरना',
4517
- // Behaviors
4518
4467
  install: 'इंस्टॉल',
4519
4468
  init: 'प्रारंभ',
4520
4469
  behavior: 'व्यवहार',
4521
- // Focus
4522
4470
  focus: 'फोकस',
4523
4471
  blur: 'धुंधला',
4524
- // Clone
4525
4472
  clone: 'कॉपी',
4526
4473
  prepend: 'जोड़ें_शुरू',
4474
+ breakpoint: 'ब्रेकप्वाइंट',
4475
+ clear: 'साफ़-करें',
4476
+ close: 'बंद-करें',
4477
+ open: 'खोलें',
4478
+ select: 'चुनें',
4527
4479
  },
4528
4480
  modifiers: {
4529
4481
  to: 'को',
@@ -4588,8 +4540,10 @@ const hindiDictionary = {
4588
4540
  else: 'वरना',
4589
4541
  otherwise: 'अन्यथा',
4590
4542
  end: 'समाप्त',
4591
- has: 'है', // existence verb (context-based)
4592
- have: 'है', // same verb for first/third person
4543
+ live: 'लाइव',
4544
+ changes: 'बदलने पर',
4545
+ has: 'है',
4546
+ have: 'है',
4593
4547
  isNot: 'नहीं_है',
4594
4548
  empty: 'खाली',
4595
4549
  },
@@ -4659,7 +4613,6 @@ const hindiDictionary = {
4659
4613
  html: 'html',
4660
4614
  },
4661
4615
  expressions: {
4662
- // Positional
4663
4616
  first: 'पहला',
4664
4617
  last: 'अंतिम',
4665
4618
  next: 'अगला',
@@ -4667,18 +4620,20 @@ const hindiDictionary = {
4667
4620
  prev: 'पिछ',
4668
4621
  at: 'पर',
4669
4622
  random: 'यादृच्छिक',
4670
- // DOM Traversal
4671
4623
  closest: 'निकटतम',
4672
4624
  parent: 'मूल',
4673
4625
  children: 'बच्चे',
4674
4626
  within: 'के_अंदर',
4675
- // Emptiness/Existence
4676
4627
  no: 'नहीं',
4677
4628
  empty: 'खाली',
4678
4629
  some: 'कुछ',
4679
- // String operations
4680
4630
  'starts with': 'से_शुरू',
4681
4631
  'ends with': 'पर_समाप्त',
4632
+ 'ignoring case': 'केस_अनदेखा',
4633
+ 'sorted by': 'द्वारा_क्रमबद्ध',
4634
+ 'mapped to': 'में_परिवर्तित',
4635
+ 'split by': 'द्वारा_विभाजित',
4636
+ 'joined by': 'द्वारा_जुड़ा',
4682
4637
  },
4683
4638
  };
4684
4639
 
@@ -4743,6 +4698,11 @@ const bengaliDictionary = {
4743
4698
  pick: 'বাছুন',
4744
4699
  render: 'রেন্ডার',
4745
4700
  until: 'পর্যন্ত',
4701
+ breakpoint: 'ব্রেকপয়েন্ট',
4702
+ clear: 'পরিষ্কার',
4703
+ close: 'বন্ধ',
4704
+ open: 'খুলুন',
4705
+ select: 'নির্বাচন',
4746
4706
  },
4747
4707
  modifiers: {
4748
4708
  to: 'কে',
@@ -4757,6 +4717,7 @@ const bengaliDictionary = {
4757
4717
  at: 'এ',
4758
4718
  in: 'এ',
4759
4719
  over: 'উপর',
4720
+ between: 'মধ্যে',
4760
4721
  then: 'তারপর',
4761
4722
  and: 'এবং',
4762
4723
  end: 'শেষ',
@@ -4771,6 +4732,7 @@ const bengaliDictionary = {
4771
4732
  load: 'লোড',
4772
4733
  focus: 'ফোকাস',
4773
4734
  blur: 'ঝাপসা',
4735
+ reset: 'রিসেট',
4774
4736
  keydown: 'কি-ডাউন',
4775
4737
  keyup: 'কি-আপ',
4776
4738
  mouseover: 'মাউস-ওভার',
@@ -4798,6 +4760,8 @@ const bengaliDictionary = {
4798
4760
  undefined: 'অনির্ধারিত',
4799
4761
  end: 'শেষ',
4800
4762
  then: 'তারপর',
4763
+ live: 'লাইভ',
4764
+ changes: 'পরিবর্তিত হলে',
4801
4765
  },
4802
4766
  temporal: {
4803
4767
  now: 'এখন',
@@ -4843,6 +4807,14 @@ const bengaliDictionary = {
4843
4807
  random: 'এলোমেলো',
4844
4808
  length: 'দৈর্ঘ্য',
4845
4809
  index: 'সূচক',
4810
+ empty: 'খালি-করুন',
4811
+ 'starts with': 'দিয়ে_শুরু',
4812
+ 'ends with': 'দিয়ে_শেষ',
4813
+ 'ignoring case': 'কেস_উপেক্ষা',
4814
+ 'sorted by': 'দ্বারা_সাজানো',
4815
+ 'mapped to': 'তে_রূপান্তরিত',
4816
+ 'split by': 'দ্বারা_বিভক্ত',
4817
+ 'joined by': 'দ্বারা_যুক্ত',
4846
4818
  },
4847
4819
  };
4848
4820
  const bn$1 = bengaliDictionary;
@@ -4908,6 +4880,11 @@ const thaiDictionary = {
4908
4880
  pick: 'เลือก',
4909
4881
  render: 'แสดงผล',
4910
4882
  until: 'จนถึง',
4883
+ breakpoint: 'จุดพัก',
4884
+ clear: 'เคลียร์',
4885
+ close: 'ปิด',
4886
+ open: 'เปิด',
4887
+ select: 'เลือก',
4911
4888
  },
4912
4889
  modifiers: {
4913
4890
  to: 'ไปยัง',
@@ -4922,6 +4899,7 @@ const thaiDictionary = {
4922
4899
  at: 'ที่',
4923
4900
  in: 'ใน',
4924
4901
  over: 'เหนือ',
4902
+ between: 'ระหว่าง',
4925
4903
  then: 'แล้ว',
4926
4904
  and: 'และ',
4927
4905
  end: 'จบ',
@@ -4936,6 +4914,7 @@ const thaiDictionary = {
4936
4914
  load: 'โหลด',
4937
4915
  focus: 'โฟกัส',
4938
4916
  blur: 'เบลอ',
4917
+ reset: 'รีเซ็ต',
4939
4918
  keydown: 'กดคีย์',
4940
4919
  keyup: 'ปล่อยคีย์',
4941
4920
  mouseover: 'เมาส์เข้า',
@@ -4963,6 +4942,8 @@ const thaiDictionary = {
4963
4942
  undefined: 'ไม่กำหนด',
4964
4943
  end: 'จบ',
4965
4944
  then: 'แล้ว',
4945
+ live: 'สด',
4946
+ changes: 'เปลี่ยน',
4966
4947
  },
4967
4948
  temporal: {
4968
4949
  now: 'ตอนนี้',
@@ -5008,6 +4989,14 @@ const thaiDictionary = {
5008
4989
  random: 'สุ่ม',
5009
4990
  length: 'ความยาว',
5010
4991
  index: 'ดัชนี',
4992
+ empty: 'ล้าง',
4993
+ 'starts with': 'ขึ้นต้นด้วย',
4994
+ 'ends with': 'ลงท้ายด้วย',
4995
+ 'ignoring case': 'ไม่สนตัวพิมพ์',
4996
+ 'sorted by': 'เรียงตาม',
4997
+ 'mapped to': 'แปลงเป็น',
4998
+ 'split by': 'แยกด้วย',
4999
+ 'joined by': 'รวมด้วย',
5011
5000
  },
5012
5001
  };
5013
5002
  const th$1 = thaiDictionary;
@@ -5016,20 +5005,14 @@ const thKeywords = createKeywordProvider(th$1, 'th', {
5016
5005
  allowEnglishFallback: true,
5017
5006
  });
5018
5007
 
5019
- /**
5020
- * Malay Dictionary
5021
- *
5022
- * Malay translations for hyperscript keywords.
5023
- * Malay is an SVO (Subject-Verb-Object) language with prepositions.
5024
- */
5008
+ // Generated/merged from semantic profiles — hand-written entries are preserved
5009
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
5025
5010
  const malayDictionary = {
5026
5011
  commands: {
5027
- // Event handling
5028
5012
  on: 'apabila',
5029
5013
  tell: 'beritahu',
5030
5014
  trigger: 'cetuskan',
5031
5015
  send: 'hantar',
5032
- // DOM manipulation
5033
5016
  take: 'ambil',
5034
5017
  put: 'letak',
5035
5018
  set: 'tetapkan',
@@ -5039,7 +5022,6 @@ const malayDictionary = {
5039
5022
  toggle: 'togol',
5040
5023
  hide: 'sembunyi',
5041
5024
  show: 'tunjuk',
5042
- // Control flow
5043
5025
  if: 'jika',
5044
5026
  unless: 'kecuali',
5045
5027
  repeat: 'ulang',
@@ -5049,52 +5031,46 @@ const malayDictionary = {
5049
5031
  continue: 'teruskan',
5050
5032
  break: 'henti',
5051
5033
  halt: 'henti',
5052
- // Async
5053
5034
  wait: 'tunggu',
5054
5035
  fetch: 'ambil_dari',
5055
5036
  call: 'panggil',
5056
5037
  return: 'pulang',
5057
- // Other commands
5058
5038
  make: 'buat',
5059
5039
  log: 'catat',
5060
5040
  throw: 'lempar',
5061
5041
  catch: 'tangkap',
5062
5042
  measure: 'ukur',
5063
5043
  transition: 'peralihan',
5064
- // Data Commands
5065
5044
  increment: 'tambah_satu',
5066
5045
  decrement: 'kurang_satu',
5067
5046
  default: 'lalai',
5068
- // Navigation Commands
5069
5047
  go: 'pergi',
5070
5048
  pushUrl: 'tolak_url',
5071
5049
  replaceUrl: 'ganti_url',
5072
- // Utility Commands
5073
5050
  copy: 'salin',
5074
5051
  pick: 'pilih',
5075
5052
  beep: 'bunyi',
5076
- // Advanced Commands
5077
5053
  js: 'js',
5078
5054
  async: 'tak_segerak',
5079
5055
  render: 'papar',
5080
- // Animation Commands
5081
5056
  swap: 'tukar_tempat',
5082
5057
  morph: 'ubah_bentuk',
5083
5058
  settle: 'selesai',
5084
- // Content Commands
5085
5059
  append: 'tambah_hujung',
5086
5060
  prepend: 'tambah_mula',
5087
- // Control Flow
5088
5061
  exit: 'keluar',
5089
5062
  else: 'kalau_tidak',
5090
- // Focus Commands
5091
5063
  focus: 'fokus',
5092
5064
  blur: 'kabur',
5093
- // Behaviors
5094
5065
  install: 'pasang',
5095
5066
  behavior: 'kelakuan',
5096
5067
  init: 'mula',
5097
5068
  clone: 'klon',
5069
+ breakpoint: 'titik-henti',
5070
+ clear: 'padam',
5071
+ close: 'tutup',
5072
+ open: 'buka',
5073
+ select: 'pilih',
5098
5074
  },
5099
5075
  modifiers: {
5100
5076
  to: 'ke',
@@ -5160,12 +5136,14 @@ const malayDictionary = {
5160
5136
  contains: 'mengandungi',
5161
5137
  includes: 'termasuk',
5162
5138
  equals: 'sama',
5163
- has: 'ada', // possession verb (context-based)
5164
- have: 'ada', // same for first/third person
5139
+ has: 'ada',
5140
+ have: 'ada',
5165
5141
  then: 'kemudian',
5166
5142
  else: 'kalau_tidak',
5167
5143
  otherwise: 'jika_tidak',
5168
5144
  end: 'tamat',
5145
+ live: 'langsung',
5146
+ changes: 'berubah',
5169
5147
  if: 'jika',
5170
5148
  empty: 'kosong',
5171
5149
  true: 'benar',
@@ -5230,7 +5208,6 @@ const malayDictionary = {
5230
5208
  checked: 'ditanda',
5231
5209
  },
5232
5210
  expressions: {
5233
- // Positional
5234
5211
  first: 'pertama',
5235
5212
  last: 'terakhir',
5236
5213
  next: 'seterusnya',
@@ -5238,44 +5215,38 @@ const malayDictionary = {
5238
5215
  prev: 'sebelum',
5239
5216
  at: 'di',
5240
5217
  random: 'rawak',
5241
- // DOM Traversal
5242
5218
  closest: 'terdekat',
5243
5219
  parent: 'induk',
5244
5220
  children: 'anak_anak',
5245
5221
  within: 'dalam',
5246
- // Emptiness/Existence
5247
5222
  no: 'tiada',
5248
5223
  empty: 'kosong',
5249
5224
  some: 'beberapa',
5250
- // String operations
5251
5225
  'starts with': 'bermula_dengan',
5252
5226
  'ends with': 'berakhir_dengan',
5253
- // Additional
5227
+ 'ignoring case': 'abaikan_huruf_besar_kecil',
5228
+ 'sorted by': 'disusun_mengikut',
5229
+ 'mapped to': 'dipetakan_ke',
5230
+ 'split by': 'dipecah_oleh',
5231
+ 'joined by': 'digabung_oleh',
5254
5232
  length: 'panjang',
5255
5233
  index: 'indeks',
5256
5234
  },
5257
5235
  };
5258
- // Default export alias
5259
5236
  const ms$1 = malayDictionary;
5260
5237
 
5261
5238
  const msKeywords = createKeywordProvider(ms$1, 'ms', {
5262
5239
  allowEnglishFallback: true,
5263
5240
  });
5264
5241
 
5265
- /**
5266
- * Tagalog Dictionary
5267
- *
5268
- * Tagalog translations for hyperscript keywords.
5269
- * Tagalog is a VSO (Verb-Subject-Object) language with rich verbal morphology.
5270
- */
5242
+ // Generated/merged from semantic profiles — hand-written entries are preserved
5243
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
5271
5244
  const tagalogDictionary = {
5272
5245
  commands: {
5273
- // Event handling
5274
5246
  on: 'kapag',
5275
5247
  tell: 'sabihin',
5276
5248
  trigger: 'palitawin',
5277
5249
  send: 'ipadala',
5278
- // DOM manipulation
5279
5250
  take: 'kunin',
5280
5251
  put: 'ilagay',
5281
5252
  set: 'itakda',
@@ -5285,7 +5256,6 @@ const tagalogDictionary = {
5285
5256
  toggle: 'palitan',
5286
5257
  hide: 'itago',
5287
5258
  show: 'ipakita',
5288
- // Control flow
5289
5259
  if: 'kung',
5290
5260
  unless: 'maliban_kung',
5291
5261
  repeat: 'ulitin',
@@ -5295,52 +5265,46 @@ const tagalogDictionary = {
5295
5265
  continue: 'magpatuloy',
5296
5266
  break: 'itigil',
5297
5267
  halt: 'huminto',
5298
- // Async
5299
5268
  wait: 'maghintay',
5300
5269
  fetch: 'kuhanin_mula',
5301
5270
  call: 'tawagin',
5302
5271
  return: 'ibalik',
5303
- // Other commands
5304
5272
  make: 'gumawa',
5305
5273
  log: 'itala',
5306
5274
  throw: 'ihagis',
5307
5275
  catch: 'hulihin',
5308
5276
  measure: 'sukatin',
5309
5277
  transition: 'baguhin',
5310
- // Data Commands
5311
5278
  increment: 'dagdagan',
5312
5279
  decrement: 'bawasan',
5313
5280
  default: 'pamantayan',
5314
- // Navigation Commands
5315
5281
  go: 'pumunta',
5316
5282
  pushUrl: 'itulak_url',
5317
5283
  replaceUrl: 'palitan_url',
5318
- // Utility Commands
5319
5284
  copy: 'kopyahin',
5320
5285
  pick: 'pumili',
5321
5286
  beep: 'tunog',
5322
- // Advanced Commands
5323
5287
  js: 'js',
5324
5288
  async: 'sabay',
5325
5289
  render: 'ipakita',
5326
- // Animation Commands
5327
5290
  swap: 'palitan_pwesto',
5328
5291
  morph: 'baguhin_hugis',
5329
5292
  settle: 'ayusin',
5330
- // Content Commands
5331
5293
  append: 'idagdag_sa_dulo',
5332
5294
  prepend: 'idagdag_sa_simula',
5333
- // Control Flow
5334
5295
  exit: 'lumabas',
5335
5296
  else: 'kung_hindi',
5336
- // Focus Commands
5337
5297
  focus: 'ituon',
5338
5298
  blur: 'alisin_tuon',
5339
- // Behaviors
5340
5299
  install: 'ikabit',
5341
5300
  behavior: 'ugali',
5342
5301
  init: 'simulan',
5343
5302
  clone: 'kopyahin',
5303
+ breakpoint: 'breakpoint',
5304
+ clear: 'burahin',
5305
+ close: 'isara',
5306
+ open: 'buksan',
5307
+ select: 'piliin',
5344
5308
  },
5345
5309
  modifiers: {
5346
5310
  to: 'sa',
@@ -5406,12 +5370,14 @@ const tagalogDictionary = {
5406
5370
  contains: 'naglalaman',
5407
5371
  includes: 'kasama',
5408
5372
  equals: 'katumbas',
5409
- has: 'may', // possession verb (context-based)
5410
- have: 'may', // same for first/third person in Tagalog
5373
+ has: 'may',
5374
+ have: 'may',
5411
5375
  then: 'pagkatapos',
5412
5376
  else: 'kung_hindi',
5413
5377
  otherwise: 'kung_hindi_man',
5414
5378
  end: 'wakas',
5379
+ live: 'live',
5380
+ changes: 'nagbabago',
5415
5381
  if: 'kung',
5416
5382
  empty: 'walang_laman',
5417
5383
  true: 'totoo',
@@ -5476,7 +5442,6 @@ const tagalogDictionary = {
5476
5442
  checked: 'naka_tsek',
5477
5443
  },
5478
5444
  expressions: {
5479
- // Positional
5480
5445
  first: 'una',
5481
5446
  last: 'huli',
5482
5447
  next: 'susunod',
@@ -5484,30 +5449,146 @@ const tagalogDictionary = {
5484
5449
  prev: 'nakaraan',
5485
5450
  at: 'sa',
5486
5451
  random: 'random',
5487
- // DOM Traversal
5488
5452
  closest: 'pinakamalapit',
5489
5453
  parent: 'magulang',
5490
5454
  children: 'mga_anak',
5491
5455
  within: 'sa_loob_ng',
5492
- // Emptiness/Existence
5493
5456
  no: 'walang',
5494
5457
  empty: 'walang_laman',
5495
5458
  some: 'ilan',
5496
- // String operations
5497
5459
  'starts with': 'nagsisimula_sa',
5498
5460
  'ends with': 'nagtatapos_sa',
5499
- // Additional
5461
+ 'ignoring case': 'huwag_pansinin_ang_case',
5462
+ 'sorted by': 'nakaayos_ayon_sa',
5463
+ 'mapped to': 'binago_sa',
5464
+ 'split by': 'hinati_sa',
5465
+ 'joined by': 'pinagsama_sa',
5500
5466
  length: 'haba',
5501
5467
  index: 'indeks',
5502
5468
  },
5503
5469
  };
5504
- // Default export alias
5505
5470
  const tl$1 = tagalogDictionary;
5506
5471
 
5507
5472
  const tlKeywords = createKeywordProvider(tl$1, 'tl', {
5508
5473
  allowEnglishFallback: true,
5509
5474
  });
5510
5475
 
5476
+ // Generated/merged from semantic profiles — hand-written entries are preserved
5477
+ // To add derived entries, update the semantic profile and run: npm run generate:language-assets
5478
+ const he$1 = {
5479
+ commands: {
5480
+ add: 'הוסף',
5481
+ append: 'צרף',
5482
+ async: 'אסינכרוני',
5483
+ beep: 'ביפ',
5484
+ break: 'שבור',
5485
+ call: 'קרא',
5486
+ continue: 'המשך',
5487
+ copy: 'העתק',
5488
+ decrement: 'הקטן',
5489
+ default: 'ברירת מחדל',
5490
+ exit: 'צא',
5491
+ fetch: 'הבא',
5492
+ for: 'עבור',
5493
+ get: 'קבל',
5494
+ go: 'לך',
5495
+ halt: 'עצור',
5496
+ hide: 'הסתר',
5497
+ if: 'אם',
5498
+ increment: 'הגדל',
5499
+ install: 'התקן',
5500
+ js: 'js',
5501
+ log: 'רשום',
5502
+ make: 'צור',
5503
+ measure: 'מדוד',
5504
+ morph: 'הפוך',
5505
+ on: 'ב',
5506
+ pick: 'בחר',
5507
+ put: 'שים',
5508
+ remove: 'הסר',
5509
+ render: 'רנדר',
5510
+ repeat: 'חזור',
5511
+ return: 'החזר',
5512
+ send: 'שלח',
5513
+ set: 'קבע',
5514
+ settle: 'התייצב',
5515
+ show: 'הראה',
5516
+ swap: 'החלף',
5517
+ take: 'קח',
5518
+ tell: 'אמור',
5519
+ throw: 'זרוק',
5520
+ toggle: 'מתג',
5521
+ transition: 'מעבר',
5522
+ trigger: 'הפעל',
5523
+ until: 'עד',
5524
+ wait: 'חכה',
5525
+ while: 'כל עוד',
5526
+ },
5527
+ modifiers: {
5528
+ after: 'אחרי',
5529
+ before: 'לפני',
5530
+ from: 'מ',
5531
+ into: 'לתוך',
5532
+ to: 'על',
5533
+ with: 'עם',
5534
+ },
5535
+ events: {
5536
+ blur: 'טשטש',
5537
+ change: 'שינוי',
5538
+ click: 'לחיצה',
5539
+ focus: 'מקד',
5540
+ input: 'קלט',
5541
+ submit: 'שליחה',
5542
+ },
5543
+ logical: {
5544
+ and: 'וגם',
5545
+ else: 'אחרת',
5546
+ end: 'סוף',
5547
+ then: 'אז',
5548
+ live: 'חי',
5549
+ changes: 'משתנה',
5550
+ when: 'כאשר',
5551
+ where: 'איפה',
5552
+ },
5553
+ temporal: {},
5554
+ values: {
5555
+ body: 'גוף',
5556
+ event: 'אירוע',
5557
+ it: 'זה',
5558
+ its: 'שלו',
5559
+ me: 'אני',
5560
+ my: 'שלי',
5561
+ result: 'תוצאה',
5562
+ target: 'יעד',
5563
+ you: 'אתה',
5564
+ your: 'שלך',
5565
+ },
5566
+ attributes: {},
5567
+ expressions: {},
5568
+ };
5569
+
5570
+ // packages/i18n/src/parser/he.ts
5571
+ /**
5572
+ * Hebrew keyword provider for the hyperscript parser.
5573
+ *
5574
+ * Enables parsing hyperscript written in Hebrew (RTL, SVO):
5575
+ * - `ב לחיצה מתג .active` → parses as `on click toggle .active`
5576
+ *
5577
+ * English keywords are also accepted (mixed mode).
5578
+ *
5579
+ * @example
5580
+ * ```typescript
5581
+ * import { heKeywords } from '@lokascript/i18n/parser/he';
5582
+ * import { Parser } from '@hyperfixi/core';
5583
+ *
5584
+ * const parser = new Parser({ keywords: heKeywords });
5585
+ * parser.parse('ב לחיצה מתג .active');
5586
+ * ```
5587
+ */
5588
+ const heKeywords = createKeywordProvider(he$1, 'he', {
5589
+ allowEnglishFallback: true,
5590
+ });
5591
+
5511
5592
  // packages/i18n/src/parser/locale-manager.ts
5512
5593
  /**
5513
5594
  * LocaleManager - Centralized locale configuration for hyperscript parsing.
@@ -5751,6 +5832,21 @@ const en$1 = {
5751
5832
  exit: 'exit',
5752
5833
  // Behaviors
5753
5834
  install: 'install',
5835
+ // v0.9.90 Phase 1 — DOM / form state / debug
5836
+ open: 'open',
5837
+ close: 'close',
5838
+ select: 'select',
5839
+ clear: 'clear',
5840
+ breakpoint: 'breakpoint',
5841
+ // Other commands with schemas (backfill — pre-existing gaps surfaced by
5842
+ // the schema-alignment test)
5843
+ prepend: 'prepend',
5844
+ clone: 'clone',
5845
+ // Navigation/DOM commands added in core (Dec 2025 / Apr 2026)
5846
+ scroll: 'scroll',
5847
+ push: 'push',
5848
+ replace: 'replace',
5849
+ process: 'process',
5754
5850
  },
5755
5851
  modifiers: {
5756
5852
  to: 'to',
@@ -5816,6 +5912,8 @@ const en$1 = {
5816
5912
  else: 'else',
5817
5913
  otherwise: 'otherwise',
5818
5914
  end: 'end',
5915
+ live: 'live',
5916
+ changes: 'changes',
5819
5917
  },
5820
5918
  temporal: {
5821
5919
  seconds: 'seconds',
@@ -5885,6 +5983,12 @@ const en$1 = {
5885
5983
  // String operations
5886
5984
  'starts with': 'starts with',
5887
5985
  'ends with': 'ends with',
5986
+ 'ignoring case': 'ignoring case',
5987
+ // Collection operations (v0.9.90)
5988
+ 'sorted by': 'sorted by',
5989
+ 'mapped to': 'mapped to',
5990
+ 'split by': 'split by',
5991
+ 'joined by': 'joined by',
5888
5992
  },
5889
5993
  };
5890
5994
 
@@ -6964,6 +7068,31 @@ const polishProfile = {
6964
7068
  ],
6965
7069
  };
6966
7070
  // =============================================================================
7071
+ // Hebrew (SVO, RTL, Prepositions)
7072
+ // =============================================================================
7073
+ const hebrewProfile = {
7074
+ code: 'he',
7075
+ name: 'עברית',
7076
+ wordOrder: 'SVO', // Modern Hebrew is predominantly SVO (Biblical Hebrew was VSO)
7077
+ adpositionType: 'preposition',
7078
+ morphology: 'fusional', // Root-and-pattern (Semitic), like Arabic
7079
+ direction: 'rtl',
7080
+ canonicalOrder: ['event', 'action', 'patient', 'destination'],
7081
+ // Hebrew uses single-letter prefix prepositions (ב, ל, מ, כ) that attach to
7082
+ // the following word. For tokenization we treat them as spaced forms.
7083
+ markers: [
7084
+ { form: 'ב', role: 'event', position: 'preposition', required: true },
7085
+ { form: 'על', role: 'destination', position: 'preposition', required: false },
7086
+ { form: 'אל', role: 'destination', position: 'preposition', required: false },
7087
+ { form: 'ל', role: 'destination', position: 'preposition', required: false },
7088
+ { form: 'את', role: 'patient', position: 'preposition', required: false }, // Direct object marker
7089
+ { form: 'מ', role: 'source', position: 'preposition', required: false },
7090
+ { form: 'מן', role: 'source', position: 'preposition', required: false },
7091
+ { form: 'עם', role: 'style', position: 'preposition', required: false },
7092
+ { form: 'כ', role: 'method', position: 'preposition', required: false },
7093
+ ],
7094
+ };
7095
+ // =============================================================================
6967
7096
  // Profile Registry
6968
7097
  // =============================================================================
6969
7098
  const profiles = {
@@ -6990,6 +7119,7 @@ const profiles = {
6990
7119
  tl: tagalogProfile,
6991
7120
  th: thaiProfile,
6992
7121
  pl: polishProfile,
7122
+ he: hebrewProfile,
6993
7123
  };
6994
7124
  function getProfile(locale) {
6995
7125
  return profiles[locale];
@@ -7290,7 +7420,7 @@ function getSupportedDirectPairs() {
7290
7420
  /**
7291
7421
  * Dictionary Index
7292
7422
  *
7293
- * Exports dictionaries for all 22 supported languages.
7423
+ * Exports dictionaries for all supported languages.
7294
7424
  * Each dictionary maps English canonical keywords to locale-specific translations
7295
7425
  * across 8 categories: commands, modifiers, events, logical, temporal, values,
7296
7426
  * attributes, and expressions.
@@ -7348,6 +7478,8 @@ const th = thaiDictionary;
7348
7478
  const ms = malayDictionary;
7349
7479
  /** Tagalog dictionary */
7350
7480
  const tl = tagalogDictionary;
7481
+ /** Hebrew dictionary */
7482
+ const he = he$1;
7351
7483
  // =============================================================================
7352
7484
  // Dictionary Registry
7353
7485
  // =============================================================================
@@ -7378,6 +7510,7 @@ const dictionaries = {
7378
7510
  th,
7379
7511
  ms,
7380
7512
  tl,
7513
+ he,
7381
7514
  };
7382
7515
 
7383
7516
  // packages/i18n/src/types.ts
@@ -7453,18 +7586,79 @@ function getCommandKeywordsForLocale(locale) {
7453
7586
  return keywords;
7454
7587
  }
7455
7588
  /**
7456
- * Split a compound statement into parts at "then" boundaries, newlines,
7457
- * AND command keyword boundaries.
7458
- *
7459
- * Example: "on click wait 1s then increment #count then toggle .active"
7460
- * Returns: ["on click wait 1s", "increment #count", "toggle .active"]
7461
- *
7462
- * Example: "on click\n increment #count\n toggle .highlight"
7463
- * Returns: ["on click", "increment #count", "toggle .highlight"]
7464
- *
7465
- * Example: "wait 2s toggle .highlight"
7466
- * Returns: ["wait 2s", "toggle .highlight"]
7589
+ * Detect a reactive block (`live ... end`, `when X changes Y [end]`,
7590
+ * `unless X Y [end]`) and decompose it. Returns `null` when the input
7591
+ * is not a reactive block, when there's content after the matched
7592
+ * `end`, or when the heuristic can't locate a body — all of which fall
7593
+ * through to the standard `parseStatement` path.
7467
7594
  */
7595
+ function extractBlockStructure(input, sourceLocale) {
7596
+ const tokens = input.split(/\s+/);
7597
+ const head = tokens[0]?.toLowerCase();
7598
+ if (!head || !BLOCK_HEAD_KEYWORDS.has(head))
7599
+ return null;
7600
+ // Depth-aware match for the closing `end` so nested blocks
7601
+ // (`live when X changes Y end end`) slice correctly.
7602
+ let depth = 1;
7603
+ let endIdx = -1;
7604
+ for (let i = 1; i < tokens.length; i++) {
7605
+ const t = tokens[i].toLowerCase();
7606
+ if (BLOCK_HEAD_KEYWORDS.has(t))
7607
+ depth++;
7608
+ else if (t === 'end') {
7609
+ depth--;
7610
+ if (depth === 0) {
7611
+ endIdx = i;
7612
+ break;
7613
+ }
7614
+ }
7615
+ }
7616
+ // If there's trailing content after the matched `end`, bail out and
7617
+ // let the existing splitter handle it. (`splitOnThen` normally
7618
+ // separates trailing code before we get here.)
7619
+ if (endIdx !== -1 && endIdx !== tokens.length - 1)
7620
+ return null;
7621
+ const inner = endIdx !== -1 ? tokens.slice(1, endIdx) : tokens.slice(1);
7622
+ const base = { headKeyword: tokens[0], body: '' };
7623
+ if (endIdx !== -1)
7624
+ base.tailKeyword = tokens[endIdx];
7625
+ if (head === 'live') {
7626
+ return { ...base, body: inner.join(' ') };
7627
+ }
7628
+ if (head === 'when') {
7629
+ // Reactive: `when <expr> changes <body>`. Without `changes`, fall
7630
+ // through to the standard event-wait path (parseConditional).
7631
+ const idx = inner.findIndex(t => t.toLowerCase() === 'changes');
7632
+ if (idx >= 0) {
7633
+ return {
7634
+ ...base,
7635
+ prefixExpr: inner.slice(0, idx).join(' '),
7636
+ connector: inner[idx],
7637
+ body: inner.slice(idx + 1).join(' '),
7638
+ };
7639
+ }
7640
+ return null;
7641
+ }
7642
+ // `unless <cond> <body>`: condition runs up to the first command
7643
+ // keyword in `inner`. Heuristic — works because hyperscript bodies
7644
+ // always start with a command verb, and `unless` conditions rarely
7645
+ // contain bare command keywords as values.
7646
+ const commands = getCommandKeywordsForLocale(sourceLocale);
7647
+ let bodyStart = -1;
7648
+ for (let i = 0; i < inner.length; i++) {
7649
+ if (commands.has(inner[i].toLowerCase())) {
7650
+ bodyStart = i;
7651
+ break;
7652
+ }
7653
+ }
7654
+ if (bodyStart <= 0)
7655
+ return null;
7656
+ return {
7657
+ ...base,
7658
+ prefixExpr: inner.slice(0, bodyStart).join(' '),
7659
+ body: inner.slice(bodyStart).join(' '),
7660
+ };
7661
+ }
7468
7662
  function splitCompoundStatement(input, sourceLocale) {
7469
7663
  // First, split on newlines (preserving non-empty lines)
7470
7664
  const lines = input
@@ -7623,6 +7817,18 @@ const BOUNDARY_MODIFIERS = new Set([
7623
7817
  'of',
7624
7818
  'over',
7625
7819
  ]);
7820
+ /**
7821
+ * Block-introducing keywords whose body should not be split at command
7822
+ * boundaries by `splitOnCommandBoundaries`. Inputs starting with one of
7823
+ * these are also routed around `parseStatement` entirely by
7824
+ * `extractBlockStructure` + `transformBlock` so block-syntactic tokens
7825
+ * never reach `parseCommand`/`parseConditional` (where they'd be
7826
+ * misinterpreted as command verbs or swept into role values).
7827
+ *
7828
+ * `if` deliberately stays out: `if X then Y end` already works via the
7829
+ * `splitOnThen` + `parseConditional` path.
7830
+ */
7831
+ const BLOCK_HEAD_KEYWORDS = new Set(['live', 'when', 'unless']);
7626
7832
  function splitOnCommandBoundaries(input, sourceLocale) {
7627
7833
  const commandKeywords = getCommandKeywordsForLocale(sourceLocale);
7628
7834
  const tokens = input.split(/\s+/);
@@ -7636,9 +7842,21 @@ function splitOnCommandBoundaries(input, sourceLocale) {
7636
7842
  // If it's an event handler, the first command after the event is part of the handler
7637
7843
  // So we need to track whether we've seen the first command yet
7638
7844
  let seenFirstCommand = !isEventHandler; // If not event handler, we're already past the "first command" phase
7845
+ // Track block-scope depth (live/when/bind/if/unless/for/while/...). While
7846
+ // inside a block, do not split on command boundaries — the body belongs
7847
+ // to the block head and must transform as one unit. See comments on
7848
+ // BLOCK_HEAD_KEYWORDS for the failure mode this prevents.
7849
+ let blockDepth = 0;
7639
7850
  for (let i = 0; i < tokens.length; i++) {
7640
7851
  const token = tokens[i];
7641
7852
  const lowerToken = token.toLowerCase();
7853
+ // Update block-scope depth before any split decision.
7854
+ if (BLOCK_HEAD_KEYWORDS.has(lowerToken)) {
7855
+ blockDepth++;
7856
+ }
7857
+ else if (lowerToken === 'end' && blockDepth > 0) {
7858
+ blockDepth--;
7859
+ }
7642
7860
  // If this is a command keyword and we already have tokens in current part
7643
7861
  if (commandKeywords.has(lowerToken) && currentPart.length > 0) {
7644
7862
  // Check if the previous token looks like it could end a command
@@ -7652,6 +7870,12 @@ function splitOnCommandBoundaries(input, sourceLocale) {
7652
7870
  currentPart.push(token);
7653
7871
  continue;
7654
7872
  }
7873
+ // Don't split inside a block (live/when/bind/unless body, etc.).
7874
+ // The block head and its body must transform as one statement.
7875
+ if (blockDepth > 0) {
7876
+ currentPart.push(token);
7877
+ continue;
7878
+ }
7655
7879
  if (!BOUNDARY_MODIFIERS.has(prevLower) && !commandKeywords.has(prevLower)) {
7656
7880
  // This looks like a command boundary - save current part and start new one
7657
7881
  parts.push(currentPart.join(' '));
@@ -8382,6 +8606,14 @@ class GrammarTransformer {
8382
8606
  * Transform a single hyperscript statement (no compound "then" chains).
8383
8607
  */
8384
8608
  transformSingle(input) {
8609
+ // 0. Reactive block? Route around parseStatement entirely so
8610
+ // block-syntactic tokens (live/when/unless/end) aren't treated
8611
+ // as command verbs or swept into role values, and so SOV/VSO
8612
+ // reorder applies only inside the body.
8613
+ const block = extractBlockStructure(input, this.sourceProfile.code);
8614
+ if (block) {
8615
+ return this.transformBlock(block);
8616
+ }
8385
8617
  // 1. Parse into semantic roles
8386
8618
  const parsed = parseStatement(input, this.sourceProfile.code);
8387
8619
  if (!parsed) {
@@ -8408,6 +8640,26 @@ class GrammarTransformer {
8408
8640
  // 7. Join without markers (still use joinTokens for consistency)
8409
8641
  return joinTokens(reordered.map(e => e.translated || e.value));
8410
8642
  }
8643
+ /**
8644
+ * Translate a reactive block by translating the head/tail/connector
8645
+ * via the dictionary, recursively transforming the body through the
8646
+ * regular pipeline, and rejoining in source-language position order.
8647
+ * Block-syntactic tokens are never reordered: they're delimiters, not
8648
+ * arguments, and authors expect them at start/end positions
8649
+ * regardless of target word order.
8650
+ */
8651
+ transformBlock(block) {
8652
+ const src = this.sourceProfile.code;
8653
+ const dst = this.targetProfile.code;
8654
+ const head = translateWord(block.headKeyword, src, dst);
8655
+ const tail = block.tailKeyword ? translateWord(block.tailKeyword, src, dst) : '';
8656
+ const connector = block.connector ? translateWord(block.connector, src, dst) : '';
8657
+ const prefix = block.prefixExpr ? translateMultiWordValue(block.prefixExpr, src, dst) : '';
8658
+ // Recurse through `transform()` (not `transformSingle`) so the body
8659
+ // gets `then`-splitting and nested-block handling for free.
8660
+ const body = this.transform(block.body);
8661
+ return [head, prefix, connector, body, tail].filter(s => s.length > 0).join(' ');
8662
+ }
8411
8663
  /**
8412
8664
  * Find the best matching rule for this statement
8413
8665
  */
@@ -8554,5 +8806,5 @@ const examples = {
8554
8806
  },
8555
8807
  };
8556
8808
 
8557
- export { ENGLISH_COMMANDS, ENGLISH_KEYWORDS, GrammarTransformer, LANGUAGE_FAMILY_DEFAULTS, LocaleManager, UNIVERSAL_ENGLISH_KEYWORDS, UNIVERSAL_PATTERNS, ar$1 as ar, ar$1 as arDictionary, arKeywords, arabicProfile, bn$1 as bn, bn$1 as bnDictionary, bnKeywords, chineseProfile, createEnglishProvider, createKeywordProvider, de$1 as de, de$1 as deDictionary, deKeywords, detectBrowserLocale, directMappings, en$1 as en, englishProfile, es$1 as es, es$1 as esDictionary, esKeywords, fr$1 as fr, fr$1 as frDictionary, frKeywords, frenchProfile, germanProfile, getDirectMapping, getProfile, getSupportedDirectPairs, getSupportedLocales, examples as grammarExamples, hasDirectMapping, hindiDictionary as hiDictionary, hiKeywords, hindiDictionary, id$1 as id, id$1 as idDictionary, idKeywords, indonesianProfile, insertMarkers, it$1 as it, it$1 as itDictionary, itKeywords, ja$1 as ja, ja$1 as jaDictionary, jaKeywords, japaneseProfile, joinTokens, ko$1 as ko, ko$1 as koDictionary, koKeywords, koreanProfile, ms$1 as ms, ms$1 as msDictionary, msKeywords, parseStatement, pl$1 as pl, pl$1 as plDictionary, plKeywords, portugueseProfile, profiles, pt$1 as pt, pt$1 as ptDictionary, ptKeywords, qu$1 as qu, qu$1 as quDictionary, quKeywords, quechuaProfile, reorderRoles, russianDictionary as ruDictionary, ruKeywords, russianDictionary, spanishProfile, sw$1 as sw, sw$1 as swDictionary, swKeywords, swahiliProfile, th$1 as th, th$1 as thDictionary, thKeywords, tl$1 as tl, tl$1 as tlDictionary, tlKeywords, toEnglish, toLocale, tr$1 as tr, tr$1 as trDictionary, trKeywords, transformStatement, translate, translateWordDirect, turkishProfile, ukrainianDictionary as ukDictionary, ukKeywords, ukrainianDictionary, vi$1 as vi, vi$1 as viDictionary, viKeywords, zh$1 as zh, zh$1 as zhDictionary, zhKeywords };
8809
+ export { ENGLISH_COMMANDS, ENGLISH_KEYWORDS, GrammarTransformer, LANGUAGE_FAMILY_DEFAULTS, LocaleManager, UNIVERSAL_ENGLISH_KEYWORDS, UNIVERSAL_PATTERNS, ar$1 as ar, ar$1 as arDictionary, arKeywords, arabicProfile, bn$1 as bn, bn$1 as bnDictionary, bnKeywords, chineseProfile, createEnglishProvider, createKeywordProvider, de$1 as de, de$1 as deDictionary, deKeywords, detectBrowserLocale, directMappings, en$1 as en, englishProfile, es$1 as es, es$1 as esDictionary, esKeywords, fr$1 as fr, fr$1 as frDictionary, frKeywords, frenchProfile, germanProfile, getDirectMapping, getProfile, getSupportedDirectPairs, getSupportedLocales, examples as grammarExamples, hasDirectMapping, he$1 as he, he$1 as heDictionary, heKeywords, hebrewProfile, hindiDictionary as hiDictionary, hiKeywords, hindiDictionary, id$1 as id, id$1 as idDictionary, idKeywords, indonesianProfile, insertMarkers, it$1 as it, it$1 as itDictionary, itKeywords, ja$1 as ja, ja$1 as jaDictionary, jaKeywords, japaneseProfile, joinTokens, ko$1 as ko, ko$1 as koDictionary, koKeywords, koreanProfile, ms$1 as ms, ms$1 as msDictionary, msKeywords, parseStatement, pl$1 as pl, pl$1 as plDictionary, plKeywords, portugueseProfile, profiles, pt$1 as pt, pt$1 as ptDictionary, ptKeywords, qu$1 as qu, qu$1 as quDictionary, quKeywords, quechuaProfile, reorderRoles, russianDictionary as ruDictionary, ruKeywords, russianDictionary, spanishProfile, sw$1 as sw, sw$1 as swDictionary, swKeywords, swahiliProfile, th$1 as th, th$1 as thDictionary, thKeywords, tl$1 as tl, tl$1 as tlDictionary, tlKeywords, toEnglish, toLocale, tr$1 as tr, tr$1 as trDictionary, trKeywords, transformStatement, translate, translateWordDirect, turkishProfile, ukrainianDictionary as ukDictionary, ukKeywords, ukrainianDictionary, vi$1 as vi, vi$1 as viDictionary, viKeywords, zh$1 as zh, zh$1 as zhDictionary, zhKeywords };
8558
8810
  //# sourceMappingURL=lokascript-i18n.mjs.map