@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
@@ -131,23 +131,6 @@
131
131
  var NodeHelper = /** @class */ (function () {
132
132
  function NodeHelper() {
133
133
  }
134
- NodeHelper.evaluateGenerator = function (expression, targetNode) {
135
- var node, evaluated;
136
- return __generator(this, function (_a) {
137
- switch (_a.label) {
138
- case 0:
139
- evaluated = document.evaluate(expression, targetNode, undefined, XPathResult.ANY_TYPE);
140
- _a.label = 1;
141
- case 1:
142
- if (!((node = evaluated.iterateNext()) !== null)) return [3 /*break*/, 3];
143
- return [4 /*yield*/, node];
144
- case 2:
145
- _a.sent();
146
- return [3 /*break*/, 1];
147
- case 3: return [2 /*return*/];
148
- }
149
- });
150
- };
151
134
  NodeHelper.evaluate = function () {
152
135
  var args = [];
153
136
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -197,13 +180,31 @@
197
180
  return true;
198
181
  }
199
182
  if (node instanceof Attr) {
200
- var ownerContainsAttr = Object.values(node.ownerElement.attributes).indexOf(node) > -1;
183
+ var ownerContainsAttr = node.ownerElement &&
184
+ Object.values(node.ownerElement.attributes).indexOf(node) > -1;
201
185
  if (descendant.contains(node.ownerElement) && ownerContainsAttr) {
202
186
  return true;
203
187
  }
204
188
  }
205
189
  return false;
206
190
  };
191
+ NodeHelper.evaluateGenerator = function (expression, targetNode) {
192
+ var node, evaluated;
193
+ return __generator(this, function (_a) {
194
+ switch (_a.label) {
195
+ case 0:
196
+ evaluated = document.evaluate(expression, targetNode, undefined, XPathResult.ANY_TYPE);
197
+ _a.label = 1;
198
+ case 1:
199
+ if (!((node = evaluated.iterateNext()) !== null)) return [3 /*break*/, 3];
200
+ return [4 /*yield*/, node];
201
+ case 2:
202
+ _a.sent();
203
+ return [3 /*break*/, 1];
204
+ case 3: return [2 /*return*/];
205
+ }
206
+ });
207
+ };
207
208
  return NodeHelper;
208
209
  }());
209
210
 
@@ -523,7 +524,7 @@
523
524
  };
524
525
  ApiHttpService.prototype.getUrl = function (path) {
525
526
  var querySeparator = path.indexOf('?') < 0 ? '?' : '&';
526
- return this.properties.config.apiUrl + "/" + path + querySeparator + "ak=" + this.properties.config.apiKey;
527
+ return "".concat(this.properties.config.apiUrl, "/").concat(path).concat(querySeparator, "ak=").concat(this.properties.config.apiKey);
527
528
  };
528
529
  return ApiHttpService;
529
530
  }());
@@ -582,9 +583,9 @@
582
583
  _e.trys.push([1, 3, , 7]);
583
584
  languagesArray = __spreadArray([], __read(languages), false);
584
585
  languagesQuery = languagesArray
585
- .map(function (l) { return "languages=" + l; })
586
+ .map(function (l) { return "languages=".concat(l); })
586
587
  .join('&');
587
- return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations?" + languagesQuery + "&filterKeyName=" + encodeURIComponent(key))];
588
+ return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations?".concat(languagesQuery, "&filterKeyName=").concat(encodeURIComponent(key)))];
588
589
  case 2:
589
590
  data = _e.sent();
590
591
  translationData_1 = languagesArray.reduce(function (acc, curr) {
@@ -709,7 +710,7 @@
709
710
  switch (_c.label) {
710
711
  case 0:
711
712
  this.coreService.checkScope('translations.edit');
712
- 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)
713
+ 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)
713
714
  ? data.screenshotUploadedImageIds
714
715
  : undefined, screenshotIdsToDelete: ((_b = data.screenshotIdsToDelete) === null || _b === void 0 ? void 0 : _b.length)
715
716
  ? data.screenshotIdsToDelete
@@ -867,7 +868,7 @@
867
868
  }
