@searpent/react-image-annotate 2.1.2 → 2.3.0-cand-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 (64) hide show
  1. package/Annotator/examplePhotos.js +29 -29
  2. package/Annotator/examplePhotos_repr.js +28 -28
  3. package/Annotator/index.js +21 -15
  4. package/Annotator/index.story_bugdemo_15_1.js +51 -46
  5. package/Annotator/index.story_repr.js +64 -51
  6. package/Annotator/reducers/combine-reducers.js +3 -18
  7. package/Annotator/reducers/convert-expanding-line-to-polygon.js +16 -15
  8. package/Annotator/reducers/get-implied-video-regions.js +30 -18
  9. package/ClassSelectionMenu/index.js +8 -8
  10. package/Crosshairs/index.js +2 -2
  11. package/DebugSidebarBox/index.js +4 -4
  12. package/DemoSite/Editor.js +15 -15
  13. package/DemoSite/ErrorBoundaryDialog.js +5 -3
  14. package/DemoSite/index.js +3 -3
  15. package/Editor/annotation-plugin/annotation.js +3 -1
  16. package/Editor/editor.css +0 -2
  17. package/Editor/index.js +23 -14
  18. package/Editor/index_bugdemo_15_1.js +17 -13
  19. package/Editor/readOnly.js +36 -28
  20. package/Errorer/index.js +2 -2
  21. package/FullImageSegmentationAnnotator/index.js +1 -1
  22. package/GroupSelectorSidebarBox/index.js +7 -7
  23. package/GroupsEditorSidebarBox/index.js +11 -11
  24. package/HelpSidebarBox/index.js +4 -4
  25. package/HighlightBox/index.js +3 -3
  26. package/HistorySidebarBox/index.js +8 -8
  27. package/ImageCanvas/index.js +16 -16
  28. package/ImageMask/index.js +1 -1
  29. package/ImageSelectorSidebarBox/index.js +7 -7
  30. package/KeyframeTimeline/index.js +14 -30
  31. package/KeyframesSelectorSidebarBox/index.js +8 -8
  32. package/LandingPage/index.js +12 -12
  33. package/Locker/index.js +2 -2
  34. package/MainLayout/RightSidebarItemsWrapper.js +1 -1
  35. package/MainLayout/icon-dictionary.js +11 -11
  36. package/MainLayout/index.js +25 -29
  37. package/MainLayout/index_bugdemo_15_1.js +23 -25
  38. package/MetadataEditorSidebarBox/index.js +18 -18
  39. package/MetadataEditorSidebarBox/index_14_01_25.js +18 -18
  40. package/MetadataEditorSidebarBox/index_repr.js +21 -21
  41. package/PageSelector/index.js +21 -21
  42. package/PointDistances/index.js +4 -4
  43. package/PreventScrollToParents/index.js +3 -3
  44. package/RegionLabel/index.js +24 -24
  45. package/RegionSelectAndTransformBoxes/index.js +8 -8
  46. package/RegionSelectorSidebarBox/index.js +33 -33
  47. package/RegionShapes/index.js +22 -22
  48. package/RegionTags/index.js +6 -6
  49. package/SettingsDialog/index.js +4 -4
  50. package/SettingsProvider/index.js +1 -1
  51. package/Shortcuts/ShortcutField.js +3 -3
  52. package/Shortcuts/index.js +2 -2
  53. package/ShortcutsManager/index.js +9 -9
  54. package/Sidebar/index.js +7 -7
  55. package/SidebarBoxContainer/index.js +3 -3
  56. package/SmallToolButton/index.js +2 -2
  57. package/TagsSidebarBox/index.js +6 -6
  58. package/TaskDescriptionSidebarBox/index.js +4 -4
  59. package/Theme/index.js +2 -2
  60. package/VideoOrImageCanvasBackground/index.js +5 -5
  61. package/package.json +11 -2
  62. package/utils/blocks-to-article.js +3 -3
  63. package/utils/get-landmarks-with-transform.js +15 -13
  64. package/utils/spellcheck-nspell.js +110 -66
@@ -131,18 +131,18 @@ export default (function (_ref4) {
131
131
  height: isNaN(height) ? 0 : height
132
132
  };
133
133
  }, [imagePosition.topLeft.x, imagePosition.topLeft.y, imagePosition.bottomRight.x, imagePosition.bottomRight.y]);
