@excalidraw/common 0.18.0-4e471c107 → 0.18.0-5fffc47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/dev/index.js +91 -25
  2. package/dist/dev/index.js.map +2 -2
  3. package/dist/prod/index.js +3 -3
  4. package/dist/types/common/src/constants.d.ts +24 -4
  5. package/dist/types/common/src/utils.d.ts +3 -0
  6. package/dist/types/element/src/Scene.d.ts +6 -2
  7. package/dist/types/element/src/align.d.ts +2 -1
  8. package/dist/types/element/src/bounds.d.ts +1 -1
  9. package/dist/types/element/src/delta.d.ts +16 -4
  10. package/dist/types/element/src/distribute.d.ts +2 -1
  11. package/dist/types/element/src/groups.d.ts +1 -0
  12. package/dist/types/element/src/index.d.ts +1 -0
  13. package/dist/types/element/src/linearElementEditor.d.ts +2 -1
  14. package/dist/types/element/src/positionElementsOnGrid.d.ts +2 -0
  15. package/dist/types/element/src/renderElement.d.ts +4 -1
  16. package/dist/types/element/src/store.d.ts +6 -1
  17. package/dist/types/element/src/textElement.d.ts +1 -1
  18. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +21 -9
  19. package/dist/types/excalidraw/actions/actionBoundText.d.ts +14 -6
  20. package/dist/types/excalidraw/actions/actionCanvas.d.ts +94 -41
  21. package/dist/types/excalidraw/actions/actionClipboard.d.ts +45 -20
  22. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +7 -3
  23. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +24 -12
  24. package/dist/types/excalidraw/actions/actionElementLink.d.ts +7 -3
  25. package/dist/types/excalidraw/actions/actionElementLock.d.ts +14 -6
  26. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +7 -3
  27. package/dist/types/excalidraw/actions/actionExport.d.ts +63 -27
  28. package/dist/types/excalidraw/actions/actionFinalize.d.ts +16 -7
  29. package/dist/types/excalidraw/actions/actionFrame.d.ts +28 -12
  30. package/dist/types/excalidraw/actions/actionGroup.d.ts +14 -6
  31. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +41 -6
  32. package/dist/types/excalidraw/actions/actionLink.d.ts +6 -2
  33. package/dist/types/excalidraw/actions/actionMenu.d.ts +7 -371
  34. package/dist/types/excalidraw/actions/actionNavigate.d.ts +14 -6
  35. package/dist/types/excalidraw/actions/actionProperties.d.ts +122 -53
  36. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +7 -3
  37. package/dist/types/excalidraw/actions/actionStyles.d.ts +7 -3
  38. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +7 -3
  39. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +7 -3
  40. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +7 -3
  41. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +7 -3
  42. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +7 -3
  43. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +7 -3
  44. package/dist/types/excalidraw/actions/index.d.ts +2 -2
  45. package/dist/types/excalidraw/actions/types.d.ts +1 -1
  46. package/dist/types/excalidraw/appState.d.ts +5 -1
  47. package/dist/types/excalidraw/clipboard.d.ts +64 -1
  48. package/dist/types/excalidraw/components/Actions.d.ts +17 -7
  49. package/dist/types/excalidraw/components/App.d.ts +10 -8
  50. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +1 -0
  51. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +2 -0
  52. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +2 -1
  53. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +2 -1
  54. package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
  55. package/dist/types/excalidraw/components/Ellipsify.d.ts +4 -0
  56. package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +1 -1
  57. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +2 -1
  58. package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +3 -1
  59. package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
  60. package/dist/types/excalidraw/components/LayerUI.d.ts +2 -1
  61. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +1 -1
  62. package/dist/types/excalidraw/components/MobileMenu.d.ts +3 -5
  63. package/dist/types/excalidraw/components/MobileToolBar.d.ts +11 -0
  64. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -0
  65. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -2
  66. package/dist/types/excalidraw/components/TextField.d.ts +1 -0
  67. package/dist/types/excalidraw/components/ToolPopover.d.ts +25 -0
  68. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +4 -2
  69. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +2 -1
  70. package/dist/types/excalidraw/components/icons.d.ts +5 -0
  71. package/dist/types/excalidraw/components/shapes.d.ts +129 -1
  72. package/dist/types/excalidraw/data/blob.d.ts +3 -7
  73. package/dist/types/excalidraw/data/reconcile.d.ts +1 -0
  74. package/dist/types/excalidraw/data/restore.d.ts +6 -1
  75. package/dist/types/excalidraw/data/types.d.ts +4 -1
  76. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  77. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
  78. package/dist/types/excalidraw/index.d.ts +2 -1
  79. package/dist/types/excalidraw/renderer/staticScene.d.ts +4 -1
  80. package/dist/types/excalidraw/types.d.ts +16 -6
  81. package/dist/types/math/src/segment.d.ts +1 -0
  82. package/package.json +1 -1