868
869
  _c.label = 3;
869
870
  case 3:
870
- url = "" + (this.properties.config.filesUrlPrefix || '/') + language + ".json";
871
+ url = "".concat(this.properties.config.filesUrlPrefix || '/').concat(language, ".json");
871
872
  _c.label = 4;
872
873
  case 4:
873
874
  _c.trys.push([4, 10, , 11]);
@@ -892,14 +893,14 @@
892
893
  case 8:
893
894
  _c.sent();
894
895
  // eslint-disable-next-line no-console
895
- console.error("Error parsing json retrieved from " + url + ".");
896
+ console.error("Error parsing json retrieved from ".concat(url, "."));
896
897
  this.setEmptyLanguageData(language);
897
898
  return [3 /*break*/, 9];
898
899
  case 9: return [3 /*break*/, 11];
899
900
  case 10:
900
901
  _c.sent();
901
902
  // eslint-disable-next-line no-console
902
- console.error("Error fetching localization data from " + url + ".");
903
+ console.error("Error fetching localization data from ".concat(url, "."));
903
904
  this.setEmptyLanguageData(language);
904
905
  return [3 /*break*/, 11];
905
906
  case 11: return [2 /*return*/];
@@ -917,7 +918,7 @@
917
918
  _a.label = 1;
918
919
  case 1:
919
920
  _a.trys.push([1, 3, , 4]);
920
- return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations/" + language)];
921
+ return [4 /*yield*/, this.apiHttpService.fetchJson("v2/projects/translations/".concat(language))];
921
922
  case 2:
922
923
  data = _a.sent();
923
924
  this.setLanguageData(language, data[language] || {});
@@ -1597,8 +1598,8 @@
1597
1598
  }
1598
1599
 
1599
1600
  var _a;
1600
- var SPACE_SEPARATOR_START_REGEX = new RegExp("^" + SPACE_SEPARATOR_REGEX.source + "*");
1601
- var SPACE_SEPARATOR_END_REGEX = new RegExp(SPACE_SEPARATOR_REGEX.source + "*$");
1601
+ var SPACE_SEPARATOR_START_REGEX = new RegExp("^".concat(SPACE_SEPARATOR_REGEX.source, "*"));
1602
+ var SPACE_SEPARATOR_END_REGEX = new RegExp("".concat(SPACE_SEPARATOR_REGEX.source, "*$"));
1602
1603
  function createLocation(start, end) {
1603
1604
  return { start: start, end: end };
1604
1605
  }
@@ -1845,7 +1846,7 @@
1845
1846
  return {
1846
1847
  val: {
1847
1848
  type: TYPE.literal,
1848
- value: "<" + tagName + "/>",
1849
+ value: "<".concat(tagName, "/>"),
1849
1850
  location: createLocation(startPosition, this.clonePosition()),
1850
1851
  },
1851
1852
  err: null,
@@ -2450,7 +2451,7 @@
2450
2451
  }
2451
2452
  var code = codePointAt(this.message, offset);
2452
2453
  if (code === undefined) {
2453
- throw Error("Offset " + offset + " is at invalid UTF-16 code unit boundary");
2454
+ throw Error("Offset ".concat(offset, " is at invalid UTF-16 code unit boundary"));
2454
2455
  }
2455
2456
  return code;
2456
2457
  };
@@ -2518,7 +2519,7 @@
2518
2519
  */
