langie 1.12.0 → 1.13.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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * langie v1.12.0
2
+ * langie v1.13.0
3
3
  * (c) 2026 nlit
4
4
  * @license Apache-2.0
5
5
  *
@@ -595,6 +595,10 @@ function displayNative(name = "", native = "") {
595
595
  return name !== native && TRAILING_PAREN.test(name) && TRAILING_PAREN.test(native) ? native.replace(TRAILING_PAREN, "") : native;
596
596
  }
597
597
 
598
+ // src/utils/flagUrl.ts
599
+ var isReadyFlagUrl = (flagCode) => flagCode.startsWith("/") || /^https?:\/\//i.test(flagCode);
600
+ var flagImageUrl = (flagCode) => isReadyFlagUrl(flagCode) ? flagCode : `/flags/${flagCode}.svg`;
601
+
598
602
  // src/constants/colors.ts
599
603
  var COLORS = {
600
604
  // Primary colors
@@ -671,14 +675,14 @@ var _hoisted_1 = {
671
675
  key: 0,
672
676
  class: "multiselect-single-label"
673
677
  };
674
- var _hoisted_2 = ["src", "alt"];
678
+ var _hoisted_2 = ["src", "alt", "data-custom-flag"];
675
679
  var _hoisted_3 = { class: "language-text" };
676
680
  var _hoisted_4 = {
677
681
  key: 0,
678
682
  class: "native-name"
679
683
  };
680
684
  var _hoisted_5 = ["data-lang-code"];
681
- var _hoisted_6 = ["src", "alt"];
685
+ var _hoisted_6 = ["src", "alt", "data-custom-flag"];
682
686
  var _hoisted_7 = { class: "language-text" };
683
687
  var _hoisted_8 = {
684
688
  key: 0,
@@ -746,10 +750,7 @@ var LanguageSelect_default = /* @__PURE__ */ (0, import_vue.defineComponent)({
746
750
  const flagCode = lang.flag_country || lang.code;
747
751
  return flagCode;
748
752
  };
749
- const getFlagImageUrl = (lang) => {
750
- const flagCode = getFlagCode(lang);
751
- return `/flags/${flagCode}.svg`;
752
- };
753
+ const getFlagImageUrl = (lang) => flagImageUrl(getFlagCode(lang));
753
754
  const props = __props;
754
755
  const emit = __emit;
755
756
  const multiselectRef = (0, import_vue3.ref)(null);
@@ -874,6 +875,10 @@ var LanguageSelect_default = /* @__PURE__ */ (0, import_vue.defineComponent)({
874
875
  const onFlagError = (event) => {
875
876
  const target = event.target;
876
877
  const currentSrc = target.src;
878
+ if (target.dataset.customFlag) {
879
+ target.style.display = "none";
880
+ return;
881
+ }
877
882
  if (currentSrc && currentSrc.includes("/flags/")) {
878
883
  const match = currentSrc.match(/\/flags\/([a-z]{2})\.svg/);
879
884
  if (match) {
@@ -923,6 +928,7 @@ var LanguageSelect_default = /* @__PURE__ */ (0, import_vue.defineComponent)({
923
928
  src: getFlagImageUrl(value),
924
929
  class: "lang-flag",
925
930
  alt: `${value.native_name || value.name} flag`,
931
+ "data-custom-flag": (0, import_vue2.unref)(isReadyFlagUrl)(getFlagCode(value)) || void 0,
926
932
  onError: onFlagError
927
933
  }, null, 40, _hoisted_2)) : (0, import_vue2.createCommentVNode)("v-if", true),
928
934
  (0, import_vue2.createElementVNode)("span", _hoisted_3, [
@@ -951,6 +957,7 @@ var LanguageSelect_default = /* @__PURE__ */ (0, import_vue.defineComponent)({
951
957
  src: getFlagImageUrl(option),
952
958
  class: "lang-flag",
953
959
  alt: `${option.name} flag`,
960
+ "data-custom-flag": (0, import_vue2.unref)(isReadyFlagUrl)(getFlagCode(option)) || void 0,
954
961
  onError: onFlagError
955
962
  }, null, 40, _hoisted_6)),
956
963
  (0, import_vue2.createElementVNode)("span", _hoisted_7, [
@@ -1031,6 +1038,8 @@ var API_FIELD_TEXT = "t";
1031
1038
  var API_FIELD_FROM = "from";
1032
1039
  var API_FIELD_TO = "to";
1033
1040
  var API_FIELD_CTX = "ctx";
1041
+ var API_FIELD_GLOSSARY_SRC = "gs";
1042
+ var API_FIELD_GLOSSARY_TGT = "gt";
1034
1043
  var API_FIELD_TRANSLATIONS = "translations";
1035
1044
  var API_FIELD_ERROR = "error";
1036
1045
  var API_FIELD_TURNSTILE = "turnstileToken";
@@ -1044,6 +1053,11 @@ function resolveApiKey(options) {
1044
1053
  if (!env) return void 0;
1045
1054
  return env[options.apiKeyEnv || DEFAULT_API_KEY_ENV];
1046
1055
  }
1056
+ function glossaryFields(t) {
1057
+ const src = t[API_FIELD_GLOSSARY_SRC];
1058
+ const tgt = t[API_FIELD_GLOSSARY_TGT];
1059
+ return src && tgt ? { [API_FIELD_GLOSSARY_SRC]: src, [API_FIELD_GLOSSARY_TGT]: tgt } : {};
1060
+ }
1047
1061
  var translationCache = /* @__PURE__ */ new Map();
1048
1062
  function getTranslationCacheKey(serviceTranslations, options) {
1049
1063
  return JSON.stringify({
@@ -1051,7 +1065,8 @@ function getTranslationCacheKey(serviceTranslations, options) {
1051
1065
  [API_FIELD_TEXT]: t[API_FIELD_TEXT],
1052
1066
  [API_FIELD_FROM]: t[API_FIELD_FROM],
1053
1067
  [API_FIELD_TO]: t[API_FIELD_TO],
1054
- [API_FIELD_CTX]: t[API_FIELD_CTX] || options[API_FIELD_CTX] || "ui"
1068
+ [API_FIELD_CTX]: t[API_FIELD_CTX] || options[API_FIELD_CTX] || "ui",
1069
+ ...glossaryFields(t)
1055
1070
  })),
1056
1071
  host: options.translatorHost || DEFAULT_TRANSLATOR_HOST,
1057
1072
  context: options[API_FIELD_CTX] || "ui"
@@ -1096,7 +1111,8 @@ async function translateBatch(translations2 = [], options = {}) {
1096
1111
  [API_FIELD_TEXT]: t[API_FIELD_TEXT],
1097
1112
  [API_FIELD_FROM]: t[API_FIELD_FROM],
1098
1113
  [API_FIELD_TO]: t[API_FIELD_TO],
1099
- [API_FIELD_CTX]: t[API_FIELD_CTX] || options[API_FIELD_CTX] || "ui"
1114
+ [API_FIELD_CTX]: t[API_FIELD_CTX] || options[API_FIELD_CTX] || "ui",
1115
+ ...glossaryFields(t)
1100
1116
  })),
1101
1117
  [API_FIELD_CTX]: options[API_FIELD_CTX] || "ui",
1102
1118
  ...turnstileToken ? { [API_FIELD_TURNSTILE]: turnstileToken } : {}