tldraw
Version:
A tiny little drawing editor.
186 lines (185 loc) • 7.57 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var Tldraw_exports = {};
__export(Tldraw_exports, {
Tldraw: () => Tldraw
});
module.exports = __toCommonJS(Tldraw_exports);
var import_jsx_runtime = require("react/jsx-runtime");
var import_editor = require("@tldraw/editor");
var import_react = require("react");
var import_TldrawHandles = require("./canvas/TldrawHandles");
var import_TldrawOverlays = require("./canvas/TldrawOverlays");
var import_TldrawScribble = require("./canvas/TldrawScribble");
var import_TldrawSelectionForeground = require("./canvas/TldrawSelectionForeground");
var import_TldrawShapeIndicators = require("./canvas/TldrawShapeIndicators");
var import_defaultBindingUtils = require("./defaultBindingUtils");
var import_defaultExternalContentHandlers = require("./defaultExternalContentHandlers");
var import_defaultShapeTools = require("./defaultShapeTools");
var import_defaultShapeUtils = require("./defaultShapeUtils");
var import_defaultSideEffects = require("./defaultSideEffects");
var import_defaultTools = require("./defaultTools");
var import_EmbedShapeUtil = require("./shapes/embed/EmbedShapeUtil");
var import_defaultFonts = require("./shapes/shared/defaultFonts");
var import_TldrawUi = require("./ui/TldrawUi");
var import_LoadingScreen = require("./ui/components/LoadingScreen");
var import_Spinner = require("./ui/components/Spinner");
var import_components = require("./ui/context/components");
var import_toasts = require("./ui/context/toasts");
var import_useTranslation = require("./ui/hooks/useTranslation/useTranslation");
var import_assetUrls2 = require("./utils/static-assets/assetUrls");
var import_richText = require("./utils/text/richText");
const allDefaultTools = [...import_defaultTools.defaultTools, ...import_defaultShapeTools.defaultShapeTools];
function Tldraw(props) {
const {
children,
maxImageDimension,
maxAssetSize,
acceptedImageMimeTypes,
acceptedVideoMimeTypes,
onMount,
components = {},
shapeUtils = [],
bindingUtils = [],
tools = [],
embeds,
textOptions,
...rest
} = props;
const _components = (0, import_editor.useShallowObjectIdentity)(components);
const componentsWithDefault = (0, import_react.useMemo)(
() => ({
Scribble: import_TldrawScribble.TldrawScribble,
ShapeIndicators: import_TldrawShapeIndicators.TldrawShapeIndicators,
CollaboratorScribble: import_TldrawScribble.TldrawScribble,
SelectionForeground: import_TldrawSelectionForeground.TldrawSelectionForeground,
Handles: import_TldrawHandles.TldrawHandles,
Overlays: import_TldrawOverlays.TldrawOverlays,
Spinner: import_Spinner.Spinner,
LoadingScreen: import_LoadingScreen.LoadingScreen,
..._components
}),
[_components]
);
const _shapeUtils = (0, import_editor.useShallowArrayIdentity)(shapeUtils);
const shapeUtilsWithDefaults = (0, import_react.useMemo)(
() => (0, import_editor.mergeArraysAndReplaceDefaults)("type", _shapeUtils, import_defaultShapeUtils.defaultShapeUtils),
[_shapeUtils]
);
const _bindingUtils = (0, import_editor.useShallowArrayIdentity)(bindingUtils);
const bindingUtilsWithDefaults = (0, import_react.useMemo)(
() => (0, import_editor.mergeArraysAndReplaceDefaults)("type", _bindingUtils, import_defaultBindingUtils.defaultBindingUtils),
[_bindingUtils]
);
const _tools = (0, import_editor.useShallowArrayIdentity)(tools);
const toolsWithDefaults = (0, import_react.useMemo)(
() => (0, import_editor.mergeArraysAndReplaceDefaults)("id", allDefaultTools, _tools),
[_tools]
);
const _imageMimeTypes = (0, import_editor.useShallowArrayIdentity)(
acceptedImageMimeTypes ?? import_editor.DEFAULT_SUPPORTED_IMAGE_TYPES
);
const _videoMimeTypes = (0, import_editor.useShallowArrayIdentity)(
acceptedVideoMimeTypes ?? import_editor.DEFAULT_SUPPORT_VIDEO_TYPES
);
const textOptionsWithDefaults = (0, import_react.useMemo)(() => {
return {
addFontsFromNode: import_richText.defaultAddFontsFromNode,
...textOptions,
tipTapConfig: {
extensions: import_richText.tipTapDefaultExtensions,
...textOptions?.tipTapConfig
}
};
}, [textOptions]);
const mediaMimeTypes = (0, import_react.useMemo)(
() => [..._imageMimeTypes, ..._videoMimeTypes],
[_imageMimeTypes, _videoMimeTypes]
);
const assets = (0, import_assetUrls2.useDefaultEditorAssetsWithOverrides)(rest.assetUrls);
const embedShapeUtil = shapeUtilsWithDefaults.find((util) => util.type === "embed");
if (embedShapeUtil && embeds) {
import_EmbedShapeUtil.EmbedShapeUtil.setEmbedDefinitions(embeds);
}
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
import_editor.TldrawEditor,
{
initialState: "select",
...rest,
components: componentsWithDefault,
shapeUtils: shapeUtilsWithDefaults,
bindingUtils: bindingUtilsWithDefaults,
tools: toolsWithDefaults,
textOptions: textOptionsWithDefaults,
assetUrls: assets,
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUi.TldrawUi, { ...rest, components: componentsWithDefault, mediaMimeTypes, children: [
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
InsideOfEditorAndUiContext,
{
maxImageDimension,
maxAssetSize,
acceptedImageMimeTypes: _imageMimeTypes,
acceptedVideoMimeTypes: _videoMimeTypes,
onMount
}
),
children
] })
}
);
}
function InsideOfEditorAndUiContext({
maxImageDimension,
maxAssetSize,
acceptedImageMimeTypes,
acceptedVideoMimeTypes,
onMount
}) {
const editor = (0, import_editor.useEditor)();
const toasts = (0, import_toasts.useToasts)();
const msg = (0, import_useTranslation.useTranslation)();
(0, import_editor.useOnMount)(() => {
const unsubs = [];
unsubs.push((0, import_defaultSideEffects.registerDefaultSideEffects)(editor));
editor.fonts.requestFonts(import_defaultFonts.allDefaultFontFaces);
(0, import_defaultExternalContentHandlers.registerDefaultExternalContentHandlers)(editor, {
maxImageDimension,
maxAssetSize,
acceptedImageMimeTypes,
acceptedVideoMimeTypes,
toasts,
msg
});
unsubs.push(editor.store.props.onMount(editor));
unsubs.push(onMount?.(editor));
return () => {
unsubs.forEach((fn) => fn?.());
};
});
const { Canvas } = (0, import_editor.useEditorComponents)();
const { ContextMenu } = (0, import_components.useTldrawUiComponents)();
if (ContextMenu) {
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ContextMenu, {});
}
if (Canvas) {
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Canvas, {});
}
return null;
}
//# sourceMappingURL=Tldraw.js.map