123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import {
- ExcalidrawElement,
- NonDeletedExcalidrawElement,
- NonDeleted,
- } from "./types";
- import { isInvisiblySmallElement } from "./sizeHelpers";
- import { isLinearElementType } from "./typeChecks";
- export {
- newElement,
- newTextElement,
- updateTextElement,
- newLinearElement,
- duplicateElement,
- } from "./newElement";
- export {
- getElementAbsoluteCoords,
- getElementBounds,
- getCommonBounds,
- getDiamondPoints,
- getArrowheadPoints,
- getClosestElementBounds,
- } from "./bounds";
- export {
- OMIT_SIDES_FOR_MULTIPLE_ELEMENTS,
- getTransformHandlesFromCoords,
- getTransformHandles,
- } from "./transformHandles";
- export {
- hitTest,
- isHittingElementBoundingBoxWithoutHittingElement,
- } from "./collision";
- export {
- resizeTest,
- getCursorForResizingElement,
- getElementWithTransformHandleType,
- getTransformHandleTypeFromCoords,
- } from "./resizeTest";
- export {
- transformElements,
- getResizeOffsetXY,
- getResizeArrowDirection,
- } from "./resizeElements";
- export {
- dragSelectedElements,
- getDragOffsetXY,
- dragNewElement,
- } from "./dragElements";
- export { isTextElement, isExcalidrawElement } from "./typeChecks";
- export { textWysiwyg } from "./textWysiwyg";
- export { redrawTextBoundingBox } from "./textElement";
- export {
- getPerfectElementSize,
- isInvisiblySmallElement,
- resizePerfectLineForNWHandler,
- getNormalizedDimensions,
- } from "./sizeHelpers";
- export { showSelectedShapeActions } from "./showSelectedShapeActions";
- export const getSyncableElements = (
- elements: readonly ExcalidrawElement[], // There are places in Excalidraw where synthetic invisibly small elements are added and removed.
- ) =>
- // It's probably best to keep those local otherwise there might be a race condition that
- // gets the app into an invalid state. I've never seen it happen but I'm worried about it :)
- elements.filter((el) => el.isDeleted || !isInvisiblySmallElement(el));
- export const getElementMap = (elements: readonly ExcalidrawElement[]) =>
- elements.reduce(
- (acc: { [key: string]: ExcalidrawElement }, element: ExcalidrawElement) => {
- acc[element.id] = element;
- return acc;
- },
- {},
- );
- export const getSceneVersion = (elements: readonly ExcalidrawElement[]) =>
- elements.reduce((acc, el) => acc + el.version, 0);
- export const getNonDeletedElements = (elements: readonly ExcalidrawElement[]) =>
- elements.filter(
- (element) => !element.isDeleted,
- ) as readonly NonDeletedExcalidrawElement[];
- export const isNonDeletedElement = <T extends ExcalidrawElement>(
- element: T,
- ): element is NonDeleted<T> => !element.isDeleted;
- const _clearElements = (
- elements: readonly ExcalidrawElement[],
- ): ExcalidrawElement[] =>
- getNonDeletedElements(elements).map((element) =>
- isLinearElementType(element.type)
- ? { ...element, lastCommittedPoint: null }
- : element,
- );
- export const clearElementsForExport = (
- elements: readonly ExcalidrawElement[],
- ) => _clearElements(elements);
- export const clearElementsForLocalStorage = (
- elements: readonly ExcalidrawElement[],
- ) => _clearElements(elements);
|