@tolgee/core 2.5.1 → 2.8.2

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 (120) hide show
  1. package/README.md +2 -1
  2. package/dist/tolgee.cjs.js +156 -100
  3. package/dist/tolgee.cjs.js.map +1 -1
  4. package/dist/tolgee.cjs.min.js +1 -1
  5. package/dist/tolgee.cjs.min.js.map +1 -1
  6. package/dist/tolgee.esm.js +1 -1
  7. package/dist/tolgee.esm.js.map +1 -1
  8. package/dist/tolgee.umd.js +156 -100
  9. package/dist/tolgee.umd.js.map +1 -1
  10. package/dist/tolgee.umd.min.js +1 -1
  11. package/dist/tolgee.umd.min.js.map +1 -1
  12. package/lib/Observer.test.d.ts +2 -0
  13. package/lib/Observer.test.js +190 -0
  14. package/lib/Observer.test.js.map +1 -0
  15. package/lib/Properties.d.ts +1 -0
  16. package/lib/Properties.js.map +1 -1
  17. package/lib/Properties.test.d.ts +1 -0
  18. package/lib/Properties.test.js +77 -0
  19. package/lib/Properties.test.js.map +1 -0
  20. package/lib/Tolgee.d.ts +1 -1
  21. package/lib/Tolgee.js +11 -11
  22. package/lib/Tolgee.js.map +1 -1
  23. package/lib/Tolgee.test.d.ts +1 -0
  24. package/lib/Tolgee.test.js +482 -0
  25. package/lib/Tolgee.test.js.map +1 -0
  26. package/lib/TolgeeConfig.d.ts +1 -1
  27. package/lib/TolgeeConfig.test.d.ts +1 -0
  28. package/lib/TolgeeConfig.test.js +18 -0
  29. package/lib/TolgeeConfig.test.js.map +1 -0
  30. package/lib/__testFixtures/classMock.d.ts +3 -0
  31. package/lib/__testFixtures/classMock.js +8 -0
  32. package/lib/__testFixtures/classMock.js.map +1 -0
  33. package/lib/__testFixtures/createElement.d.ts +2 -0
  34. package/lib/__testFixtures/createElement.js +58 -0
  35. package/lib/__testFixtures/createElement.js.map +1 -0
  36. package/lib/__testFixtures/createTestDom.d.ts +9 -0
  37. package/lib/__testFixtures/createTestDom.js +18 -0
  38. package/lib/__testFixtures/createTestDom.js.map +1 -0
  39. package/lib/__testFixtures/mocked.d.ts +20 -0
  40. package/lib/__testFixtures/mocked.js +24 -0
  41. package/lib/__testFixtures/mocked.js.map +1 -0
  42. package/lib/__testFixtures/setupAfterEnv.d.ts +8 -0
  43. package/lib/__testFixtures/setupAfterEnv.js +23 -0
  44. package/lib/__testFixtures/setupAfterEnv.js.map +1 -0
  45. package/lib/handlers/AbstractHandler.js +1 -1
  46. package/lib/handlers/AbstractHandler.js.map +1 -1
  47. package/lib/handlers/AttributeHandler.js +1 -1
  48. package/lib/handlers/AttributeHandler.js.map +1 -1
  49. package/lib/handlers/AttributeHandler.test.d.ts +1 -0
  50. package/lib/handlers/AttributeHandler.test.js +177 -0
  51. package/lib/handlers/AttributeHandler.test.js.map +1 -0
  52. package/lib/handlers/CoreHandler.test.d.ts +1 -0
  53. package/lib/handlers/CoreHandler.test.js +148 -0
  54. package/lib/handlers/CoreHandler.test.js.map +1 -0
  55. package/lib/handlers/TextHandler.js +1 -1
  56. package/lib/handlers/TextHandler.js.map +1 -1
  57. package/lib/handlers/TextHandler.test.d.ts +1 -0
  58. package/lib/handlers/TextHandler.test.js +270 -0
  59. package/lib/handlers/TextHandler.test.js.map +1 -0
  60. package/lib/handlers/WrappedHandler.js +1 -1
  61. package/lib/handlers/WrappedHandler.js.map +1 -1
  62. package/lib/helpers/NodeHelper.d.ts +1 -1
  63. package/lib/helpers/NodeHelper.js +19 -18
  64. package/lib/helpers/NodeHelper.js.map +1 -1
  65. package/lib/helpers/TextHelper.test.d.ts +1 -0
  66. package/lib/helpers/TextHelper.test.js +107 -0
  67. package/lib/helpers/TextHelper.test.js.map +1 -0
  68. package/lib/highlighter/HighlightFunctionsInitializer.test.d.ts +1 -0
  69. package/lib/highlighter/HighlightFunctionsInitializer.test.js +81 -0
  70. package/lib/highlighter/HighlightFunctionsInitializer.test.js.map +1 -0
  71. package/lib/highlighter/MouseEventHandler.js +4 -2
  72. package/lib/highlighter/MouseEventHandler.js.map +1 -1
  73. package/lib/highlighter/MouseEventHandler.test.d.ts +1 -0
  74. package/lib/highlighter/MouseEventHandler.test.js +215 -0
  75. package/lib/highlighter/MouseEventHandler.test.js.map +1 -0
  76. package/lib/highlighter/TranslationHighlighter.d.ts +2 -2
  77. package/lib/highlighter/TranslationHighlighter.js +89 -28
  78. package/lib/highlighter/TranslationHighlighter.js.map +1 -1
  79. package/lib/highlighter/TranslationHighlighter.test.d.ts +1 -0
  80. package/lib/highlighter/TranslationHighlighter.test.js +287 -0
  81. package/lib/highlighter/TranslationHighlighter.test.js.map +1 -0
  82. package/lib/services/ApiHttpService.js +1 -1
  83. package/lib/services/ApiHttpService.js.map +1 -1
  84. package/lib/services/CoreService.d.ts +3 -1
  85. package/lib/services/CoreService.js +2 -3
  86. package/lib/services/CoreService.js.map +1 -1
  87. package/lib/services/CoreService.test.d.ts +1 -0
  88. package/lib/services/CoreService.test.js +178 -0
  89. package/lib/services/CoreService.test.js.map +1 -0
  90. package/lib/services/DependencyStore.test.d.ts +1 -0
  91. package/lib/services/DependencyStore.test.js +67 -0
  92. package/lib/services/DependencyStore.test.js.map +1 -0
  93. package/lib/services/ElementRegistrar.js +13 -9
  94. package/lib/services/ElementRegistrar.js.map +1 -1
  95. package/lib/services/ElementRegistrar.test.d.ts +1 -0
  96. package/lib/services/ElementRegistrar.test.js +215 -0
  97. package/lib/services/ElementRegistrar.test.js.map +1 -0
  98. package/lib/services/ScreenshotService.js +1 -1
  99. package/lib/services/ScreenshotService.js.map +1 -1
  100. package/lib/services/TextService.js +5 -5
  101. package/lib/services/TextService.js.map +1 -1
  102. package/lib/services/TextService.test.d.ts +1 -0
  103. package/lib/services/TextService.test.js +430 -0
  104. package/lib/services/TextService.test.js.map +1 -0
  105. package/lib/services/TranslationService.js +7 -7
  106. package/lib/services/TranslationService.js.map +1 -1
  107. package/lib/services/TranslationService.test.d.ts +1 -0
  108. package/lib/services/TranslationService.test.js +649 -0
  109. package/lib/services/TranslationService.test.js.map +1 -0
  110. package/lib/services/__mocks__/CoreService.d.ts +2 -0
  111. package/lib/services/__mocks__/CoreService.js +49 -0
  112. package/lib/services/__mocks__/CoreService.js.map +1 -0
  113. package/lib/toolsManager/Messages.test.d.ts +1 -0
  114. package/lib/toolsManager/Messages.test.js +114 -0
  115. package/lib/toolsManager/Messages.test.js.map +1 -0
  116. package/lib/toolsManager/PluginManager.test.d.ts +1 -0
  117. package/lib/toolsManager/PluginManager.test.js +120 -0
  118. package/lib/toolsManager/PluginManager.test.js.map +1 -0
  119. package/lib/types.d.ts +11 -0
  120. package/package.json +7 -7