2519
2520
  Parser.prototype.bumpTo = function (targetOffset) {
2520
2521
  if (this.offset() > targetOffset) {
2521
- throw Error("targetOffset " + targetOffset + " must be greater than or equal to the current offset " + this.offset());
2522
+ throw Error("targetOffset ".concat(targetOffset, " must be greater than or equal to the current offset ").concat(this.offset()));
2522
2523
  }
2523
2524
  targetOffset = Math.min(targetOffset, this.message.length);
2524
2525
  while (true) {
@@ -2527,7 +2528,7 @@
2527
2528
  break;
2528
2529
  }
2529
2530
  if (offset > targetOffset) {
2530
- throw Error("targetOffset " + targetOffset + " is at invalid UTF-16 code unit boundary");
2531
+ throw Error("targetOffset ".concat(targetOffset, " is at invalid UTF-16 code unit boundary"));
2531
2532
  }
2532
2533
  this.bump();
2533
2534
  if (this.isEOF()) {
@@ -2993,28 +2994,28 @@
2993
2994
  return _this;
2994
2995
  }
2995
2996
  FormatError.prototype.toString = function () {
2996
- return "[formatjs Error: " + this.code + "] " + this.message;
2997
+ return "[formatjs Error: ".concat(this.code, "] ").concat(this.message);
2997
2998
  };
2998
2999
  return FormatError;
2999
3000
  }(Error));
3000
3001
  var InvalidValueError = /** @class */ (function (_super) {
3001
3002
  __extends(InvalidValueError, _super);
3002
3003
  function InvalidValueError(variableId, value, options, originalMessage) {
3003
- return _super.call(this, "Invalid values for \"" + variableId + "\": \"" + value + "\". Options are \"" + Object.keys(options).join('", "') + "\"", ErrorCode.INVALID_VALUE, originalMessage) || this;
3004
+ return _super.call(this, "Invalid values for \"".concat(variableId, "\": \"").concat(value, "\". Options are \"").concat(Object.keys(options).join('", "'), "\""), ErrorCode.INVALID_VALUE, originalMessage) || this;
3004
3005
  }
3005
3006
  return InvalidValueError;
3006
3007
  }(FormatError));
3007
3008
  var InvalidValueTypeError = /** @class */ (function (_super) {
3008
3009
  __extends(InvalidValueTypeError, _super);
3009
3010
  function InvalidValueTypeError(value, type, originalMessage) {
3010
- return _super.call(this, "Value for \"" + value + "\" must be of type " + type, ErrorCode.INVALID_VALUE, originalMessage) || this;
3011
+ return _super.call(this, "Value for \"".concat(value, "\" must be of type ").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;
3011
3012
  }
3012
3013
  return InvalidValueTypeError;
3013
3014
  }(FormatError));
3014
3015
  var MissingValueError = /** @class */ (function (_super) {
3015
3016
  __extends(MissingValueError, _super);
3016
3017
  function MissingValueError(variableId, originalMessage) {
3017
- return _super.call(this, "The intl string context variable \"" + variableId + "\" was not provided to the string \"" + originalMessage + "\"", ErrorCode.MISSING_VALUE, originalMessage) || this;
3018
+ return _super.call(this, "The intl string context variable \"".concat(variableId, "\" was not provided to the string \"").concat(originalMessage, "\""), ErrorCode.MISSING_VALUE, originalMessage) || this;
3018
3019
  }
3019
3020
  return MissingValueError;
3020
3021
  }(FormatError));
@@ -3175,7 +3176,7 @@
3175
3176
  continue;
3176
3177
  }
