UNPKG

@tldraw/editor

Version:

tldraw infinite canvas SDK (editor).

132 lines (131 loc) 4.35 kB
import { atom, react } from "@tldraw/state"; import { deleteFromSessionStorage, getFromSessionStorage, setInSessionStorage } from "@tldraw/utils"; const featureFlags = {}; const pointerCaptureTrackingObject = createDebugValue( "pointerCaptureTrackingObject", // ideally we wouldn't store this mutable value in an atom but it's not // a big deal for debug values { defaults: { all: /* @__PURE__ */ new Map() }, shouldStoreForSession: false } ); const debugFlags = { // --- DEBUG VALUES --- logPreventDefaults: createDebugValue("logPreventDefaults", { defaults: { all: false } }), logPointerCaptures: createDebugValue("logPointerCaptures", { defaults: { all: false } }), logElementRemoves: createDebugValue("logElementRemoves", { defaults: { all: false } }), debugSvg: createDebugValue("debugSvg", { defaults: { all: false } }), showFps: createDebugValue("showFps", { defaults: { all: false } }), measurePerformance: createDebugValue("measurePerformance", { defaults: { all: false } }), throwToBlob: createDebugValue("throwToBlob", { defaults: { all: false } }), reconnectOnPing: createDebugValue("reconnectOnPing", { defaults: { all: false } }), debugCursors: createDebugValue("debugCursors", { defaults: { all: false } }), forceSrgb: createDebugValue("forceSrgbColors", { defaults: { all: false } }), debugGeometry: createDebugValue("debugGeometry", { defaults: { all: false } }), hideShapes: createDebugValue("hideShapes", { defaults: { all: false } }), editOnType: createDebugValue("editOnType", { defaults: { all: false } }), a11y: createDebugValue("a11y", { defaults: { all: false } }), debugElbowArrows: createDebugValue("debugElbowArrows", { defaults: { all: false } }) }; if (typeof Element !== "undefined") { const nativeElementRemoveChild = Element.prototype.removeChild; react("element removal logging", () => { if (debugFlags.logElementRemoves.get()) { Element.prototype.removeChild = function(child) { console.warn("[tldraw] removing child:", child); return nativeElementRemoveChild.call(this, child); }; } else { Element.prototype.removeChild = nativeElementRemoveChild; } }); } function createDebugValue(name, { defaults, shouldStoreForSession = true }) { return createDebugValueBase({ name, defaults, shouldStoreForSession }); } function createDebugValueBase(def) { const defaultValue = getDefaultValue(def); const storedValue = def.shouldStoreForSession ? getStoredInitialValue(def.name) : null; const valueAtom = atom(`debug:${def.name}`, storedValue ?? defaultValue); if (typeof window !== "undefined") { if (def.shouldStoreForSession) { react(`debug:${def.name}`, () => { const currentValue = valueAtom.get(); if (currentValue === defaultValue) { deleteFromSessionStorage(`tldraw_debug:${def.name}`); } else { setInSessionStorage(`tldraw_debug:${def.name}`, JSON.stringify(currentValue)); } }); } Object.defineProperty(window, `tldraw${def.name.replace(/^[a-z]/, (l) => l.toUpperCase())}`, { get() { return valueAtom.get(); }, set(newValue) { valueAtom.set(newValue); }, configurable: true }); } return Object.assign(valueAtom, def, { reset: () => valueAtom.set(defaultValue) }); } function getStoredInitialValue(name) { try { return JSON.parse(getFromSessionStorage(`tldraw_debug:${name}`) ?? "null"); } catch { return null; } } function readEnv(fn) { try { return fn(); } catch { return null; } } function getDefaultValue(def) { const env = readEnv(() => process.env.TLDRAW_ENV) ?? readEnv(() => process.env.VERCEL_PUBLIC_TLDRAW_ENV) ?? readEnv(() => process.env.NEXT_PUBLIC_TLDRAW_ENV) ?? // default to production because if we don't have one of these, this is probably a library use "production"; switch (env) { case "production": return def.defaults.production ?? def.defaults.all; case "preview": case "staging": return def.defaults.staging ?? def.defaults.all; default: return def.defaults.development ?? def.defaults.all; } } export { debugFlags, featureFlags, pointerCaptureTrackingObject }; //# sourceMappingURL=debug-flags.mjs.map