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