package/README.md CHANGED
@@ -1,10 +1,11 @@
1
+ # Tolgee core library
1
2
  ![test workflow](https://github.com/tolgee/tolgee-js/actions/workflows/test.yml/badge.svg)
2
3
  ![@tolgee/core version](https://img.shields.io/npm/v/@tolgee/core?label=%40tolgee%2Fcore)
3
4
  ![types typescript](https://img.shields.io/badge/Types-Typescript-blue)
4
5
  [![twitter](https://img.shields.io/twitter/follow/Tolgee_i18n?style=social)](https://twitter.com/Tolgee_i18n)
5
6
  [![github stars](https://img.shields.io/github/stars/tolgee/tolgee-js?style=social)](https://github.com/tolgee/tolgee-js)
6
7
 
7
- # Tolgee core library
8
+
8
9
 
9
10
  [<img src="https://raw.githubusercontent.com/tolgee/documentation/main/tolgee_logo_text.svg" alt="Tolgee" width="200" />](https://tolgee.io)
10
11
 
@@ -129,23 +129,6 @@ var TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE = 'data-tolgee-key-only';
129
129
  var NodeHelper = /** @class */ (function () {
130
130
  function NodeHelper() {
131
131
  }
132
- NodeHelper.evaluateGenerator = function (expression, targetNode) {
133
- var node, evaluated;
134
- return __generator(this, function (_a) {
135
- switch (_a.label) {
136
- case 0:
137
- evaluated = document.evaluate(expression, targetNode, undefined, XPathResult.ANY_TYPE);
138
- _a.label = 1;
139
- case 1:
140
- if (!((node = evaluated.iterateNext()) !== null)) return [3 /*break*/, 3];
141
- return [4 /*yield*/, node];
142
- case 2:
143
- _a.sent();
144
- return [3 /*break*/, 1];
145
- case 3: return [2 /*return*/];
146
- }
147
- });
148
- };
149
132
  NodeHelper.evaluate = function () {
150
133
  var args = [];
151
134
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -195,13 +178,31 @@ var NodeHelper = /** @class */ (function () {
195
178
  return true;
196
179
  }
197
180
  if (node instanceof Attr) {
198
- var ownerContainsAttr = Object.values(node.ownerElement.attributes).indexOf(node) > -1;
181
+ var ownerContainsAttr = node.ownerElement &&
182
+ Object.values(node.ownerElement.attributes).indexOf(node) > -1;
199
183
  if (descendant.contains(node.ownerElement) && ownerContainsAttr) {
200
184
  return true;
201
185
  }
202
186
  }
203
187
  return false;
204
188
  };
189
+ NodeHelper.evaluateGenerator = function (expression, targetNode) {
190
+ var node, evaluated;
191
+ return __generator(this, function (_a) {
192
+ switch (_a.label) {
193
+ case 0:
194
+ evaluated = document.evaluate(expression, targetNode, undefined, XPathResult.ANY_TYPE);
195
+ _a.label = 1;
196
+ case 1:
197
+ if (!((node = evaluated.iterateNext()) !== null)) return [3 /*break*/, 3];
198
+ return [4 /*yield*/, node];
199
+ case 2:
200
+ _a.sent();
201
+ return [3 /*break*/, 1];
202
+ case 3: return [2 /*return*/];
203
+ }
204
+ });
205
+ };
205
206
  return NodeHelper;
206
207
  }());
207
208
 
@@ -521,7 +522,7 @@ var ApiHttpService = /** @class */ (function () {
521
522
  };
522
523
  ApiHttpService.prototype.getUrl = function (path) {
523
524
  var querySeparator = path.indexOf('?') < 0 ? '?' : '&';
524
- return this.properties.config.apiUrl + "/" + path + querySeparator + "ak=" + this.properties.config.apiKey;
525
+ return "".concat(this.properties.config.apiUrl, "/").concat(path).concat(querySeparator, "ak=").concat(this.properties.config.apiKey);
525
526
  };
526
527
  return ApiHttpService;
527
528
  }());
@@ -580,9 +581,9 @@ var TranslationService = /** @class */ (function () {
580
581
  _e.trys.push([1, 3, , 7]);
581
582
  languagesArray = __spreadArray([], __read(languages), false);
582
583
  languagesQuery = languagesArray
583
- .map(function (l) { return "languages=" + l; })
584
+ .map(function (l) { return "languages=".concat(l); })
584
585
  .join('&');
585
- return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations?" + languagesQuery + "&filterKeyName=" + encodeURIComponent(key))];
586
+ return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations?".concat(languagesQuery, "&filterKeyName=").concat(encodeURIComponent(key)))];
586
587
  case 2:
587
588
  data = _e.sent();
588
589
  translationData_1 = languagesArray.reduce(function (acc, curr) {
@@ -707,7 +708,7 @@ var TranslationService = /** @class */ (function () {
707
708
  switch (_c.label) {
708
709
  case 0:
709
710
  this.coreService.checkScope('translations.edit');
710
- return [4 /*yield*/, this.apiHttpService.postJson("v2/projects/keys/" + id + "/complex-update", __assign(__assign({}, data), { screenshotUploadedImageIds: ((_a = data.screenshotUploadedImageIds) === null || _a === void 0 ? void 0 : _a.length)
711
+ return [4 /*yield*/, this.apiHttpService.postJson("v2/projects/keys/".concat(id, "/complex-update"), __assign(__assign({}, data), { screenshotUploadedImageIds: ((_a = data.screenshotUploadedImageIds) === null || _a === void 0 ? void 0 : _a.length)
711
712
  ? data.screenshotUploadedImageIds
712
713
  : undefined, screenshotIdsToDelete: ((_b = data.screenshotIdsToDelete) === null || _b === void 0 ? void 0 : _b.length)
713
714
  ? data.screenshotIdsToDelete
@@ -865,7 +866,7 @@ var TranslationService = /** @class */ (function () {
865
866
  }
866
867
  _c.label = 3;
867
868
  case 3:
868
- url = "" + (this.properties.config.filesUrlPrefix || '/') + language + ".json";
869
+ url = "".concat(this.properties.config.filesUrlPrefix || '/').concat(language, ".json");
869
870
  _c.label = 4;
870
871
  case 4:
871
872
  _c.trys.push([4, 10, , 11]);
@@ -890,14 +891,14 @@ var TranslationService = /** @class */ (function () {
890
891
  case 8:
891
892
  _c.sent();
892
893
  // eslint-disable-next-line no-console
893
- console.error("Error parsing json retrieved from " + url + ".");
894
+ console.error("Error parsing json retrieved from ".concat(url, "."));
894
895
  this.setEmptyLanguageData(language);
895
896
  return [3 /*break*/, 9];
896
897
  case 9: return [3 /*break*/, 11];
897
898
  case 10:
898
899
  _c.sent();
899
900
  // eslint-disable-next-line no-console
900
- console.error("Error fetching localization data from " + url + ".");
901
+ console.error("Error fetching localization data from ".concat(url, "."));
901
902
  this.setEmptyLanguageData(language);
902
903
  return [3 /*break*/, 11];
903
904
  case 11: return [2 /*return*/];
@@ -915,7 +916,7 @@ var TranslationService = /** @class */ (function () {
915
916
  _a.label = 1;
916
917
  case 1:
917
918
  _a.trys.push([1, 3, , 4]);
918
- return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations/" + language)];
919
+ return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations/".concat(language))];
919
920
  case 2:
920
921
  data = _a.sent();
921
922
  this.setLanguageData(language, data[language] || {});
@@ -1595,8 +1596,8 @@ function parseNumberSkeleton(tokens) {
1595
1596
  }
1596
1597
 
1597
1598
  var _a;
1598
- var SPACE_SEPARATOR_START_REGEX = new RegExp("^" + SPACE_SEPARATOR_REGEX.source + "*");
1599
- var SPACE_SEPARATOR_END_REGEX = new RegExp(SPACE_SEPARATOR_REGEX.source + "*$");
1599
+ var SPACE_SEPARATOR_START_REGEX = new RegExp("^".concat(SPACE_SEPARATOR_REGEX.source, "*"));
1600
+ var SPACE_SEPARATOR_END_REGEX = new RegExp("".concat(SPACE_SEPARATOR_REGEX.source, "*$"));
1600
1601
  function createLocation(start, end) {
1601
1602
  return { start: start, end: end };
1602
1603
  }
@@ -1843,7 +1844,7 @@ var Parser = /** @class */ (function () {
1843
1844
  return {
1844
1845
  val: {
1845
1846
  type: TYPE.literal,
1846
- value: "<" + tagName + "/>",
1847
+ value: "<".concat(tagName, "/>"),
1847
1848
  location: createLocation(startPosition, this.clonePosition()),
1848
1849
  },
1849
1850
  err: null,
@@ -2448,7 +2449,7 @@ var Parser = /** @class */ (function () {
2448
2449
  }
2449
2450
  var code = codePointAt(this.message, offset);
2450
2451
  if (code === undefined) {
2451
- throw Error("Offset " + offset + " is at invalid UTF-16 code unit boundary");
2452
+ throw Error("Offset ".concat(offset, " is at invalid UTF-16 code unit boundary"));
2452
2453
  }
2453
2454
  return code;
2454
2455
  };
@@ -2516,7 +2517,7 @@ var Parser = /** @class */ (function () {
2516
2517
  */
2517
2518
  Parser.prototype.bumpTo = function (targetOffset) {
2518
2519
  if (this.offset() > targetOffset) {
2519
- throw Error("targetOffset " + targetOffset + " must be greater than or equal to the current offset " + this.offset());
2520
+ throw Error("targetOffset ".concat(targetOffset, " must be greater than or equal to the current offset ").concat(this.offset()));
2520
2521
  }
2521
2522
  targetOffset = Math.min(targetOffset, this.message.length);
2522
2523
  while (true) {
@@ -2525,7 +2526,7 @@ var Parser = /** @class */ (function () {
2525
2526
  break;
2526
2527
  }
2527
2528
  if (offset > targetOffset) {
2528
- throw Error("targetOffset " + targetOffset + " is at invalid UTF-16 code unit boundary");
2529
+ throw Error("targetOffset ".concat(targetOffset, " is at invalid UTF-16 code unit boundary"));
2529
2530
  }
2530
2531
  this.bump();
2531
2532
  if (this.isEOF()) {
@@ -2991,28 +2992,28 @@ var FormatError = /** @class */ (function (_super) {
2991
2992
  return _this;
2992
2993
  }
2993
2994
  FormatError.prototype.toString = function () {
2994
- return "[formatjs Error: " + this.code + "] " + this.message;
2995
+ return "[formatjs Error: ".concat(this.code, "] ").concat(this.message);
2995
2996
  };
2996
2997
  return FormatError;
2997
2998
  }(Error));
2998
2999
  var InvalidValueError = /** @class */ (function (_super) {
2999
3000
  __extends(InvalidValueError, _super);
3000
3001
  function InvalidValueError(variableId, value, options, originalMessage) {
3001
- return _super.call(this, "Invalid values for \"" + variableId + "\": \"" + value + "\". Options are \"" + Object.keys(options).join('", "') + "\"", ErrorCode.INVALID_VALUE, originalMessage) || this;
3002
+ return _super.call(this, "Invalid values for \"".concat(variableId, "\": \"").concat(value, "\". Options are \"").concat(Object.keys(options).join('", "'), "\""), ErrorCode.INVALID_VALUE, originalMessage) || this;
3002
3003
  }
3003
3004
  return InvalidValueError;
3004
3005
  }(FormatError));
3005
3006
  var InvalidValueTypeError = /** @class */ (function (_super) {
3006
3007
  __extends(InvalidValueTypeError, _super);
3007
3008
  function InvalidValueTypeError(value, type, originalMessage) {
3008
- return _super.call(this, "Value for \"" + value + "\" must be of type " + type, ErrorCode.INVALID_VALUE, originalMessage) || this;
3009
+ return _super.call(this, "Value for \"".concat(value, "\" must be of type ").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;
3009
3010
  }
3010
3011
  return InvalidValueTypeError;
3011
3012
  }(FormatError));
3012
3013
  var MissingValueError = /** @class */ (function (_super) {
3013
3014
  __extends(MissingValueError, _super);
3014
3015
  function MissingValueError(variableId, originalMessage) {
3015
- return _super.call(this, "The intl string context variable \"" + variableId + "\" was not provided to the string \"" + originalMessage + "\"", ErrorCode.MISSING_VALUE, originalMessage) || this;
3016
+ return _super.call(this, "The intl string context variable \"".concat(variableId, "\" was not provided to the string \"").concat(originalMessage, "\""), ErrorCode.MISSING_VALUE, originalMessage) || this;
3016
3017
  }
3017
3018
  return MissingValueError;
3018
3019
  }(FormatError));
@@ -3173,7 +3174,7 @@ originalMessage) {
3173
3174
  continue;
3174
3175
  }
3175
3176
  if (isPluralElement(el)) {
3176
- var opt = el.options["=" + value];
3177
+ var opt = el.options["=".concat(value)];
3177
3178
  if (!opt) {
3178
3179
  if (!Intl.PluralRules) {
3179
3180
  throw new FormatError("Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n", ErrorCode.MISSING_INTL_API, originalMessage);
@@ -3457,7 +3458,7 @@ var TextService = /** @class */ (function () {
3457
3458
  get: function () {
3458
3459
  var escapedPrefix = this.escapeForRegExp(this.properties.config.inputPrefix);
3459
3460
  var escapedSuffix = this.escapeForRegExp(this.properties.config.inputSuffix);
3460
- return "(\\\\?)(" + escapedPrefix + "(.*?)" + escapedSuffix + ")";
3461
+ return "(\\\\?)(".concat(escapedPrefix, "(.*?)").concat(escapedSuffix, ")");
3461
3462
  },
3462
3463
  enumerable: false,
3463
3464
  configurable: true
@@ -3617,12 +3618,12 @@ var TextService = /** @class */ (function () {
3617
3618
  var paramString = Object.entries(params)
3618
3619
  .map(function (_a) {
3619
3620
  var _b = __read(_a, 2), name = _b[0], value = _b[1];
3620
- return _this.escapeParam(name) + ":" + _this.escapeParam(value);
3621
+ return "".concat(_this.escapeParam(name), ":").concat(_this.escapeParam(value));
3621
3622
  })
3622
3623
  .join(',');
3623
- paramString = paramString.length ? ":" + paramString : '';
3624
- var defaultString = defaultValue !== undefined ? "," + this.escapeParam(defaultValue) : '';
3625
- return "" + this.properties.config.inputPrefix + this.escapeParam(key) + defaultString + paramString + this.properties.config.inputSuffix;
3624
+ paramString = paramString.length ? ":".concat(paramString) : '';
3625
+ var defaultString = defaultValue !== undefined ? ",".concat(this.escapeParam(defaultValue)) : '';
3626
+ return "".concat(this.properties.config.inputPrefix).concat(this.escapeParam(key)).concat(defaultString).concat(paramString).concat(this.properties.config.inputSuffix);
3626
3627
  };
3627
3628
  TextService.prototype.getTranslatedWithMetadata = function (text) {
3628
3629
  return __awaiter(this, void 0, void 0, function () {
@@ -3684,7 +3685,7 @@ var MouseEventHandler = /** @class */ (function () {
3684
3685
  }
3685
3686
  };
3686
3687
  element.addEventListener('mouseover', onMouseOver);
3687
- element.addEventListener('click', onClick);
3688
+ element.addEventListener('click', onClick, { capture: true });
3688
3689
  var onMouseDownOrUp = function (e) {
3689
3690
  if (_this.areKeysDown()) {
3690
3691
  e.stopPropagation();
@@ -3698,7 +3699,7 @@ var MouseEventHandler = /** @class */ (function () {
3698
3699
  element.removeEventListener('mousedown', onMouseDownOrUp);
3699
3700
  element.removeEventListener('mouseup', onMouseDownOrUp);
3700
3701
  element.removeEventListener('mouseover', onMouseOver);
3701
- element.removeEventListener('click', onClick);
3702
+ element.removeEventListener('click', onClick, { capture: true });
3702
3703
  element.removeEventListener('mouseout', onMouseOut);
3703
3704
  };
3704
3705
  };
@@ -3719,11 +3720,13 @@ var MouseEventHandler = /** @class */ (function () {
3719
3720
  }
3720
3721
  };
3721
3722
  MouseEventHandler.prototype.onMouseOut = function (element) {
3723
+ element._tolgee.preventClean = false;
3722
3724
  this.mouseOn.delete(element);
3723
3725
  this.mouseOnChanged.emit(this.getMouseOn());
3724
3726
  };
3725
3727
  MouseEventHandler.prototype.onMouseOver = function (element) {
3726
3728
  this.filterMouseOn();
3729
+ element._tolgee.preventClean = true;
3727
3730
  this.mouseOn.delete(element); //to get in to last place
3728
3731
  this.mouseOn.add(element);
3729
3732
  this.mouseOnChanged.emit(this.getMouseOn());
@@ -3785,40 +3788,26 @@ var TranslationHighlighter = /** @class */ (function () {
3785
3788
  var _this = this;
3786
3789
  this.dependencies = dependencies;
3787
3790
  this.translationEdit = function (e, element) { return __awaiter(_this, void 0, void 0, function () {
3788
- var key;
3791
+ var renderer, key;
3789
3792
  return __generator(this, function (_a) {
3790
3793
  switch (_a.label) {
3791
- case 0:
3792
- if (!(typeof this.renderer === 'object')) return [3 /*break*/, 2];
3793
- return [4 /*yield*/, this.getKeyAndDefault(e, element)];
3794
+ case 0: return [4 /*yield*/, this.getRenderer()];
3794
3795
  case 1:
3796
+ renderer = _a.sent();
3797
+ if (!(typeof renderer === 'object')) return [3 /*break*/, 3];
3798
+ return [4 /*yield*/, this.getKeyAndDefault(e, element)];
3799
+ case 2:
3795
3800
  key = _a.sent();
3796
3801
  if (key) {
3797
- this.renderer.renderViewer(key.key, key.defaultValue);
3802
+ renderer.renderViewer(key.key, key.defaultValue);
3798
3803
  return [2 /*return*/];
3799
3804
  }
3800
3805
  return [2 /*return*/];
3801
- case 2:
3802
- // eslint-disable-next-line no-console
3803
- console.warn('Tolgee UI is not provided. To translate interactively provide tolgee ui constructor to "ui" configuration property. ' +
3804
- 'To disable highlighting use production mode.');
3805
- return [2 /*return*/];
3806
+ case 3: return [2 /*return*/];
3806
3807
  }
3807
3808
  });
3808
3809
  }); };
3809
3810
  }
3810
- Object.defineProperty(TranslationHighlighter.prototype, "renderer", {
3811
- get: function () {
3812
- if (this._renderer === undefined) {
3813
- if (typeof this.dependencies.properties.config.ui === 'function') {
3814
- this._renderer = new this.dependencies.properties.config.ui(this.dependencies);
3815
- }
3816
- }
3817
- return this._renderer;
3818
- },
3819
- enumerable: false,
3820
- configurable: true
3821
- });
3822
3811
  TranslationHighlighter.getKeyOptions = function (node) {
3823
3812
  var nodes = Array.from(node._tolgee.nodes);
3824
3813
  return nodes.reduce(function (acc, curr) { return __spreadArray(__spreadArray([], __read(acc), false), __read(curr._tolgee.keys.map(function (k) { return ({
@@ -3836,9 +3825,70 @@ var TranslationHighlighter = /** @class */ (function () {
3836
3825
  }
3837
3826
  }); }); });
3838
3827
  };
3828
+ TranslationHighlighter.prototype.getRenderer = function () {
3829
+ return __awaiter(this, void 0, void 0, function () {
3830
+ var possibleProviders, possibleProviders_1, possibleProviders_1_1, possibleProvider, constructorProvider, constructor, constructor, e_2_1;
3831
+ var e_2, _a;
3832
+ return __generator(this, function (_b) {
3833
+ switch (_b.label) {
3834
+ case 0:
3835
+ if (!(this._renderer === undefined)) return [3 /*break*/, 11];
3836
+ possibleProviders = [
3837
+ this.dependencies.properties.config.ui,
3838
+ window['@tolgee/ui'],
3839
+ ];
3840
+ _b.label = 1;
3841
+ case 1:
3842
+ _b.trys.push([1, 8, 9, 10]);
3843
+ possibleProviders_1 = __values(possibleProviders), possibleProviders_1_1 = possibleProviders_1.next();
3844
+ _b.label = 2;
3845
+ case 2:
3846
+ if (!!possibleProviders_1_1.done) return [3 /*break*/, 7];
3847
+ possibleProvider = possibleProviders_1_1.value;
3848
+ if (!(typeof possibleProvider === 'function')) return [3 /*break*/, 6];
3849
+ _b.label = 3;
3850
+ case 3:
3851
+ _b.trys.push([3, 5, , 6]);
3852
+ constructorProvider = possibleProvider;
3853
+ return [4 /*yield*/, constructorProvider()];
3854
+ case 4:
3855
+ constructor = _b.sent();
3856
+ this._renderer = new constructor(this.dependencies);
3857
+ return [3 /*break*/, 6];
3858
+ case 5:
3859
+ _b.sent();
3860
+ constructor = possibleProvider;
3861
+ this._renderer = new constructor(this.dependencies);
3862
+ return [3 /*break*/, 6];
3863
+ case 6:
3864
+ possibleProviders_1_1 = possibleProviders_1.next();
3865
+ return [3 /*break*/, 2];
3866
+ case 7: return [3 /*break*/, 10];
3867
+ case 8:
3868
+ e_2_1 = _b.sent();
3869
+ e_2 = { error: e_2_1 };
3870
+ return [3 /*break*/, 10];
3871
+ case 9:
3872
+ try {
3873
+ if (possibleProviders_1_1 && !possibleProviders_1_1.done && (_a = possibleProviders_1.return)) _a.call(possibleProviders_1);
3874
+ }
3875
+ finally { if (e_2) throw e_2.error; }
3876
+ return [7 /*endfinally*/];
3877
+ case 10:
3878
+ if (this._renderer === undefined) {
3879
+ // eslint-disable-next-line no-console
3880
+ console.warn('Tolgee UI is not provided. To translate interactively provide tolgee ui constructor to "ui" configuration property. ' +
3881
+ 'To disable highlighting use production mode.');
3882
+ }
3883
+ _b.label = 11;
3884
+ case 11: return [2 /*return*/, this._renderer];
3885
+ }
3886
+ });
3887
+ });
3888
+ };
3839
3889
  TranslationHighlighter.prototype.getKeyAndDefault = function (mouseEvent, element) {
3840
3890
  return __awaiter(this, void 0, void 0, function () {
3841
- var keysWithDefaults, keySet, selectedKey_1, found;
3891
+ var keysWithDefaults, keySet, renderer, selectedKey_1, found;
3842
3892
  return __generator(this, function (_a) {
3843
3893
  switch (_a.label) {
3844
3894
  case 0:
@@ -3850,19 +3900,22 @@ var TranslationHighlighter = /** @class */ (function () {
3850
3900
  }
3851
3901
  keysWithDefaults = TranslationHighlighter.getKeyOptions(element);
3852
3902
  keySet = new Set(keysWithDefaults.map(function (keyWithDefault) { return keyWithDefault.key; }));
3853
- if (!(keySet.size > 1)) return [3 /*break*/, 2];
3854
- return [4 /*yield*/, this.renderer.getKey({
3903
+ if (!(keySet.size > 1)) return [3 /*break*/, 3];
3904
+ return [4 /*yield*/, this.getRenderer()];
3905
+ case 1:
3906
+ renderer = _a.sent();
3907
+ return [4 /*yield*/, renderer.getKey({
3855
3908
  keys: keySet,
3856
3909
  openEvent: mouseEvent,
3857
3910
  })];
3858
- case 1:
3911
+ case 2:
3859
3912
  selectedKey_1 = _a.sent();
3860
3913
  found = keysWithDefaults.find(function (kwd) { return kwd.key === selectedKey_1; });
3861
3914
  if (found) {
3862
3915
  return [2 /*return*/, found];
3863
3916
  }
3864
- _a.label = 2;
3865
- case 2:
3917
+ _a.label = 3;
3918
+ case 3:
3866
3919
  if (keySet.size === 1) {
3867
3920
  return [2 /*return*/, keysWithDefaults[0]];
3868
3921
  }
@@ -3901,10 +3954,12 @@ var ElementRegistrar = /** @class */ (function () {
3901
3954
  try {
3902
3955
  for (var _b = __values(this.registeredElements), _c = _b.next(); !_c.done; _c = _b.next()) {
3903
3956
  var element = _c.value;
3904
- this.cleanElementInactiveNodes(element);
3905
- if (element._tolgee.nodes.size === 0 &&
3906
- !element._tolgee.wrappedWithElementOnlyKey) {
3907
- this.cleanElement(element);
3957
+ if (!element._tolgee.preventClean) {
3958
+ this.cleanElementInactiveNodes(element);
3959
+ if (element._tolgee.nodes.size === 0 &&
3960
+ !element._tolgee.wrappedWithElementOnlyKey) {
3961
+ this.cleanElement(element);
3962
+ }
3908
3963
  }
3909
3964
  }
3910
3965
  }
@@ -3976,12 +4031,14 @@ var ElementRegistrar = /** @class */ (function () {
3976
4031
  }
3977
4032
  };
3978
4033
  ElementRegistrar.prototype.cleanElement = function (element) {
3979
- if (typeof element._tolgee.removeAllEventListeners === 'function') {
3980
- element._tolgee.removeAllEventListeners();
4034
+ if (!element._tolgee.preventClean) {
4035
+ if (typeof element._tolgee.removeAllEventListeners === 'function') {
4036
+ element._tolgee.removeAllEventListeners();
4037
+ }
4038
+ element.removeAttribute(TOLGEE_ATTRIBUTE_NAME);
4039
+ delete element._tolgee;
4040
+ this.registeredElements.delete(element);
3981
4041
  }
3982
- element.removeAttribute(TOLGEE_ATTRIBUTE_NAME);
3983
- delete element._tolgee;
3984
- this.registeredElements.delete(element);
3985
4042
  };
3986
4043
  ElementRegistrar.prototype.getActiveNodes = function (element) {
3987
4044
  var _a, _b, node, e_5_1;
@@ -4045,7 +4102,7 @@ var AbstractHandler = /** @class */ (function () {
4045
4102
  return nodes.filter(function (n) {
4046
4103
  var e = NodeHelper.closestElement(n);
4047
4104
  return (restrictedElements.indexOf(e.tagName.toLowerCase()) === -1 &&
4048
- e.closest("[" + RESTRICTED_ASCENDANT_ATTRIBUTE + "=\"true\"]") === null);
4105
+ e.closest("[".concat(RESTRICTED_ASCENDANT_ATTRIBUTE, "=\"true\"]")) === null);
4049
4106
  });
4050
4107
  };
4051
4108
  AbstractHandler.prototype.handleNodes = function (nodes) {
@@ -4171,7 +4228,7 @@ var TextHandler = /** @class */ (function (_super) {
4171
4228
  case 0:
4172
4229
  inputPrefix = this.properties.config.inputPrefix;
4173
4230
  inputSuffix = this.properties.config.inputSuffix;
4174
- xPath = "./descendant-or-self::text()[contains(., '" + inputPrefix + "') and contains(., '" + inputSuffix + "')]";
4231
+ xPath = "./descendant-or-self::text()[contains(., '".concat(inputPrefix, "') and contains(., '").concat(inputSuffix, "')]");
4175
4232
  nodes = NodeHelper.evaluate(xPath, node);
4176
4233
  filtered = this.filterRestricted(nodes);
4177
4234
  return [4 /*yield*/, this.handleNodes(filtered)];
@@ -4220,7 +4277,7 @@ var AttributeHandler = /** @class */ (function (_super) {
4220
4277
  case 4:
4221
4278
  if (!!attributes_1_1.done) return [3 /*break*/, 7];
4222
4279
  attribute = attributes_1_1.value;
4223
- expression = "descendant-or-self::" + tag + "/@" + attribute + "[contains(., '" + inputPrefix + "') and contains(., '" + inputSuffix + "')]";
4280
+ expression = "descendant-or-self::".concat(tag, "/@").concat(attribute, "[contains(., '").concat(inputPrefix, "') and contains(., '").concat(inputSuffix, "')]");
4224
4281
  nodes = NodeHelper.evaluate(expression, node);
4225
4282
  return [4 /*yield*/, this.handleNodes(nodes)];
4226
4283
  case 5:
@@ -4490,7 +4547,7 @@ var CoreService = /** @class */ (function () {
4490
4547
  });
4491
4548
  });
4492
4549
  };
4493
- CoreService.prototype.getScopes = function () {
4550
+ CoreService.prototype.getApiKeyDetails = function () {
4494
4551
  return __awaiter(this, void 0, void 0, function () {
4495
4552
  var e_1;
4496
4553
  return __generator(this, function (_a) {
@@ -4498,8 +4555,7 @@ var CoreService = /** @class */ (function () {
4498
4555
  case 0:
4499
4556
  _a.trys.push([0, 2, , 3]);
4500
4557
  return [4 /*yield*/, this.apiHttpService.fetchJson("v2/api-keys/current")];
4501
- case 1: return [2 /*return*/, (_a.sent())
4502
- .scopes];
4558
+ case 1: return [2 /*return*/, _a.sent()];
4503
4559
  case 2:
4504
4560
  e_1 = _a.sent();
4505
4561
  // eslint-disable-next-line no-console
@@ -4539,7 +4595,7 @@ var WrappedHandler = /** @class */ (function (_super) {
4539
4595
  var xPath, nodes, filtered;
4540
4596
  var _this = this;
4541
4597
  return __generator(this, function (_a) {
4542
- xPath = "./descendant-or-self::*[@" + TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE + "]";
4598
+ xPath = "./descendant-or-self::*[@".concat(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE, "]");
4543
4599
  nodes = NodeHelper.evaluate(xPath, node);
4544
4600
  filtered = this.filterRestricted(nodes);
4545
4601
  filtered.forEach(function (element) {
@@ -4753,7 +4809,7 @@ var ScreenshotService = /** @class */ (function () {
4753
4809
  ScreenshotService.prototype.deleteImages = function (ids) {
4754
4810
  return __awaiter(this, void 0, void 0, function () {
4755
4811
  return __generator(this, function (_a) {
4756
- return [2 /*return*/, this.apiHttpService.post("v2/image-upload/" + ids.join(','), undefined, {
4812
+ return [2 /*return*/, this.apiHttpService.post("v2/image-upload/".concat(ids.join(',')), undefined, {
4757
4813
  method: 'delete',
4758
4814
  })];
4759
4815
  });
@@ -4892,7 +4948,7 @@ var Tolgee = /** @class */ (function () {
4892
4948
  switch (_a.label) {
4893
4949
  case 0:
4894
4950
  if (!(this.properties.config.mode === 'development')) return [3 /*break*/, 2];
4895
- return [4 /*yield*/, this.loadScopes()];
4951
+ return [4 /*yield*/, this.loadApiKeyDetails()];
4896
4952
  case 1:
4897
4953
  _a.sent();
4898
4954
  _a.label = 2;
@@ -4947,7 +5003,7 @@ var Tolgee = /** @class */ (function () {
4947
5003
  orEmpty = props.orEmpty;
4948
5004
  }
4949
5005
  if (!(this.properties.config.mode === 'development' && !noWrap)) return [3 /*break*/, 3];
4950
- return [4 /*yield*/, this.loadScopes()];
5006
+ return [4 /*yield*/, this.loadApiKeyDetails()];
4951
5007
  case 1:
4952
5008
  _a.sent();
4953
5009
  return [4 /*yield*/, this.translationService.loadTranslations()];
@@ -4978,19 +5034,19 @@ var Tolgee = /** @class */ (function () {
4978
5034
  }
4979
5035
  return this.dependencyStore.textService.instant(key, params, undefined, orEmpty, defaultValue);
4980
5036
  };
4981
- Tolgee.prototype.loadScopes = function () {
5037
+ Tolgee.prototype.loadApiKeyDetails = function () {
4982
5038
  return __awaiter(this, void 0, void 0, function () {
4983
- var _a;
4984
- return __generator(this, function (_b) {
4985
- switch (_b.label) {
5039
+ var details;
5040
+ return __generator(this, function (_a) {
5041
+ switch (_a.label) {
4986
5042
  case 0:
4987
5043
  if (!(this.properties.scopes === undefined)) return [3 /*break*/, 2];
4988
- _a = this.properties;
4989
- return [4 /*yield*/, this.dependencyStore.coreService.getScopes()];
5044
+ return [4 /*yield*/, this.dependencyStore.coreService.getApiKeyDetails()];
4990
5045
  case 1:
4991
- _a.scopes =
4992
- _b.sent();
4993
- _b.label = 2;
5046
+ details = _a.sent();
5047
+ this.properties.scopes = details.scopes;
5048
+ this.properties.projectId = details.projectId;
5049
+ _a.label = 2;
4994
5050
  case 2: return [2 /*return*/];
4995
5051
  }
4996
5052
  });