package/dist/dev/index.js CHANGED
@@ -281,49 +281,48 @@ var BinaryHeap = class {
281
281
  content = [];
282
282
  sinkDown(idx) {
283
283
  const node = this.content[idx];
284
+ const nodeScore = this.scoreFunction(node);
284
285
  while (idx > 0) {
285
286
  const parentN = (idx + 1 >> 1) - 1;
286
287
  const parent = this.content[parentN];
287
- if (this.scoreFunction(node) < this.scoreFunction(parent)) {
288
- this.content[parentN] = node;
288
+ if (nodeScore < this.scoreFunction(parent)) {
289
289
  this.content[idx] = parent;
290
290
  idx = parentN;
291
291
  } else {
292
292
  break;
293
293
  }
294
294
  }
295
+ this.content[idx] = node;
295
296
  }
296
297
  bubbleUp(idx) {
297
298
  const length = this.content.length;
298
299
  const node = this.content[idx];
299
300
  const score = this.scoreFunction(node);
300
301
  while (true) {
301
- const child2N = idx + 1 << 1;
302
- const child1N = child2N - 1;
303
- let swap = null;
304
- let child1Score = 0;
302
+ const child1N = (idx + 1 << 1) - 1;
303
+ const child2N = child1N + 1;
304
+ let smallestIdx = idx;
305
+ let smallestScore = score;
305
306
  if (child1N < length) {
306
- const child1 = this.content[child1N];
307
- child1Score = this.scoreFunction(child1);
308
- if (child1Score < score) {
309
- swap = child1N;
307
+ const child1Score = this.scoreFunction(this.content[child1N]);
308
+ if (child1Score < smallestScore) {
309
+ smallestIdx = child1N;
310
+ smallestScore = child1Score;
310
311
  }
311
312
  }
312
313
  if (child2N < length) {
313
- const child2 = this.content[child2N];
314
- const child2Score = this.scoreFunction(child2);
315
- if (child2Score < (swap === null ? score : child1Score)) {
316
- swap = child2N;
314
+ const child2Score = this.scoreFunction(this.content[child2N]);
315
+ if (child2Score < smallestScore) {
316
+ smallestIdx = child2N;
317
317
  }
318
318
  }
319
- if (swap !== null) {
320
- this.content[idx] = this.content[swap];
321
- this.content[swap] = node;
322
- idx = swap;
323
- } else {
319
+ if (smallestIdx === idx) {
324
320
  break;
325
321
  }
322
+ this.content[idx] = this.content[smallestIdx];
323
+ idx = smallestIdx;
326
324
  }
325
+ this.content[idx] = node;
327
326
  }
328
327
  push(node) {
329
328
  this.content.push(node);
@@ -647,13 +646,17 @@ var isAndroid = /\b(android)\b/i.test(navigator.userAgent);
647
646
  var isFirefox = typeof window !== "undefined" && "netscape" in window && navigator.userAgent.indexOf("rv:") > 1 && navigator.userAgent.indexOf("Gecko") > 1;
648
647
  var isChrome = navigator.userAgent.indexOf("Chrome") !== -1;
649
648
  var isSafari = !isChrome && navigator.userAgent.indexOf("Safari") !== -1;
650
- var isIOS = /iPad|iPhone/.test(navigator.platform) || // iPadOS 13+
649
+ var isIOS = /iPad|iPhone/i.test(navigator.platform) || // iPadOS 13+
651
650
  navigator.userAgent.includes("Mac") && "ontouchend" in document;
652
651
  var isBrave = () => navigator.brave?.isBrave?.name === "isBrave";
652
+ var isMobile = isIOS || /android|webos|ipod|blackberry|iemobile|opera mini/i.test(
653
+ navigator.userAgent
654
+ ) || /android|ios|ipod|blackberry|windows phone/i.test(navigator.platform);
653
655
  var supportsResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
654
656
  var APP_NAME = "Excalidraw";
655
657
  var TEXT_AUTOWRAP_THRESHOLD = 36;
656
658
  var DRAGGING_THRESHOLD = 10;
659
+ var MINIMUM_ARROW_SIZE = 20;
657
660
  var LINE_CONFIRM_THRESHOLD = 8;
658
661
  var ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;
659
662
  var ELEMENT_TRANSLATE_AMOUNT = 1;
@@ -730,10 +733,12 @@ var ENV = {
730
733
  PRODUCTION: "production"
731
734
  };
732
735
  var CLASSES = {
736
+ SIDEBAR: "sidebar",
733
737
  SHAPE_ACTIONS_MENU: "App-menu__left",
734
738
  ZOOM_ACTIONS: "zoom-actions",
735
739
  SEARCH_MENU_INPUT_WRAPPER: "layer-ui__search-inputWrapper",
736
- CONVERT_ELEMENT_TYPE_POPUP: "ConvertElementTypePopup"
740
+ CONVERT_ELEMENT_TYPE_POPUP: "ConvertElementTypePopup",
741
+ SHAPE_ACTIONS_THEME_SCOPE: "shape-actions-theme-scope"
737
742
  };
738
743
  var CJK_HAND_DRAWN_FALLBACK_FONT = "Xiaolai";
739
744
  var WINDOWS_EMOJI_FALLBACK_FONT = "Segoe UI Emoji";
@@ -828,13 +833,19 @@ var IMAGE_MIME_TYPES = {
828
833
  avif: "image/avif",
829
834
  jfif: "image/jfif"
830
835
  };
831
- var MIME_TYPES = {
836
+ var STRING_MIME_TYPES = {
832
837
  text: "text/plain",
833
838
  html: "text/html",
834
839
  json: "application/json",
835
840
  // excalidraw data
836
841
  excalidraw: "application/vnd.excalidraw+json",
842
+ // LEGACY: fully-qualified library JSON data
837
843
  excalidrawlib: "application/vnd.excalidrawlib+json",
844
+ // list of excalidraw library item ids
845
+ excalidrawlibIds: "application/vnd.excalidrawlib.ids+json"
846
+ };
847
+ var MIME_TYPES = {
848
+ ...STRING_MIME_TYPES,
838
849
  // image-encoded excalidraw data
839
850
  "excalidraw.svg": "image/svg+xml",
840
851
  "excalidraw.png": "image/png",
@@ -893,9 +904,12 @@ var DEFAULT_UI_OPTIONS = {
893
904
  image: true
894
905
  }
895
906
  };
896
- var MQ_MAX_WIDTH_PORTRAIT = 730;
907
+ var MQ_MAX_MOBILE = 599;
897
908
  var MQ_MAX_WIDTH_LANDSCAPE = 1e3;
898
909
  var MQ_MAX_HEIGHT_LANDSCAPE = 500;
910
+ var MQ_MIN_TABLET = MQ_MAX_MOBILE + 1;
911
+ var MQ_MAX_TABLET = 1400;
912
+ var MQ_MIN_WIDTH_DESKTOP = 1440;
899
913
  var MQ_RIGHT_SIDEBAR_MIN_WIDTH = 1229;
900
914
  var MAX_DECIMALS_FOR_SVG_EXPORT = 2;
901
915
  var EXPORT_SCALES = [1, 2, 3];
@@ -1016,6 +1030,10 @@ var UserIdleState = /* @__PURE__ */ ((UserIdleState2) => {
1016
1030
  return UserIdleState2;
1017
1031
  })(UserIdleState || {});
1018
1032
  var LINE_POLYGON_POINT_MERGE_DISTANCE = 20;
1033
+ var DOUBLE_TAP_POSITION_THRESHOLD = 35;
1034
+ var MOBILE_ACTION_BUTTON_BG = {
1035
+ background: "var(--mobile-action-button-bg)"
1036
+ };
1019
1037
 
1020
1038
  // src/font-metadata.ts
1021
1039
  init_define_import_meta_env();
@@ -1416,7 +1434,7 @@ var isInteractive = (target) => {
1416
1434
  return isInputLike(target) || target instanceof Element && !!target.closest("label, button");
1417
1435
  };
1418
1436
  var isWritableElement = (target) => target instanceof HTMLElement && target.dataset.type === "wysiwyg" || target instanceof HTMLBRElement || // newline in wysiwyg
1419
- target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement && (target.type === "text" || target.type === "number" || target.type === "password");
1437
+ target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement && (target.type === "text" || target.type === "number" || target.type === "password" || target.type === "search");
1420
1438
  var getFontFamilyString = ({
1421
1439
  fontFamily
1422
1440
  }) => {
@@ -1433,6 +1451,9 @@ var getFontString = ({
1433
1451
  }) => {
1434
1452
  return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;
1435
1453
  };
1454
+ var nextAnimationFrame = async (cb) => {
1455
+ requestAnimationFrame(() => requestAnimationFrame(cb));
1456
+ };
1436
1457
  var debounce = (fn, timeout) => {
1437
1458
  let handle = 0;
1438
1459
  let lastArgs = null;
@@ -2066,6 +2087,41 @@ var reduceToCommonValue = (collection, getValue) => {
2066
2087
  }
2067
2088
  return commonValue;
2068
2089
  };
2090
+ var isMobileOrTablet = () => {
2091
+ const ua = navigator.userAgent || "";
2092
+ const platform = navigator.platform || "";
2093
+ const uaData = navigator.userAgentData;
2094
+ if (uaData) {
2095
+ const plat = (uaData.platform || "").toLowerCase();
2096
+ const isDesktopOS = plat === "windows" || plat === "macos" || plat === "linux" || plat === "chrome os";
2097
+ if (uaData.mobile === true) {
2098
+ return true;
2099
+ }
2100
+ if (uaData.mobile === false && plat === "android") {
2101
+ const looksTouchTablet = matchMedia?.("(hover: none)").matches && matchMedia?.("(pointer: coarse)").matches;
2102
+ return looksTouchTablet;
2103
+ }
2104
+ if (isDesktopOS) {
2105
+ return false;
2106
+ }
2107
+ }
2108
+ if (isIOS) {
2109
+ return true;
2110
+ }
2111
+ if (isAndroid) {
2112
+ const isAndroidPhone = /Mobile/i.test(ua);
2113
+ const isAndroidTablet = !isAndroidPhone;
2114
+ if (isAndroidPhone || isAndroidTablet) {
2115
+ const looksTouchTablet = matchMedia?.("(hover: none)").matches && matchMedia?.("(pointer: coarse)").matches;
2116
+ return looksTouchTablet;
2117
+ }
2118
+ }
2119
+ const looksDesktopPlatform = /Win|Linux|CrOS|Mac/.test(platform) || /Windows NT|X11|CrOS|Macintosh/.test(ua);
2120
+ if (looksDesktopPlatform) {
2121
+ return false;
2122
+ }
2123
+ return false;
2124
+ };
2069
2125
 
2070
2126
  // src/random.ts
2071
2127
  var random = new Random(Date.now());
@@ -2188,6 +2244,7 @@ export {
2188
2244
  DEFAULT_UI_OPTIONS,
2189
2245
  DEFAULT_VERSION,
2190
2246
  DEFAULT_VERTICAL_ALIGN,
2247
+ DOUBLE_TAP_POSITION_THRESHOLD,
2191
2248
  DRAGGING_THRESHOLD,
2192
2249
  EDITOR_LS_KEYS,
2193
2250
  ELEMENTS_PALETTE_SHADE_INDEXES,
@@ -2225,13 +2282,18 @@ export {
2225
2282
  MAX_DECIMALS_FOR_SVG_EXPORT,
2226
2283
  MAX_ZOOM,
2227
2284
  MIME_TYPES,
2285
+ MINIMUM_ARROW_SIZE,
2228
2286
  MIN_FONT_SIZE,
2229
2287
  MIN_WIDTH_OR_HEIGHT,
2230
2288
  MIN_ZOOM,
2289
+ MOBILE_ACTION_BUTTON_BG,
2231
2290
  MONOSPACE_GENERIC_FONT,
2232
2291
  MQ_MAX_HEIGHT_LANDSCAPE,
2292
+ MQ_MAX_MOBILE,
2293
+ MQ_MAX_TABLET,
2233
2294
  MQ_MAX_WIDTH_LANDSCAPE,
2234
- MQ_MAX_WIDTH_PORTRAIT,
2295
+ MQ_MIN_TABLET,
2296
+ MQ_MIN_WIDTH_DESKTOP,
2235
2297
  MQ_RIGHT_SIDEBAR_MIN_WIDTH,
2236
2298
  ORIG_ID,
2237
2299
  POINTER_BUTTON,
@@ -2245,6 +2307,7 @@ export {
2245
2307
  SHIFT_LOCKING_ANGLE,
2246
2308
  SIDE_RESIZING_THRESHOLD,
2247
2309
  STATS_PANELS,
2310
+ STRING_MIME_TYPES,
2248
2311
  STROKE_WIDTH,
2249
2312
  SVG_DOCUMENT_PREAMBLE,
2250
2313
  SVG_NS,
@@ -2324,6 +2387,8 @@ export {
2324
2387
  isLatinChar,
2325
2388
  isLocalLink,
2326
2389
  isMemberOf,
2390
+ isMobile,
2391
+ isMobileOrTablet,
2327
2392
  isPrimitive,
2328
2393
  isProdEnv,
2329
2394
  isPromiseLike,
@@ -2343,6 +2408,7 @@ export {
2343
2408
  memoize,
2344
2409
  muteFSAbortError,
2345
2410
  nFormatter,
2411
+ nextAnimationFrame,
2346
2412
  normalizeEOL,
2347
2413
  normalizeLink,
2348
2414
  preventUnload,