index.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import {
  2. ExcalidrawElement,
  3. NonDeletedExcalidrawElement,
  4. NonDeleted,
  5. } from "./types";
  6. import { isInvisiblySmallElement } from "./sizeHelpers";
  7. import { isLinearElementType } from "./typeChecks";
  8. export {
  9. newElement,
  10. newTextElement,
  11. updateTextElement,
  12. newLinearElement,
  13. newImageElement,
  14. duplicateElement,
  15. } from "./newElement";
  16. export {
  17. getElementAbsoluteCoords,
  18. getElementBounds,
  19. getCommonBounds,
  20. getDiamondPoints,
  21. getArrowheadPoints,
  22. getClosestElementBounds,
  23. } from "./bounds";
  24. export {
  25. OMIT_SIDES_FOR_MULTIPLE_ELEMENTS,
  26. getTransformHandlesFromCoords,
  27. getTransformHandles,
  28. } from "./transformHandles";
  29. export {
  30. hitTest,
  31. isHittingElementBoundingBoxWithoutHittingElement,
  32. } from "./collision";
  33. export {
  34. resizeTest,
  35. getCursorForResizingElement,
  36. getElementWithTransformHandleType,
  37. getTransformHandleTypeFromCoords,
  38. } from "./resizeTest";
  39. export {
  40. transformElements,
  41. getResizeOffsetXY,
  42. getResizeArrowDirection,
  43. } from "./resizeElements";
  44. export {
  45. dragSelectedElements,
  46. getDragOffsetXY,
  47. dragNewElement,
  48. } from "./dragElements";
  49. export { isTextElement, isExcalidrawElement } from "./typeChecks";
  50. export { textWysiwyg } from "./textWysiwyg";
  51. export { redrawTextBoundingBox } from "./textElement";
  52. export {
  53. getPerfectElementSize,
  54. isInvisiblySmallElement,
  55. resizePerfectLineForNWHandler,
  56. getNormalizedDimensions,
  57. } from "./sizeHelpers";
  58. export { showSelectedShapeActions } from "./showSelectedShapeActions";
  59. export const getSceneVersion = (elements: readonly ExcalidrawElement[]) =>
  60. elements.reduce((acc, el) => acc + el.version, 0);
  61. export const getVisibleElements = (elements: readonly ExcalidrawElement[]) =>
  62. elements.filter(
  63. (el) => !el.isDeleted && !isInvisiblySmallElement(el),
  64. ) as readonly NonDeletedExcalidrawElement[];
  65. export const getNonDeletedElements = (elements: readonly ExcalidrawElement[]) =>
  66. elements.filter(
  67. (element) => !element.isDeleted,
  68. ) as readonly NonDeletedExcalidrawElement[];
  69. export const isNonDeletedElement = <T extends ExcalidrawElement>(
  70. element: T,
  71. ): element is NonDeleted<T> => !element.isDeleted;
  72. const _clearElements = (
  73. elements: readonly ExcalidrawElement[],
  74. ): ExcalidrawElement[] =>
  75. getNonDeletedElements(elements).map((element) =>
  76. isLinearElementType(element.type)
  77. ? { ...element, lastCommittedPoint: null }
  78. : element,
  79. );
  80. export const clearElementsForDatabase = (
  81. elements: readonly ExcalidrawElement[],
  82. ) => _clearElements(elements);
  83. export const clearElementsForExport = (
  84. elements: readonly ExcalidrawElement[],
  85. ) => _clearElements(elements);
  86. export const clearElementsForLocalStorage = (
  87. elements: readonly ExcalidrawElement[],
  88. ) => _clearElements(elements);