134
- if (!videoSrc && !imageSrc) return /*#__PURE__*/React.createElement(Error, null, "No imageSrc or videoSrc provided");
135
- if (error) return /*#__PURE__*/React.createElement(Error, null, error);
136
- return /*#__PURE__*/React.createElement(ThemeProvider, {
134
+ if (!videoSrc && !imageSrc) return React.createElement(Error, null, "No imageSrc or videoSrc provided");
135
+ if (error) return React.createElement(Error, null, error);
136
+ return React.createElement(ThemeProvider, {
137
137
  theme: theme
138
- }, imageSrc && videoTime === undefined ? /*#__PURE__*/React.createElement(StyledImage, Object.assign({}, mouseEvents, {
138
+ }, imageSrc && videoTime === undefined ? React.createElement(StyledImage, Object.assign({}, mouseEvents, {
139
139
  src: imageSrc,
140
140
  ref: imageRef,
141
141
  style: stylePosition,
142
142
  onLoad: onImageLoaded,
143
143
  onError: onImageError,
144
144
  crossOrigin: useCrossOrigin ? "anonymous" : undefined
145
- })) : /*#__PURE__*/React.createElement(Video, Object.assign({}, mouseEvents, {
145
+ })) : React.createElement(Video, Object.assign({}, mouseEvents, {
146
146
  ref: videoRef,
147
147
  style: stylePosition,
148
148
  onLoadedMetadata: onLoadedVideoMetadata,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searpent/react-image-annotate",
3
- "version": "2.1.2",
3
+ "version": "2.3.0-cand-2",
4
4
  "dependencies": {
5
5
  "@editorjs/editorjs": "^2.25.0",
6
6
  "@editorjs/paragraph": "^2.8.0",
@@ -8,7 +8,7 @@
8
8
  "@emotion/styled": "^11.6.0",
9
9
  "@fortawesome/fontawesome-svg-core": "^1.2.12",
10
10
  "@fortawesome/free-solid-svg-icons": "^5.6.3",
11
- "@fortawesome/react-fontawesome": "^0.2.0",
11
+ "@fortawesome/react-fontawesome": "^0.1.3",
12
12
  "@mui/icons-material": "^5.2.1",
13
13
  "@mui/material": "^5.2.3",
14
14
  "@mui/styles": "^5.2.3",
@@ -48,6 +48,13 @@
48
48
  "react": "^17.0.0",
49
49
  "react-dom": "^17.0.0"
50
50
  },
51
+ "engines": {
52
+ "node": ">=14.0.0 <18.0.0",
53
+ "yarn": ">=1.22.0"
54
+ },
55
+ "resolutions": {
56
+ "@babel/plugin-transform-typescript": "^7.9.4"
57
+ },
51
58
  "homepage": "/react-image-annotate",
52
59
  "repository": {
53
60
  "type": "git",
@@ -79,7 +86,9 @@
79
86
  "devDependencies": {
80
87
  "@babel/cli": "^7.2.3",
81
88
  "@babel/core": "^7.2.2",
89
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
82
90
  "@babel/plugin-proposal-optional-chaining": "^7.11.0",
91
+ "@babel/plugin-transform-typescript": "^7.9.4",
83
92
  "@storybook/addon-actions": "^5.3.14",
84
93
  "@storybook/addon-links": "^5.3.14",
85
94
  "@storybook/addons": "^5.3.14",
@@ -34,9 +34,9 @@ function blocksToArticle(blocks) {
34
34
  return newBlock;
35
35
  });
36
36
  var article = renamedBlocks.reduce(function (acc, curr) {
37
- var _curr$data = curr === null || curr === void 0 ? void 0 : curr.data,
38
- labelName = _curr$data.labelName,
39
- text = _curr$data.text;
37
+ var _ref = curr === null || curr === void 0 ? void 0 : curr.data,
38
+ labelName = _ref.labelName,
39
+ text = _ref.text;
40
40
 
41
41
  if (acc[labelName] === undefined) {
42
42
  acc[labelName] = "";
@@ -1,22 +1,15 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
-
3
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
4
-
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
-
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
-
9
2
  export default (function (_ref) {
10
3
  var center = _ref.center,
11
4
  scale = _ref.scale,
12
5
  landmarks = _ref.landmarks;
13
6
  var points = {};
14
-
15
- var _iterator = _createForOfIteratorHelper(Object.entries(landmarks)),
16
- _step;
7
+ var _iteratorNormalCompletion = true;
8
+ var _didIteratorError = false;
9
+ var _iteratorError = undefined;
17
10
 
18
11
  try {
19
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
12
+ for (var _iterator = Object.entries(landmarks)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
20
13
  var _ref4 = _step.value;
21
14
 
22
15
  var _ref3 = _slicedToArray(_ref4, 2);
@@ -29,9 +22,18 @@ export default (function (_ref) {
29
22
  };
30
23
  }
31
24
  } catch (err) {
32
- _iterator.e(err);
25
+ _didIteratorError = true;
26
+ _iteratorError = err;
33
27
  } finally {
34
- _iterator.f();
28
+ try {
29
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
30
+ _iterator.return();
31
+ }
32
+ } finally {
33
+ if (_didIteratorError) {
34
+ throw _iteratorError;
35
+ }
36
+ }
35
37
  }
36
38
 
37
39
  return points;
@@ -2,12 +2,6 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
3
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
4
 
5
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
6
-
7
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
-
9
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10
-
11
5
  /**
12
6
  * Multi-language spellcheck system with priority-based language detection
13
7
  *
@@ -37,7 +31,9 @@ export function getSpell() {
37
31
  } // Available dictionaries mapping
38
32
 
39
33
  function _getSpell() {
40
- _getSpell = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
34
+ _getSpell = _asyncToGenerator(
35
+ /*#__PURE__*/
36
+ _regeneratorRuntime.mark(function _callee2() {
41
37
  var lang,
42
38
  result,
43
39
  promise,
@@ -78,8 +74,10 @@ function _getSpell() {
78
74
  return _context2.abrupt("return", result);
79
75
 
80
76
  case 11:
81
- promise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
82
- var _yield$import, nspell, dictName, affUrl, dicUrl, _yield$Promise$all, _yield$Promise$all2, affRes, dicRes, errorMsg, _yield$Promise$all3, _yield$Promise$all4, affBuf, dicBuf, utf8Decoder, affUtf8, enc, setMatch, raw, map, mapped, decoder, aff, dic, spellInstance;
77
+ promise = _asyncToGenerator(
78
+ /*#__PURE__*/
79
+ _regeneratorRuntime.mark(function _callee() {
80
+ var _ref2, nspell, dictName, affUrl, dicUrl, _ref3, _ref4, affRes, dicRes, errorMsg, _ref5, _ref6, affBuf, dicBuf, utf8Decoder, affUtf8, enc, setMatch, raw, map, mapped, decoder, aff, dic, spellInstance;
83
81
 
84
82
  return _regeneratorRuntime.wrap(function _callee$(_context) {
85
83
  while (1) {
@@ -90,8 +88,8 @@ function _getSpell() {
90
88
  return import('nspell');
91
89
 
92
90
  case 3:
93
- _yield$import = _context.sent;
94
- nspell = _yield$import.default;
91
+ _ref2 = _context.sent;
92
+ nspell = _ref2.default;
95
93
  // Use the mapped dictionary name
96
94
  dictName = AVAILABLE_DICTIONARIES[lang];
97
95
  affUrl = "/dicts/".concat(dictName, ".aff");
@@ -105,10 +103,10 @@ function _getSpell() {
105
103
  })]);
106
104
 
107
105
  case 11:
108
- _yield$Promise$all = _context.sent;
109
- _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
110
- affRes = _yield$Promise$all2[0];
111
- dicRes = _yield$Promise$all2[1];
106
+ _ref3 = _context.sent;
107
+ _ref4 = _slicedToArray(_ref3, 2);
108
+ affRes = _ref4[0];
109
+ dicRes = _ref4[1];
112
110
  console.log('Fetch responses:', affRes.status, dicRes.status);
113
111
 
114
112
  if (!(!affRes.ok || !dicRes.ok)) {
@@ -127,10 +125,10 @@ function _getSpell() {
127
125
  return Promise.all([affRes.arrayBuffer(), dicRes.arrayBuffer()]);
128
126
 
129
127
  case 24:
130
- _yield$Promise$all3 = _context.sent;
131
- _yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 2);
132
- affBuf = _yield$Promise$all4[0];
133
- dicBuf = _yield$Promise$all4[1];
128
+ _ref5 = _context.sent;
129
+ _ref6 = _slicedToArray(_ref5, 2);
130
+ affBuf = _ref6[0];
131
+ dicBuf = _ref6[1];
134
132
  // Decode .aff as UTF-8 first to read SET <encoding>
135
133
  utf8Decoder = new TextDecoder('utf-8');
136
134
  affUtf8 = utf8Decoder.decode(affBuf);
@@ -216,9 +214,9 @@ var AVAILABLE_DICTIONARIES = {
216
214
  'pt_BR': 'pt_BR',
217
215
  'pt': 'pt_BR',
218
216
  'mk-MK': 'mk_MK',
219
- 'mk': 'mk_MK'
220
- }; // Spellcheck language setting (can be set by user)
217
+ 'mk': 'mk_MK' // Spellcheck language setting (can be set by user)
221
218
 
219
+ };
222
220
  var spellcheckLanguageSetting = null; // Spellcheck enabled/disabled flag
223
221
  // Defaults to false (disabled) for performance. Enable via REACT_APP_SPELLCHECK_ENABLED=true or setSpellcheckEnabled()
224
222
 
@@ -273,11 +271,12 @@ function getBrowserSpellcheckLanguage() {
273
271
 
274
272
  var languages = navigator.languages || [navigator.language || navigator.userLanguage || 'en-US']; // Find first available language
275
273
 
276
- var _iterator = _createForOfIteratorHelper(languages),
277
- _step;
274
+ var _iteratorNormalCompletion = true;
275
+ var _didIteratorError = false;
276
+ var _iteratorError = undefined;
278
277
 
279
278
  try {
280
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
279
+ for (var _iterator = languages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
281
280
  var lang = _step.value;
282
281
  var normalized = lang.toLowerCase(); // Direct match
283
282
 
@@ -289,9 +288,18 @@ function getBrowserSpellcheckLanguage() {
289
288
  if (AVAILABLE_DICTIONARIES[normalized]) return normalized;
290
289
  }
291
290
  } catch (err) {
292
- _iterator.e(err);
291
+ _didIteratorError = true;
292
+ _iteratorError = err;
293
293
  } finally {
294
- _iterator.f();
294
+ try {
295
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
296
+ _iterator.return();
297
+ }
298
+ } finally {
299
+ if (_didIteratorError) {
300
+ throw _iteratorError;
301
+ }
302
+ }
295
303
  }
296
304
 
297
305
  return 'en-US'; // fallback
@@ -382,7 +390,9 @@ export function findMisspellings(_x) {
382
390
  }
383
391
 
384
392
  function _findMisspellings() {
385
- _findMisspellings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(text) {
393
+ _findMisspellings = _asyncToGenerator(
394
+ /*#__PURE__*/
395
+ _regeneratorRuntime.mark(function _callee3(text) {
386
396
  var lang,
387
397
  browserLang,
388
398
  spellcheckLang,
@@ -391,6 +401,9 @@ function _findMisspellings() {
391
401
  wordRegex,
392
402
  words,
393
403
  miss,
404
+ _iteratorNormalCompletion2,
405
+ _didIteratorError2,
406
+ _iteratorError2,
394
407
  _iterator2,
395
408
  _step2,
396
409
  w,
@@ -443,19 +456,21 @@ function _findMisspellings() {
443
456
  return _context3.abrupt("return", []);
444
457
 
445
458
  case 16:
446
- // Unicode-aware word extraction across scripts (Latin, Cyrillic, etc.)
459
+ // Word extraction across common Latin + Cyrillic ranges
447
460
  // Matches sequences of letters, allowing internal apostrophes/dashes.
448
- wordRegex = /(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])(?:['\x2DA-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2019\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])*/g;
461
+ // Note: Avoids Unicode property escapes (\p{L}) for compatibility with older Babel toolchain.
462
+ wordRegex = /[A-Za-zÀ-ÖØ-öø-ÿЀ-ӿ][A-Za-zÀ-ÖØ-öø-ÿЀ-ӿ'’-]*/g;
449
463
  words = text.match(wordRegex) || [];
450
464
  miss = new Set();
451
- _iterator2 = _createForOfIteratorHelper(words);
452
- _context3.prev = 20;
453
-
454
- _iterator2.s();
455
-
456
- case 22:
457
- if ((_step2 = _iterator2.n()).done) {
458
- _context3.next = 30;
465
+ _iteratorNormalCompletion2 = true;
466
+ _didIteratorError2 = false;
467
+ _iteratorError2 = undefined;
468
+ _context3.prev = 22;
469
+ _iterator2 = words[Symbol.iterator]();
470
+
471
+ case 24:
472
+ if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) {
473
+ _context3.next = 33;
459
474
  break;
460
475
  }
461
476
 
@@ -463,52 +478,70 @@ function _findMisspellings() {
463
478
  word = w.replace(/^'+|'+$/g, '');
464
479
 
465
480
  if (word) {
466
- _context3.next = 27;
481
+ _context3.next = 29;
467
482
  break;
468
483
  }
469
484
 
470
- return _context3.abrupt("continue", 28);
485
+ return _context3.abrupt("continue", 30);
471
486
 
472
- case 27:
487
+ case 29:
473
488
  if (!spell.correct(word)) miss.add(word);
474
489
 
475
- case 28:
476
- _context3.next = 22;
477
- break;
478
-
479
490
  case 30:
480
- _context3.next = 35;
491
+ _iteratorNormalCompletion2 = true;
492
+ _context3.next = 24;
481
493
  break;
482
494
 
483
- case 32:
484
- _context3.prev = 32;
485
- _context3.t0 = _context3["catch"](20);
486
-
487
- _iterator2.e(_context3.t0);
495
+ case 33:
496
+ _context3.next = 39;
497
+ break;
488
498
 
489
499
  case 35:
490
500
  _context3.prev = 35;
501
+ _context3.t0 = _context3["catch"](22);
502
+ _didIteratorError2 = true;
503
+ _iteratorError2 = _context3.t0;
491
504
 
492
- _iterator2.f();
505
+ case 39:
506
+ _context3.prev = 39;
507
+ _context3.prev = 40;
493
508
 
494
- return _context3.finish(35);
509
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
510
+ _iterator2.return();
511
+ }
495
512
 
496
- case 38:
513
+ case 42:
514
+ _context3.prev = 42;
515
+
516
+ if (!_didIteratorError2) {
517
+ _context3.next = 45;
518
+ break;
519
+ }
520
+
521
+ throw _iteratorError2;
522
+
523
+ case 45:
524
+ return _context3.finish(42);
525
+
526
+ case 46:
527
+ return _context3.finish(39);
528
+
529
+ case 47:
497
530
  return _context3.abrupt("return", Array.from(miss));
498
531
 
499
- case 41:
500
- _context3.prev = 41;
532
+ case 50:
533
+ _context3.prev = 50;
501
534
  _context3.t1 = _context3["catch"](3);
502
535
  console.error("[Spellcheck Error] Spellcheck failed for language ".concat(lang, ":"), _context3.t1);
503
536
  console.error("[Spellcheck Error] Stack:", _context3.t1.stack);
504
537
  return _context3.abrupt("return", []);
505
538
 
506
- case 46:
539
+ case 55:
507
540
  case "end":
508
541
  return _context3.stop();
509
542
  }
510
543
  }
511
- }, _callee3, null, [[3, 41], [20, 32, 35, 38]]);
544
+ }, _callee3, null, [[3, 50], [22, 35, 39, 47], [40,, 42, 46]]);
512
545
  }));
513
546
  return _findMisspellings.apply(this, arguments);
514
547
  }
@@ -518,7 +551,9 @@ export function highlightMisspellingsInHtml(_x2) {
518
551
  }
519
552
 
520
553
  function _highlightMisspellingsInHtml() {
521
- _highlightMisspellingsInHtml = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(html) {
554
+ _highlightMisspellingsInHtml = _asyncToGenerator(
555
+ /*#__PURE__*/
556
+ _regeneratorRuntime.mark(function _callee4(html) {
522
557
  var lang,
523
558
  textForSpellcheck,
524
559
  browserLang,
@@ -593,21 +628,30 @@ function _highlightMisspellingsInHtml() {
593
628
  }
594
629
 
595
630
  var out = seg;
596
-
597
- var _iterator3 = _createForOfIteratorHelper(miss),
598
- _step3;
631
+ var _iteratorNormalCompletion3 = true;
632
+ var _didIteratorError3 = false;
633
+ var _iteratorError3 = undefined;
599
634
 
600
635
  try {
601
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
636
+ for (var _iterator3 = miss[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
602
637
  var m = _step3.value;
603
- // Use Unicode-aware boundaries: ensure preceding/following chars are not letters
604
- var re = new RegExp("(?<!\\p{L})".concat(escapeRegExp(m), "(?!\\p{L})"), 'gu');
638
+ // Use word boundaries instead of Unicode property escapes for compatibility
639
+ var re = new RegExp("\\b".concat(escapeRegExp(m), "\\b"), 'gi');
605
640
  out = out.replace(re, "<span class=\"spell-error\">$&</span>");
606
641
  }
607
642
  } catch (err) {
608
- _iterator3.e(err);
643
+ _didIteratorError3 = true;
644
+ _iteratorError3 = err;
609
645
  } finally {
610
- _iterator3.f();
646
+ try {
647
+ if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
648
+ _iterator3.return();
649
+ }
650
+ } finally {
651
+ if (_didIteratorError3) {
652
+ throw _iteratorError3;
653
+ }
654
+ }
611
655
  }
612
656
 
613
657
  return out;