roosterjs 9.57.0 → 9.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1246,12 +1246,13 @@ module.exports = {
1246
1246
  /* MIT license */
1247
1247
  var colorNames = __webpack_require__(/*! color-name */ "./node_modules/color-name/index.js");
1248
1248
  var swizzle = __webpack_require__(/*! simple-swizzle */ "./node_modules/simple-swizzle/index.js");
1249
+ var hasOwnProperty = Object.hasOwnProperty;
1249
1250
 
1250
- var reverseNames = {};
1251
+ var reverseNames = Object.create(null);
1251
1252
 
1252
1253
  // create a list of reverse color names
1253
1254
  for (var name in colorNames) {
1254
- if (colorNames.hasOwnProperty(name)) {
1255
+ if (hasOwnProperty.call(colorNames, name)) {
1255
1256
  reverseNames[colorNames[name]] = name;
1256
1257
  }
1257
1258
  }
@@ -1294,9 +1295,9 @@ cs.get.rgb = function (string) {
1294
1295
 
1295
1296
  var abbr = /^#([a-f0-9]{3,4})$/i;
1296
1297
  var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;
1297
- var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/;
1298
- var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/;
1299
- var keyword = /(\D+)/;
1298
+ var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
1299
+ var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
1300
+ var keyword = /^(\w+)$/;
1300
1301
 
1301
1302
  var rgb = [0, 0, 0, 1];
1302
1303
  var match;
@@ -1333,7 +1334,11 @@ cs.get.rgb = function (string) {
1333
1334
  }
1334
1335
 
1335
1336
  if (match[4]) {
1336
- rgb[3] = parseFloat(match[4]);
1337
+ if (match[5]) {
1338
+ rgb[3] = parseFloat(match[4]) * 0.01;
1339
+ } else {
1340
+ rgb[3] = parseFloat(match[4]);
1341
+ }
1337
1342
  }
1338
1343
  } else if (match = string.match(per)) {
1339
1344
  for (i = 0; i < 3; i++) {
@@ -1341,19 +1346,22 @@ cs.get.rgb = function (string) {
1341
1346
  }
1342
1347
 
1343
1348
  if (match[4]) {
1344
- rgb[3] = parseFloat(match[4]);
1349
+ if (match[5]) {
1350
+ rgb[3] = parseFloat(match[4]) * 0.01;
1351
+ } else {
1352
+ rgb[3] = parseFloat(match[4]);
1353
+ }
1345
1354
  }
1346
1355
  } else if (match = string.match(keyword)) {
1347
1356
  if (match[1] === 'transparent') {
1348
1357
  return [0, 0, 0, 0];
1349
1358
  }
1350
1359
 
1351
- rgb = colorNames[match[1]];
1352
-
1353
- if (!rgb) {
1360
+ if (!hasOwnProperty.call(colorNames, match[1])) {
1354
1361
  return null;
1355
1362
  }
1356
1363
 
1364
+ rgb = colorNames[match[1]];
1357
1365
  rgb[3] = 1;
1358
1366
 
1359
1367
  return rgb;
@@ -1374,12 +1382,12 @@ cs.get.hsl = function (string) {
1374
1382
  return null;
1375
1383
  }
1376
1384
 
1377
- var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/;
1385
+ var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
1378
1386
  var match = string.match(hsl);
1379
1387
 
1380
1388
  if (match) {
1381
1389
  var alpha = parseFloat(match[4]);
1382
- var h = (parseFloat(match[1]) + 360) % 360;
1390
+ var h = ((parseFloat(match[1]) % 360) + 360) % 360;
1383
1391
  var s = clamp(parseFloat(match[2]), 0, 100);
1384
1392
  var l = clamp(parseFloat(match[3]), 0, 100);
1385
1393
  var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);
@@ -1395,7 +1403,7 @@ cs.get.hwb = function (string) {
1395
1403
  return null;
1396
1404
  }
1397
1405
 
1398
- var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/;
1406
+ var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
1399
1407
  var match = string.match(hwb);
1400
1408
 
1401
1409
  if (match) {
@@ -1474,7 +1482,7 @@ function clamp(num, min, max) {
1474
1482
  }
1475
1483
 
1476
1484
  function hexDouble(num) {
1477
- var str = num.toString(16).toUpperCase();
1485
+ var str = Math.round(num).toString(16).toUpperCase();
1478
1486
  return (str.length < 2) ? '0' + str : str;
1479
1487
  }
1480
1488
 
@@ -2042,6 +2050,7 @@ swizzle.wrap = function (fn) {
2042
2050
  "use strict";
2043
2051
  __webpack_require__.r(__webpack_exports__);
2044
2052
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2053
+ /* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource),
2045
2054
  /* harmony export */ __assign: () => (/* binding */ __assign),
2046
2055
  /* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator),
2047
2056
  /* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator),
@@ -2053,6 +2062,7 @@ __webpack_require__.r(__webpack_exports__);
2053
2062
  /* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet),
2054
2063
  /* harmony export */ __createBinding: () => (/* binding */ __createBinding),
2055
2064
  /* harmony export */ __decorate: () => (/* binding */ __decorate),
2065
+ /* harmony export */ __disposeResources: () => (/* binding */ __disposeResources),
2056
2066
  /* harmony export */ __esDecorate: () => (/* binding */ __esDecorate),
2057
2067
  /* harmony export */ __exportStar: () => (/* binding */ __exportStar),
2058
2068
  /* harmony export */ __extends: () => (/* binding */ __extends),
@@ -2065,6 +2075,7 @@ __webpack_require__.r(__webpack_exports__);
2065
2075
  /* harmony export */ __propKey: () => (/* binding */ __propKey),
2066
2076
  /* harmony export */ __read: () => (/* binding */ __read),
2067
2077
  /* harmony export */ __rest: () => (/* binding */ __rest),
2078
+ /* harmony export */ __rewriteRelativeImportExtension: () => (/* binding */ __rewriteRelativeImportExtension),
2068
2079
  /* harmony export */ __runInitializers: () => (/* binding */ __runInitializers),
2069
2080
  /* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName),
2070
2081
  /* harmony export */ __spread: () => (/* binding */ __spread),
@@ -2087,7 +2098,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
2087
2098
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2088
2099
  PERFORMANCE OF THIS SOFTWARE.
2089
2100
  ***************************************************************************** */
2090
- /* global Reflect, Promise */
2101
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
2091
2102
 
2092
2103
  var extendStatics = function(d, b) {
2093
2104
  extendStatics = Object.setPrototypeOf ||
@@ -2198,8 +2209,8 @@ function __awaiter(thisArg, _arguments, P, generator) {
2198
2209
  }
2199
2210
 
2200
2211
  function __generator(thisArg, body) {
2201
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2202
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2212
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
2213
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2203
2214
  function verb(n) { return function (v) { return step([n, v]); }; }
2204
2215
  function step(op) {
2205
2216
  if (f) throw new TypeError("Generator is already executing.");
@@ -2303,8 +2314,9 @@ function __await(v) {
2303
2314
  function __asyncGenerator(thisArg, _arguments, generator) {
2304
2315
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
2305
2316
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
2306
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
2307
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
2317
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
2318
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
2319
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
2308
2320
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
2309
2321
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
2310
2322
  function fulfill(value) { resume("next", value); }
@@ -2337,10 +2349,19 @@ var __setModuleDefault = Object.create ? (function(o, v) {
2337
2349
  o["default"] = v;
2338
2350
  };
2339
2351
 
2352
+ var ownKeys = function(o) {
2353
+ ownKeys = Object.getOwnPropertyNames || function (o) {
2354
+ var ar = [];
2355
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
2356
+ return ar;
2357
+ };
2358
+ return ownKeys(o);
2359
+ };
2360
+
2340
2361
  function __importStar(mod) {
2341
2362
  if (mod && mod.__esModule) return mod;
2342
2363
  var result = {};
2343
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
2364
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
2344
2365
  __setModuleDefault(result, mod);
2345
2366
  return result;
2346
2367
  }
@@ -2367,12 +2388,79 @@ function __classPrivateFieldIn(state, receiver) {
2367
2388
  return typeof state === "function" ? receiver === state : state.has(receiver);
2368
2389
  }
2369
2390
 
2391
+ function __addDisposableResource(env, value, async) {
2392
+ if (value !== null && value !== void 0) {
2393
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
2394
+ var dispose, inner;
2395
+ if (async) {
2396
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
2397
+ dispose = value[Symbol.asyncDispose];
2398
+ }
2399
+ if (dispose === void 0) {
2400
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
2401
+ dispose = value[Symbol.dispose];
2402
+ if (async) inner = dispose;
2403
+ }
2404
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
2405
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
2406
+ env.stack.push({ value: value, dispose: dispose, async: async });
2407
+ }
2408
+ else if (async) {
2409
+ env.stack.push({ async: true });
2410
+ }
2411
+ return value;
2412
+ }
2413
+
2414
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
2415
+ var e = new Error(message);
2416
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
2417
+ };
2418
+
2419
+ function __disposeResources(env) {
2420
+ function fail(e) {
2421
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
2422
+ env.hasError = true;
2423
+ }
2424
+ var r, s = 0;
2425
+ function next() {
2426
+ while (r = env.stack.pop()) {
2427
+ try {
2428
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
2429
+ if (r.dispose) {
2430
+ var result = r.dispose.call(r.value);
2431
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
2432
+ }
2433
+ else s |= 1;
2434
+ }
2435
+ catch (e) {
2436
+ fail(e);
2437
+ }
2438
+ }
2439
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
2440
+ if (env.hasError) throw env.error;
2441
+ }
2442
+ return next();
2443
+ }
2444
+
2445
+ function __rewriteRelativeImportExtension(path, preserveJsx) {
2446
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
2447
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
2448
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
2449
+ });
2450
+ }
2451
+ return path;
2452
+ }
2453
+
2370
2454
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2371
2455
  __extends,
2372
2456
  __assign,
2373
2457
  __rest,
2374
2458
  __decorate,
2375
2459
  __param,
2460
+ __esDecorate,
2461
+ __runInitializers,
2462
+ __propKey,
2463
+ __setFunctionName,
2376
2464
  __metadata,
2377
2465
  __awaiter,
2378
2466
  __generator,
@@ -2393,6 +2481,9 @@ function __classPrivateFieldIn(state, receiver) {
2393
2481
  __classPrivateFieldGet,
2394
2482
  __classPrivateFieldSet,
2395
2483
  __classPrivateFieldIn,
2484
+ __addDisposableResource,
2485
+ __disposeResources,
2486
+ __rewriteRelativeImportExtension,
2396
2487
  });
2397
2488
 
2398
2489
 
@@ -2459,7 +2550,7 @@ exports["default"] = getDarkColor;
2459
2550
 
2460
2551
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2461
2552
  exports.formatParagraphWithContentModel = exports.formatImageWithContentModel = exports.formatTableWithContentModel = exports.createEditorContextForEntity = exports.clearSelectedCells = exports.insertTableColumn = exports.insertTableRow = exports.insertEntity = exports.toggleCode = exports.setParagraphMargin = exports.adjustImageSelection = exports.setImageAltText = exports.adjustLinkSelection = exports.removeLink = exports.insertLink = exports.clearFormat = exports.getFormatState = exports.changeImage = exports.setImageBoxShadow = exports.setImageBorder = exports.setSpacing = exports.toggleBlockQuote = exports.setHeadingLevel = exports.setDirection = exports.setAlignment = exports.setIndentation = exports.setListStartNumber = exports.setListStyle = exports.insertImage = exports.splitTextSegment = exports.changeCapitalization = exports.applySegmentFormat = exports.changeFontSize = exports.setTextColor = exports.setFontSize = exports.setFontName = exports.setBackgroundColor = exports.toggleSuperscript = exports.toggleSubscript = exports.toggleStrikethrough = exports.toggleUnderline = exports.toggleItalic = exports.toggleBold = exports.toggleNumbering = exports.toggleBullet = exports.applyTableBorderFormat = exports.editTable = exports.setTableCellShade = exports.formatTable = exports.insertTable = void 0;
2462
- exports.adjustWordSelection = exports.queryContentModelBlocks = exports.getListAnnounceData = exports.getPromoteLink = exports.promoteLink = exports.matchLink = exports.setModelIndentation = exports.findListItemsInSameThread = exports.setModelListStartNumber = exports.setModelListStyle = exports.setListType = exports.formatInsertPointWithContentModel = exports.formatTextSegmentBeforeSelectionMarker = exports.formatSegmentWithContentModel = void 0;
2553
+ exports.adjustWordSelection = exports.queryContentModelBlocks = exports.getListAnnounceData = exports.getPromoteLink = exports.promoteLink = exports.matchLink = exports.getTextDirection = exports.setModelIndentation = exports.findListItemsInSameThread = exports.setModelListStartNumber = exports.setModelListStyle = exports.setListType = exports.formatInsertPointWithContentModel = exports.formatTextSegmentBeforeSelectionMarker = exports.formatSegmentWithContentModel = void 0;
2463
2554
  var insertTable_1 = __webpack_require__(/*! ./publicApi/table/insertTable */ "./packages/roosterjs-content-model-api/lib/publicApi/table/insertTable.ts");
2464
2555
  Object.defineProperty(exports, "insertTable", ({ enumerable: true, get: function () { return insertTable_1.insertTable; } }));
2465
2556
  var formatTable_1 = __webpack_require__(/*! ./publicApi/table/formatTable */ "./packages/roosterjs-content-model-api/lib/publicApi/table/formatTable.ts");
@@ -2576,6 +2667,8 @@ var findListItemsInSameThread_1 = __webpack_require__(/*! ./modelApi/list/findLi
2576
2667
  Object.defineProperty(exports, "findListItemsInSameThread", ({ enumerable: true, get: function () { return findListItemsInSameThread_1.findListItemsInSameThread; } }));
2577
2668
  var setModelIndentation_1 = __webpack_require__(/*! ./modelApi/block/setModelIndentation */ "./packages/roosterjs-content-model-api/lib/modelApi/block/setModelIndentation.ts");
2578
2669
  Object.defineProperty(exports, "setModelIndentation", ({ enumerable: true, get: function () { return setModelIndentation_1.setModelIndentation; } }));
2670
+ var setModelDirection_1 = __webpack_require__(/*! ./modelApi/block/setModelDirection */ "./packages/roosterjs-content-model-api/lib/modelApi/block/setModelDirection.ts");
2671
+ Object.defineProperty(exports, "getTextDirection", ({ enumerable: true, get: function () { return setModelDirection_1.getTextDirection; } }));
2579
2672
  var matchLink_1 = __webpack_require__(/*! ./modelApi/link/matchLink */ "./packages/roosterjs-content-model-api/lib/modelApi/link/matchLink.ts");
2580
2673
  Object.defineProperty(exports, "matchLink", ({ enumerable: true, get: function () { return matchLink_1.matchLink; } }));
2581
2674
  var promoteLink_1 = __webpack_require__(/*! ./modelApi/link/promoteLink */ "./packages/roosterjs-content-model-api/lib/modelApi/link/promoteLink.ts");
@@ -2676,15 +2769,12 @@ exports.setModelAlignment = setModelAlignment;
2676
2769
  "use strict";
2677
2770
 
2678
2771
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2679
- exports.setModelDirection = void 0;
2772
+ exports.getTextDirection = exports.setModelDirection = void 0;
2680
2773
  var findListItemsInSameThread_1 = __webpack_require__(/*! ../list/findListItemsInSameThread */ "./packages/roosterjs-content-model-api/lib/modelApi/list/findListItemsInSameThread.ts");
2681
2774
  var splitSelectedParagraphByBr_1 = __webpack_require__(/*! ./splitSelectedParagraphByBr */ "./packages/roosterjs-content-model-api/lib/modelApi/block/splitSelectedParagraphByBr.ts");
2682
2775
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
2683
- // Regexes for character direction detection
2684
- // Strongly typed RTL character ranges. Referenced unicode's DerivedBidiClass.txt, excluding things in the 2 bit range.
2685
- var RTL_CHAR_REGEX = /[\u0590-\u05FF\u0600-\u08FF\uFB1D-\uFDFF\uFE70-\uFEFF]/g;
2686
- var URL_CHAR_REGEX = /http\S+|www\S+|https\S+|<a\s+(?:[^>]*?\s+)?href=(["']).*?\1.*?>.*?<\/a>/g;
2687
- var WHITESPACE_REGEX = /\s/g;
2776
+ var FIRST_STRONG_CHAR_REGEX = new RegExp('[\\p{L}\\u200E\\u200F]', 'u');
2777
+ var RTL_CHAR_REGEX = new RegExp('[\\u0590-\\u08FF\\u200F\\uFB1D-\\uFDFF\\uFE70-\\uFEFF\\u{10840}-\\u{10FFF}\\u{1E800}-\\u{1E95F}]', 'u');
2688
2778
  /**
2689
2779
  * @internal
2690
2780
  */
@@ -2762,29 +2852,29 @@ function setProperty(format, key, value) {
2762
2852
  delete format[key];
2763
2853
  }
2764
2854
  }
2855
+ /**
2856
+ * Determine text direction from the first strong directional character
2857
+ * @param text Text to scan
2858
+ */
2859
+ function getTextDirection(text) {
2860
+ var _a;
2861
+ var firstStrongChar = (_a = text.match(FIRST_STRONG_CHAR_REGEX)) === null || _a === void 0 ? void 0 : _a[0];
2862
+ return firstStrongChar ? (RTL_CHAR_REGEX.test(firstStrongChar) ? 'rtl' : 'ltr') : undefined;
2863
+ }
2864
+ exports.getTextDirection = getTextDirection;
2765
2865
  // Designed to match browser's 'auto' detection, by scanning over the inner text until it hits a strong LTR/RTL character
2766
2866
  function determineTextDirection(block) {
2867
+ return getTextDirection(getTextContent(block)) || 'ltr';
2868
+ }
2869
+ function getTextContent(block) {
2767
2870
  if (block.blockType === 'Paragraph') {
2768
- var findTextSegements = block.segments.filter(function (seg) { return seg.segmentType === 'Text'; });
2769
- var innerText = findTextSegements.length > 0
2770
- ? findTextSegements.reduce(function (prev, seg) { return prev + seg.text; }, '')
2771
- : undefined;
2772
- if (!!innerText) {
2773
- // Remove links
2774
- innerText = innerText.replace(URL_CHAR_REGEX, '');
2775
- // Remove whitespace
2776
- innerText = innerText.replace(WHITESPACE_REGEX, '');
2777
- var rtlMatches = innerText.match(RTL_CHAR_REGEX);
2778
- var rtlCount = rtlMatches ? rtlMatches.length : 0;
2779
- var ltrCount = innerText.length - rtlCount;
2780
- return rtlCount > ltrCount ? 'rtl' : 'ltr';
2781
- }
2782
- else {
2783
- return 'ltr'; // Default to LTR if no text is found
2784
- }
2871
+ return block.segments.reduce(function (text, segment) { return text + (segment.segmentType === 'Text' ? segment.text : ''); }, '');
2872
+ }
2873
+ else if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(block, 'ListItem')) {
2874
+ return block.blocks.reduce(function (text, childBlock) { return text + getTextContent(childBlock); }, '');
2785
2875
  }
2786
2876
  else {
2787
- return 'ltr';
2877
+ return '';
2788
2878
  }
2789
2879
  }
2790
2880
 
@@ -5181,7 +5271,8 @@ function insertTableColumn(table, operation) {
5181
5271
  for (var i = sel === null || sel === void 0 ? void 0 : sel.firstColumn; i <= sel.lastColumn; i++) {
5182
5272
  table.rows.forEach(function (row) {
5183
5273
  var cell = row.cells[insertLeft ? sel.firstColumn : sel.lastColumn];
5184
- var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format, cell.dataset);
5274
+ var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(false, //spanLeft
5275
+ cell.spanAbove, cell.isHeader, cell.format, cell.dataset);
5185
5276
  (0, copyPreviousCellSegmentFormat_1.copyPreviousCellSegmentFormat)(cell, newCell);
5186
5277
  newCell.isSelected = true;
5187
5278
  row.cells.splice(insertLeft ? sel.firstColumn : sel.lastColumn + 1, 0, newCell);
@@ -5224,7 +5315,8 @@ function insertTableRow(table, operation) {
5224
5315
  table.rows.splice(insertAbove ? sel.firstRow : sel.lastRow + 1, 0, {
5225
5316
  format: (0, tslib_1.__assign)({}, sourceRow.format),
5226
5317
  cells: sourceRow.cells.map(function (cell) {
5227
- var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format, cell.dataset);
5318
+ var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, false, //spanAbove
5319
+ cell.isHeader, cell.format, cell.dataset);
5228
5320
  (0, copyPreviousCellSegmentFormat_1.copyPreviousCellSegmentFormat)(cell, newCell);
5229
5321
  newCell.isSelected = true;
5230
5322
  return newCell;
@@ -9156,7 +9248,7 @@ function exportContent(editor, mode, optionsOrCallbacks) {
9156
9248
  var clonedRoot = editor.getDOMHelper().getClonedRoot();
9157
9249
  if (editor.isDarkMode()) {
9158
9250
  (0, roosterjs_content_model_dom_1.transformColor)(clonedRoot, false /*includeSelf*/, 'darkToLight', editor.getColorManager(), {
9159
- tableBorders: editor.isExperimentalFeatureEnabled('TransformTableBorderColors'),
9251
+ tableBorders: true,
9160
9252
  });
9161
9253
  }
9162
9254
  return getHTMLFromDOM(editor, clonedRoot);
@@ -9233,95 +9325,6 @@ function removeCommentsFromHtml(html, marker, endId, startId) {
9233
9325
  }
9234
9326
 
9235
9327
 
9236
- /***/ },
9237
-
9238
- /***/ "./packages/roosterjs-content-model-core/lib/command/paste/createPasteFragment.ts"
9239
- /*!****************************************************************************************!*\
9240
- !*** ./packages/roosterjs-content-model-core/lib/command/paste/createPasteFragment.ts ***!
9241
- \****************************************************************************************/
9242
- (__unused_webpack_module, exports, __webpack_require__) {
9243
-
9244
- "use strict";
9245
-
9246
- Object.defineProperty(exports, "__esModule", ({ value: true }));
9247
- exports.createPasteFragment = void 0;
9248
- var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
9249
- var NBSP_HTML = '\u00A0';
9250
- var ENSP_HTML = '\u2002';
9251
- var TAB_SPACES = 6;
9252
- /**
9253
- * @internal
9254
- */
9255
- function createPasteFragment(document, clipboardData, pasteType, root) {
9256
- if (!clipboardData.text && pasteType === 'asPlainText' && root) {
9257
- clipboardData.text = root.textContent || clipboardData.text;
9258
- }
9259
- var imageDataUri = clipboardData.imageDataUri, text = clipboardData.text;
9260
- var fragment = document.createDocumentFragment();
9261
- if ((pasteType == 'asImage' && imageDataUri) ||
9262
- (pasteType != 'asPlainText' && !text && imageDataUri)) {
9263
- // Paste image
9264
- var img = document.createElement('img');
9265
- img.style.maxWidth = '100%';
9266
- img.src = imageDataUri;
9267
- fragment.appendChild(img);
9268
- }
9269
- else if (pasteType != 'asPlainText' && root) {
9270
- (0, roosterjs_content_model_dom_1.moveChildNodes)(fragment, root);
9271
- }
9272
- else if (text) {
9273
- text.split('\n').forEach(function (line, index, lines) {
9274
- line = line
9275
- .replace(/^ /g, NBSP_HTML)
9276
- .replace(/ $/g, NBSP_HTML)
9277
- .replace(/\r/g, '')
9278
- .replace(/ {2}/g, ' ' + NBSP_HTML);
9279
- if (line.includes('\t')) {
9280
- line = transformTabCharacters(line);
9281
- }
9282
- var textNode = document.createTextNode(line);
9283
- // There are 3 scenarios:
9284
- // 1. Single line: Paste as it is
9285
- // 2. Two lines: Add <br> between the lines
9286
- // 3. 3 or More lines, For first and last line, paste as it is. For middle lines, wrap with DIV, and add BR if it is empty line
9287
- if (lines.length == 2 && index == 0) {
9288
- // 1 of 2 lines scenario, add BR
9289
- fragment.appendChild(textNode);
9290
- fragment.appendChild(document.createElement('br'));
9291
- }
9292
- else if (index > 0 && index < lines.length - 1) {
9293
- // Middle line of >=3 lines scenario, wrap with DIV
9294
- fragment.appendChild((0, roosterjs_content_model_dom_1.wrap)(document, line == '' ? document.createElement('br') : textNode, 'div'));
9295
- }
9296
- else {
9297
- // All others, paste as it is
9298
- fragment.appendChild(textNode);
9299
- }
9300
- });
9301
- }
9302
- return fragment;
9303
- }
9304
- exports.createPasteFragment = createPasteFragment;
9305
- /**
9306
- * Transform \t characters into EN SPACE characters
9307
- * @param input string NOT containing \n characters
9308
- * @example t("\thello", 2) => "&ensp;&ensp;&ensp;&ensp;hello"
9309
- */
9310
- function transformTabCharacters(input, initialOffset) {
9311
- if (initialOffset === void 0) { initialOffset = 0; }
9312
- var line = input;
9313
- var tIndex;
9314
- while ((tIndex = line.indexOf('\t')) != -1) {
9315
- var lineBefore = line.slice(0, tIndex);
9316
- var lineAfter = line.slice(tIndex + 1);
9317
- var tabCount = TAB_SPACES - ((lineBefore.length + initialOffset) % TAB_SPACES);
9318
- var tabStr = Array(tabCount).fill(ENSP_HTML).join('');
9319
- line = lineBefore + tabStr + lineAfter;
9320
- }
9321
- return line;
9322
- }
9323
-
9324
-
9325
9328
  /***/ },
9326
9329
 
9327
9330
  /***/ "./packages/roosterjs-content-model-core/lib/command/paste/generatePasteOptionFromPlugins.ts"
@@ -9388,14 +9391,15 @@ var BlackColor = 'rgb(0,0,0)';
9388
9391
  */
9389
9392
  function mergePasteContent(editor, eventResult, isFirstPaste) {
9390
9393
  var fragment = eventResult.fragment, domToModelOption = eventResult.domToModelOption, customizedMerge = eventResult.customizedMerge, pasteType = eventResult.pasteType, clipboardData = eventResult.clipboardData, containsBlockElements = eventResult.containsBlockElements;
9391
- var shouldScrollCaretIntoView = !isImageOnlyFragment(fragment);
9394
+ var isImageOnly = isImageOnlyFragment(fragment);
9395
+ var shouldScrollCaretIntoView = !isImageOnly;
9392
9396
  editor.formatContentModel(function (model, context) {
9393
9397
  if (!isFirstPaste && clipboardData.modelBeforePaste) {
9394
9398
  var clonedModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
9395
9399
  model.blocks = clonedModel.blocks;
9396
9400
  }
9397
9401
  var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper(), editor.getExperimentalFeatures());
9398
- domToModelContext.segmentFormat = getSegmentFormatForPaste(model, pasteType);
9402
+ domToModelContext.segmentFormat = getSegmentFormatForPaste(model, pasteType, isImageOnly);
9399
9403
  var pasteModel = (0, roosterjs_content_model_dom_1.domToContentModel)(fragment, domToModelContext);
9400
9404
  var mergeOption = {
9401
9405
  mergeFormat: pasteType == 'mergeFormat' ? 'keepSourceEmphasisFormat' : 'none',
@@ -9419,14 +9423,16 @@ function mergePasteContent(editor, eventResult, isFirstPaste) {
9419
9423
  });
9420
9424
  }
9421
9425
  exports.mergePasteContent = mergePasteContent;
9422
- function getSegmentFormatForPaste(model, pasteType) {
9426
+ function getSegmentFormatForPaste(model, pasteType, isImageOnly) {
9423
9427
  var selectedSegment = (0, roosterjs_content_model_dom_1.getSelectedSegments)(model, true /*includeFormatHolder*/)[0];
9424
9428
  if (selectedSegment) {
9425
9429
  var result = (0, roosterjs_content_model_dom_1.getSegmentTextFormat)(selectedSegment);
9426
- if (pasteType == 'normal') {
9430
+ if (pasteType == 'normal' && !isImageOnly) {
9427
9431
  // When using normal paste (Keep source formatting) set the default text color to black when creating the
9428
9432
  // Model from the clipboard content, so the elements that do not contain any text color in their style
9429
9433
  // Are set to black. Otherwise, These segments would get the selected segments format or the default text set in the content.
9434
+ // Skip this when pasting an image only, since there is no text to apply the default color to, and forcing
9435
+ // black here would incorrectly become the pending format used for text typed right after the pasted image.
9430
9436
  result.textColor = BlackColor;
9431
9437
  }
9432
9438
  return result;
@@ -9479,7 +9485,6 @@ exports.paste = void 0;
9479
9485
  var cleanHtmlComments_1 = __webpack_require__(/*! ./cleanHtmlComments */ "./packages/roosterjs-content-model-core/lib/command/paste/cleanHtmlComments.ts");
9480
9486
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
9481
9487
  var convertInlineCss_1 = __webpack_require__(/*! ../createModelFromHtml/convertInlineCss */ "./packages/roosterjs-content-model-core/lib/command/createModelFromHtml/convertInlineCss.ts");
9482
- var createPasteFragment_1 = __webpack_require__(/*! ./createPasteFragment */ "./packages/roosterjs-content-model-core/lib/command/paste/createPasteFragment.ts");
9483
9488
  var generatePasteOptionFromPlugins_1 = __webpack_require__(/*! ./generatePasteOptionFromPlugins */ "./packages/roosterjs-content-model-core/lib/command/paste/generatePasteOptionFromPlugins.ts");
9484
9489
  var mergePasteContent_1 = __webpack_require__(/*! ./mergePasteContent */ "./packages/roosterjs-content-model-core/lib/command/paste/mergePasteContent.ts");
9485
9490
  var retrieveHtmlInfo_1 = __webpack_require__(/*! ./retrieveHtmlInfo */ "./packages/roosterjs-content-model-core/lib/command/paste/retrieveHtmlInfo.ts");
@@ -9513,7 +9518,7 @@ function paste(editor, clipboardData, pasteTypeOrGetter) {
9513
9518
  ? pasteTypeOrGetter(doc, clipboardData, editor.getEnvironment(), htmlFromClipboard.metadata)
9514
9519
  : pasteTypeOrGetter;
9515
9520
  // 3. Create target fragment
9516
- var sourceFragment = (0, createPasteFragment_1.createPasteFragment)(editor.getDocument(), clipboardData, pasteType, (_a = (clipboardData.rawHtml == clipboardData.html
9521
+ var sourceFragment = (0, roosterjs_content_model_dom_1.createPasteFragment)(editor.getDocument(), clipboardData, pasteType, (_a = (clipboardData.rawHtml == clipboardData.html
9517
9522
  ? doc
9518
9523
  : createDOMFromHtml(clipboardData.html, domCreator))) === null || _a === void 0 ? void 0 : _a.body);
9519
9524
  // 4. Trigger BeforePaste event to allow plugins modify the fragment
@@ -10605,7 +10610,7 @@ function restoreSnapshotColors(core, snapshot) {
10605
10610
  core.darkColorHandler.updateKnownColor(isDarkMode); // Pass no parameter to force update all colors
10606
10611
  if (!!snapshot.isDarkMode != !!isDarkMode) {
10607
10612
  (0, roosterjs_content_model_dom_1.transformColor)(core.physicalRoot, false /*includeSelf*/, isDarkMode ? 'lightToDark' : 'darkToLight', core.darkColorHandler, {
10608
- tableBorders: core.experimentalFeatures.indexOf('TransformTableBorderColors') > -1,
10613
+ tableBorders: true,
10609
10614
  });
10610
10615
  }
10611
10616
  }
@@ -11155,10 +11160,13 @@ function setRangeSelection(core, element, collapse) {
11155
11160
  "use strict";
11156
11161
 
11157
11162
  Object.defineProperty(exports, "__esModule", ({ value: true }));
11158
- exports.setTableCellsStyle = exports.removeTableCellsStyle = void 0;
11163
+ exports.setTableCellsStyle = exports.removeTableCellsStyle = exports.DOM_SELECTION_CSS_KEY = void 0;
11159
11164
  var ensureUniqueId_1 = __webpack_require__(/*! ../setEditorStyle/ensureUniqueId */ "./packages/roosterjs-content-model-core/lib/coreApi/setEditorStyle/ensureUniqueId.ts");
11160
11165
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
11161
- var DOM_SELECTION_CSS_KEY = '_DOMSelection';
11166
+ /**
11167
+ * @internal
11168
+ */
11169
+ exports.DOM_SELECTION_CSS_KEY = '_DOMSelection';
11162
11170
  var TABLE_ID = 'table';
11163
11171
  /**
11164
11172
  * @internal
@@ -11166,7 +11174,7 @@ var TABLE_ID = 'table';
11166
11174
  * @param core The EditorCore object
11167
11175
  */
11168
11176
  function removeTableCellsStyle(core) {
11169
- core.api.setEditorStyle(core, DOM_SELECTION_CSS_KEY, '');
11177
+ core.api.setEditorStyle(core, exports.DOM_SELECTION_CSS_KEY, '');
11170
11178
  }
11171
11179
  exports.removeTableCellsStyle = removeTableCellsStyle;
11172
11180
  /**
@@ -11191,7 +11199,7 @@ function setTableCellsStyle(core, table, parsedTable, firstCell, lastCell) {
11191
11199
  lastCell.col == ((_b = (_a = parsedTable[lastCell.row]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - 1
11192
11200
  ? [tableSelector, tableSelector + " *"]
11193
11201
  : buildTableSelectors(parsedTable, tableSelector, table, firstCell, lastCell);
11194
- core.api.setEditorStyle(core, DOM_SELECTION_CSS_KEY, "background-color:" + tableSelectionColor + "!important;", tableSelectors);
11202
+ core.api.setEditorStyle(core, exports.DOM_SELECTION_CSS_KEY, "background-color:" + tableSelectionColor + "!important;", tableSelectors);
11195
11203
  }
11196
11204
  exports.setTableCellsStyle = setTableCellsStyle;
11197
11205
  /**
@@ -11250,16 +11258,19 @@ function buildTableSelectors(parsedTable, tableSelector, table, firstCell, lastC
11250
11258
  "use strict";
11251
11259
 
11252
11260
  Object.defineProperty(exports, "__esModule", ({ value: true }));
11253
- exports.toggleCaret = void 0;
11261
+ exports.toggleCaret = exports.HIDE_CURSOR_CSS_KEY = void 0;
11254
11262
  var CARET_CSS_RULE = 'caret-color: transparent';
11255
- var HIDE_CURSOR_CSS_KEY = '_DOMSelectionHideCursor';
11263
+ /**
11264
+ * @internal
11265
+ */
11266
+ exports.HIDE_CURSOR_CSS_KEY = '_DOMSelectionHideCursor';
11256
11267
  /**
11257
11268
  * @internal Show/Hide caret in editor
11258
11269
  * @param core The editor core
11259
11270
  * @param isHiding True to hide caret, false to show caret
11260
11271
  */
11261
11272
  function toggleCaret(core, isHiding) {
11262
- core.api.setEditorStyle(core, HIDE_CURSOR_CSS_KEY, isHiding ? CARET_CSS_RULE : null);
11273
+ core.api.setEditorStyle(core, exports.HIDE_CURSOR_CSS_KEY, isHiding ? CARET_CSS_RULE : null);
11263
11274
  }
11264
11275
  exports.toggleCaret = toggleCaret;
11265
11276
 
@@ -11528,12 +11539,13 @@ exports.switchShadowEdit = switchShadowEdit;
11528
11539
  /*!****************************************************************************************!*\
11529
11540
  !*** ./packages/roosterjs-content-model-core/lib/coreApi/triggerEvent/triggerEvent.ts ***!
11530
11541
  \****************************************************************************************/
11531
- (__unused_webpack_module, exports) {
11542
+ (__unused_webpack_module, exports, __webpack_require__) {
11532
11543
 
11533
11544
  "use strict";
11534
11545
 
11535
11546
  Object.defineProperty(exports, "__esModule", ({ value: true }));
11536
11547
  exports.triggerEvent = void 0;
11548
+ var devtoolsHook_1 = __webpack_require__(/*! ../../utils/devtoolsHook */ "./packages/roosterjs-content-model-core/lib/utils/devtoolsHook.ts");
11537
11549
  var allowedEventsInShadowEdit = [
11538
11550
  'editorReady',
11539
11551
  'beforeDispose',
@@ -11557,6 +11569,7 @@ var triggerEvent = function (core, pluginEvent, broadcast) {
11557
11569
  }
11558
11570
  });
11559
11571
  }
11572
+ (0, devtoolsHook_1.notifyDevToolsPluginEvent)(core, pluginEvent);
11560
11573
  };
11561
11574
  exports.triggerEvent = triggerEvent;
11562
11575
  function handledExclusively(event, plugin) {
@@ -13375,7 +13388,7 @@ var EntityPlugin = /** @class */ (function () {
13375
13388
  };
13376
13389
  if (editor.isDarkMode()) {
13377
13390
  (0, roosterjs_content_model_dom_1.transformColor)(wrapper, true /*includeSelf*/, 'lightToDark', editor.getColorManager(), {
13378
- tableBorders: editor.isExperimentalFeatureEnabled('TransformTableBorderColors'),
13391
+ tableBorders: true,
13379
13392
  });
13380
13393
  }
13381
13394
  }
@@ -14491,6 +14504,8 @@ var findTableCellElement_1 = __webpack_require__(/*! ../../coreApi/setDOMSelecti
14491
14504
  var isSingleImageInSelection_1 = __webpack_require__(/*! ./isSingleImageInSelection */ "./packages/roosterjs-content-model-core/lib/corePlugin/selection/isSingleImageInSelection.ts");
14492
14505
  var normalizePos_1 = __webpack_require__(/*! ./normalizePos */ "./packages/roosterjs-content-model-core/lib/corePlugin/selection/normalizePos.ts");
14493
14506
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
14507
+ var setTableCellsStyle_1 = __webpack_require__(/*! ../../coreApi/setDOMSelection/setTableCellsStyle */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/setTableCellsStyle.ts");
14508
+ var toggleCaret_1 = __webpack_require__(/*! ../../coreApi/setDOMSelection/toggleCaret */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/toggleCaret.ts");
14494
14509
  var MouseLeftButton = 0;
14495
14510
  var MouseRightButton = 2;
14496
14511
  var Up = 'ArrowUp';
@@ -14516,6 +14531,7 @@ var SelectionPlugin = /** @class */ (function () {
14516
14531
  this.logicalRootDisposer = null;
14517
14532
  this.isSafari = false;
14518
14533
  this.scrollTopCache = 0;
14534
+ this.isInsideSelection = false;
14519
14535
  this.onMouseMove = function (event) {
14520
14536
  var _a, _b, _c;
14521
14537
  if (_this.editor && _this.state.tableSelection) {
@@ -14715,6 +14731,10 @@ var SelectionPlugin = /** @class */ (function () {
14715
14731
  this.onKeyDown(this.editor, event.rawEvent);
14716
14732
  break;
14717
14733
  case 'contentChanged':
14734
+ if (event.source == roosterjs_content_model_dom_1.ChangeSource.Drop && this.isInsideSelection) {
14735
+ this.setDOMSelection(null /* DOMSelection */, null /* tableSelection */);
14736
+ this.isInsideSelection = false;
14737
+ }
14718
14738
  this.state.tableSelection = null;
14719
14739
  break;
14720
14740
  case 'scroll':
@@ -14762,14 +14782,22 @@ var SelectionPlugin = /** @class */ (function () {
14762
14782
  return;
14763
14783
  }
14764
14784
  // Table selection
14785
+ var target = rawEvent.target;
14786
+ var tableSelection = target
14787
+ ? this.parseTableSelection(target, target, editor.getDOMHelper())
14788
+ : null;
14789
+ if ((selection === null || selection === void 0 ? void 0 : selection.type) == 'table' &&
14790
+ tableSelection &&
14791
+ this.isInsideTableSelection(selection, tableSelection) &&
14792
+ rawEvent.detail == 1) {
14793
+ this.isInsideSelection = true;
14794
+ this.setTableDragSelection(editor, rawEvent);
14795
+ return;
14796
+ }
14765
14797
  if ((selection === null || selection === void 0 ? void 0 : selection.type) == 'table' && rawEvent.button == MouseLeftButton) {
14766
14798
  this.setDOMSelection(null /*domSelection*/, null /*tableSelection*/);
14767
14799
  }
14768
- var tableSelection;
14769
- var target = rawEvent.target;
14770
- if (target &&
14771
- rawEvent.button == MouseLeftButton &&
14772
- (tableSelection = this.parseTableSelection(target, target, editor.getDOMHelper()))) {
14800
+ if (target && rawEvent.button == MouseLeftButton && tableSelection) {
14773
14801
  this.state.tableSelection = tableSelection;
14774
14802
  if (rawEvent.detail >= 3) {
14775
14803
  var lastCo = (0, findCoordinate_1.findCoordinate)(tableSelection.parsedTable, rawEvent.target, editor.getDOMHelper());
@@ -14789,6 +14817,10 @@ var SelectionPlugin = /** @class */ (function () {
14789
14817
  }
14790
14818
  };
14791
14819
  SelectionPlugin.prototype.onMouseUp = function () {
14820
+ if (this.isInsideSelection) {
14821
+ this.setDOMSelection(null /*domSelection*/, null /*tableSelection*/);
14822
+ this.isInsideSelection = false;
14823
+ }
14792
14824
  this.detachMouseEvent();
14793
14825
  };
14794
14826
  SelectionPlugin.prototype.onKeyDown = function (editor, rawEvent) {
@@ -14983,6 +15015,30 @@ var SelectionPlugin = /** @class */ (function () {
14983
15015
  }
14984
15016
  }
14985
15017
  };
15018
+ SelectionPlugin.prototype.isInsideTableSelection = function (prevSelection, tableSelection) {
15019
+ var selectedCell = tableSelection.firstCo;
15020
+ return (selectedCell.row >= prevSelection.firstRow &&
15021
+ selectedCell.row <= prevSelection.lastRow &&
15022
+ selectedCell.col >= prevSelection.firstColumn &&
15023
+ selectedCell.col <= prevSelection.lastColumn);
15024
+ };
15025
+ SelectionPlugin.prototype.setTableDragSelection = function (editor, rawEvent) {
15026
+ var doc = editor.getDocument();
15027
+ var cell = editor
15028
+ .getDOMHelper()
15029
+ .findClosestElementAncestor(rawEvent.target, 'td,th');
15030
+ if (cell) {
15031
+ // Hide the table cell selection styles (grey cell background applied by
15032
+ // setDOMSelection) and the native selection highlight so that only the
15033
+ // dragged content is visible while dragging. Also restore the caret which
15034
+ // is hidden while a table selection is active.
15035
+ editor.setEditorStyle(setTableCellsStyle_1.DOM_SELECTION_CSS_KEY, null /*cssRule*/);
15036
+ editor.setEditorStyle(toggleCaret_1.HIDE_CURSOR_CSS_KEY, null /*cssRule*/);
15037
+ var range = doc.createRange();
15038
+ range.selectNodeContents(cell);
15039
+ editor.getDOMHelper().setSelectionRange(range);
15040
+ }
15041
+ };
14986
15042
  SelectionPlugin.prototype.getTextOffset = function (editor, range, td, isKeyUp) {
14987
15043
  var doc = editor.getDocument();
14988
15044
  var cursorRect = range
@@ -15663,6 +15719,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
15663
15719
  exports.Editor = void 0;
15664
15720
  var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
15665
15721
  var createEditorCore_1 = __webpack_require__(/*! ./core/createEditorCore */ "./packages/roosterjs-content-model-core/lib/editor/core/createEditorCore.ts");
15722
+ var devtoolsHook_1 = __webpack_require__(/*! ../utils/devtoolsHook */ "./packages/roosterjs-content-model-core/lib/utils/devtoolsHook.ts");
15666
15723
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
15667
15724
  /**
15668
15725
  * The main editor class based on Content Model
@@ -15686,7 +15743,7 @@ var Editor = /** @class */ (function () {
15686
15743
  if (_this.isDarkMode()) {
15687
15744
  var colorHandler = _this.getColorManager();
15688
15745
  (0, roosterjs_content_model_dom_1.transformColor)(result, true /*includeSelf*/, 'darkToLight', colorHandler, {
15689
- tableBorders: _this.isExperimentalFeatureEnabled('TransformTableBorderColors'),
15746
+ tableBorders: true,
15690
15747
  });
15691
15748
  result.style.color = result.style.color || 'inherit';
15692
15749
  result.style.backgroundColor = result.style.backgroundColor || 'inherit';
@@ -15697,6 +15754,7 @@ var Editor = /** @class */ (function () {
15697
15754
  var initialModel = (_a = options.initialModel) !== null && _a !== void 0 ? _a : (0, roosterjs_content_model_dom_1.createEmptyModel)(this.core.format.defaultFormat);
15698
15755
  this.core.api.setContentModel(this.core, initialModel, { ignoreSelection: true }, undefined /*onNodeCreated*/, true /*isInitializing*/);
15699
15756
  this.core.plugins.forEach(function (plugin) { return plugin.initialize(_this); });
15757
+ (0, devtoolsHook_1.notifyDevToolsEditorCreated)(this, this.core);
15700
15758
  }
15701
15759
  /**
15702
15760
  * Dispose this editor, dispose all plugins and custom data
@@ -15704,6 +15762,7 @@ var Editor = /** @class */ (function () {
15704
15762
  Editor.prototype.dispose = function () {
15705
15763
  var _a;
15706
15764
  var core = this.getCore();
15765
+ (0, devtoolsHook_1.notifyDevToolsEditorDisposed)(this, core);
15707
15766
  for (var i = core.plugins.length - 1; i >= 0; i--) {
15708
15767
  var plugin = core.plugins[i];
15709
15768
  try {
@@ -15888,7 +15947,7 @@ var Editor = /** @class */ (function () {
15888
15947
  var core = this.getCore();
15889
15948
  if (!!isDarkMode != core.lifecycle.isDarkMode) {
15890
15949
  (0, roosterjs_content_model_dom_1.transformColor)(core.physicalRoot, false /*includeSelf*/, isDarkMode ? 'lightToDark' : 'darkToLight', core.darkColorHandler, {
15891
- tableBorders: this.isExperimentalFeatureEnabled('TransformTableBorderColors'),
15950
+ tableBorders: true,
15892
15951
  }, core.format.defaultFormat.textColor);
15893
15952
  core.lifecycle.isDarkMode = !!isDarkMode;
15894
15953
  core.api.triggerEvent(core, {
@@ -16337,10 +16396,11 @@ function createEditorCore(contentDiv, options) {
16337
16396
  }
16338
16397
  exports.createEditorCore = createEditorCore;
16339
16398
  function createEditorEnvironment(contentDiv, options) {
16340
- var _a, _b, _c;
16341
- var navigator = (_a = contentDiv.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.navigator;
16342
- var userAgent = (_b = navigator === null || navigator === void 0 ? void 0 : navigator.userAgent) !== null && _b !== void 0 ? _b : '';
16343
- var appVersion = (_c = navigator === null || navigator === void 0 ? void 0 : navigator.appVersion) !== null && _c !== void 0 ? _c : '';
16399
+ var _a, _b;
16400
+ var defaultView = contentDiv.ownerDocument.defaultView;
16401
+ var navigator = defaultView === null || defaultView === void 0 ? void 0 : defaultView.navigator;
16402
+ var userAgent = (_a = navigator === null || navigator === void 0 ? void 0 : navigator.userAgent) !== null && _a !== void 0 ? _a : '';
16403
+ var appVersion = (_b = navigator === null || navigator === void 0 ? void 0 : navigator.appVersion) !== null && _b !== void 0 ? _b : '';
16344
16404
  return {
16345
16405
  document: contentDiv.ownerDocument,
16346
16406
  domToModelSettings: (0, createEditorDefaultSettings_1.createDomToModelSettings)(options),
@@ -16352,6 +16412,7 @@ function createEditorEnvironment(contentDiv, options) {
16352
16412
  userAgent.indexOf('Chrome') < 0 &&
16353
16413
  userAgent.indexOf('Android') < 0,
16354
16414
  isMobileOrTablet: getIsMobileOrTablet(userAgent),
16415
+ isTouchSupported: !!defaultView && ('ontouchstart' in defaultView || !!(navigator === null || navigator === void 0 ? void 0 : navigator.maxTouchPoints)),
16355
16416
  };
16356
16417
  }
16357
16418
  function getIsMobileOrTablet(userAgent) {
@@ -16451,7 +16512,7 @@ exports.createModelToDomSettings = createModelToDomSettings;
16451
16512
  "use strict";
16452
16513
 
16453
16514
  Object.defineProperty(exports, "__esModule", ({ value: true }));
16454
- exports.getContentForCopy = exports.paste = exports.redo = exports.undo = exports.exportContent = exports.createModelFromHtml = exports.Editor = void 0;
16515
+ exports.RoosterJsDevToolsHookVersion = exports.getContentForCopy = exports.paste = exports.redo = exports.undo = exports.exportContent = exports.createModelFromHtml = exports.Editor = void 0;
16455
16516
  // Editor
16456
16517
  var Editor_1 = __webpack_require__(/*! ./editor/Editor */ "./packages/roosterjs-content-model-core/lib/editor/Editor.ts");
16457
16518
  Object.defineProperty(exports, "Editor", ({ enumerable: true, get: function () { return Editor_1.Editor; } }));
@@ -16466,9 +16527,12 @@ var redo_1 = __webpack_require__(/*! ./command/redo/redo */ "./packages/roosterj
16466
16527
  Object.defineProperty(exports, "redo", ({ enumerable: true, get: function () { return redo_1.redo; } }));
16467
16528
  var paste_1 = __webpack_require__(/*! ./command/paste/paste */ "./packages/roosterjs-content-model-core/lib/command/paste/paste.ts");
16468
16529
  Object.defineProperty(exports, "paste", ({ enumerable: true, get: function () { return paste_1.paste; } }));
16469
- //Editor copy helper
16530
+ // Editor copy helper
16470
16531
  var getContentForCopy_1 = __webpack_require__(/*! ./command/cutCopy/getContentForCopy */ "./packages/roosterjs-content-model-core/lib/command/cutCopy/getContentForCopy.ts");
16471
16532
  Object.defineProperty(exports, "getContentForCopy", ({ enumerable: true, get: function () { return getContentForCopy_1.getContentForCopy; } }));
16533
+ // Editor devtools
16534
+ var devtoolsHook_1 = __webpack_require__(/*! ./utils/devtoolsHook */ "./packages/roosterjs-content-model-core/lib/utils/devtoolsHook.ts");
16535
+ Object.defineProperty(exports, "RoosterJsDevToolsHookVersion", ({ enumerable: true, get: function () { return devtoolsHook_1.RoosterJsDevToolsHookVersion; } }));
16472
16536
 
16473
16537
 
16474
16538
  /***/ },
@@ -16844,6 +16908,105 @@ function createAriaLiveElement(document) {
16844
16908
  exports.createAriaLiveElement = createAriaLiveElement;
16845
16909
 
16846
16910
 
16911
+ /***/ },
16912
+
16913
+ /***/ "./packages/roosterjs-content-model-core/lib/utils/devtoolsHook.ts"
16914
+ /*!*************************************************************************!*\
16915
+ !*** ./packages/roosterjs-content-model-core/lib/utils/devtoolsHook.ts ***!
16916
+ \*************************************************************************/
16917
+ (__unused_webpack_module, exports) {
16918
+
16919
+ "use strict";
16920
+
16921
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
16922
+ exports.notifyDevToolsPluginEvent = exports.notifyDevToolsEditorDisposed = exports.notifyDevToolsEditorCreated = exports.RoosterJsDevToolsHookVersion = void 0;
16923
+ /**
16924
+ * The current version of the RoosterJS DevTools hook contract (see
16925
+ * {@link RoosterJsDevToolsHook}). The editor stamps this onto the installed hook so a developer
16926
+ * tool can adapt to the editor's capabilities. Bump this whenever the shape of the contract changes
16927
+ * in a way tools may need to detect.
16928
+ *
16929
+ * History:
16930
+ * - 1: onEditorCreated, onEditorDisposed, onPluginEvent
16931
+ */
16932
+ exports.RoosterJsDevToolsHookVersion = 1;
16933
+ // Maps an editor core back to its IEditor wrapper, so plugin events (which only carry the core)
16934
+ // can be attributed to the right editor when forwarded to developer tools.
16935
+ var coreToEditor = new WeakMap();
16936
+ /**
16937
+ * @internal
16938
+ * Notify developer tools that an editor has been created. Failures are swallowed so developer
16939
+ * tools can never break the editor.
16940
+ * @param editor The editor that was created
16941
+ * @param core The editor core, used to attribute later plugin events to this editor
16942
+ */
16943
+ function notifyDevToolsEditorCreated(editor, core) {
16944
+ safeCall(function () {
16945
+ var _a, _b;
16946
+ coreToEditor.set(core, editor);
16947
+ var win = editor.getDocument().defaultView;
16948
+ if (win) {
16949
+ var editors = (_a = win.__ROOSTERJS_DEVTOOLS_EDITORS__) !== null && _a !== void 0 ? _a : [];
16950
+ editors.push(editor);
16951
+ win.__ROOSTERJS_DEVTOOLS_EDITORS__ = editors;
16952
+ var hook = win.__ROOSTERJS_DEVTOOLS_HOOK__;
16953
+ if (hook) {
16954
+ hook.version = exports.RoosterJsDevToolsHookVersion;
16955
+ (_b = hook.onEditorCreated) === null || _b === void 0 ? void 0 : _b.call(hook, editor);
16956
+ }
16957
+ }
16958
+ });
16959
+ }
16960
+ exports.notifyDevToolsEditorCreated = notifyDevToolsEditorCreated;
16961
+ /**
16962
+ * @internal
16963
+ * Notify developer tools that an editor is about to be disposed. Failures are swallowed so
16964
+ * developer tools can never break the editor.
16965
+ * @param editor The editor that is being disposed
16966
+ * @param core The editor core to stop tracking
16967
+ */
16968
+ function notifyDevToolsEditorDisposed(editor, core) {
16969
+ safeCall(function () {
16970
+ var _a, _b;
16971
+ coreToEditor.delete(core);
16972
+ var win = editor.getDocument().defaultView;
16973
+ if (win) {
16974
+ var editors = win.__ROOSTERJS_DEVTOOLS_EDITORS__;
16975
+ var index = editors ? editors.indexOf(editor) : -1;
16976
+ if (editors && index >= 0) {
16977
+ editors.splice(index, 1);
16978
+ }
16979
+ (_b = (_a = win.__ROOSTERJS_DEVTOOLS_HOOK__) === null || _a === void 0 ? void 0 : _a.onEditorDisposed) === null || _b === void 0 ? void 0 : _b.call(_a, editor);
16980
+ }
16981
+ });
16982
+ }
16983
+ exports.notifyDevToolsEditorDisposed = notifyDevToolsEditorDisposed;
16984
+ /**
16985
+ * @internal
16986
+ * Forward a plugin event to developer tools, if a hook is installed. Failures are swallowed so
16987
+ * developer tools can never break the editor.
16988
+ * @param core The editor core that dispatched the event
16989
+ * @param event The plugin event being dispatched
16990
+ */
16991
+ function notifyDevToolsPluginEvent(core, event) {
16992
+ safeCall(function () {
16993
+ var _a, _b;
16994
+ var editor = coreToEditor.get(core);
16995
+ var win = editor === null || editor === void 0 ? void 0 : editor.getDocument().defaultView;
16996
+ if (editor && win) {
16997
+ (_b = (_a = win.__ROOSTERJS_DEVTOOLS_HOOK__) === null || _a === void 0 ? void 0 : _a.onPluginEvent) === null || _b === void 0 ? void 0 : _b.call(_a, editor, event);
16998
+ }
16999
+ });
17000
+ }
17001
+ exports.notifyDevToolsPluginEvent = notifyDevToolsPluginEvent;
17002
+ function safeCall(callback) {
17003
+ try {
17004
+ callback();
17005
+ }
17006
+ catch (_a) { }
17007
+ }
17008
+
17009
+
16847
17010
  /***/ },
16848
17011
 
16849
17012
  /***/ "./packages/roosterjs-content-model-core/lib/utils/domCreator.ts"
@@ -17018,6 +17181,9 @@ exports.defaultHTMLStyleMap = {
17018
17181
  marginBottom: '1em',
17019
17182
  },
17020
17183
  dt: blockElement,
17184
+ del: {
17185
+ textDecoration: 'line-through',
17186
+ },
17021
17187
  em: {
17022
17188
  fontStyle: 'italic',
17023
17189
  },
@@ -17271,6 +17437,10 @@ exports.ChangeSource = {
17271
17437
  * Content changed by replace
17272
17438
  */
17273
17439
  Replace: 'Replace',
17440
+ /**
17441
+ * Content changed by dragging content out the editor
17442
+ */
17443
+ DragOutOfEditor: 'DragOutOfEditor',
17274
17444
  };
17275
17445
 
17276
17446
 
@@ -17759,6 +17929,7 @@ exports.defaultProcessorMap = {
17759
17929
  h5: headingProcessor_1.headingProcessor,
17760
17930
  h6: headingProcessor_1.headingProcessor,
17761
17931
  hr: hrProcessor_1.hrProcessor,
17932
+ label: knownElementProcessor_1.knownElementProcessor,
17762
17933
  li: listItemProcessor_1.listItemProcessor,
17763
17934
  ol: listProcessor_1.listProcessor,
17764
17935
  p: pProcessor_1.pProcessor,
@@ -19782,6 +19953,53 @@ function cacheGetEventData(event, key, getter) {
19782
19953
  exports.cacheGetEventData = cacheGetEventData;
19783
19954
 
19784
19955
 
19956
+ /***/ },
19957
+
19958
+ /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/event/createPasteFragment.ts"
19959
+ /*!****************************************************************************************!*\
19960
+ !*** ./packages/roosterjs-content-model-dom/lib/domUtils/event/createPasteFragment.ts ***!
19961
+ \****************************************************************************************/
19962
+ (__unused_webpack_module, exports, __webpack_require__) {
19963
+
19964
+ "use strict";
19965
+
19966
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
19967
+ exports.createPasteFragment = void 0;
19968
+ var moveChildNodes_1 = __webpack_require__(/*! ../moveChildNodes */ "./packages/roosterjs-content-model-dom/lib/domUtils/moveChildNodes.ts");
19969
+ var textToFragment_1 = __webpack_require__(/*! ../textToFragment */ "./packages/roosterjs-content-model-dom/lib/domUtils/textToFragment.ts");
19970
+ /**
19971
+ * Create a document fragment from clipboard content using the specified paste type
19972
+ * @param document The document used to create the fragment
19973
+ * @param clipboardData The clipboard data to convert
19974
+ * @param pasteType The paste type that determines which clipboard content to use
19975
+ * @param root The optional root element containing the parsed HTML content
19976
+ * @returns A document fragment containing the content to paste
19977
+ */
19978
+ function createPasteFragment(document, clipboardData, pasteType, root) {
19979
+ if (!clipboardData.text && pasteType === 'asPlainText' && root) {
19980
+ clipboardData.text = root.textContent || clipboardData.text;
19981
+ }
19982
+ var imageDataUri = clipboardData.imageDataUri, text = clipboardData.text;
19983
+ var fragment = document.createDocumentFragment();
19984
+ if ((pasteType == 'asImage' && imageDataUri) ||
19985
+ (pasteType != 'asPlainText' && !text && imageDataUri)) {
19986
+ // Paste image
19987
+ var img = document.createElement('img');
19988
+ img.style.maxWidth = '100%';
19989
+ img.src = imageDataUri;
19990
+ fragment.appendChild(img);
19991
+ }
19992
+ else if (pasteType != 'asPlainText' && root) {
19993
+ (0, moveChildNodes_1.moveChildNodes)(fragment, root);
19994
+ }
19995
+ else if (text) {
19996
+ return (0, textToFragment_1.textToFragment)(text, document);
19997
+ }
19998
+ return fragment;
19999
+ }
20000
+ exports.createPasteFragment = createPasteFragment;
20001
+
20002
+
19785
20003
  /***/ },
19786
20004
 
19787
20005
  /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/event/eventUtils.ts"
@@ -19958,14 +20176,14 @@ function getNodePositionFromEvent(doc, domHelper, x, y) {
19958
20176
  // Firefox, Chrome, Edge, Safari, Opera
19959
20177
  var pos = doc.caretPositionFromPoint(x, y);
19960
20178
  if (pos && domHelper.isNodeInEditor(pos.offsetNode)) {
19961
- return { node: pos.offsetNode, offset: pos.offset };
20179
+ return normalizePosition(pos.offsetNode, pos.offset);
19962
20180
  }
19963
20181
  }
19964
20182
  if (doc.caretRangeFromPoint) {
19965
20183
  // Safari
19966
20184
  var range = doc.caretRangeFromPoint(x, y);
19967
20185
  if (range && domHelper.isNodeInEditor(range.startContainer)) {
19968
- return { node: range.startContainer, offset: range.startOffset };
20186
+ return normalizePosition(range.startContainer, range.startOffset);
19969
20187
  }
19970
20188
  }
19971
20189
  if (doc.elementFromPoint) {
@@ -19978,6 +20196,14 @@ function getNodePositionFromEvent(doc, domHelper, x, y) {
19978
20196
  return null;
19979
20197
  }
19980
20198
  exports.getNodePositionFromEvent = getNodePositionFromEvent;
20199
+ function normalizePosition(node, offset) {
20200
+ var _a;
20201
+ // Safari hit-testing in tableMoverTest returns offset 1 after the lone BR of an empty block.
20202
+ var normalizedOffset = offset == 1 && node.childNodes.length == 1 && ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.nodeName) == 'BR'
20203
+ ? 0
20204
+ : offset;
20205
+ return { node: node, offset: normalizedOffset };
20206
+ }
19981
20207
 
19982
20208
 
19983
20209
  /***/ },
@@ -21280,6 +21506,78 @@ function parseTableCells(table) {
21280
21506
  exports.parseTableCells = parseTableCells;
21281
21507
 
21282
21508
 
21509
+ /***/ },
21510
+
21511
+ /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/textToFragment.ts"
21512
+ /*!*****************************************************************************!*\
21513
+ !*** ./packages/roosterjs-content-model-dom/lib/domUtils/textToFragment.ts ***!
21514
+ \*****************************************************************************/
21515
+ (__unused_webpack_module, exports, __webpack_require__) {
21516
+
21517
+ "use strict";
21518
+
21519
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
21520
+ exports.textToFragment = void 0;
21521
+ var wrap_1 = __webpack_require__(/*! ./wrap */ "./packages/roosterjs-content-model-dom/lib/domUtils/wrap.ts");
21522
+ var NBSP_HTML = '\u00A0';
21523
+ var ENSP_HTML = '\u2002';
21524
+ var TAB_SPACES = 6;
21525
+ /**
21526
+ * @internal
21527
+ */
21528
+ function textToFragment(text, doc) {
21529
+ var fragment = doc.createDocumentFragment();
21530
+ text.split('\n').forEach(function (line, index, lines) {
21531
+ line = line
21532
+ .replace(/^ /g, NBSP_HTML)
21533
+ .replace(/ $/g, NBSP_HTML)
21534
+ .replace(/\r/g, '')
21535
+ .replace(/ {2}/g, ' ' + NBSP_HTML);
21536
+ if (line.includes('\t')) {
21537
+ line = transformTabCharacters(line);
21538
+ }
21539
+ var textNode = doc.createTextNode(line);
21540
+ // There are 3 scenarios:
21541
+ // 1. Single line: Paste as it is
21542
+ // 2. Two lines: Add <br> between the lines
21543
+ // 3. 3 or More lines, For first and last line, paste as it is. For middle lines, wrap with DIV, and add BR if it is empty line
21544
+ if (lines.length == 2 && index == 0) {
21545
+ // 1 of 2 lines scenario, add BR
21546
+ fragment.appendChild(textNode);
21547
+ fragment.appendChild(doc.createElement('br'));
21548
+ }
21549
+ else if (index > 0 && index < lines.length - 1) {
21550
+ // Middle line of >=3 lines scenario, wrap with DIV
21551
+ fragment.appendChild((0, wrap_1.wrap)(doc, line == '' ? doc.createElement('br') : textNode, 'div'));
21552
+ }
21553
+ else {
21554
+ // All others, paste as it is
21555
+ fragment.appendChild(textNode);
21556
+ }
21557
+ });
21558
+ return fragment;
21559
+ }
21560
+ exports.textToFragment = textToFragment;
21561
+ /**
21562
+ * Transform \t characters into EN SPACE characters
21563
+ * @param input string NOT containing \n characters
21564
+ * @example t("\thello", 2) => "&ensp;&ensp;&ensp;&ensp;hello"
21565
+ */
21566
+ function transformTabCharacters(input, initialOffset) {
21567
+ if (initialOffset === void 0) { initialOffset = 0; }
21568
+ var line = input;
21569
+ var tIndex;
21570
+ while ((tIndex = line.indexOf('\t')) != -1) {
21571
+ var lineBefore = line.slice(0, tIndex);
21572
+ var lineAfter = line.slice(tIndex + 1);
21573
+ var tabCount = TAB_SPACES - ((lineBefore.length + initialOffset) % TAB_SPACES);
21574
+ var tabStr = Array(tabCount).fill(ENSP_HTML).join('');
21575
+ line = lineBefore + tabStr + lineAfter;
21576
+ }
21577
+ return line;
21578
+ }
21579
+
21580
+
21283
21581
  /***/ },
21284
21582
 
21285
21583
  /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/toArray.ts"
@@ -21872,41 +22170,35 @@ var DEFAULT_COLOR = '#000000';
21872
22170
  */
21873
22171
  exports.borderColorFormatHandler = {
21874
22172
  parse: function (format, element, context) {
21875
- if (context.experimentalFeatures &&
21876
- context.experimentalFeatures.indexOf('TransformTableBorderColors') > -1) {
21877
- borderKeys_1.BorderKeys.forEach(function (key) {
21878
- var width = element.style.getPropertyValue(BorderWidthKeyMap[key]);
21879
- var style = element.style.getPropertyValue(BorderStyleKeyMap[key]);
21880
- var color = (0, color_1.retrieveElementColor)(element, key);
21881
- var borderColor = color == 'initial' ? DEFAULT_COLOR : color;
21882
- if (borderColor) {
21883
- var lightModeColor = (0, color_1.getLightModeColor)(borderColor, !!context.isDarkMode, context.darkColorHandler);
21884
- format[key] = (0, borderValues_1.combineBorderValue)({
21885
- width: width,
21886
- style: style,
21887
- color: lightModeColor,
21888
- });
21889
- }
21890
- });
21891
- }
22173
+ borderKeys_1.BorderKeys.forEach(function (key) {
22174
+ var width = element.style.getPropertyValue(BorderWidthKeyMap[key]);
22175
+ var style = element.style.getPropertyValue(BorderStyleKeyMap[key]);
22176
+ var color = (0, color_1.retrieveElementColor)(element, key);
22177
+ var borderColor = color == 'initial' ? DEFAULT_COLOR : color;
22178
+ if (borderColor) {
22179
+ var lightModeColor = (0, color_1.getLightModeColor)(borderColor, !!context.isDarkMode, context.darkColorHandler);
22180
+ format[key] = (0, borderValues_1.combineBorderValue)({
22181
+ width: width,
22182
+ style: style,
22183
+ color: lightModeColor,
22184
+ });
22185
+ }
22186
+ });
21892
22187
  },
21893
22188
  apply: function (format, element, context) {
21894
- if (context.experimentalFeatures &&
21895
- context.experimentalFeatures.indexOf('TransformTableBorderColors') > -1) {
21896
- borderKeys_1.BorderKeys.forEach(function (key) {
21897
- var value = format[key];
21898
- if (value) {
21899
- var borderValues = (0, borderValues_1.extractBorderValues)(value);
21900
- var borderColorProperty = borderKeys_1.BorderColorKeyMap[key];
21901
- if (borderValues.color) {
21902
- var transformedColor = (0, color_1.adaptColor)(element, borderValues.color, 'border', !!context.isDarkMode, context.darkColorHandler);
21903
- if (transformedColor) {
21904
- element.style.setProperty(borderColorProperty, transformedColor);
21905
- }
22189
+ borderKeys_1.BorderKeys.forEach(function (key) {
22190
+ var value = format[key];
22191
+ if (value) {
22192
+ var borderValues = (0, borderValues_1.extractBorderValues)(value);
22193
+ var borderColorProperty = borderKeys_1.BorderColorKeyMap[key];
22194
+ if (borderValues.color) {
22195
+ var transformedColor = (0, color_1.adaptColor)(element, borderValues.color, 'border', !!context.isDarkMode, context.darkColorHandler);
22196
+ if (transformedColor) {
22197
+ element.style.setProperty(borderColorProperty, transformedColor);
21906
22198
  }
21907
22199
  }
21908
- });
21909
- }
22200
+ }
22201
+ });
21910
22202
  },
21911
22203
  };
21912
22204
 
@@ -23865,8 +24157,8 @@ exports.shouldSetValue = shouldSetValue;
23865
24157
  Object.defineProperty(exports, "__esModule", ({ value: true }));
23866
24158
  exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.formatContainerProcessor = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
23867
24159
  exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addData = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
23868
- exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModelForPaste = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.trimModelForSelection = void 0;
23869
- exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = void 0;
24160
+ exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModelForPaste = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.createPasteFragment = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.trimModelForSelection = void 0;
24161
+ exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = void 0;
23870
24162
  var domToContentModel_1 = __webpack_require__(/*! ./domToModel/domToContentModel */ "./packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts");
23871
24163
  Object.defineProperty(exports, "domToContentModel", ({ enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } }));
23872
24164
  var contentModelToDom_1 = __webpack_require__(/*! ./modelToDom/contentModelToDom */ "./packages/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts");
@@ -24066,6 +24358,8 @@ var normalizeFontFamily_1 = __webpack_require__(/*! ./domUtils/style/normalizeFo
24066
24358
  Object.defineProperty(exports, "normalizeFontFamily", ({ enumerable: true, get: function () { return normalizeFontFamily_1.normalizeFontFamily; } }));
24067
24359
  var extractClipboardItems_1 = __webpack_require__(/*! ./domUtils/event/extractClipboardItems */ "./packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts");
24068
24360
  Object.defineProperty(exports, "extractClipboardItems", ({ enumerable: true, get: function () { return extractClipboardItems_1.extractClipboardItems; } }));
24361
+ var createPasteFragment_1 = __webpack_require__(/*! ./domUtils/event/createPasteFragment */ "./packages/roosterjs-content-model-dom/lib/domUtils/event/createPasteFragment.ts");
24362
+ Object.defineProperty(exports, "createPasteFragment", ({ enumerable: true, get: function () { return createPasteFragment_1.createPasteFragment; } }));
24069
24363
  var cacheGetEventData_1 = __webpack_require__(/*! ./domUtils/event/cacheGetEventData */ "./packages/roosterjs-content-model-dom/lib/domUtils/event/cacheGetEventData.ts");
24070
24364
  Object.defineProperty(exports, "cacheGetEventData", ({ enumerable: true, get: function () { return cacheGetEventData_1.cacheGetEventData; } }));
24071
24365
  var paragraphMarker_1 = __webpack_require__(/*! ./domUtils/hiddenProperties/paragraphMarker */ "./packages/roosterjs-content-model-dom/lib/domUtils/hiddenProperties/paragraphMarker.ts");
@@ -25807,12 +26101,102 @@ function applyTableFormat(table, newFormat, keepCellShade) {
25807
26101
  var effectiveMetadata = (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, DEFAULT_FORMAT), format), newFormat);
25808
26102
  var metaOverrides = updateOverrides(rows, !keepCellShade);
25809
26103
  formatCells(rows, effectiveMetadata, metaOverrides);
26104
+ if ((format === null || format === void 0 ? void 0 : format.hasFirstColumn) &&
26105
+ (!effectiveMetadata.hasFirstColumn || (newFormat === null || newFormat === void 0 ? void 0 : newFormat.firstColumnCustomStyles) !== undefined)) {
26106
+ clearFirstColumnTextFormat(rows, format.firstColumnCustomStyles);
26107
+ }
26108
+ if ((format === null || format === void 0 ? void 0 : format.hasHeaderRow) &&
26109
+ (!effectiveMetadata.hasHeaderRow || (newFormat === null || newFormat === void 0 ? void 0 : newFormat.headerRowCustomStyles) !== undefined)) {
26110
+ clearHeaderRowTextFormat(rows, format.headerRowCustomStyles);
26111
+ }
25810
26112
  setFirstColumnFormatBorders(rows, effectiveMetadata);
25811
26113
  setHeaderRowFormat(rows, effectiveMetadata, metaOverrides);
25812
26114
  return effectiveMetadata;
25813
26115
  });
25814
26116
  }
25815
26117
  exports.applyTableFormat = applyTableFormat;
26118
+ function clearFirstColumnTextFormat(rows, customStyles) {
26119
+ var _a;
26120
+ var fontWeight = (_a = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _a !== void 0 ? _a : 'bold';
26121
+ rows.forEach(function (row) {
26122
+ var e_1, _a, e_2, _b;
26123
+ var cell = row.cells[0] && (0, mutate_1.mutateBlock)(row.cells[0]);
26124
+ if (cell) {
26125
+ clearStyleIfMatch(cell.format, 'fontWeight', fontWeight);
26126
+ clearStyleIfMatch(cell.format, 'textAlign', customStyles === null || customStyles === void 0 ? void 0 : customStyles.textAlign);
26127
+ try {
26128
+ for (var _c = (0, tslib_1.__values)(cell.blocks), _d = _c.next(); !_d.done; _d = _c.next()) {
26129
+ var block = _d.value;
26130
+ if (block.blockType == 'Paragraph') {
26131
+ var mutateParagraph = (0, mutate_1.mutateBlock)(block);
26132
+ try {
26133
+ for (var _e = (e_2 = void 0, (0, tslib_1.__values)(mutateParagraph.segments)), _f = _e.next(); !_f.done; _f = _e.next()) {
26134
+ var cellSegment = _f.value;
26135
+ clearStyleIfMatch(cellSegment.format, 'fontWeight', fontWeight);
26136
+ clearStyleIfMatch(cellSegment.format, 'italic', customStyles === null || customStyles === void 0 ? void 0 : customStyles.italic);
26137
+ }
26138
+ }
26139
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
26140
+ finally {
26141
+ try {
26142
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
26143
+ }
26144
+ finally { if (e_2) throw e_2.error; }
26145
+ }
26146
+ clearStyleIfMatch(block.format, 'textAlign', customStyles === null || customStyles === void 0 ? void 0 : customStyles.textAlign);
26147
+ }
26148
+ }
26149
+ }
26150
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
26151
+ finally {
26152
+ try {
26153
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
26154
+ }
26155
+ finally { if (e_1) throw e_1.error; }
26156
+ }
26157
+ }
26158
+ });
26159
+ }
26160
+ function clearHeaderRowTextFormat(rows, customStyles) {
26161
+ var _a, _b;
26162
+ var fontWeight = (_a = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _a !== void 0 ? _a : 'bold';
26163
+ (_b = rows[0]) === null || _b === void 0 ? void 0 : _b.cells.forEach(function (readonlyCell) {
26164
+ var e_3, _a, e_4, _b;
26165
+ var cell = (0, mutate_1.mutateBlock)(readonlyCell);
26166
+ clearStyleIfMatch(cell.format, 'fontWeight', fontWeight);
26167
+ clearStyleIfMatch(cell.format, 'textAlign', customStyles === null || customStyles === void 0 ? void 0 : customStyles.textAlign);
26168
+ try {
26169
+ for (var _c = (0, tslib_1.__values)(cell.blocks), _d = _c.next(); !_d.done; _d = _c.next()) {
26170
+ var block = _d.value;
26171
+ if (block.blockType == 'Paragraph') {
26172
+ var mutateParagraph = (0, mutate_1.mutateBlock)(block);
26173
+ try {
26174
+ for (var _e = (e_4 = void 0, (0, tslib_1.__values)(mutateParagraph.segments)), _f = _e.next(); !_f.done; _f = _e.next()) {
26175
+ var cellSegment = _f.value;
26176
+ clearStyleIfMatch(cellSegment.format, 'fontWeight', fontWeight);
26177
+ clearStyleIfMatch(cellSegment.format, 'italic', customStyles === null || customStyles === void 0 ? void 0 : customStyles.italic);
26178
+ }
26179
+ }
26180
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
26181
+ finally {
26182
+ try {
26183
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
26184
+ }
26185
+ finally { if (e_4) throw e_4.error; }
26186
+ }
26187
+ clearStyleIfMatch(block.format, 'textAlign', customStyles === null || customStyles === void 0 ? void 0 : customStyles.textAlign);
26188
+ }
26189
+ }
26190
+ }
26191
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
26192
+ finally {
26193
+ try {
26194
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
26195
+ }
26196
+ finally { if (e_3) throw e_3.error; }
26197
+ }
26198
+ });
26199
+ }
25816
26200
  function updateOverrides(rows, removeCellShade) {
25817
26201
  var overrides = {
25818
26202
  bgColorOverrides: [],
@@ -25973,7 +26357,8 @@ function setFirstColumnFormatBorders(rows, format) {
25973
26357
  var customStyles = format.hasFirstColumn ? format.firstColumnCustomStyles : undefined;
25974
26358
  rows.forEach(function (row, rowIndex) {
25975
26359
  row.cells.forEach(function (readonlyCell, cellIndex) {
25976
- var e_1, _a, e_2, _b;
26360
+ var e_5, _a, e_6, _b;
26361
+ var _c, _d;
25977
26362
  var cell = (0, mutate_1.mutateBlock)(readonlyCell);
25978
26363
  if (cellIndex === 0) {
25979
26364
  if (rowIndex == 0) {
@@ -25990,44 +26375,47 @@ function setFirstColumnFormatBorders(rows, format) {
25990
26375
  }
25991
26376
  }
25992
26377
  try {
25993
- for (var _c = (0, tslib_1.__values)(cell.blocks), _d = _c.next(); !_d.done; _d = _c.next()) {
25994
- var block = _d.value;
26378
+ for (var _e = (0, tslib_1.__values)(cell.blocks), _f = _e.next(); !_f.done; _f = _e.next()) {
26379
+ var block = _f.value;
25995
26380
  if (block.blockType == 'Paragraph') {
26381
+ var mutateParagraph = (0, mutate_1.mutateBlock)(block);
25996
26382
  try {
25997
- for (var _e = (e_2 = void 0, (0, tslib_1.__values)(block.segments)), _f = _e.next(); !_f.done; _f = _e.next()) {
25998
- var segment = _f.value;
25999
- (0, mutate_1.mutateSegment)(block, segment, function (cellSegment) {
26000
- var _a, _b;
26001
- if (format.hasFirstColumn) {
26002
- setStyleIfDefined(cellSegment.format, 'fontWeight', (_a = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _a !== void 0 ? _a : 'bold');
26003
- setStyleIfDefined(cell.format, 'textAlign', customStyles === null || customStyles === void 0 ? void 0 : customStyles.textAlign);
26004
- setStyleIfDefined(cell.format, 'fontWeight', (_b = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _b !== void 0 ? _b : 'bold');
26005
- setStyleIfDefined(cellSegment.format, 'italic', customStyles === null || customStyles === void 0 ? void 0 : customStyles.italic);
26383
+ for (var _g = (e_6 = void 0, (0, tslib_1.__values)(mutateParagraph.segments)), _h = _g.next(); !_h.done; _h = _g.next()) {
26384
+ var cellSegment = _h.value;
26385
+ if (format.hasFirstColumn) {
26386
+ setStyleIfDefined(cellSegment.format, 'fontWeight', (_c = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _c !== void 0 ? _c : 'bold');
26387
+ setStyleIfDefined(cell.format, 'textAlign', customStyles === null || customStyles === void 0 ? void 0 : customStyles.textAlign);
26388
+ setStyleIfDefined(cell.format, 'fontWeight', (_d = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _d !== void 0 ? _d : 'bold');
26389
+ if (customStyles === null || customStyles === void 0 ? void 0 : customStyles.italic) {
26390
+ cellSegment.format.italic = true;
26006
26391
  }
26007
- else if (cellSegment.format.fontWeight == 'bold' &&
26008
- cell.format.fontWeight == 'bold') {
26009
- delete cellSegment.format.fontWeight;
26010
- delete cell.format.fontWeight;
26392
+ else if ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.italic) === false) {
26393
+ delete cellSegment.format.italic;
26011
26394
  }
26012
- });
26395
+ }
26396
+ else if (cellSegment.format.fontWeight == 'bold' &&
26397
+ cell.format.fontWeight == 'bold') {
26398
+ delete cellSegment.format.fontWeight;
26399
+ delete cell.format.fontWeight;
26400
+ }
26013
26401
  }
26014
26402
  }
26015
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
26403
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
26016
26404
  finally {
26017
26405
  try {
26018
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
26406
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
26019
26407
  }
26020
- finally { if (e_2) throw e_2.error; }
26408
+ finally { if (e_6) throw e_6.error; }
26021
26409
  }
26022
26410
  }
26023
26411
  }
26024
26412
  }
26025
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
26413
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
26026
26414
  finally {
26027
26415
  try {
26028
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
26416
+ if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
26029
26417
  }
26030
- finally { if (e_1) throw e_1.error; }
26418
+ finally { if (e_5) throw e_5.error; }
26031
26419
  }
26032
26420
  }
26033
26421
  });
@@ -26044,6 +26432,11 @@ function setStyleIfDefined(format, key, value) {
26044
26432
  format[key] = value;
26045
26433
  }
26046
26434
  }
26435
+ function clearStyleIfMatch(format, key, value) {
26436
+ if (value !== undefined && format[key] === value) {
26437
+ delete format[key];
26438
+ }
26439
+ }
26047
26440
  function setHeaderRowFormat(rows, format, metaOverrides) {
26048
26441
  var _a;
26049
26442
  if (!format.hasHeaderRow) {
@@ -26052,11 +26445,12 @@ function setHeaderRowFormat(rows, format, metaOverrides) {
26052
26445
  var rowIndex = 0;
26053
26446
  var customStyles = format.headerRowCustomStyles;
26054
26447
  (_a = rows[rowIndex]) === null || _a === void 0 ? void 0 : _a.cells.forEach(function (readonlyCell, cellIndex) {
26055
- var e_3, _a, e_4, _b;
26448
+ var e_7, _a, e_8, _b;
26056
26449
  var _c, _d, _e, _f;
26057
26450
  var cell = (0, mutate_1.mutateBlock)(readonlyCell);
26451
+ var fontWeight = (_c = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _c !== void 0 ? _c : 'bold';
26058
26452
  cell.isHeader = true;
26059
- cell.format.fontWeight = (_c = customStyles === null || customStyles === void 0 ? void 0 : customStyles.fontWeight) !== null && _c !== void 0 ? _c : 'bold';
26453
+ cell.format.fontWeight = fontWeight;
26060
26454
  if (format.headerRowColor) {
26061
26455
  if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {
26062
26456
  (0, setTableCellBackgroundColor_1.setTableCellBackgroundColor)(cell, format.headerRowColor, false /*isColorOverride*/, true /*applyToSegments*/);
@@ -26068,40 +26462,40 @@ function setHeaderRowFormat(rows, format, metaOverrides) {
26068
26462
  if (customStyles) {
26069
26463
  setStyleIfDefined(cell.format, 'textAlign', customStyles.textAlign);
26070
26464
  setBorderColorIfExists(cell.format, 'borderBottom', customStyles.borderBottomColor);
26071
- try {
26072
- for (var _g = (0, tslib_1.__values)(cell.blocks), _h = _g.next(); !_h.done; _h = _g.next()) {
26073
- var block = _h.value;
26074
- if (block.blockType == 'Paragraph') {
26075
- try {
26076
- for (var _j = (e_4 = void 0, (0, tslib_1.__values)(block.segments)), _k = _j.next(); !_k.done; _k = _j.next()) {
26077
- var segment = _k.value;
26078
- (0, mutate_1.mutateSegment)(block, segment, function (cellSegment) {
26079
- if (customStyles.italic) {
26080
- cellSegment.format.italic = customStyles.italic;
26081
- }
26082
- else if (cellSegment.format.italic) {
26083
- delete cellSegment.format.italic;
26084
- }
26085
- });
26465
+ }
26466
+ try {
26467
+ for (var _g = (0, tslib_1.__values)(cell.blocks), _h = _g.next(); !_h.done; _h = _g.next()) {
26468
+ var block = _h.value;
26469
+ if (block.blockType == 'Paragraph') {
26470
+ var mutateParagraph = (0, mutate_1.mutateBlock)(block);
26471
+ try {
26472
+ for (var _j = (e_8 = void 0, (0, tslib_1.__values)(mutateParagraph.segments)), _k = _j.next(); !_k.done; _k = _j.next()) {
26473
+ var cellSegment = _k.value;
26474
+ cellSegment.format.fontWeight = fontWeight;
26475
+ if (customStyles === null || customStyles === void 0 ? void 0 : customStyles.italic) {
26476
+ cellSegment.format.italic = true;
26086
26477
  }
26087
- }
26088
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
26089
- finally {
26090
- try {
26091
- if (_k && !_k.done && (_b = _j.return)) _b.call(_j);
26478
+ else if ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.italic) === false) {
26479
+ delete cellSegment.format.italic;
26092
26480
  }
26093
- finally { if (e_4) throw e_4.error; }
26094
26481
  }
26095
26482
  }
26483
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
26484
+ finally {
26485
+ try {
26486
+ if (_k && !_k.done && (_b = _j.return)) _b.call(_j);
26487
+ }
26488
+ finally { if (e_8) throw e_8.error; }
26489
+ }
26096
26490
  }
26097
26491
  }
26098
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
26099
- finally {
26100
- try {
26101
- if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
26102
- }
26103
- finally { if (e_3) throw e_3.error; }
26492
+ }
26493
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
26494
+ finally {
26495
+ try {
26496
+ if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
26104
26497
  }
26498
+ finally { if (e_7) throw e_7.error; }
26105
26499
  }
26106
26500
  });
26107
26501
  }
@@ -26909,6 +27303,7 @@ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.m
26909
27303
  var addBlock_1 = __webpack_require__(/*! ../common/addBlock */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts");
26910
27304
  var addSegment_1 = __webpack_require__(/*! ../common/addSegment */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts");
26911
27305
  var applyTableFormat_1 = __webpack_require__(/*! ./applyTableFormat */ "./packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts");
27306
+ var createBr_1 = __webpack_require__(/*! ../creators/createBr */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts");
26912
27307
  var createListItem_1 = __webpack_require__(/*! ../creators/createListItem */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts");
26913
27308
  var createParagraph_1 = __webpack_require__(/*! ../creators/createParagraph */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts");
26914
27309
  var createSelectionMarker_1 = __webpack_require__(/*! ../creators/createSelectionMarker */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts");
@@ -26931,11 +27326,14 @@ var KeysOfSegmentFormat = (0, getObjectKeys_1.getObjectKeys)(EmptySegmentFormat_
26931
27326
  * @returns Insert point after merge, or null if there is no insert point
26932
27327
  */
26933
27328
  function mergeModel(target, source, context, options) {
26934
- var _a;
27329
+ var _a, _b;
26935
27330
  var insertPosition = (_a = options === null || options === void 0 ? void 0 : options.insertPosition) !== null && _a !== void 0 ? _a : (0, deleteSelection_1.deleteSelection)(target, [], context).insertPoint;
26936
- var _b = options || {}, addParagraphAfterMergedContent = _b.addParagraphAfterMergedContent, mergeFormat = _b.mergeFormat, mergeTable = _b.mergeTable;
27331
+ var _c = options || {}, addParagraphAfterMergedContent = _c.addParagraphAfterMergedContent, mergeFormat = _c.mergeFormat, mergeParagraphAfterList = _c.mergeParagraphAfterList, mergeTable = _c.mergeTable;
27332
+ if (mergeParagraphAfterList && insertPosition && ((_b = source.blocks[0]) === null || _b === void 0 ? void 0 : _b.blockType) == 'Paragraph') {
27333
+ moveParagraphAfterListIntoList(insertPosition);
27334
+ }
26937
27335
  if (addParagraphAfterMergedContent && !mergeTable) {
26938
- var _c = insertPosition || {}, paragraph = _c.paragraph, marker = _c.marker;
27336
+ var _d = insertPosition || {}, paragraph = _d.paragraph, marker = _d.marker;
26939
27337
  var newPara = (0, createParagraph_1.createParagraph)(false /* isImplicit */, paragraph === null || paragraph === void 0 ? void 0 : paragraph.format, marker === null || marker === void 0 ? void 0 : marker.format);
26940
27338
  (0, addBlock_1.addBlock)(source, newPara);
26941
27339
  }
@@ -26983,6 +27381,22 @@ function mergeModel(target, source, context, options) {
26983
27381
  return insertPosition;
26984
27382
  }
26985
27383
  exports.mergeModel = mergeModel;
27384
+ function moveParagraphAfterListIntoList(insertPosition) {
27385
+ var paragraph = insertPosition.paragraph, path = insertPosition.path;
27386
+ var parent = path[0];
27387
+ var paragraphIndex = parent.blocks.indexOf(paragraph);
27388
+ var previousBlock = parent.blocks[paragraphIndex - 1];
27389
+ if (paragraph.segments.every(function (segment) { return segment.segmentType == 'SelectionMarker' || segment.segmentType == 'Br'; }) &&
27390
+ (previousBlock === null || previousBlock === void 0 ? void 0 : previousBlock.blockType) == 'BlockGroup' &&
27391
+ previousBlock.blockGroupType == 'ListItem') {
27392
+ var newListItem = (0, createListItem_1.createListItem)(previousBlock.levels, previousBlock.formatHolder.format);
27393
+ var paragraphAfterList = (0, createParagraph_1.createParagraph)(false, paragraph.format);
27394
+ (0, addBlock_1.addBlock)(newListItem, paragraph);
27395
+ paragraphAfterList.segments.push((0, createBr_1.createBr)());
27396
+ (0, mutate_1.mutateBlock)(parent).blocks.splice(paragraphIndex, 1, newListItem, paragraphAfterList);
27397
+ path.unshift(newListItem);
27398
+ }
27399
+ }
26986
27400
  function mergeParagraph(markerPosition, newPara, mergeToCurrentParagraph, context, option) {
26987
27401
  var paragraph = markerPosition.paragraph, marker = markerPosition.marker;
26988
27402
  var newParagraph = mergeToCurrentParagraph
@@ -27050,7 +27464,7 @@ function mergeTables(markerPosition, newTable, source) {
27050
27464
  var newColIndex = currentColCount + col;
27051
27465
  for (var k = 0; k < table.rows.length; k++) {
27052
27466
  var leftCell = (_b = table.rows[k]) === null || _b === void 0 ? void 0 : _b.cells[newColIndex - 1];
27053
- table.rows[k].cells[newColIndex] = (0, createTableCell_1.createTableCell)(false /*spanLeft*/, false /*spanAbove*/, leftCell === null || leftCell === void 0 ? void 0 : leftCell.isHeader, leftCell === null || leftCell === void 0 ? void 0 : leftCell.format);
27467
+ table.rows[k].cells[newColIndex] = (0, createTableCell_1.createTableCell)(false /*spanLeft*/, leftCell === null || leftCell === void 0 ? void 0 : leftCell.spanAbove, leftCell === null || leftCell === void 0 ? void 0 : leftCell.isHeader, leftCell === null || leftCell === void 0 ? void 0 : leftCell.format);
27054
27468
  }
27055
27469
  }
27056
27470
  }
@@ -27068,7 +27482,7 @@ function mergeTables(markerPosition, newTable, source) {
27068
27482
  };
27069
27483
  for (var k = 0; k < colCount; k++) {
27070
27484
  var aboveCell = (_d = table.rows[newRowIndex - 1]) === null || _d === void 0 ? void 0 : _d.cells[k];
27071
- table.rows[newRowIndex].cells[k] = (0, createTableCell_1.createTableCell)(false /*spanLeft*/, false /*spanAbove*/, false /*isHeader*/, aboveCell === null || aboveCell === void 0 ? void 0 : aboveCell.format);
27485
+ table.rows[newRowIndex].cells[k] = (0, createTableCell_1.createTableCell)(aboveCell === null || aboveCell === void 0 ? void 0 : aboveCell.spanLeft, false /*spanAbove*/, false /*isHeader*/, aboveCell === null || aboveCell === void 0 ? void 0 : aboveCell.format);
27072
27486
  }
27073
27487
  }
27074
27488
  }
@@ -27112,10 +27526,43 @@ function mergeTables(markerPosition, newTable, source) {
27112
27526
  (0, normalizeTable_1.normalizeTable)(table, markerPosition.marker.format);
27113
27527
  (0, applyTableFormat_1.applyTableFormat)(table, undefined /*newFormat*/, true /*keepCellShade*/);
27114
27528
  }
27115
- else {
27529
+ else if (!mergeTableAfterPreviousTable(markerPosition, newTable)) {
27116
27530
  insertBlock(markerPosition, newTable);
27117
27531
  }
27118
27532
  }
27533
+ function mergeTableAfterPreviousTable(markerPosition, newTable) {
27534
+ var _a;
27535
+ var _b, _c;
27536
+ var marker = markerPosition.marker, paragraph = markerPosition.paragraph, path = markerPosition.path;
27537
+ var parent = path[0];
27538
+ var paragraphIndex = parent.blocks.indexOf(paragraph);
27539
+ var previousBlock = parent.blocks[paragraphIndex - 1];
27540
+ if (paragraphIndex > 0 &&
27541
+ paragraph.segments.indexOf(marker) == 0 &&
27542
+ (previousBlock === null || previousBlock === void 0 ? void 0 : previousBlock.blockType) == 'Table' &&
27543
+ ((_b = previousBlock.rows[0]) === null || _b === void 0 ? void 0 : _b.cells.length) > 0 &&
27544
+ ((_c = newTable.rows[0]) === null || _c === void 0 ? void 0 : _c.cells.length) > 0) {
27545
+ var table = (0, mutate_1.mutateBlock)(previousBlock);
27546
+ var columnCount = Math.max.apply(Math, (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(table.rows.map(function (row) { return row.cells.length; })), false), (0, tslib_1.__read)(newTable.rows.map(function (row) { return row.cells.length; })), false));
27547
+ extendTableRows(table, columnCount);
27548
+ extendTableRows(newTable, columnCount);
27549
+ (_a = table.rows).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(newTable.rows), false));
27550
+ return true;
27551
+ }
27552
+ return false;
27553
+ }
27554
+ function extendTableRows(table, columnCount) {
27555
+ table.rows.forEach(function (row) {
27556
+ var currentColumnCount = row.cells.length;
27557
+ var lastCell = row.cells[currentColumnCount - 1];
27558
+ if (lastCell) {
27559
+ for (var col = currentColumnCount; col < columnCount; col++) {
27560
+ var spanCell = (0, createTableCell_1.createTableCell)(true /* spanLeft */, false /* spanAbove */, lastCell.isHeader, lastCell.format, lastCell.dataset);
27561
+ row.cells.push(spanCell);
27562
+ }
27563
+ }
27564
+ });
27565
+ }
27119
27566
  function mergeList(markerPosition, newList) {
27120
27567
  splitParagraph(markerPosition, newList.format);
27121
27568
  var path = markerPosition.path, paragraph = markerPosition.paragraph;
@@ -32316,7 +32763,11 @@ var MarkdownPastePlugin = /** @class */ (function () {
32316
32763
  (0, isPastedContentMarkdown_1.isPastedContentMarkdown)(this.editor, clipboardData) &&
32317
32764
  clipboardData.modelBeforePaste) {
32318
32765
  var modelBeforePaste_1 = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
32319
- (0, roosterjs_content_model_dom_1.mergeModel)(modelBeforePaste_1, (0, convertMarkdownToContentModel_1.convertMarkdownToContentModel)(clipboardData.text, { emptyLine: 'merge' }));
32766
+ (0, roosterjs_content_model_dom_1.mergeModel)(modelBeforePaste_1, (0, convertMarkdownToContentModel_1.convertMarkdownToContentModel)(clipboardData.text, {
32767
+ emptyLine: 'merge',
32768
+ }), undefined /*context*/, {
32769
+ mergeFormat: 'preferTarget',
32770
+ });
32320
32771
  if (this.options.undoConversion) {
32321
32772
  this.editor.takeSnapshot();
32322
32773
  }
@@ -32370,7 +32821,7 @@ var BlockPatterns = [
32370
32821
  /^\s*>\s.+/,
32371
32822
  /^\s*[\*\-\+]\s.+/,
32372
32823
  /^\s*\d+\.\s.+/,
32373
- /^---+$/,
32824
+ /^---$/,
32374
32825
  /^\s*\|.*\|\s*$/, // table row: "| a | b |"
32375
32826
  ];
32376
32827
  // Inline markdown patterns. The text contains markdown if any of these match anywhere.
@@ -32704,6 +33155,7 @@ var DefaultOptions = {
32704
33155
  autoOrdinals: false,
32705
33156
  removeListMargins: false,
32706
33157
  autoHorizontalLine: false,
33158
+ autoDirection: false,
32707
33159
  };
32708
33160
  /**
32709
33161
  * Auto Format plugin handles auto formatting, such as transforming * characters into a bullet list.
@@ -32723,12 +33175,14 @@ var AutoFormatPlugin = /** @class */ (function () {
32723
33175
  * - autoTel: A boolean that enables or disables automatic hyperlink telephone numbers transformation. Defaults to false.
32724
33176
  * - autoMailto: A boolean that enables or disables automatic hyperlink email address transformation. Defaults to false.
32725
33177
  * - autoHorizontalLine: A boolean that enables or disables automatic horizontal line creation. Defaults to false.
33178
+ * - autoDirection: A boolean that enables or disables automatic text direction. Defaults to false.
32726
33179
  */
32727
33180
  function AutoFormatPlugin(options) {
32728
33181
  var _this = this;
32729
33182
  if (options === void 0) { options = DefaultOptions; }
32730
33183
  this.options = options;
32731
33184
  this.editor = null;
33185
+ this.blockDirections = new WeakMap();
32732
33186
  this.autoLink = {
32733
33187
  enabled: !!(this.options.autoLink || this.options.autoTel || this.options.autoMailto),
32734
33188
  transformFunction: function (_model, previousSegment, paragraph, context) {
@@ -32863,6 +33317,9 @@ var AutoFormatPlugin = /** @class */ (function () {
32863
33317
  case 'input':
32864
33318
  this.handleEditorInputEvent(this.editor, event);
32865
33319
  break;
33320
+ case 'compositionEnd':
33321
+ this.handleCompositionEndEvent(this.editor, event.rawEvent.data);
33322
+ break;
32866
33323
  case 'keyDown':
32867
33324
  this.handleKeyDownEvent(this.editor, event);
32868
33325
  break;
@@ -32927,9 +33384,41 @@ var AutoFormatPlugin = /** @class */ (function () {
32927
33384
  case ' ':
32928
33385
  this.handleKeyboardEvents(editor, this.features);
32929
33386
  break;
33387
+ default:
33388
+ this.handleAutoDirection(editor, rawEvent.data, selection.range);
33389
+ break;
32930
33390
  }
32931
33391
  }
32932
33392
  };
33393
+ AutoFormatPlugin.prototype.handleCompositionEndEvent = function (editor, insertedText) {
33394
+ var selection = editor.getDOMSelection();
33395
+ if ((selection === null || selection === void 0 ? void 0 : selection.type) === 'range' && selection.range.collapsed) {
33396
+ this.handleAutoDirection(editor, insertedText, selection.range);
33397
+ }
33398
+ };
33399
+ AutoFormatPlugin.prototype.handleAutoDirection = function (editor, insertedText, range) {
33400
+ var _a;
33401
+ if (!this.options.autoDirection || !insertedText || !(0, roosterjs_content_model_api_1.getTextDirection)(insertedText)) {
33402
+ return;
33403
+ }
33404
+ var block = editor.getDOMHelper().findClosestBlockElement(range.startContainer);
33405
+ var expectedDirection = (0, roosterjs_content_model_api_1.getTextDirection)(block.textContent || '');
33406
+ var inlineDirection = block.style.direction;
33407
+ var cachedDirection = inlineDirection === 'ltr' || inlineDirection === 'rtl'
33408
+ ? inlineDirection
33409
+ : this.blockDirections.get(block);
33410
+ if (!expectedDirection || cachedDirection === expectedDirection) {
33411
+ return;
33412
+ }
33413
+ var currentDirection = cachedDirection || ((_a = block.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getComputedStyle(block).direction);
33414
+ if (currentDirection === 'ltr' || currentDirection === 'rtl') {
33415
+ this.blockDirections.set(block, currentDirection);
33416
+ }
33417
+ if (currentDirection !== expectedDirection) {
33418
+ this.blockDirections.set(block, expectedDirection);
33419
+ (0, roosterjs_content_model_api_1.setDirection)(editor, 'auto');
33420
+ }
33421
+ };
32933
33422
  AutoFormatPlugin.prototype.handleKeyDownEvent = function (editor, event) {
32934
33423
  var rawEvent = event.rawEvent;
32935
33424
  if (!rawEvent.defaultPrevented && !event.handledByEditFeature) {
@@ -33909,9 +34398,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
33909
34398
  exports.DragAndDropPlugin = void 0;
33910
34399
  var handleDroppedExternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedExternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts");
33911
34400
  var handleDroppedInternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedInternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts");
34401
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
34402
+ var reorderList_1 = __webpack_require__(/*! ./utils/reorderList */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts");
33912
34403
  var DefaultOptions = {
33913
34404
  forbiddenElements: ['iframe'],
33914
34405
  };
34406
+ var DeleteByDragInputType = 'deleteByDrag';
33915
34407
  /**
33916
34408
  * DragAndDrop plugin, handles ContentChanged event when change source is "Drop"
33917
34409
  * to sanitize dropped content, similar to how PastePlugin sanitizes pasted content.
@@ -33946,8 +34438,21 @@ var DragAndDropPlugin = /** @class */ (function () {
33946
34438
  this.editor = editor;
33947
34439
  this.disposer = editor.attachDomEvent({
33948
34440
  dragstart: {
33949
- beforeDispatch: function (_ev) {
34441
+ beforeDispatch: function (ev) {
33950
34442
  _this.internalDrag = true;
34443
+ if (_this.editor &&
34444
+ _this.editor.isExperimentalFeatureEnabled('HandleDropInternalContent')) {
34445
+ _this.adjustDraggingCursor(_this.editor, ev);
34446
+ }
34447
+ },
34448
+ },
34449
+ beforeinput: {
34450
+ beforeDispatch: function (event) {
34451
+ var ev = event;
34452
+ if (_this.internalDrag) {
34453
+ _this.handleDragOutOfTheEditor(editor, ev);
34454
+ _this.internalDrag = false;
34455
+ }
33951
34456
  },
33952
34457
  },
33953
34458
  });
@@ -33964,6 +34469,7 @@ var DragAndDropPlugin = /** @class */ (function () {
33964
34469
  this.disposer = null;
33965
34470
  }
33966
34471
  this.forbiddenElements = [];
34472
+ this.internalDrag = false;
33967
34473
  };
33968
34474
  /**
33969
34475
  * Core method for a plugin. Once an event happens in editor, editor will call this
@@ -33972,7 +34478,6 @@ var DragAndDropPlugin = /** @class */ (function () {
33972
34478
  * @param event The event to handle:
33973
34479
  */
33974
34480
  DragAndDropPlugin.prototype.onPluginEvent = function (event) {
33975
- var _a;
33976
34481
  if (this.editor && event.eventType == 'beforeDrop') {
33977
34482
  var dropEvent = event.rawEvent;
33978
34483
  if (this.internalDrag &&
@@ -33980,14 +34485,36 @@ var DragAndDropPlugin = /** @class */ (function () {
33980
34485
  (0, handleDroppedInternalContent_1.handleDroppedInternalContent)(this.editor, dropEvent);
33981
34486
  }
33982
34487
  else if (!this.internalDrag) {
33983
- var html = (_a = dropEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/html');
33984
- if (html) {
33985
- (0, handleDroppedExternalContent_1.handleDroppedExternalContent)(this.editor, dropEvent, html, this.forbiddenElements);
33986
- }
34488
+ (0, handleDroppedExternalContent_1.handleDroppedExternalContent)(this.editor, dropEvent, this.forbiddenElements);
33987
34489
  }
33988
34490
  this.internalDrag = false;
33989
34491
  }
33990
34492
  };
34493
+ DragAndDropPlugin.prototype.adjustDraggingCursor = function (editor, dragEvent) {
34494
+ var _a, _b;
34495
+ var selection = editor.getDOMSelection();
34496
+ if ((selection === null || selection === void 0 ? void 0 : selection.type) == 'table') {
34497
+ var doc = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDocument();
34498
+ if (doc && dragEvent.dataTransfer) {
34499
+ var ghost_1 = doc.createElement('span');
34500
+ ghost_1.textContent = '|';
34501
+ doc.body.appendChild(ghost_1);
34502
+ dragEvent.dataTransfer.setDragImage(ghost_1, 0, 0);
34503
+ (_b = doc.defaultView) === null || _b === void 0 ? void 0 : _b.requestAnimationFrame(function () { return ghost_1.remove(); });
34504
+ }
34505
+ }
34506
+ };
34507
+ DragAndDropPlugin.prototype.handleDragOutOfTheEditor = function (editor, inputEvent) {
34508
+ if (inputEvent.inputType == DeleteByDragInputType) {
34509
+ inputEvent.preventDefault();
34510
+ editor.formatContentModel(function (model, context) {
34511
+ (0, roosterjs_content_model_dom_1.deleteSelection)(model, [reorderList_1.reorderList], context);
34512
+ return true;
34513
+ }, {
34514
+ changeSource: roosterjs_content_model_dom_1.ChangeSource.DragOutOfEditor,
34515
+ });
34516
+ }
34517
+ };
33991
34518
  return DragAndDropPlugin;
33992
34519
  }());
33993
34520
  exports.DragAndDropPlugin = DragAndDropPlugin;
@@ -34049,37 +34576,90 @@ exports.cleanForbiddenElements = cleanForbiddenElements;
34049
34576
 
34050
34577
  Object.defineProperty(exports, "__esModule", ({ value: true }));
34051
34578
  exports.handleDroppedExternalContent = void 0;
34579
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
34052
34580
  var cleanForbiddenElements_1 = __webpack_require__(/*! ./cleanForbiddenElements */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/cleanForbiddenElements.ts");
34053
34581
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
34054
34582
  /**
34055
34583
  * @internal
34056
34584
  * Handle dropped HTML content by inserting it at the drop position
34057
34585
  */
34058
- function handleDroppedExternalContent(editor, event, html, forbiddenElements) {
34059
- var doc = editor.getDocument();
34060
- var domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
34061
- if (domPosition) {
34062
- event.preventDefault();
34063
- event.stopPropagation();
34064
- var range = doc.createRange();
34065
- range.setStart(domPosition.node, domPosition.offset);
34066
- range.collapse(true);
34067
- var parsedHtml = editor.getDOMCreator().htmlToDOM(html);
34068
- (0, cleanForbiddenElements_1.cleanForbiddenElements)(parsedHtml, forbiddenElements);
34069
- var droppedModel_1 = (0, roosterjs_content_model_dom_1.domToContentModel)(parsedHtml.body, (0, roosterjs_content_model_dom_1.createDomToModelContext)());
34070
- editor.formatContentModel(function (model, context) {
34071
- (0, roosterjs_content_model_dom_1.mergeModel)(model, droppedModel_1, context);
34072
- return true;
34073
- }, {
34074
- selectionOverride: {
34075
- type: 'range',
34076
- range: range,
34077
- isReverted: false,
34078
- },
34586
+ function handleDroppedExternalContent(editor, event, forbiddenElements) {
34587
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
34588
+ var items, doc, domPosition, droppedModel_1, range;
34589
+ return (0, tslib_1.__generator)(this, function (_a) {
34590
+ switch (_a.label) {
34591
+ case 0:
34592
+ items = getSupportedItems(event.dataTransfer);
34593
+ if (items.length == 0) {
34594
+ return [2 /*return*/];
34595
+ }
34596
+ doc = editor.getDocument();
34597
+ domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
34598
+ if (!domPosition) return [3 /*break*/, 2];
34599
+ event.preventDefault();
34600
+ event.stopPropagation();
34601
+ return [4 /*yield*/, getDroppedModel(editor, items, forbiddenElements)];
34602
+ case 1:
34603
+ droppedModel_1 = _a.sent();
34604
+ if (!droppedModel_1) {
34605
+ return [2 /*return*/];
34606
+ }
34607
+ range = doc.createRange();
34608
+ range.setStart(domPosition.node, domPosition.offset);
34609
+ range.collapse(true);
34610
+ editor.formatContentModel(function (model, context) {
34611
+ (0, roosterjs_content_model_dom_1.mergeModel)(model, droppedModel_1, context, {
34612
+ mergeParagraphAfterList: true,
34613
+ });
34614
+ return true;
34615
+ }, {
34616
+ selectionOverride: {
34617
+ type: 'range',
34618
+ range: range,
34619
+ isReverted: false,
34620
+ },
34621
+ });
34622
+ _a.label = 2;
34623
+ case 2: return [2 /*return*/];
34624
+ }
34079
34625
  });
34080
- }
34626
+ });
34081
34627
  }
34082
34628
  exports.handleDroppedExternalContent = handleDroppedExternalContent;
34629
+ function getDroppedModel(editor, items, forbiddenElements) {
34630
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
34631
+ var clipboardData, domCreator, doc, fragment;
34632
+ return (0, tslib_1.__generator)(this, function (_a) {
34633
+ switch (_a.label) {
34634
+ case 0: return [4 /*yield*/, (0, roosterjs_content_model_dom_1.extractClipboardItems)(items, undefined)];
34635
+ case 1:
34636
+ clipboardData = _a.sent();
34637
+ domCreator = editor.getDOMCreator();
34638
+ doc = clipboardData.rawHtml ? domCreator.htmlToDOM(clipboardData.rawHtml) : null;
34639
+ if (doc) {
34640
+ (0, cleanForbiddenElements_1.cleanForbiddenElements)(doc, forbiddenElements);
34641
+ }
34642
+ fragment = (0, roosterjs_content_model_dom_1.createPasteFragment)(editor.getDocument(), clipboardData, 'normal', doc === null || doc === void 0 ? void 0 : doc.body);
34643
+ return [2 /*return*/, (0, roosterjs_content_model_dom_1.domToContentModel)(fragment, (0, roosterjs_content_model_dom_1.createDomToModelContext)())];
34644
+ }
34645
+ });
34646
+ });
34647
+ }
34648
+ function getSupportedItems(dataTransfer) {
34649
+ var _a;
34650
+ var result = [];
34651
+ for (var i = 0; i < ((_a = dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.items.length) !== null && _a !== void 0 ? _a : 0); i++) {
34652
+ var item = dataTransfer.items[i];
34653
+ if ((item.kind == 'string' &&
34654
+ (item.type == 'text/html' ||
34655
+ item.type == 'text/plain' ||
34656
+ item.type == 'text/uri-list')) ||
34657
+ (item.kind == 'file' && item.type.indexOf('image/') == 0)) {
34658
+ result.push(item);
34659
+ }
34660
+ }
34661
+ return result;
34662
+ }
34083
34663
 
34084
34664
 
34085
34665
  /***/ },
@@ -34096,6 +34676,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
34096
34676
  exports.handleDroppedInternalContent = void 0;
34097
34677
  var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
34098
34678
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
34679
+ var reorderList_1 = __webpack_require__(/*! ./reorderList */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts");
34099
34680
  /**
34100
34681
  * @internal
34101
34682
  * Handle dropped internal HTML content by inserting it at the drop position
@@ -34111,8 +34692,10 @@ function handleDroppedInternalContent(editor, event) {
34111
34692
  if (insertPoint) {
34112
34693
  var cloneModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(model);
34113
34694
  (0, roosterjs_content_model_dom_1.trimModelForSelection)(cloneModel, selection);
34114
- if ((0, roosterjs_content_model_dom_1.deleteSelection)(model, [], context).deleteResult == 'range') {
34115
- (0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
34695
+ if (!event.ctrlKey && !event.metaKey) {
34696
+ if ((0, roosterjs_content_model_dom_1.deleteSelection)(model, [reorderList_1.reorderList], context).deleteResult == 'range') {
34697
+ (0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
34698
+ }
34116
34699
  }
34117
34700
  var startMarker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(insertPoint.marker.format);
34118
34701
  var startParagraph = (0, roosterjs_content_model_dom_1.mutateBlock)(insertPoint.paragraph);
@@ -34120,6 +34703,7 @@ function handleDroppedInternalContent(editor, event) {
34120
34703
  startParagraph.segments.splice(startIndex, 0, startMarker);
34121
34704
  var newInsertPoint = (0, roosterjs_content_model_dom_1.mergeModel)(model, cloneModel, context, {
34122
34705
  insertPosition: insertPoint,
34706
+ mergeParagraphAfterList: true,
34123
34707
  });
34124
34708
  if (newInsertPoint) {
34125
34709
  (0, roosterjs_content_model_dom_1.setSelection)(model, startMarker, newInsertPoint.marker);
@@ -34131,6 +34715,39 @@ function handleDroppedInternalContent(editor, event) {
34131
34715
  exports.handleDroppedInternalContent = handleDroppedInternalContent;
34132
34716
 
34133
34717
 
34718
+ /***/ },
34719
+
34720
+ /***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts"
34721
+ /*!***************************************************************************************!*\
34722
+ !*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts ***!
34723
+ \***************************************************************************************/
34724
+ (__unused_webpack_module, exports, __webpack_require__) {
34725
+
34726
+ "use strict";
34727
+
34728
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
34729
+ exports.reorderList = void 0;
34730
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
34731
+ var getListItemFromInsertPoint_1 = __webpack_require__(/*! ../../edit/utils/getListItemFromInsertPoint */ "./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts");
34732
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
34733
+ /**
34734
+ * @internal
34735
+ */
34736
+ var reorderList = function (context) {
34737
+ if (context.deleteResult != 'range') {
34738
+ return;
34739
+ }
34740
+ var paragraph = context.insertPoint.paragraph;
34741
+ var listItemAndParent = (0, getListItemFromInsertPoint_1.getListItemFromInsertPoint)(context.insertPoint);
34742
+ if (listItemAndParent) {
34743
+ var _a = (0, tslib_1.__read)(listItemAndParent, 1), item = _a[0];
34744
+ var mutableList = (0, roosterjs_content_model_dom_1.mutateBlock)(item);
34745
+ mutableList.blocks.splice(mutableList.blocks.indexOf(paragraph), mutableList.blocks.length);
34746
+ }
34747
+ };
34748
+ exports.reorderList = reorderList;
34749
+
34750
+
34134
34751
  /***/ },
34135
34752
 
34136
34753
  /***/ "./packages/roosterjs-content-model-plugins/lib/edit/EditPlugin.ts"
@@ -34414,6 +35031,9 @@ var deleteAllSegmentBefore = function (context) {
34414
35031
  context.deleteResult = 'range';
34415
35032
  }
34416
35033
  }
35034
+ if (mutableParagraph.segments.length == 1 && mutableParagraph.segments[0] == marker) {
35035
+ mutableParagraph.segments.push((0, roosterjs_content_model_dom_1.createBr)(marker.format));
35036
+ }
34417
35037
  };
34418
35038
  exports.deleteAllSegmentBefore = deleteAllSegmentBefore;
34419
35039
 
@@ -34629,6 +35249,7 @@ var insertNewLine = function (quote, parent, quoteIndex, paragraph) {
34629
35249
  Object.defineProperty(exports, "__esModule", ({ value: true }));
34630
35250
  exports.deleteList = void 0;
34631
35251
  var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
35252
+ var getListItemFromInsertPoint_1 = __webpack_require__(/*! ../utils/getListItemFromInsertPoint */ "./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts");
34632
35253
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
34633
35254
  /**
34634
35255
  * @internal
@@ -34638,18 +35259,14 @@ var deleteList = function (context) {
34638
35259
  if (context.deleteResult != 'notDeleted') {
34639
35260
  return;
34640
35261
  }
34641
- var _c = context.insertPoint, paragraph = _c.paragraph, marker = _c.marker, path = _c.path;
34642
- var index = (0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['ListItem'], ['TableCell', 'FormatContainer']);
34643
- var item = path[index];
34644
- var parent = path[index + 1];
34645
- if ((item === null || item === void 0 ? void 0 : item.blockGroupType) == 'ListItem' &&
34646
- item.levels.length > 0 &&
34647
- paragraph.segments[0] == marker &&
34648
- parent) {
35262
+ var paragraph = context.insertPoint.paragraph;
35263
+ var listItemAndParent = (0, getListItemFromInsertPoint_1.getListItemFromInsertPoint)(context.insertPoint);
35264
+ if (listItemAndParent) {
35265
+ var _c = (0, tslib_1.__read)(listItemAndParent, 2), item = _c[0], parent_1 = _c[1];
34649
35266
  var mutableList = (0, roosterjs_content_model_dom_1.mutateBlock)(item);
34650
35267
  var lastLevel = mutableList.levels[mutableList.levels.length - 1];
34651
- var listItemIndex = parent.blocks.indexOf(item);
34652
- var previousItem = parent.blocks[listItemIndex - 1];
35268
+ var listItemIndex = parent_1.blocks.indexOf(item);
35269
+ var previousItem = parent_1.blocks[listItemIndex - 1];
34653
35270
  // 1. If the last level is dummy, just remove it (legacy behavior)
34654
35271
  // 2. If focus is at the beginning of list item and previous block is a list item with the same level count,
34655
35272
  // merge current list item into previous one
@@ -34665,7 +35282,7 @@ var deleteList = function (context) {
34665
35282
  previousItem.levels.length == mutableList.levels.length) {
34666
35283
  var mutablePreviousItem = (0, roosterjs_content_model_dom_1.mutateBlock)(previousItem);
34667
35284
  (_a = mutablePreviousItem.blocks).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(mutableList.blocks), false));
34668
- (0, roosterjs_content_model_dom_1.mutateBlock)(parent).blocks.splice(listItemIndex, 1);
35285
+ (0, roosterjs_content_model_dom_1.mutateBlock)(parent_1).blocks.splice(listItemIndex, 1);
34669
35286
  context.deleteResult = 'range';
34670
35287
  }
34671
35288
  else {
@@ -34673,10 +35290,10 @@ var deleteList = function (context) {
34673
35290
  if (mutableList.levels.length > 1) {
34674
35291
  var newListItem = (0, roosterjs_content_model_dom_1.createListItem)(mutableList.levels.slice(0, -1), mutableList.formatHolder.format);
34675
35292
  newListItem.blocks = removedBlocks.map(function (block) { return (0, roosterjs_content_model_dom_1.mutateBlock)(block); });
34676
- (0, roosterjs_content_model_dom_1.mutateBlock)(parent).blocks.splice(listItemIndex + 1, 0, newListItem);
35293
+ (0, roosterjs_content_model_dom_1.mutateBlock)(parent_1).blocks.splice(listItemIndex + 1, 0, newListItem);
34677
35294
  }
34678
35295
  else {
34679
- (_b = (0, roosterjs_content_model_dom_1.mutateBlock)(parent).blocks).splice.apply(_b, (0, tslib_1.__spreadArray)([listItemIndex + 1, 0], (0, tslib_1.__read)(removedBlocks), false));
35296
+ (_b = (0, roosterjs_content_model_dom_1.mutateBlock)(parent_1).blocks).splice.apply(_b, (0, tslib_1.__spreadArray)([listItemIndex + 1, 0], (0, tslib_1.__read)(removedBlocks), false));
34680
35297
  }
34681
35298
  context.deleteResult = 'range';
34682
35299
  }
@@ -35141,6 +35758,11 @@ var handleEnterOnParagraph = function (formatsToPreserveOnMerge) { return functi
35141
35758
  context.deleteResult = 'range';
35142
35759
  context.lastParagraph = newPara;
35143
35760
  context.insertPoint.paragraph = newPara;
35761
+ if (context.formatContext) {
35762
+ context.formatContext.announceData = {
35763
+ defaultStrings: 'newLineInserted',
35764
+ };
35765
+ }
35144
35766
  }
35145
35767
  }; };
35146
35768
  exports.handleEnterOnParagraph = handleEnterOnParagraph;
@@ -35845,6 +36467,37 @@ function getLeafSiblingBlock(path, block, isNext) {
35845
36467
  exports.getLeafSiblingBlock = getLeafSiblingBlock;
35846
36468
 
35847
36469
 
36470
+ /***/ },
36471
+
36472
+ /***/ "./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts"
36473
+ /*!***********************************************************************************************!*\
36474
+ !*** ./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts ***!
36475
+ \***********************************************************************************************/
36476
+ (__unused_webpack_module, exports, __webpack_require__) {
36477
+
36478
+ "use strict";
36479
+
36480
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
36481
+ exports.getListItemFromInsertPoint = void 0;
36482
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
36483
+ /**
36484
+ * @internal
36485
+ */
36486
+ function getListItemFromInsertPoint(insertPoint) {
36487
+ var paragraph = insertPoint.paragraph, marker = insertPoint.marker, path = insertPoint.path;
36488
+ var index = (0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['ListItem'], ['TableCell', 'FormatContainer']);
36489
+ var item = path[index];
36490
+ var parent = path[index + 1];
36491
+ return (item === null || item === void 0 ? void 0 : item.blockGroupType) == 'ListItem' &&
36492
+ item.levels.length > 0 &&
36493
+ paragraph.segments[0] == marker &&
36494
+ parent
36495
+ ? [item, parent]
36496
+ : null;
36497
+ }
36498
+ exports.getListItemFromInsertPoint = getListItemFromInsertPoint;
36499
+
36500
+
35848
36501
  /***/ },
35849
36502
 
35850
36503
  /***/ "./packages/roosterjs-content-model-plugins/lib/edit/utils/preserveParagraphFormat.ts"
@@ -37389,7 +38042,7 @@ var ImageEditPlugin = /** @class */ (function () {
37389
38042
  if (this.imageEditInfo) {
37390
38043
  this.startEditing(editor, image, ['resize', 'rotate']);
37391
38044
  if (this.selectedImage && this.imageEditInfo && this.wrapper && this.clonedImage) {
37392
- var isMobileOrTable = !!editor.getEnvironment().isMobileOrTablet;
38045
+ var _c = editor.getEnvironment(), isMobileOrTablet = _c.isMobileOrTablet, isTouchSupported = _c.isTouchSupported;
37393
38046
  this.dndHelpers = (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)((0, getDropAndDragHelpers_1.getDropAndDragHelpers)(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass_1.ImageEditElementClass.ResizeHandle, resizerContext_1.Resizer, function () {
37394
38047
  if (_this.imageEditInfo &&
37395
38048
  _this.selectedImage &&
@@ -37398,7 +38051,7 @@ var ImageEditPlugin = /** @class */ (function () {
37398
38051
  (0, updateWrapper_1.updateWrapper)(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, _this.resizers, undefined /* croppers */, isRTL);
37399
38052
  _this.wasImageResized = true;
37400
38053
  }
37401
- }, this.zoomScale, isMobileOrTable)), false), (0, tslib_1.__read)((0, getDropAndDragHelpers_1.getDropAndDragHelpers)(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass_1.ImageEditElementClass.RotateHandle, rotatorContext_1.Rotator, function () {
38054
+ }, this.zoomScale, !!isMobileOrTablet, !!isTouchSupported)), false), (0, tslib_1.__read)((0, getDropAndDragHelpers_1.getDropAndDragHelpers)(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass_1.ImageEditElementClass.RotateHandle, rotatorContext_1.Rotator, function () {
37402
38055
  var _a, _b;
37403
38056
  if (_this.imageEditInfo &&
37404
38057
  _this.selectedImage &&
@@ -37408,7 +38061,7 @@ var ImageEditPlugin = /** @class */ (function () {
37408
38061
  _this.updateRotateHandleState(editor, _this.selectedImage, _this.wrapper, _this.rotators, (_a = _this.imageEditInfo) === null || _a === void 0 ? void 0 : _a.angleRad, !!((_b = _this.options) === null || _b === void 0 ? void 0 : _b.disableSideResize));
37409
38062
  _this.updateResizeHandleDirection(_this.resizers, _this.imageEditInfo.angleRad);
37410
38063
  }
37411
- }, this.zoomScale, isMobileOrTable)), false);
38064
+ }, this.zoomScale, !!isMobileOrTablet, !!isTouchSupported)), false);
37412
38065
  (0, updateWrapper_1.updateWrapper)(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper, this.resizers, undefined /* croppers */, isRTL);
37413
38066
  this.updateRotateHandleState(editor, this.selectedImage, this.wrapper, this.rotators, (_a = this.imageEditInfo) === null || _a === void 0 ? void 0 : _a.angleRad, !!((_b = this.options) === null || _b === void 0 ? void 0 : _b.disableSideResize));
37414
38067
  }
@@ -37454,7 +38107,7 @@ var ImageEditPlugin = /** @class */ (function () {
37454
38107
  (0, updateWrapper_1.updateWrapper)(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, undefined /* resizers */, _this.croppers, isRTL);
37455
38108
  _this.isCropMode = true;
37456
38109
  }
37457
- }, this.zoomScale, !!editor.getEnvironment().isMobileOrTablet)), false);
38110
+ }, this.zoomScale, !!editor.getEnvironment().isMobileOrTablet, !!editor.getEnvironment().isTouchSupported)), false);
37458
38111
  (0, updateWrapper_1.updateWrapper)(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper, undefined /* resizers */, this.croppers, isRTL);
37459
38112
  }
37460
38113
  }
@@ -38673,7 +39326,7 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
38673
39326
  /**
38674
39327
  * @internal
38675
39328
  */
38676
- function getDropAndDragHelpers(wrapper, editInfo, options, elementClass, helper, updateWrapper, zoomScale, useTouch) {
39329
+ function getDropAndDragHelpers(wrapper, editInfo, options, elementClass, helper, updateWrapper, zoomScale, forceMobile, isTouchSupported) {
38677
39330
  return getEditElements(wrapper, elementClass).map(function (element) {
38678
39331
  return new DragAndDropHelper_1.DragAndDropHelper(element, {
38679
39332
  editInfo: editInfo,
@@ -38681,7 +39334,7 @@ function getDropAndDragHelpers(wrapper, editInfo, options, elementClass, helper,
38681
39334
  elementClass: elementClass,
38682
39335
  x: element.dataset.x,
38683
39336
  y: element.dataset.y,
38684
- }, updateWrapper, helper, zoomScale, useTouch);
39337
+ }, updateWrapper, helper, zoomScale, forceMobile, isTouchSupported);
38685
39338
  });
38686
39339
  }
38687
39340
  exports.getDropAndDragHelpers = getDropAndDragHelpers;
@@ -42254,7 +42907,7 @@ var MOUSE_EVENT_INFO_DESKTOP = (function () {
42254
42907
  MOUSEDOWN: 'mousedown',
42255
42908
  MOUSEMOVE: 'mousemove',
42256
42909
  MOUSEUP: 'mouseup',
42257
- getPageXY: getMouseEventPageXY,
42910
+ normalizeEvent: normalizeMouseEvent,
42258
42911
  };
42259
42912
  })();
42260
42913
  var MOUSE_EVENT_INFO_MOBILE = (function () {
@@ -42262,21 +42915,37 @@ var MOUSE_EVENT_INFO_MOBILE = (function () {
42262
42915
  MOUSEDOWN: 'touchstart',
42263
42916
  MOUSEMOVE: 'touchmove',
42264
42917
  MOUSEUP: 'touchend',
42265
- getPageXY: getTouchEventPageXY,
42918
+ normalizeEvent: normalizeTouchEvent,
42266
42919
  };
42267
42920
  })();
42268
- function getMouseEventPageXY(e) {
42269
- return [e.pageX, e.pageY];
42270
- }
42271
- function getTouchEventPageXY(e) {
42272
- var pageX = 0;
42273
- var pageY = 0;
42274
- if (e.targetTouches && e.targetTouches.length > 0) {
42275
- var touch = e.targetTouches[0];
42276
- pageX = touch.pageX;
42277
- pageY = touch.pageY;
42278
- }
42279
- return [pageX, pageY];
42921
+ function normalizeMouseEvent(event) {
42922
+ var mouseEvent = event;
42923
+ return {
42924
+ clientX: mouseEvent.clientX,
42925
+ clientY: mouseEvent.clientY,
42926
+ pageX: mouseEvent.pageX,
42927
+ pageY: mouseEvent.pageY,
42928
+ target: mouseEvent.target,
42929
+ shiftKey: mouseEvent.shiftKey,
42930
+ altKey: mouseEvent.altKey,
42931
+ };
42932
+ }
42933
+ function normalizeTouchEvent(event) {
42934
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
42935
+ var touchEvent = event;
42936
+ var touch = (_b = (_a = touchEvent.targetTouches) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : (_c = touchEvent.changedTouches) === null || _c === void 0 ? void 0 : _c[0];
42937
+ var clientX = (_d = touch === null || touch === void 0 ? void 0 : touch.clientX) !== null && _d !== void 0 ? _d : 0;
42938
+ var clientY = (_e = touch === null || touch === void 0 ? void 0 : touch.clientY) !== null && _e !== void 0 ? _e : 0;
42939
+ var document = (_g = (_f = touchEvent.view) === null || _f === void 0 ? void 0 : _f.document) !== null && _g !== void 0 ? _g : (_h = event.target) === null || _h === void 0 ? void 0 : _h.ownerDocument;
42940
+ return {
42941
+ clientX: clientX,
42942
+ clientY: clientY,
42943
+ pageX: (_j = touch === null || touch === void 0 ? void 0 : touch.pageX) !== null && _j !== void 0 ? _j : 0,
42944
+ pageY: (_k = touch === null || touch === void 0 ? void 0 : touch.pageY) !== null && _k !== void 0 ? _k : 0,
42945
+ target: touch ? (_l = document === null || document === void 0 ? void 0 : document.elementFromPoint(clientX, clientY)) !== null && _l !== void 0 ? _l : event.target : event.target,
42946
+ shiftKey: false,
42947
+ altKey: false,
42948
+ };
42280
42949
  }
42281
42950
  /**
42282
42951
  * @internal
@@ -42293,8 +42962,9 @@ var DragAndDropHelper = /** @class */ (function () {
42293
42962
  * @param handler The event handler object, see DragAndDropHandler interface for more information
42294
42963
  * @param zoomScale The zoom scale of the editor
42295
42964
  * @param forceMobile A boolean to force the use of touch controls for the helper
42965
+ * @param isTouchSupported Whether the current browser supports touch input
42296
42966
  */
42297
- function DragAndDropHelper(trigger, context, onSubmit, handler, zoomScale, forceMobile) {
42967
+ function DragAndDropHelper(trigger, context, onSubmit, handler, zoomScale, forceMobile, isTouchSupported) {
42298
42968
  var _this = this;
42299
42969
  this.trigger = trigger;
42300
42970
  this.context = context;
@@ -42304,23 +42974,29 @@ var DragAndDropHelper = /** @class */ (function () {
42304
42974
  this.initX = 0;
42305
42975
  this.initY = 0;
42306
42976
  this.initValue = undefined;
42977
+ this.dndMouse = MOUSE_EVENT_INFO_DESKTOP;
42307
42978
  this.onMouseDown = function (e) {
42308
42979
  var _a;
42309
42980
  var _b, _c;
42310
42981
  e.preventDefault();
42311
42982
  e.stopPropagation();
42983
+ _this.dndMouse =
42984
+ e.type == MOUSE_EVENT_INFO_MOBILE.MOUSEDOWN
42985
+ ? MOUSE_EVENT_INFO_MOBILE
42986
+ : MOUSE_EVENT_INFO_DESKTOP;
42312
42987
  _this.addDocumentEvents();
42313
- _a = (0, tslib_1.__read)(_this.dndMouse.getPageXY(e), 2), _this.initX = _a[0], _this.initY = _a[1];
42314
- _this.initValue = (_c = (_b = _this.handler).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b, _this.context, e);
42988
+ var event = _this.dndMouse.normalizeEvent(e);
42989
+ _a = (0, tslib_1.__read)([event.pageX, event.pageY], 2), _this.initX = _a[0], _this.initY = _a[1];
42990
+ _this.initValue = (_c = (_b = _this.handler).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b, _this.context, event);
42315
42991
  };
42316
42992
  this.onMouseMove = function (e) {
42317
42993
  var _a, _b, _c;
42318
42994
  e.preventDefault();
42319
- var _d = (0, tslib_1.__read)(_this.dndMouse.getPageXY(e), 2), pageX = _d[0], pageY = _d[1];
42320
- var deltaX = (pageX - _this.initX) / _this.zoomScale;
42321
- var deltaY = (pageY - _this.initY) / _this.zoomScale;
42995
+ var event = _this.dndMouse.normalizeEvent(e);
42996
+ var deltaX = (event.pageX - _this.initX) / _this.zoomScale;
42997
+ var deltaY = (event.pageY - _this.initY) / _this.zoomScale;
42322
42998
  if (_this.initValue &&
42323
- ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue, deltaX, deltaY))) {
42999
+ ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, event, _this.initValue, deltaX, deltaY))) {
42324
43000
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
42325
43001
  }
42326
43002
  };
@@ -42328,18 +43004,33 @@ var DragAndDropHelper = /** @class */ (function () {
42328
43004
  var _a, _b, _c;
42329
43005
  e.preventDefault();
42330
43006
  _this.removeDocumentEvents();
42331
- if ((_b = (_a = _this.handler).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue)) {
43007
+ if ((_b = (_a = _this.handler).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, _this.dndMouse.normalizeEvent(e), _this.initValue)) {
42332
43008
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
42333
43009
  }
42334
43010
  };
42335
- this.dndMouse = forceMobile ? MOUSE_EVENT_INFO_MOBILE : MOUSE_EVENT_INFO_DESKTOP;
42336
- trigger.addEventListener(this.dndMouse.MOUSEDOWN, this.onMouseDown);
43011
+ this.dndMouseList = forceMobile
43012
+ ? [MOUSE_EVENT_INFO_MOBILE]
43013
+ : isTouchSupported
43014
+ ? [MOUSE_EVENT_INFO_DESKTOP, MOUSE_EVENT_INFO_MOBILE]
43015
+ : [MOUSE_EVENT_INFO_DESKTOP];
43016
+ this.dndMouse = this.dndMouseList[0];
43017
+ this.originalTouchAction = trigger.style.touchAction;
43018
+ if (this.dndMouseList.indexOf(MOUSE_EVENT_INFO_MOBILE) >= 0) {
43019
+ trigger.style.touchAction = 'none';
43020
+ }
43021
+ this.dndMouseList.forEach(function (eventInfo) {
43022
+ return trigger.addEventListener(eventInfo.MOUSEDOWN, _this.onMouseDown, { passive: false });
43023
+ });
42337
43024
  }
42338
43025
  /**
42339
43026
  * Dispose this object, remove all event listeners that has been attached
42340
43027
  */
42341
43028
  DragAndDropHelper.prototype.dispose = function () {
42342
- this.trigger.removeEventListener(this.dndMouse.MOUSEDOWN, this.onMouseDown);
43029
+ var _this = this;
43030
+ this.dndMouseList.forEach(function (eventInfo) {
43031
+ return _this.trigger.removeEventListener(eventInfo.MOUSEDOWN, _this.onMouseDown);
43032
+ });
43033
+ this.trigger.style.touchAction = this.originalTouchAction;
42343
43034
  this.removeDocumentEvents();
42344
43035
  };
42345
43036
  Object.defineProperty(DragAndDropHelper.prototype, "mouseType", {
@@ -42351,8 +43042,14 @@ var DragAndDropHelper = /** @class */ (function () {
42351
43042
  });
42352
43043
  DragAndDropHelper.prototype.addDocumentEvents = function () {
42353
43044
  var doc = this.trigger.ownerDocument;
42354
- doc.addEventListener(this.dndMouse.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
42355
- doc.addEventListener(this.dndMouse.MOUSEUP, this.onMouseUp, true /*useCapture*/);
43045
+ doc.addEventListener(this.dndMouse.MOUSEMOVE, this.onMouseMove, {
43046
+ capture: true,
43047
+ passive: false,
43048
+ });
43049
+ doc.addEventListener(this.dndMouse.MOUSEUP, this.onMouseUp, {
43050
+ capture: true,
43051
+ passive: false,
43052
+ });
42356
43053
  };
42357
43054
  DragAndDropHelper.prototype.removeDocumentEvents = function () {
42358
43055
  var doc = this.trigger.ownerDocument;
@@ -42890,32 +43587,23 @@ var TableEditPlugin = /** @class */ (function () {
42890
43587
  }
42891
43588
  };
42892
43589
  this.onMouseMove = function (event) {
42893
- var _a, _b;
43590
+ var _a;
42894
43591
  var e = event;
42895
43592
  var editorWindow = (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.getDocument().defaultView;
42896
43593
  if (e.buttons > 0 || !editorWindow) {
42897
43594
  return;
42898
43595
  }
42899
- _this.ensureTableRects();
42900
43596
  var x = e.pageX - editorWindow.scrollX;
42901
43597
  var y = e.pageY - editorWindow.scrollY;
42902
- var currentTable = null;
42903
- //Find table in range of mouse
42904
- if (_this.tableRectMap) {
42905
- for (var i = _this.tableRectMap.length - 1; i >= 0; i--) {
42906
- var entry = _this.tableRectMap[i];
42907
- var rect = entry.rect;
42908
- if (x >= rect.left - TABLE_RESIZER_LENGTH &&
42909
- x <= rect.right + TABLE_RESIZER_LENGTH &&
42910
- y >= rect.top - TABLE_RESIZER_LENGTH &&
42911
- y <= rect.bottom + TABLE_RESIZER_LENGTH) {
42912
- currentTable = entry;
42913
- break;
42914
- }
42915
- }
43598
+ _this.updateTableEditor(x, y, event, true /* updateHoveredFeature */);
43599
+ };
43600
+ this.onTouchStart = function (event) {
43601
+ var _a;
43602
+ var touchEvent = event;
43603
+ var touch = (_a = touchEvent.targetTouches[0]) !== null && _a !== void 0 ? _a : touchEvent.changedTouches[0];
43604
+ if (touch) {
43605
+ _this.updateTableEditor(touch.clientX, touch.clientY, event, false /* updateHoveredFeature */);
42916
43606
  }
42917
- _this.setTableEditor(currentTable, e);
42918
- (_b = _this.tableEditor) === null || _b === void 0 ? void 0 : _b.onMouseMove(x, y);
42919
43607
  };
42920
43608
  this.invalidateTableRects = function () {
42921
43609
  _this.tableRectMap = null;
@@ -42935,6 +43623,7 @@ var TableEditPlugin = /** @class */ (function () {
42935
43623
  this.editor = editor;
42936
43624
  this.onMouseMoveDisposer = this.editor.attachDomEvent({
42937
43625
  mousemove: { beforeDispatch: this.onMouseMove },
43626
+ touchstart: { beforeDispatch: this.onTouchStart },
42938
43627
  });
42939
43628
  var scrollContainer = this.editor.getScrollContainer();
42940
43629
  scrollContainer.addEventListener('mouseout', this.onMouseOut);
@@ -42968,6 +43657,32 @@ var TableEditPlugin = /** @class */ (function () {
42968
43657
  break;
42969
43658
  }
42970
43659
  };
43660
+ TableEditPlugin.prototype.updateTableEditor = function (x, y, event, updateHoveredFeature) {
43661
+ var _a, _b;
43662
+ this.ensureTableRects();
43663
+ var currentTable = null;
43664
+ //Find table in range of mouse
43665
+ if (this.tableRectMap) {
43666
+ for (var i = this.tableRectMap.length - 1; i >= 0; i--) {
43667
+ var entry = this.tableRectMap[i];
43668
+ var rect = entry.rect;
43669
+ if (x >= rect.left - TABLE_RESIZER_LENGTH &&
43670
+ x <= rect.right + TABLE_RESIZER_LENGTH &&
43671
+ y >= rect.top - TABLE_RESIZER_LENGTH &&
43672
+ y <= rect.bottom + TABLE_RESIZER_LENGTH) {
43673
+ currentTable = entry;
43674
+ break;
43675
+ }
43676
+ }
43677
+ }
43678
+ this.setTableEditor(currentTable, event);
43679
+ if (updateHoveredFeature) {
43680
+ (_a = this.tableEditor) === null || _a === void 0 ? void 0 : _a.onMouseMove(x, y);
43681
+ }
43682
+ else {
43683
+ (_b = this.tableEditor) === null || _b === void 0 ? void 0 : _b.onTouchStart(x, y);
43684
+ }
43685
+ };
42971
43686
  /**
42972
43687
  * @internal Public only for unit test
42973
43688
  * @param entry Table to use when setting the Editors
@@ -43302,6 +44017,26 @@ var TableEditor = /** @class */ (function () {
43302
44017
  // Create Mover and Resizer
43303
44018
  this.setEditorFeatures();
43304
44019
  };
44020
+ /**
44021
+ * Public only for testing purposes
44022
+ */
44023
+ TableEditor.prototype.onTouchStart = function (x, y) {
44024
+ for (var rowIndex = 0; rowIndex < this.table.rows.length; rowIndex++) {
44025
+ var row = this.table.rows[rowIndex];
44026
+ for (var cellIndex = 0; cellIndex < row.cells.length; cellIndex++) {
44027
+ var td = row.cells[cellIndex];
44028
+ var rect = (0, roosterjs_content_model_dom_1.normalizeRect)(td.getBoundingClientRect());
44029
+ if (rect &&
44030
+ x >= rect.left &&
44031
+ x <= rect.right &&
44032
+ y >= rect.top &&
44033
+ y <= rect.bottom) {
44034
+ !this.isFeatureDisabled('CellResizer') && this.setResizingTd(td);
44035
+ return;
44036
+ }
44037
+ }
44038
+ }
44039
+ };
43305
44040
  TableEditor.prototype.setEditorFeatures = function () {
43306
44041
  var disableSelector = this.isFeatureDisabled('TableSelector');
43307
44042
  var disableMovement = this.isFeatureDisabled('TableMover');
@@ -43463,14 +44198,14 @@ function createCellResizer(editor, td, table, isRTL, isHorizontal, onStart, onEn
43463
44198
  onDragging: isHorizontal ? onDraggingHorizontal : onDraggingVertical,
43464
44199
  onDragEnd: onEnd,
43465
44200
  };
43466
- var featureHandler = new CellResizer(div, context, setPosition, handler, zoomScale, editor.getEnvironment().isMobileOrTablet, onTableEditorCreated);
44201
+ var featureHandler = new CellResizer(div, context, setPosition, handler, zoomScale, editor.getEnvironment().isMobileOrTablet, editor.getEnvironment().isTouchSupported, onTableEditorCreated);
43467
44202
  return { node: td, div: div, featureHandler: featureHandler };
43468
44203
  }
43469
44204
  exports.createCellResizer = createCellResizer;
43470
44205
  var CellResizer = /** @class */ (function (_super) {
43471
44206
  (0, tslib_1.__extends)(CellResizer, _super);
43472
- function CellResizer(trigger, context, onSubmit, handler, zoomScale, forceMobile, onTableEditorCreated) {
43473
- var _this = _super.call(this, trigger, context, onSubmit, handler, zoomScale, forceMobile) || this;
44207
+ function CellResizer(trigger, context, onSubmit, handler, zoomScale, forceMobile, isTouchSupported, onTableEditorCreated) {
44208
+ var _this = _super.call(this, trigger, context, onSubmit, handler, zoomScale, forceMobile, isTouchSupported) || this;
43474
44209
  _this.disposer = onTableEditorCreated === null || onTableEditorCreated === void 0 ? void 0 : onTableEditorCreated('CellResizer', trigger);
43475
44210
  return _this;
43476
44211
  }
@@ -43899,14 +44634,14 @@ function createTableMover(table, editor, isRTL, onFinishDragging, onStart, onEnd
43899
44634
  onDragStart: onDragStart,
43900
44635
  onDragging: onDragging,
43901
44636
  onDragEnd: onDragEnd,
43902
- }, context.zoomScale, onTableEditorCreated, editor.getEnvironment().isMobileOrTablet);
44637
+ }, context.zoomScale, onTableEditorCreated, editor.getEnvironment().isMobileOrTablet, editor.getEnvironment().isTouchSupported);
43903
44638
  return { node: table, div: div, featureHandler: featureHandler };
43904
44639
  }
43905
44640
  exports.createTableMover = createTableMover;
43906
44641
  var TableMoverFeature = /** @class */ (function (_super) {
43907
44642
  (0, tslib_1.__extends)(TableMoverFeature, _super);
43908
- function TableMoverFeature(div, context, onSubmit, handler, zoomScale, onTableEditorCreated, forceMobile) {
43909
- var _this = _super.call(this, div, context, onSubmit, handler, zoomScale, forceMobile) || this;
44643
+ function TableMoverFeature(div, context, onSubmit, handler, zoomScale, onTableEditorCreated, forceMobile, isTouchSupported) {
44644
+ var _this = _super.call(this, div, context, onSubmit, handler, zoomScale, forceMobile, isTouchSupported) || this;
43910
44645
  _this.disposer = onTableEditorCreated === null || onTableEditorCreated === void 0 ? void 0 : onTableEditorCreated('TableMover', div);
43911
44646
  return _this;
43912
44647
  }
@@ -44136,14 +44871,14 @@ function createTableResizer(table, editor, isRTL, onStart, onEnd, contentDiv, an
44136
44871
  onDragStart: onDragStart,
44137
44872
  onDragging: onDragging,
44138
44873
  onDragEnd: onDragEnd,
44139
- }, zoomScale, editor.getEnvironment().isMobileOrTablet, onTableEditorCreated);
44874
+ }, zoomScale, editor.getEnvironment().isMobileOrTablet, editor.getEnvironment().isTouchSupported, onTableEditorCreated);
44140
44875
  return { node: table, div: div, featureHandler: featureHandler };
44141
44876
  }
44142
44877
  exports.createTableResizer = createTableResizer;
44143
44878
  var TableResizer = /** @class */ (function (_super) {
44144
44879
  (0, tslib_1.__extends)(TableResizer, _super);
44145
- function TableResizer(trigger, context, onSubmit, handler, zoomScale, forceMobile, onTableEditorCreated) {
44146
- var _this = _super.call(this, trigger, context, onSubmit, handler, zoomScale, forceMobile) || this;
44880
+ function TableResizer(trigger, context, onSubmit, handler, zoomScale, forceMobile, isTouchSupported, onTableEditorCreated) {
44881
+ var _this = _super.call(this, trigger, context, onSubmit, handler, zoomScale, forceMobile, isTouchSupported) || this;
44147
44882
  _this.disposer = onTableEditorCreated === null || onTableEditorCreated === void 0 ? void 0 : onTableEditorCreated('TableResizer', trigger);
44148
44883
  return _this;
44149
44884
  }
@@ -44330,7 +45065,7 @@ function createTableRowColumnSelector(editor, table, isRowSelector, anchorContai
44330
45065
  onDragStart: onDragStart,
44331
45066
  onDragging: onDragging,
44332
45067
  onDragEnd: onDragEnd,
44333
- }, zoomScale, onTableEditorCreated, editor.getEnvironment().isMobileOrTablet);
45068
+ }, zoomScale, onTableEditorCreated, editor.getEnvironment().isMobileOrTablet, editor.getEnvironment().isTouchSupported);
44334
45069
  handlers.push(handler);
44335
45070
  }
44336
45071
  });
@@ -44345,8 +45080,8 @@ function createTableRowColumnSelector(editor, table, isRowSelector, anchorContai
44345
45080
  exports.createTableRowColumnSelector = createTableRowColumnSelector;
44346
45081
  var TableRowColumnSelectorHandler = /** @class */ (function (_super) {
44347
45082
  (0, tslib_1.__extends)(TableRowColumnSelectorHandler, _super);
44348
- function TableRowColumnSelectorHandler(div, isRow, context, handler, zoomScale, onTableEditorCreated, forceMobile) {
44349
- var _this = _super.call(this, div, context, function () { }, handler, zoomScale, forceMobile) || this;
45083
+ function TableRowColumnSelectorHandler(div, isRow, context, handler, zoomScale, onTableEditorCreated, forceMobile, isTouchSupported) {
45084
+ var _this = _super.call(this, div, context, function () { }, handler, zoomScale, forceMobile, isTouchSupported) || this;
44350
45085
  _this.isRow = isRow;
44351
45086
  _this.disposer = onTableEditorCreated === null || onTableEditorCreated === void 0 ? void 0 : onTableEditorCreated(_this.isRow ? 'TableRowSelector' : 'TableColumnSelector', div);
44352
45087
  return _this;