3177
3178
  if (isPluralElement(el)) {
3178
- var opt = el.options["=" + value];
3179
+ var opt = el.options["=".concat(value)];
3179
3180
  if (!opt) {
3180
3181
  if (!Intl.PluralRules) {
3181
3182
  throw new FormatError("Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n", ErrorCode.MISSING_INTL_API, originalMessage);
@@ -3459,7 +3460,7 @@
3459
3460
  get: function () {
3460
3461
  var escapedPrefix = this.escapeForRegExp(this.properties.config.inputPrefix);
3461
3462
  var escapedSuffix = this.escapeForRegExp(this.properties.config.inputSuffix);
3462
- return "(\\\\?)(" + escapedPrefix + "(.*?)" + escapedSuffix + ")";
3463
+ return "(\\\\?)(".concat(escapedPrefix, "(.*?)").concat(escapedSuffix, ")");
3463
3464
  },
3464
3465
  enumerable: false,
3465
3466
  configurable: true
@@ -3619,12 +3620,12 @@
3619
3620
  var paramString = Object.entries(params)
3620
3621
  .map(function (_a) {
3621
3622
  var _b = __read(_a, 2), name = _b[0], value = _b[1];
3622
- return _this.escapeParam(name) + ":" + _this.escapeParam(value);
3623
+ return "".concat(_this.escapeParam(name), ":").concat(_this.escapeParam(value));
3623
3624
  })
3624
3625
  .join(',');
3625
- paramString = paramString.length ? ":" + paramString : '';
3626
- var defaultString = defaultValue !== undefined ? "," + this.escapeParam(defaultValue) : '';
3627
- return "" + this.properties.config.inputPrefix + this.escapeParam(key) + defaultString + paramString + this.properties.config.inputSuffix;
3626
+ paramString = paramString.length ? ":".concat(paramString) : '';
3627
+ var defaultString = defaultValue !== undefined ? ",".concat(this.escapeParam(defaultValue)) : '';
3628
+ return "".concat(this.properties.config.inputPrefix).concat(this.escapeParam(key)).concat(defaultString).concat(paramString).concat(this.properties.config.inputSuffix);
3628
3629
  };
3629
3630
  TextService.prototype.getTranslatedWithMetadata = function (text) {
3630
3631
  return __awaiter(this, void 0, void 0, function () {
@@ -3686,7 +3687,7 @@
3686
3687
  }
3687
3688
  };
3688
3689
  element.addEventListener('mouseover', onMouseOver);
3689
- element.addEventListener('click', onClick);
3690
+ element.addEventListener('click', onClick, { capture: true });
3690
3691
  var onMouseDownOrUp = function (e) {
3691
3692
  if (_this.areKeysDown()) {
3692
3693
  e.stopPropagation();
@@ -3700,7 +3701,7 @@
3700
3701
  element.removeEventListener('mousedown', onMouseDownOrUp);
3701
3702
  element.removeEventListener('mouseup', onMouseDownOrUp);
3702
3703
  element.removeEventListener('mouseover', onMouseOver);
3703
- element.removeEventListener('click', onClick);
3704
+ element.removeEventListener('click', onClick, { capture: true });
3704
3705
  element.removeEventListener('mouseout', onMouseOut);
3705
3706
  };
3706
3707
  };
@@ -3721,11 +3722,13 @@
3721
3722
  }
3722
3723
  };
3723
3724
  MouseEventHandler.prototype.onMouseOut = function (element) {
3725
+ element._tolgee.preventClean = false;
3724
3726
  this.mouseOn.delete(element);
3725
3727
  this.mouseOnChanged.emit(this.getMouseOn());
3726
3728
  };
3727
3729
  MouseEventHandler.prototype.onMouseOver = function (element) {
3728
3730
  this.filterMouseOn();
3731
+ element._tolgee.preventClean = true;
3729
3732
  this.mouseOn.delete(element); //to get in to last place
3730
3733
  this.mouseOn.add(element);
3731
3734
  this.mouseOnChanged.emit(this.getMouseOn());
@@ -3787,40 +3790,26 @@
3787
3790
  var _this = this;
3788
3791
  this.dependencies = dependencies;
3789
3792
  this.translationEdit = function (e, element) { return __awaiter(_this, void 0, void 0, function () {
3790
- var key;
3793
+ var renderer, key;
3791
3794
  return __generator(this, function (_a) {
3792
3795
  switch (_a.label) {
3793
- case 0:
3794
- if (!(typeof this.renderer === 'object')) return [3 /*break*/, 2];
3795
- return [4 /*yield*/, this.getKeyAndDefault(e, element)];
3796
+ case 0: return [4 /*yield*/, this.getRenderer()];
3796
3797
  case 1:
3798
+ renderer = _a.sent();
3799
+ if (!(typeof renderer === 'object')) return [3 /*break*/, 3];
3800
+ return [4 /*yield*/, this.getKeyAndDefault(e, element)];
3801
+ case 2:
3797
3802
  key = _a.sent();
3798
3803
  if (key) {
3799
- this.renderer.renderViewer(key.key, key.defaultValue);
3804
+ renderer.renderViewer(key.key, key.defaultValue);
3800
3805
  return [2 /*return*/];
3801
3806
  }
3802
3807
  return [2 /*return*/];
3803
- case 2:
3804
- // eslint-disable-next-line no-console
3805
- console.warn('Tolgee UI is not provided. To translate interactively provide tolgee ui constructor to "ui" configuration property. ' +
3806
- 'To disable highlighting use production mode.');
3807
- return [2 /*return*/];
3808
+ case 3: return [2 /*return*/];
3808
3809
  }
3809
3810
  });
3810
3811
  }); };
3811
3812
  }
3812
- Object.defineProperty(TranslationHighlighter.prototype, "renderer", {
3813
- get: function () {
3814
- if (this._renderer === undefined) {
3815
- if (typeof this.dependencies.properties.config.ui === 'function') {
3816
- this._renderer = new this.dependencies.properties.config.ui(this.dependencies);
3817
- }
3818
- }
3819
- return this._renderer;
3820
- },
3821
- enumerable: false,
3822
- configurable: true
3823
- });
3824
3813
  TranslationHighlighter.getKeyOptions = function (node) {
3825
3814
  var nodes = Array.from(node._tolgee.nodes);
3826
3815
  return nodes.reduce(function (acc, curr) { return __spreadArray(__spreadArray([], __read(acc), false), __read(curr._tolgee.keys.map(function (k) { return ({
@@ -3838,9 +3827,70 @@
3838
3827
  }
3839
3828
  }); }); });
3840
3829
  };
3830
+ TranslationHighlighter.prototype.getRenderer = function () {
3831
+ return __awaiter(this, void 0, void 0, function () {
3832
+ var possibleProviders, possibleProviders_1, possibleProviders_1_1, possibleProvider, constructorProvider, constructor, constructor, e_2_1;
3833
+ var e_2, _a;
3834
+ return __generator(this, function (_b) {
3835
+ switch (_b.label) {
3836
+ case 0:
3837
+ if (!(this._renderer === undefined)) return [3 /*break*/, 11];
3838
+ possibleProviders = [
3839
+ this.dependencies.properties.config.ui,
3840
+ window['@tolgee/ui'],
3841
+ ];
3842
+ _b.label = 1;
3843
+ case 1:
3844
+ _b.trys.push([1, 8, 9, 10]);
3845
+ possibleProviders_1 = __values(possibleProviders), possibleProviders_1_1 = possibleProviders_1.next();
3846
+ _b.label = 2;
3847
+ case 2:
3848
+ if (!!possibleProviders_1_1.done) return [3 /*break*/, 7];
3849
+ possibleProvider = possibleProviders_1_1.value;
3850
+ if (!(typeof possibleProvider === 'function')) return [3 /*break*/, 6];
3851
+ _b.label = 3;
3852
+ case 3:
3853
+ _b.trys.push([3, 5, , 6]);
3854
+ constructorProvider = possibleProvider;
3855
+ return [4 /*yield*/, constructorProvider()];
3856
+ case 4:
3857
+ constructor = _b.sent();
3858
+ this._renderer = new constructor(this.dependencies);
3859
+ return [3 /*break*/, 6];
3860
+ case 5:
3861
+ _b.sent();
3862
+ constructor = possibleProvider;
3863
+ this._renderer = new constructor(this.dependencies);
3864
+ return [3 /*break*/, 6];
3865
+ case 6:
3866
+ possibleProviders_1_1 = possibleProviders_1.next();
3867
+ return [3 /*break*/, 2];
3868
+ case 7: return [3 /*break*/, 10];
3869
+ case 8:
3870
+ e_2_1 = _b.sent();
3871
+ e_2 = { error: e_2_1 };
3872
+ return [3 /*break*/, 10];
3873
+ case 9:
3874
+ try {
3875
+ if (possibleProviders_1_1 && !possibleProviders_1_1.done && (_a = possibleProviders_1.return)) _a.call(possibleProviders_1);
3876
+ }
3877
+ finally { if (e_2) throw e_2.error; }
3878
+ return [7 /*endfinally*/];
3879
+ case 10:
3880
+ if (this._renderer === undefined) {
3881
+ // eslint-disable-next-line no-console
3882
+ console.warn('Tolgee UI is not provided. To translate interactively provide tolgee ui constructor to "ui" configuration property. ' +
3883
+ 'To disable highlighting use production mode.');
3884
+ }
3885
+ _b.label = 11;
3886
+ case 11: return [2 /*return*/, this._renderer];
3887
+ }
3888
+ });
3889
+ });
3890
+ };
3841
3891
  TranslationHighlighter.prototype.getKeyAndDefault = function (mouseEvent, element) {
3842
3892
  return __awaiter(this, void 0, void 0, function () {
3843
- var keysWithDefaults, keySet, selectedKey_1, found;
3893
+ var keysWithDefaults, keySet, renderer, selectedKey_1, found;
3844
3894
  return __generator(this, function (_a) {
3845
3895
  switch (_a.label) {
3846
3896
  case 0:
@@ -3852,19 +3902,22 @@
3852
3902
  }
3853
3903
  keysWithDefaults = TranslationHighlighter.getKeyOptions(element);
3854
3904
  keySet = new Set(keysWithDefaults.map(function (keyWithDefault) { return keyWithDefault.key; }));
3855
- if (!(keySet.size > 1)) return [3 /*break*/, 2];
3856
- return [4 /*yield*/, this.renderer.getKey({
3905
+ if (!(keySet.size > 1)) return [3 /*break*/, 3];
3906
+ return [4 /*yield*/, this.getRenderer()];
3907
+ case 1:
3908
+ renderer = _a.sent();
3909
+ return [4 /*yield*/, renderer.getKey({
3857
3910
  keys: keySet,
3858
3911
  openEvent: mouseEvent,
3859
3912
  })];
3860
- case 1:
3913
+ case 2:
3861
3914
  selectedKey_1 = _a.sent();
3862
3915
  found = keysWithDefaults.find(function (kwd) { return kwd.key === selectedKey_1; });
3863
3916
  if (found) {
3864
3917
  return [2 /*return*/, found];
3865
3918
  }
3866
- _a.label = 2;
3867
- case 2:
3919
+ _a.label = 3;
3920
+ case 3:
3868
3921
  if (keySet.size === 1) {
3869
3922
  return [2 /*return*/, keysWithDefaults[0]];
3870
3923
  }
@@ -3903,10 +3956,12 @@
3903
3956
  try {
3904
3957
  for (var _b = __values(this.registeredElements), _c = _b.next(); !_c.done; _c = _b.next()) {
3905
3958
  var element = _c.value;
3906
- this.cleanElementInactiveNodes(element);
3907
- if (element._tolgee.nodes.size === 0 &&
3908
- !element._tolgee.wrappedWithElementOnlyKey) {
3909
- this.cleanElement(element);
3959
+ if (!element._tolgee.preventClean) {
3960
+ this.cleanElementInactiveNodes(element);
3961
+ if (element._tolgee.nodes.size === 0 &&
3962
+ !element._tolgee.wrappedWithElementOnlyKey) {
3963
+ this.cleanElement(element);
3964
+ }
3910
3965
  }
3911
3966
  }
3912
3967
  }
@@ -3978,12 +4033,14 @@
3978
4033
  }
3979
4034
  };
3980
4035
  ElementRegistrar.prototype.cleanElement = function (element) {
3981
- if (typeof element._tolgee.removeAllEventListeners === 'function') {
3982
- element._tolgee.removeAllEventListeners();
4036
+ if (!element._tolgee.preventClean) {
4037
+ if (typeof element._tolgee.removeAllEventListeners === 'function') {
4038
+ element._tolgee.removeAllEventListeners();
4039
+ }
4040
+ element.removeAttribute(TOLGEE_ATTRIBUTE_NAME);
4041
+ delete element._tolgee;
4042
+ this.registeredElements.delete(element);
3983
4043
  }
3984
- element.removeAttribute(TOLGEE_ATTRIBUTE_NAME);
3985
- delete element._tolgee;
3986
- this.registeredElements.delete(element);
3987
4044
  };
3988
4045
  ElementRegistrar.prototype.getActiveNodes = function (element) {
3989
4046
  var _a, _b, node, e_5_1;
@@ -4047,7 +4104,7 @@
4047
4104
  return nodes.filter(function (n) {
4048
4105
  var e = NodeHelper.closestElement(n);
4049
4106
  return (restrictedElements.indexOf(e.tagName.toLowerCase()) === -1 &&
4050
- e.closest("[" + RESTRICTED_ASCENDANT_ATTRIBUTE + "=\"true\"]") === null);
4107
+ e.closest("[".concat(RESTRICTED_ASCENDANT_ATTRIBUTE, "=\"true\"]")) === null);
4051
4108
  });
4052
4109
  };
4053
4110
  AbstractHandler.prototype.handleNodes = function (nodes) {
@@ -4173,7 +4230,7 @@
4173
4230
  case 0:
4174
4231
  inputPrefix = this.properties.config.inputPrefix;
4175
4232
  inputSuffix = this.properties.config.inputSuffix;
4176
- xPath = "./descendant-or-self::text()[contains(., '" + inputPrefix + "') and contains(., '" + inputSuffix + "')]";
4233
+ xPath = "./descendant-or-self::text()[contains(., '".concat(inputPrefix, "') and contains(., '").concat(inputSuffix, "')]");
4177
4234
  nodes = NodeHelper.evaluate(xPath, node);
4178
4235
  filtered = this.filterRestricted(nodes);
4179
4236
  return [4 /*yield*/, this.handleNodes(filtered)];
@@ -4222,7 +4279,7 @@
4222
4279
  case 4:
4223
4280
  if (!!attributes_1_1.done) return [3 /*break*/, 7];
4224
4281
  attribute = attributes_1_1.value;
4225
- expression = "descendant-or-self::" + tag + "/@" + attribute + "[contains(., '" + inputPrefix + "') and contains(., '" + inputSuffix + "')]";
4282
+ expression = "descendant-or-self::".concat(tag, "/@").concat(attribute, "[contains(., '").concat(inputPrefix, "') and contains(., '").concat(inputSuffix, "')]");
4226
4283
  nodes = NodeHelper.evaluate(expression, node);
4227
4284
  return [4 /*yield*/, this.handleNodes(nodes)];
4228
4285
  case 5:
@@ -4492,7 +4549,7 @@
4492
4549
  });
4493
4550
  });
4494
4551
  };
4495
- CoreService.prototype.getScopes = function () {
4552
+ CoreService.prototype.getApiKeyDetails = function () {
4496
4553
  return __awaiter(this, void 0, void 0, function () {
4497
4554
  var e_1;
4498
4555
  return __generator(this, function (_a) {
@@ -4500,8 +4557,7 @@
4500
4557
  case 0:
4501
4558
  _a.trys.push([0, 2, , 3]);
4502
4559
  return [4 /*yield*/, this.apiHttpService.fetchJson("v2/api-keys/current")];
4503
- case 1: return [2 /*return*/, (_a.sent())
4504
- .scopes];
4560
+ case 1: return [2 /*return*/, _a.sent()];
4505
4561
  case 2:
4506
4562
  e_1 = _a.sent();
4507
4563
  // eslint-disable-next-line no-console
@@ -4541,7 +4597,7 @@
4541
4597
  var xPath, nodes, filtered;
4542
4598
  var _this = this;
4543
4599
  return __generator(this, function (_a) {
4544
- xPath = "./descendant-or-self::*[@" + TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE + "]";
4600
+ xPath = "./descendant-or-self::*[@".concat(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE, "]");
4545
4601
  nodes = NodeHelper.evaluate(xPath, node);
4546
4602
  filtered = this.filterRestricted(nodes);
4547
4603
  filtered.forEach(function (element) {
@@ -4755,7 +4811,7 @@
4755
4811
  ScreenshotService.prototype.deleteImages = function (ids) {
4756
4812
  return __awaiter(this, void 0, void 0, function () {
4757
4813
  return __generator(this, function (_a) {
4758
- return [2 /*return*/, this.apiHttpService.post("v2/image-upload/" + ids.join(','), undefined, {
4814
+ return [2 /*return*/, this.apiHttpService.post("v2/image-upload/".concat(ids.join(',')), undefined, {
4759
4815
  method: 'delete',
4760
4816
  })];
4761
4817
  });
@@ -4894,7 +4950,7 @@
4894
4950
  switch (_a.label) {
4895
4951
  case 0:
4896
4952
  if (!(this.properties.config.mode === 'development')) return [3 /*break*/, 2];
4897
- return [4 /*yield*/, this.loadScopes()];
4953
+ return [4 /*yield*/, this.loadApiKeyDetails()];
4898
4954
  case 1:
4899
4955
  _a.sent();
4900
4956
  _a.label = 2;
@@ -4949,7 +5005,7 @@
4949
5005
  orEmpty = props.orEmpty;
4950
5006
  }
4951
5007
  if (!(this.properties.config.mode === 'development' && !noWrap)) return [3 /*break*/, 3];
4952
- return [4 /*yield*/, this.loadScopes()];
5008
+ return [4 /*yield*/, this.loadApiKeyDetails()];
4953
5009
  case 1:
4954
5010
  _a.sent();
4955
5011
  return [4 /*yield*/, this.translationService.loadTranslations()];
@@ -4980,19 +5036,19 @@
4980
5036
  }
4981
5037
  return this.dependencyStore.textService.instant(key, params, undefined, orEmpty, defaultValue);
4982
5038
  };
4983
- Tolgee.prototype.loadScopes = function () {
5039
+ Tolgee.prototype.loadApiKeyDetails = function () {
4984
5040
  return __awaiter(this, void 0, void 0, function () {
4985
- var _a;
4986
- return __generator(this, function (_b) {
4987
- switch (_b.label) {
5041
+ var details;
5042
+ return __generator(this, function (_a) {
5043
+ switch (_a.label) {
4988
5044
  case 0:
4989
5045
  if (!(this.properties.scopes === undefined)) return [3 /*break*/, 2];
4990
- _a = this.properties;
4991
- return [4 /*yield*/, this.dependencyStore.coreService.getScopes()];
5046
+ return [4 /*yield*/, this.dependencyStore.coreService.getApiKeyDetails()];
4992
5047
  case 1:
4993
- _a.scopes =
4994
- _b.sent();
4995
- _b.label = 2;
5048
+ details = _a.sent();
5049
+ this.properties.scopes = details.scopes;
5050
+ this.properties.projectId = details.projectId;
5051
+ _a.label = 2;
4996
5052
  case 2: return [2 /*return*/];
4997
5053
  }
4998
5054
  });