@tldraw/editor 4.6.0-next.fe1474dc57d8 → 5.0.0
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.
- package/dist-cjs/index.d.ts +412 -179
- package/dist-cjs/index.js +12 -23
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +3 -0
- package/dist-cjs/lib/TldrawEditor.js.map +2 -2
- package/dist-cjs/lib/components/default-components/CanvasOverlays.js +180 -0
- package/dist-cjs/lib/components/default-components/CanvasOverlays.js.map +7 -0
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +44 -249
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +3 -3
- package/dist-cjs/lib/editor/Editor.js +78 -28
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js +98 -0
- package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js.map +7 -0
- package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js +14 -0
- package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js.map +2 -2
- package/dist-cjs/lib/editor/overlays/OverlayManager.js +154 -0
- package/dist-cjs/lib/editor/overlays/OverlayManager.js.map +7 -0
- package/dist-cjs/lib/editor/overlays/OverlayUtil.js +92 -0
- package/dist-cjs/lib/editor/overlays/OverlayUtil.js.map +7 -0
- package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js +161 -0
- package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js.map +7 -0
- package/dist-cjs/lib/editor/overlays/getOverlayDisplayValues.js +39 -0
- package/dist-cjs/lib/editor/overlays/getOverlayDisplayValues.js.map +7 -0
- package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js +3 -0
- package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js +25 -23
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +32 -2
- package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/types/event-types.js.map +2 -2
- package/dist-cjs/lib/exports/fetchCache.js +1 -1
- package/dist-cjs/lib/exports/fetchCache.js.map +2 -2
- package/dist-cjs/lib/hooks/EditorComponentsContext.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +3 -3
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditorComponents.js +0 -28
- package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePeerIds.js +1 -36
- package/dist-cjs/lib/hooks/usePeerIds.js.map +2 -2
- package/dist-cjs/lib/hooks/useShapeCulling.js +2 -1
- package/dist-cjs/lib/hooks/useShapeCulling.js.map +2 -2
- package/dist-cjs/lib/options.js +0 -1
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/utils/reparenting.js +20 -7
- package/dist-cjs/lib/utils/reparenting.js.map +2 -2
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +3 -0
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
- package/dist-cjs/version.js +4 -4
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +412 -179
- package/dist-esm/index.mjs +19 -41
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +3 -0
- package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/CanvasOverlays.mjs +160 -0
- package/dist-esm/lib/components/default-components/CanvasOverlays.mjs.map +7 -0
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +45 -250
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +3 -3
- package/dist-esm/lib/editor/Editor.mjs +78 -29
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs +83 -0
- package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs +14 -0
- package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs.map +2 -2
- package/dist-esm/lib/editor/overlays/OverlayManager.mjs +136 -0
- package/dist-esm/lib/editor/overlays/OverlayManager.mjs.map +7 -0
- package/dist-esm/lib/editor/overlays/OverlayUtil.mjs +72 -0
- package/dist-esm/lib/editor/overlays/OverlayUtil.mjs.map +7 -0
- package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs +141 -0
- package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs.map +7 -0
- package/dist-esm/lib/editor/overlays/getOverlayDisplayValues.mjs +19 -0
- package/dist-esm/lib/editor/overlays/getOverlayDisplayValues.mjs.map +7 -0
- package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs +3 -0
- package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +25 -23
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +32 -2
- package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/types/event-types.mjs.map +2 -2
- package/dist-esm/lib/exports/fetchCache.mjs +2 -2
- package/dist-esm/lib/exports/fetchCache.mjs.map +2 -2
- package/dist-esm/lib/hooks/EditorComponentsContext.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +3 -3
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditorComponents.mjs +0 -28
- package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePeerIds.mjs +2 -40
- package/dist-esm/lib/hooks/usePeerIds.mjs.map +2 -2
- package/dist-esm/lib/hooks/useShapeCulling.mjs +2 -1
- package/dist-esm/lib/hooks/useShapeCulling.mjs.map +2 -2
- package/dist-esm/lib/options.mjs +0 -1
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/utils/reparenting.mjs +20 -7
- package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +3 -0
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
- package/dist-esm/version.mjs +4 -4
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +4 -239
- package/package.json +7 -7
- package/src/index.ts +17 -39
- package/src/lib/TldrawEditor.tsx +9 -0
- package/src/lib/components/default-components/CanvasOverlays.tsx +208 -0
- package/src/lib/components/default-components/DefaultCanvas.tsx +49 -324
- package/src/lib/editor/Editor.test.ts +3 -1
- package/src/lib/editor/Editor.ts +80 -24
- package/src/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.ts +98 -0
- package/src/lib/editor/managers/ThemeManager/defaultThemes.ts +14 -0
- package/src/lib/editor/overlays/OverlayManager.ts +183 -0
- package/src/lib/editor/overlays/OverlayUtil.ts +143 -0
- package/src/lib/editor/overlays/ShapeIndicatorOverlayUtil.ts +216 -0
- package/src/lib/editor/overlays/getOverlayDisplayValues.ts +51 -0
- package/src/lib/editor/shapes/BaseFrameLikeShapeUtil.tsx +9 -2
- package/src/lib/editor/shapes/ShapeUtil.ts +34 -26
- package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +40 -3
- package/src/lib/editor/types/event-types.ts +2 -0
- package/src/lib/exports/fetchCache.ts +2 -4
- package/src/lib/exports/getSvgJsx.test.ts +3 -1
- package/src/lib/hooks/EditorComponentsContext.tsx +0 -27
- package/src/lib/hooks/useCanvasEvents.ts +13 -8
- package/src/lib/hooks/useEditorComponents.tsx +0 -28
- package/src/lib/hooks/usePeerIds.ts +6 -55
- package/src/lib/hooks/useShapeCulling.tsx +3 -1
- package/src/lib/options.ts +0 -7
- package/src/lib/utils/reparenting.ts +22 -9
- package/src/lib/utils/sync/TLLocalSyncClient.ts +3 -0
- package/src/version.ts +4 -4
- package/dist-cjs/lib/components/GeometryDebuggingView.js +0 -115
- package/dist-cjs/lib/components/GeometryDebuggingView.js.map +0 -7
- package/dist-cjs/lib/components/LiveCollaborators.js +0 -152
- package/dist-cjs/lib/components/LiveCollaborators.js.map +0 -7
- package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js +0 -234
- package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultBrush.js +0 -38
- package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +0 -71
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultCursor.js +0 -59
- package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultHandle.js +0 -56
- package/dist-cjs/lib/components/default-components/DefaultHandle.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultHandles.js +0 -28
- package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultScribble.js +0 -51
- package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js +0 -69
- package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +0 -107
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicatorErrorFallback.js +0 -28
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicatorErrorFallback.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +0 -102
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +0 -170
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +0 -7
- package/dist-cjs/lib/hooks/useHandleEvents.js +0 -100
- package/dist-cjs/lib/hooks/useHandleEvents.js.map +0 -7
- package/dist-cjs/lib/hooks/useSelectionEvents.js +0 -98
- package/dist-cjs/lib/hooks/useSelectionEvents.js.map +0 -7
- package/dist-esm/lib/components/GeometryDebuggingView.mjs +0 -95
- package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +0 -7
- package/dist-esm/lib/components/LiveCollaborators.mjs +0 -135
- package/dist-esm/lib/components/LiveCollaborators.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs +0 -214
- package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs +0 -18
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +0 -41
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultCursor.mjs +0 -29
- package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultHandle.mjs +0 -26
- package/dist-esm/lib/components/default-components/DefaultHandle.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs +0 -8
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs +0 -21
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs +0 -39
- package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +0 -77
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs +0 -8
- package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +0 -82
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +0 -142
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +0 -7
- package/dist-esm/lib/hooks/useHandleEvents.mjs +0 -70
- package/dist-esm/lib/hooks/useHandleEvents.mjs.map +0 -7
- package/dist-esm/lib/hooks/useSelectionEvents.mjs +0 -78
- package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +0 -7
- package/src/lib/components/GeometryDebuggingView.tsx +0 -108
- package/src/lib/components/LiveCollaborators.tsx +0 -180
- package/src/lib/components/default-components/CanvasShapeIndicators.tsx +0 -300
- package/src/lib/components/default-components/DefaultBrush.tsx +0 -35
- package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +0 -52
- package/src/lib/components/default-components/DefaultCursor.tsx +0 -59
- package/src/lib/components/default-components/DefaultHandle.tsx +0 -42
- package/src/lib/components/default-components/DefaultHandles.tsx +0 -15
- package/src/lib/components/default-components/DefaultScribble.tsx +0 -31
- package/src/lib/components/default-components/DefaultSelectionForeground.tsx +0 -50
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +0 -104
- package/src/lib/components/default-components/DefaultShapeIndicatorErrorFallback.tsx +0 -9
- package/src/lib/components/default-components/DefaultShapeIndicators.tsx +0 -118
- package/src/lib/components/default-components/DefaultSnapIndictor.tsx +0 -174
- package/src/lib/hooks/useHandleEvents.ts +0 -88
- package/src/lib/hooks/useSelectionEvents.ts +0 -97
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
20
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
21
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
22
|
+
if (decorator = decorators[i])
|
|
23
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
24
|
+
if (kind && result) __defProp(target, key, result);
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
var CollaboratorsManager_exports = {};
|
|
28
|
+
__export(CollaboratorsManager_exports, {
|
|
29
|
+
CollaboratorsManager: () => CollaboratorsManager
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(CollaboratorsManager_exports);
|
|
32
|
+
var import_state = require("@tldraw/state");
|
|
33
|
+
var import_utils = require("@tldraw/utils");
|
|
34
|
+
var import_collaboratorState = require("../../../utils/collaboratorState");
|
|
35
|
+
class CollaboratorsManager {
|
|
36
|
+
constructor(editor) {
|
|
37
|
+
this.editor = editor;
|
|
38
|
+
editor.timers.setInterval(() => {
|
|
39
|
+
this._visibilityClock.set(Date.now());
|
|
40
|
+
}, editor.options.collaboratorCheckIntervalMs);
|
|
41
|
+
}
|
|
42
|
+
editor;
|
|
43
|
+
/**
|
|
44
|
+
* Drives reactive re-evaluation of {@link CollaboratorsManager.getVisibleCollaborators}.
|
|
45
|
+
* Ticked on a fixed interval so callers don't need to manage their own activity timers.
|
|
46
|
+
*/
|
|
47
|
+
_visibilityClock = (0, import_state.atom)("collaboratorVisibilityClock", Date.now());
|
|
48
|
+
_getCollaboratorsQuery() {
|
|
49
|
+
return this.editor.store.query.records("instance_presence", () => ({
|
|
50
|
+
userId: { neq: this.editor.user.getId() }
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
getCollaborators() {
|
|
54
|
+
const allPresenceRecords = this._getCollaboratorsQuery().get();
|
|
55
|
+
if (!allPresenceRecords.length) return import_state.EMPTY_ARRAY;
|
|
56
|
+
const userIds = [...new Set(allPresenceRecords.map((c) => c.userId))].sort();
|
|
57
|
+
return userIds.map((id) => {
|
|
58
|
+
const latestPresence = (0, import_utils.maxBy)(
|
|
59
|
+
allPresenceRecords.filter((c) => c.userId === id),
|
|
60
|
+
(p) => p.lastActivityTimestamp ?? 0
|
|
61
|
+
);
|
|
62
|
+
return latestPresence;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
getCollaboratorsOnCurrentPage() {
|
|
66
|
+
const currentPageId = this.editor.getCurrentPageId();
|
|
67
|
+
return this.getCollaborators().filter((c) => c.currentPageId === currentPageId);
|
|
68
|
+
}
|
|
69
|
+
getVisibleCollaborators() {
|
|
70
|
+
this._visibilityClock.get();
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
return this.getCollaborators().filter((presence) => {
|
|
73
|
+
const elapsed = Math.max(0, now - (presence.lastActivityTimestamp ?? now));
|
|
74
|
+
const state = (0, import_collaboratorState.getCollaboratorStateFromElapsedTime)(this.editor, elapsed);
|
|
75
|
+
return (0, import_collaboratorState.shouldShowCollaborator)(this.editor, presence, state);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
getVisibleCollaboratorsOnCurrentPage() {
|
|
79
|
+
const currentPageId = this.editor.getCurrentPageId();
|
|
80
|
+
return this.getVisibleCollaborators().filter((c) => c.currentPageId === currentPageId);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
__decorateClass([
|
|
84
|
+
import_state.computed
|
|
85
|
+
], CollaboratorsManager.prototype, "_getCollaboratorsQuery", 1);
|
|
86
|
+
__decorateClass([
|
|
87
|
+
import_state.computed
|
|
88
|
+
], CollaboratorsManager.prototype, "getCollaborators", 1);
|
|
89
|
+
__decorateClass([
|
|
90
|
+
import_state.computed
|
|
91
|
+
], CollaboratorsManager.prototype, "getCollaboratorsOnCurrentPage", 1);
|
|
92
|
+
__decorateClass([
|
|
93
|
+
import_state.computed
|
|
94
|
+
], CollaboratorsManager.prototype, "getVisibleCollaborators", 1);
|
|
95
|
+
__decorateClass([
|
|
96
|
+
import_state.computed
|
|
97
|
+
], CollaboratorsManager.prototype, "getVisibleCollaboratorsOnCurrentPage", 1);
|
|
98
|
+
//# sourceMappingURL=CollaboratorsManager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.ts"],
|
|
4
|
+
"sourcesContent": ["import { EMPTY_ARRAY, atom, computed } from '@tldraw/state'\nimport { TLInstancePresence } from '@tldraw/tlschema'\nimport { maxBy } from '@tldraw/utils'\nimport {\n\tgetCollaboratorStateFromElapsedTime,\n\tshouldShowCollaborator,\n} from '../../../utils/collaboratorState'\nimport type { Editor } from '../../Editor'\n\n/**\n * Tracks remote peers and exposes the collaborator-related queries used by the\n * editor and its overlays. Encapsulates the visibility clock that periodically\n * re-evaluates which collaborators should be visible based on activity.\n *\n * Accessed via {@link Editor.collaborators}.\n *\n * @public\n */\nexport class CollaboratorsManager {\n\tconstructor(private readonly editor: Editor) {\n\t\t// Editor disposes `editor.timers` on its own teardown, so the interval is\n\t\t// automatically cleared when the editor is disposed.\n\t\teditor.timers.setInterval(() => {\n\t\t\tthis._visibilityClock.set(Date.now())\n\t\t}, editor.options.collaboratorCheckIntervalMs)\n\t}\n\n\t/**\n\t * Drives reactive re-evaluation of {@link CollaboratorsManager.getVisibleCollaborators}.\n\t * Ticked on a fixed interval so callers don't need to manage their own activity timers.\n\t */\n\tprivate readonly _visibilityClock = atom('collaboratorVisibilityClock', Date.now())\n\n\t@computed\n\tprivate _getCollaboratorsQuery() {\n\t\treturn this.editor.store.query.records('instance_presence', () => ({\n\t\t\tuserId: { neq: this.editor.user.getId() },\n\t\t}))\n\t}\n\n\t/**\n\t * Returns a list of presence records for all peer collaborators.\n\t * This will return the latest presence record for each connected user.\n\t */\n\t@computed\n\tgetCollaborators(): TLInstancePresence[] {\n\t\tconst allPresenceRecords = this._getCollaboratorsQuery().get()\n\t\tif (!allPresenceRecords.length) return EMPTY_ARRAY\n\t\tconst userIds = [...new Set(allPresenceRecords.map((c) => c.userId))].sort()\n\t\treturn userIds.map((id) => {\n\t\t\tconst latestPresence = maxBy(\n\t\t\t\tallPresenceRecords.filter((c) => c.userId === id),\n\t\t\t\t(p) => p.lastActivityTimestamp ?? 0\n\t\t\t)\n\t\t\treturn latestPresence!\n\t\t})\n\t}\n\n\t/**\n\t * Returns a list of presence records for all peer collaborators on the current page.\n\t * This will return the latest presence record for each connected user.\n\t */\n\t@computed\n\tgetCollaboratorsOnCurrentPage(): TLInstancePresence[] {\n\t\tconst currentPageId = this.editor.getCurrentPageId()\n\t\treturn this.getCollaborators().filter((c) => c.currentPageId === currentPageId)\n\t}\n\n\t/**\n\t * Returns a list of presence records for peer collaborators who should currently be\n\t * shown in the UI. Filters {@link CollaboratorsManager.getCollaborators} by activity\n\t * state (active / idle / inactive) and visibility rules such as following and\n\t * highlighted users. Re-evaluates on the visibility clock, so callers don't need to\n\t * drive their own activity timer.\n\t */\n\t@computed\n\tgetVisibleCollaborators(): TLInstancePresence[] {\n\t\tthis._visibilityClock.get()\n\t\tconst now = Date.now()\n\t\treturn this.getCollaborators().filter((presence) => {\n\t\t\t// Treat a missing `lastActivityTimestamp` as \"active right now\" (elapsed = 0)\n\t\t\t// so newly-joined peers aren't immediately classified as idle/inactive.\n\t\t\tconst elapsed = Math.max(0, now - (presence.lastActivityTimestamp ?? now))\n\t\t\tconst state = getCollaboratorStateFromElapsedTime(this.editor, elapsed)\n\t\t\treturn shouldShowCollaborator(this.editor, presence, state)\n\t\t})\n\t}\n\n\t/**\n\t * Returns a list of presence records for peer collaborators who should currently be\n\t * shown in the UI, filtered to those on the current page.\n\t */\n\t@computed\n\tgetVisibleCollaboratorsOnCurrentPage(): TLInstancePresence[] {\n\t\tconst currentPageId = this.editor.getCurrentPageId()\n\t\treturn this.getVisibleCollaborators().filter((c) => c.currentPageId === currentPageId)\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4C;AAE5C,mBAAsB;AACtB,+BAGO;AAYA,MAAM,qBAAqB;AAAA,EACjC,YAA6B,QAAgB;AAAhB;AAG5B,WAAO,OAAO,YAAY,MAAM;AAC/B,WAAK,iBAAiB,IAAI,KAAK,IAAI,CAAC;AAAA,IACrC,GAAG,OAAO,QAAQ,2BAA2B;AAAA,EAC9C;AAAA,EAN6B;AAAA;AAAA;AAAA;AAAA;AAAA,EAYZ,uBAAmB,mBAAK,+BAA+B,KAAK,IAAI,CAAC;AAAA,EAG1E,yBAAyB;AAChC,WAAO,KAAK,OAAO,MAAM,MAAM,QAAQ,qBAAqB,OAAO;AAAA,MAClE,QAAQ,EAAE,KAAK,KAAK,OAAO,KAAK,MAAM,EAAE;AAAA,IACzC,EAAE;AAAA,EACH;AAAA,EAOA,mBAAyC;AACxC,UAAM,qBAAqB,KAAK,uBAAuB,EAAE,IAAI;AAC7D,QAAI,CAAC,mBAAmB,OAAQ,QAAO;AACvC,UAAM,UAAU,CAAC,GAAG,IAAI,IAAI,mBAAmB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK;AAC3E,WAAO,QAAQ,IAAI,CAAC,OAAO;AAC1B,YAAM,qBAAiB;AAAA,QACtB,mBAAmB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE;AAAA,QAChD,CAAC,MAAM,EAAE,yBAAyB;AAAA,MACnC;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAAA,EAOA,gCAAsD;AACrD,UAAM,gBAAgB,KAAK,OAAO,iBAAiB;AACnD,WAAO,KAAK,iBAAiB,EAAE,OAAO,CAAC,MAAM,EAAE,kBAAkB,aAAa;AAAA,EAC/E;AAAA,EAUA,0BAAgD;AAC/C,SAAK,iBAAiB,IAAI;AAC1B,UAAM,MAAM,KAAK,IAAI;AACrB,WAAO,KAAK,iBAAiB,EAAE,OAAO,CAAC,aAAa;AAGnD,YAAM,UAAU,KAAK,IAAI,GAAG,OAAO,SAAS,yBAAyB,IAAI;AACzE,YAAM,YAAQ,8DAAoC,KAAK,QAAQ,OAAO;AACtE,iBAAO,iDAAuB,KAAK,QAAQ,UAAU,KAAK;AAAA,IAC3D,CAAC;AAAA,EACF;AAAA,EAOA,uCAA6D;AAC5D,UAAM,gBAAgB,KAAK,OAAO,iBAAiB;AACnD,WAAO,KAAK,wBAAwB,EAAE,OAAO,CAAC,MAAM,EAAE,kBAAkB,aAAa;AAAA,EACtF;AACD;AA/DS;AAAA,EADP;AAAA,GAfW,qBAgBJ;AAWR;AAAA,EADC;AAAA,GA1BW,qBA2BZ;AAkBA;AAAA,EADC;AAAA,GA5CW,qBA6CZ;AAaA;AAAA,EADC;AAAA,GAzDW,qBA0DZ;AAiBA;AAAA,EADC;AAAA,GA1EW,qBA2EZ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -148,6 +148,13 @@ const DEFAULT_THEME = {
|
|
|
148
148
|
solid: "#fcfffe",
|
|
149
149
|
cursor: "black",
|
|
150
150
|
noteBorder: "rgb(144, 144, 144)",
|
|
151
|
+
snap: "hsl(0, 76%, 60%)",
|
|
152
|
+
selectionStroke: "hsl(214, 84%, 56%)",
|
|
153
|
+
selectionFill: "hsl(210, 100%, 56%, 24%)",
|
|
154
|
+
brushFill: "hsl(0, 0%, 56%, 10.2%)",
|
|
155
|
+
brushStroke: "hsl(0, 0%, 56%, 25.1%)",
|
|
156
|
+
selectedContrast: "#ffffff",
|
|
157
|
+
laser: "hsl(0, 100%, 50%)",
|
|
151
158
|
black: {
|
|
152
159
|
solid: "#1d1d1d",
|
|
153
160
|
fill: "#1d1d1d",
|
|
@@ -363,6 +370,13 @@ const DEFAULT_THEME = {
|
|
|
363
370
|
negativeSpace: "hsl(240, 5%, 6.5%)",
|
|
364
371
|
solid: "#010403",
|
|
365
372
|
cursor: "white",
|
|
373
|
+
snap: "hsl(0, 76%, 60%)",
|
|
374
|
+
selectionStroke: "hsl(214, 84%, 56%)",
|
|
375
|
+
selectionFill: "hsl(209, 100%, 57%, 20%)",
|
|
376
|
+
brushFill: "hsl(0, 0%, 56%, 10.2%)",
|
|
377
|
+
brushStroke: "hsl(0, 0%, 56%, 25.1%)",
|
|
378
|
+
selectedContrast: "#ffffff",
|
|
379
|
+
laser: "hsl(0, 100%, 50%)",
|
|
366
380
|
noteBorder: "rgb(20, 20, 20)",
|
|
367
381
|
black: {
|
|
368
382
|
solid: "#f2f2f2",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/editor/managers/ThemeManager/defaultThemes.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tDefaultFontFamilies,\n\tTLDefaultColor,\n\tTLDefaultColorStyle,\n\tTLTheme,\n\tTLThemeColors,\n} from '@tldraw/tlschema'\n\n/**\n * The default theme definition containing color palettes for both light and dark modes.\n *\n * @public\n */\nexport const DEFAULT_THEME: TLTheme = {\n\tid: 'default',\n\tfontSize: 16,\n\tlineHeight: 1.35,\n\tstrokeWidth: 2,\n\tfonts: {\n\t\tdraw: {\n\t\t\tfontFamily: DefaultFontFamilies.draw,\n\t\t\tfaces: [\n\t\t\t\t{ family: 'tldraw_draw', src: { url: 'tldraw_draw', format: 'woff2' }, weight: 'normal' },\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_draw',\n\t\t\t\t\tsrc: { url: 'tldraw_draw_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_draw',\n\t\t\t\t\tsrc: { url: 'tldraw_draw_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_draw',\n\t\t\t\t\tsrc: { url: 'tldraw_draw_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tsans: {\n\t\t\tfontFamily: DefaultFontFamilies.sans,\n\t\t\tfaces: [\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tserif: {\n\t\t\tfontFamily: DefaultFontFamilies.serif,\n\t\t\tfaces: [\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tmono: {\n\t\t\tfontFamily: DefaultFontFamilies.mono,\n\t\t\tfaces: [\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n\tcolors: {\n\t\tlight: {\n\t\t\ttext: '#000000',\n\t\t\tbackground: '#f9fafb',\n\t\t\tnegativeSpace: '#f9fafb',\n\t\t\tsolid: '#fcfffe',\n\t\t\tcursor: 'black',\n\t\t\tnoteBorder: 'rgb(144, 144, 144)',\n\t\t\tblack: {\n\t\t\t\tsolid: '#1d1d1d',\n\t\t\t\tfill: '#1d1d1d',\n\t\t\t\tlinedFill: '#363636',\n\t\t\t\tframeHeadingStroke: '#717171',\n\t\t\t\tframeHeadingFill: '#ffffff',\n\t\t\t\tframeStroke: '#717171',\n\t\t\t\tframeFill: '#ffffff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FCE19C',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#e8e8e8',\n\t\t\t\tpattern: '#494949',\n\t\t\t\thighlightSrgb: '#fddd00',\n\t\t\t\thighlightP3: 'color(display-p3 0.972 0.8205 0.05)',\n\t\t\t},\n\t\t\tblue: {\n\t\t\t\tsolid: '#4465e9',\n\t\t\t\tfill: '#4465e9',\n\t\t\t\tlinedFill: '#6580ec',\n\t\t\t\tframeHeadingStroke: '#6681ec',\n\t\t\t\tframeHeadingFill: '#f9fafe',\n\t\t\t\tframeStroke: '#6681ec',\n\t\t\t\tframeFill: '#f9fafe',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#8AA3FF',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#dce1f8',\n\t\t\t\tpattern: '#6681ee',\n\t\t\t\thighlightSrgb: '#10acff',\n\t\t\t\thighlightP3: 'color(display-p3 0.308 0.6632 0.9996)',\n\t\t\t},\n\t\t\tgreen: {\n\t\t\t\tsolid: '#099268',\n\t\t\t\tfill: '#099268',\n\t\t\t\tlinedFill: '#0bad7c',\n\t\t\t\tframeHeadingStroke: '#37a684',\n\t\t\t\tframeHeadingFill: '#f8fcfa',\n\t\t\t\tframeStroke: '#37a684',\n\t\t\t\tframeFill: '#f8fcfa',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#6FC896',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#d3e9e3',\n\t\t\t\tpattern: '#39a785',\n\t\t\t\thighlightSrgb: '#00ffc8',\n\t\t\t\thighlightP3: 'color(display-p3 0.2536 0.984 0.7981)',\n\t\t\t},\n\t\t\tgrey: {\n\t\t\t\tsolid: '#9fa8b2',\n\t\t\t\tfill: '#9fa8b2',\n\t\t\t\tlinedFill: '#bbc1c9',\n\t\t\t\tframeHeadingStroke: '#aaaaab',\n\t\t\t\tframeHeadingFill: '#fbfcfc',\n\t\t\t\tframeStroke: '#aaaaab',\n\t\t\t\tframeFill: '#fcfcfd',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#C0CAD3',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#eceef0',\n\t\t\t\tpattern: '#bcc3c9',\n\t\t\t\thighlightSrgb: '#cbe7f1',\n\t\t\t\thighlightP3: 'color(display-p3 0.8163 0.9023 0.9416)',\n\t\t\t},\n\t\t\t'light-blue': {\n\t\t\t\tsolid: '#4ba1f1',\n\t\t\t\tfill: '#4ba1f1',\n\t\t\t\tlinedFill: '#7abaf5',\n\t\t\t\tframeHeadingStroke: '#6cb2f3',\n\t\t\t\tframeHeadingFill: '#f8fbfe',\n\t\t\t\tframeStroke: '#6cb2f3',\n\t\t\t\tframeFill: '#fafcff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#9BC4FD',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#ddedfa',\n\t\t\t\tpattern: '#6fbbf8',\n\t\t\t\thighlightSrgb: '#00f4ff',\n\t\t\t\thighlightP3: 'color(display-p3 0.1512 0.9414 0.9996)',\n\t\t\t},\n\t\t\t'light-green': {\n\t\t\t\tsolid: '#4cb05e',\n\t\t\t\tfill: '#4cb05e',\n\t\t\t\tlinedFill: '#7ec88c',\n\t\t\t\tframeHeadingStroke: '#6dbe7c',\n\t\t\t\tframeHeadingFill: '#f8fcf9',\n\t\t\t\tframeStroke: '#6dbe7c',\n\t\t\t\tframeFill: '#fafdfa',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#98D08A',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#dbf0e0',\n\t\t\t\tpattern: '#65cb78',\n\t\t\t\thighlightSrgb: '#65f641',\n\t\t\t\thighlightP3: 'color(display-p3 0.563 0.9495 0.3857)',\n\t\t\t},\n\t\t\t'light-red': {\n\t\t\t\tsolid: '#f87777',\n\t\t\t\tfill: '#f87777',\n\t\t\t\tlinedFill: '#f99a9a',\n\t\t\t\tframeHeadingStroke: '#f89090',\n\t\t\t\tframeHeadingFill: '#fffafa',\n\t\t\t\tframeStroke: '#f89090',\n\t\t\t\tframeFill: '#fffbfb',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#F7A5A1',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f4dadb',\n\t\t\t\tpattern: '#fe9e9e',\n\t\t\t\thighlightSrgb: '#ff7fa3',\n\t\t\t\thighlightP3: 'color(display-p3 0.9988 0.5301 0.6397)',\n\t\t\t},\n\t\t\t'light-violet': {\n\t\t\t\tsolid: '#e085f4',\n\t\t\t\tfill: '#e085f4',\n\t\t\t\tlinedFill: '#e9abf7',\n\t\t\t\tframeHeadingStroke: '#e59bf5',\n\t\t\t\tframeHeadingFill: '#fefaff',\n\t\t\t\tframeStroke: '#e59bf5',\n\t\t\t\tframeFill: '#fefbff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#DFB0F9',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f5eafa',\n\t\t\t\tpattern: '#e9acf8',\n\t\t\t\thighlightSrgb: '#ff88ff',\n\t\t\t\thighlightP3: 'color(display-p3 0.9676 0.5652 0.9999)',\n\t\t\t},\n\t\t\torange: {\n\t\t\t\tsolid: '#e16919',\n\t\t\t\tfill: '#e16919',\n\t\t\t\tlinedFill: '#ea8643',\n\t\t\t\tframeHeadingStroke: '#e68544',\n\t\t\t\tframeHeadingFill: '#fef9f6',\n\t\t\t\tframeStroke: '#e68544',\n\t\t\t\tframeFill: '#fef9f6',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FAA475',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f8e2d4',\n\t\t\t\tpattern: '#f78438',\n\t\t\t\thighlightSrgb: '#ffa500',\n\t\t\t\thighlightP3: 'color(display-p3 0.9988 0.6905 0.266)',\n\t\t\t},\n\t\t\tred: {\n\t\t\t\tsolid: '#e03131',\n\t\t\t\tfill: '#e03131',\n\t\t\t\tlinedFill: '#e75f5f',\n\t\t\t\tframeHeadingStroke: '#e55757',\n\t\t\t\tframeHeadingFill: '#fef7f7',\n\t\t\t\tframeStroke: '#e55757',\n\t\t\t\tframeFill: '#fef9f9',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FC8282',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f4dadb',\n\t\t\t\tpattern: '#e55959',\n\t\t\t\thighlightSrgb: '#ff636e',\n\t\t\t\thighlightP3: 'color(display-p3 0.9992 0.4376 0.45)',\n\t\t\t},\n\t\t\tviolet: {\n\t\t\t\tsolid: '#ae3ec9',\n\t\t\t\tfill: '#ae3ec9',\n\t\t\t\tlinedFill: '#be68d4',\n\t\t\t\tframeHeadingStroke: '#bc62d3',\n\t\t\t\tframeHeadingFill: '#fcf7fd',\n\t\t\t\tframeStroke: '#bc62d3',\n\t\t\t\tframeFill: '#fdf9fd',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#DB91FD',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#ecdcf2',\n\t\t\t\tpattern: '#bd63d3',\n\t\t\t\thighlightSrgb: '#c77cff',\n\t\t\t\thighlightP3: 'color(display-p3 0.7469 0.5089 0.9995)',\n\t\t\t},\n\t\t\tyellow: {\n\t\t\t\tsolid: '#f1ac4b',\n\t\t\t\tfill: '#f1ac4b',\n\t\t\t\tlinedFill: '#f5c27a',\n\t\t\t\tframeHeadingStroke: '#f3bb6c',\n\t\t\t\tframeHeadingFill: '#fefcf8',\n\t\t\t\tframeStroke: '#f3bb6c',\n\t\t\t\tframeFill: '#fffdfa',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FED49A',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f9f0e6',\n\t\t\t\tpattern: '#fecb92',\n\t\t\t\thighlightSrgb: '#fddd00',\n\t\t\t\thighlightP3: 'color(display-p3 0.972 0.8705 0.05)',\n\t\t\t},\n\t\t\twhite: {\n\t\t\t\tsolid: '#FFFFFF',\n\t\t\t\tfill: '#FFFFFF',\n\t\t\t\tlinedFill: '#ffffff',\n\t\t\t\tsemi: '#f5f5f5',\n\t\t\t\tpattern: '#f9f9f9',\n\t\t\t\tframeHeadingStroke: '#7d7d7d',\n\t\t\t\tframeHeadingFill: '#ffffff',\n\t\t\t\tframeStroke: '#7d7d7d',\n\t\t\t\tframeFill: '#ffffff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FFFFFF',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\thighlightSrgb: '#ffffff',\n\t\t\t\thighlightP3: 'color(display-p3 1 1 1)',\n\t\t\t},\n\t\t},\n\t\tdark: {\n\t\t\ttext: 'hsl(210, 17%, 98%)',\n\t\t\tbackground: 'hsl(240, 5%, 6.5%)',\n\t\t\tnegativeSpace: 'hsl(240, 5%, 6.5%)',\n\t\t\tsolid: '#010403',\n\t\t\tcursor: 'white',\n\t\t\tnoteBorder: 'rgb(20, 20, 20)',\n\n\t\t\tblack: {\n\t\t\t\tsolid: '#f2f2f2',\n\t\t\t\tfill: '#f2f2f2',\n\t\t\t\tlinedFill: '#ffffff',\n\t\t\t\tframeHeadingStroke: '#5c5c5c',\n\t\t\t\tframeHeadingFill: '#252525',\n\t\t\t\tframeStroke: '#5c5c5c',\n\t\t\t\tframeFill: '#0c0c0c',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#2c2c2c',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#2c3036',\n\t\t\t\tpattern: '#989898',\n\t\t\t\thighlightSrgb: '#d2b700',\n\t\t\t\thighlightP3: 'color(display-p3 0.8078 0.6225 0.0312)',\n\t\t\t},\n\t\t\tblue: {\n\t\t\t\tsolid: '#4f72fc', // 3c60f0\n\t\t\t\tfill: '#4f72fc',\n\t\t\t\tlinedFill: '#3c5cdd',\n\t\t\t\tframeHeadingStroke: '#384994',\n\t\t\t\tframeHeadingFill: '#1C2036',\n\t\t\t\tframeStroke: '#384994',\n\t\t\t\tframeFill: '#11141f',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#2A3F98',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#262d40',\n\t\t\t\tpattern: '#3a4b9e',\n\t\t\t\thighlightSrgb: '#0079d2',\n\t\t\t\thighlightP3: 'color(display-p3 0.0032 0.4655 0.7991)',\n\t\t\t},\n\t\t\tgreen: {\n\t\t\t\tsolid: '#099268',\n\t\t\t\tfill: '#099268',\n\t\t\t\tlinedFill: '#087856',\n\t\t\t\tframeHeadingStroke: '#10513C',\n\t\t\t\tframeHeadingFill: '#14241f',\n\t\t\t\tframeStroke: '#10513C',\n\t\t\t\tframeFill: '#0E1614',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#014429',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#253231',\n\t\t\t\tpattern: '#366a53',\n\t\t\t\thighlightSrgb: '#009774',\n\t\t\t\thighlightP3: 'color(display-p3 0.0085 0.582 0.4604)',\n\t\t\t},\n\t\t\tgrey: {\n\t\t\t\tsolid: '#9398b0',\n\t\t\t\tfill: '#9398b0',\n\t\t\t\tlinedFill: '#8388a5',\n\t\t\t\tframeHeadingStroke: '#42474D',\n\t\t\t\tframeHeadingFill: '#23262A',\n\t\t\t\tframeStroke: '#42474D',\n\t\t\t\tframeFill: '#151719',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#56595F',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#33373c',\n\t\t\t\tpattern: '#7c8187',\n\t\t\t\thighlightSrgb: '#9cb4cb',\n\t\t\t\thighlightP3: 'color(display-p3 0.6299 0.7012 0.7856)',\n\t\t\t},\n\t\t\t'light-blue': {\n\t\t\t\tsolid: '#4dabf7',\n\t\t\t\tfill: '#4dabf7',\n\t\t\t\tlinedFill: '#2793ec',\n\t\t\t\tframeHeadingStroke: '#075797',\n\t\t\t\tframeHeadingFill: '#142839',\n\t\t\t\tframeStroke: '#075797',\n\t\t\t\tframeFill: '#0B1823',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#1F5495',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#2a3642',\n\t\t\t\tpattern: '#4d7aa9',\n\t\t\t\thighlightSrgb: '#00bdc8',\n\t\t\t\thighlightP3: 'color(display-p3 0.0023 0.7259 0.7735)',\n\t\t\t},\n\t\t\t'light-green': {\n\t\t\t\tsolid: '#40c057',\n\t\t\t\tfill: '#40c057',\n\t\t\t\tlinedFill: '#37a44b',\n\t\t\t\tframeHeadingStroke: '#1C5427',\n\t\t\t\tframeHeadingFill: '#18251A',\n\t\t\t\tframeStroke: '#1C5427',\n\t\t\t\tframeFill: '#0F1911',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#21581D',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#2a3830',\n\t\t\t\tpattern: '#4e874e',\n\t\t\t\thighlightSrgb: '#00a000',\n\t\t\t\thighlightP3: 'color(display-p3 0.2711 0.6172 0.0195)',\n\t\t\t},\n\t\t\t'light-red': {\n\t\t\t\tsolid: '#ff8787',\n\t\t\t\tfill: '#ff8787',\n\t\t\t\tlinedFill: '#ff6666',\n\t\t\t\tframeHeadingStroke: '#6f3232',\n\t\t\t\tframeHeadingFill: '#341818',\n\t\t\t\tframeStroke: '#6f3232',\n\t\t\t\tframeFill: '#181212',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#7a3333',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#3c2b2b',\n\t\t\t\tpattern: '#a56767',\n\t\t\t\thighlightSrgb: '#db005b',\n\t\t\t\thighlightP3: 'color(display-p3 0.7849 0.0585 0.3589)',\n\t\t\t},\n\t\t\t'light-violet': {\n\t\t\t\tsolid: '#e599f7',\n\t\t\t\tfill: '#e599f7',\n\t\t\t\tlinedFill: '#dc71f4',\n\t\t\t\tframeHeadingStroke: '#6c367a',\n\t\t\t\tframeHeadingFill: '#2D2230',\n\t\t\t\tframeStroke: '#6c367a',\n\t\t\t\tframeFill: '#1C151E',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#762F8E',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#383442',\n\t\t\t\tpattern: '#9770a9',\n\t\t\t\thighlightSrgb: '#c400c7',\n\t\t\t\thighlightP3: 'color(display-p3 0.7024 0.0403 0.753)',\n\t\t\t},\n\t\t\torange: {\n\t\t\t\tsolid: '#f76707',\n\t\t\t\tfill: '#f76707',\n\t\t\t\tlinedFill: '#f54900',\n\t\t\t\tframeHeadingStroke: '#773a0e',\n\t\t\t\tframeHeadingFill: '#2f1d13',\n\t\t\t\tframeStroke: '#773a0e',\n\t\t\t\tframeFill: '#1c1512',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#7c3905',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#3b2e27',\n\t\t\t\tpattern: '#9f552d',\n\t\t\t\thighlightSrgb: '#d07a00',\n\t\t\t\thighlightP3: 'color(display-p3 0.7699 0.4937 0.0085)',\n\t\t\t},\n\t\t\tred: {\n\t\t\t\tsolid: '#e03131',\n\t\t\t\tfill: '#e03131',\n\t\t\t\tlinedFill: '#c31d1d',\n\t\t\t\tframeHeadingStroke: '#701e1e',\n\t\t\t\tframeHeadingFill: '#301616',\n\t\t\t\tframeStroke: '#701e1e',\n\t\t\t\tframeFill: '#1b1313',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#7e201f',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#382726',\n\t\t\t\tpattern: '#8f3734',\n\t\t\t\thighlightSrgb: '#de002c',\n\t\t\t\thighlightP3: 'color(display-p3 0.7978 0.0509 0.2035)',\n\t\t\t},\n\t\t\tviolet: {\n\t\t\t\tsolid: '#ae3ec9',\n\t\t\t\tfill: '#ae3ec9',\n\t\t\t\tlinedFill: '#8f2fa7',\n\t\t\t\tframeHeadingStroke: '#6d1583',\n\t\t\t\tframeHeadingFill: '#27152e',\n\t\t\t\tframeStroke: '#6d1583',\n\t\t\t\tframeFill: '#1b0f21',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#5f1c70',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#342938',\n\t\t\t\tpattern: '#763a8b',\n\t\t\t\thighlightSrgb: '#9e00ee',\n\t\t\t\thighlightP3: 'color(display-p3 0.5651 0.0079 0.8986)',\n\t\t\t},\n\t\t\tyellow: {\n\t\t\t\tsolid: '#ffc034',\n\t\t\t\tfill: '#ffc034',\n\t\t\t\tlinedFill: '#ffae00',\n\t\t\t\tframeHeadingStroke: '#684e12',\n\t\t\t\tframeHeadingFill: '#2a2113',\n\t\t\t\tframeStroke: '#684e12',\n\t\t\t\tframeFill: '#1e1911',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#8a5e1c',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#3b352b',\n\t\t\t\tpattern: '#fecb92',\n\t\t\t\thighlightSrgb: '#d2b700',\n\t\t\t\thighlightP3: 'color(display-p3 0.8078 0.7225 0.0312)',\n\t\t\t},\n\t\t\twhite: {\n\t\t\t\tsolid: '#f3f3f3',\n\t\t\t\tfill: '#f3f3f3',\n\t\t\t\tlinedFill: '#f3f3f3',\n\t\t\t\tsemi: '#f5f5f5',\n\t\t\t\tpattern: '#f9f9f9',\n\t\t\t\tframeHeadingStroke: '#ffffff',\n\t\t\t\tframeHeadingFill: '#ffffff',\n\t\t\t\tframeStroke: '#ffffff',\n\t\t\t\tframeFill: '#ffffff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#eaeaea',\n\t\t\t\tnoteText: '#1d1d1d',\n\t\t\t\thighlightSrgb: '#ffffff',\n\t\t\t\thighlightP3: 'color(display-p3 1 1 1)',\n\t\t\t},\n\t\t},\n\t},\n}\n\n/**\n * Resolves a color style value to its actual CSS color string for a given theme and variant.\n * If the color is not a default theme color, returns the color value as-is.\n *\n * @param colors - The color palette for the current color mode (e.g. `theme.colors[colorMode]`)\n * @param color - The color style value to resolve\n * @param variant - Which variant of the color to return (solid, fill, pattern, etc.)\n * @returns The CSS color string for the specified color and variant\n *\n * @example\n * ```ts\n * import { getColorValue } from 'tldraw'\n *\n * const colors = editor.getCurrentTheme().colors[editor.getColorMode()]\n *\n * // Get the solid variant of red\n * const redSolid = getColorValue(colors, 'red', 'solid') // '#e03131'\n *\n * // Get the fill variant of blue\n * const blueFill = getColorValue(colors, 'blue', 'fill') // '#4465e9'\n *\n * // Custom color passes through unchanged\n * const customColor = getColorValue(colors, '#ff0000', 'solid') // '#ff0000'\n * ```\n *\n * @public\n */\nexport function getColorValue(\n\tcolors: TLThemeColors,\n\tcolor: TLDefaultColorStyle | string,\n\tvariant: keyof TLDefaultColor\n): string {\n\tconst colorEntry = colors[color as TLDefaultColorStyle]\n\tif (!colorEntry || typeof colorEntry === 'string') {\n\t\treturn color\n\t}\n\treturn colorEntry[variant]\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n\tDefaultFontFamilies,\n\tTLDefaultColor,\n\tTLDefaultColorStyle,\n\tTLTheme,\n\tTLThemeColors,\n} from '@tldraw/tlschema'\n\n/**\n * The default theme definition containing color palettes for both light and dark modes.\n *\n * @public\n */\nexport const DEFAULT_THEME: TLTheme = {\n\tid: 'default',\n\tfontSize: 16,\n\tlineHeight: 1.35,\n\tstrokeWidth: 2,\n\tfonts: {\n\t\tdraw: {\n\t\t\tfontFamily: DefaultFontFamilies.draw,\n\t\t\tfaces: [\n\t\t\t\t{ family: 'tldraw_draw', src: { url: 'tldraw_draw', format: 'woff2' }, weight: 'normal' },\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_draw',\n\t\t\t\t\tsrc: { url: 'tldraw_draw_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_draw',\n\t\t\t\t\tsrc: { url: 'tldraw_draw_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_draw',\n\t\t\t\t\tsrc: { url: 'tldraw_draw_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tsans: {\n\t\t\tfontFamily: DefaultFontFamilies.sans,\n\t\t\tfaces: [\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_sans',\n\t\t\t\t\tsrc: { url: 'tldraw_sans_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tserif: {\n\t\t\tfontFamily: DefaultFontFamilies.serif,\n\t\t\tfaces: [\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_serif',\n\t\t\t\t\tsrc: { url: 'tldraw_serif_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tmono: {\n\t\t\tfontFamily: DefaultFontFamilies.mono,\n\t\t\tfaces: [\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'normal',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono_italic', format: 'woff2' },\n\t\t\t\t\tweight: 'normal',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfamily: 'tldraw_mono',\n\t\t\t\t\tsrc: { url: 'tldraw_mono_italic_bold', format: 'woff2' },\n\t\t\t\t\tweight: 'bold',\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n\tcolors: {\n\t\tlight: {\n\t\t\ttext: '#000000',\n\t\t\tbackground: '#f9fafb',\n\t\t\tnegativeSpace: '#f9fafb',\n\t\t\tsolid: '#fcfffe',\n\t\t\tcursor: 'black',\n\t\t\tnoteBorder: 'rgb(144, 144, 144)',\n\t\t\tsnap: 'hsl(0, 76%, 60%)',\n\t\t\tselectionStroke: 'hsl(214, 84%, 56%)',\n\t\t\tselectionFill: 'hsl(210, 100%, 56%, 24%)',\n\t\t\tbrushFill: 'hsl(0, 0%, 56%, 10.2%)',\n\t\t\tbrushStroke: 'hsl(0, 0%, 56%, 25.1%)',\n\t\t\tselectedContrast: '#ffffff',\n\t\t\tlaser: 'hsl(0, 100%, 50%)',\n\t\t\tblack: {\n\t\t\t\tsolid: '#1d1d1d',\n\t\t\t\tfill: '#1d1d1d',\n\t\t\t\tlinedFill: '#363636',\n\t\t\t\tframeHeadingStroke: '#717171',\n\t\t\t\tframeHeadingFill: '#ffffff',\n\t\t\t\tframeStroke: '#717171',\n\t\t\t\tframeFill: '#ffffff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FCE19C',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#e8e8e8',\n\t\t\t\tpattern: '#494949',\n\t\t\t\thighlightSrgb: '#fddd00',\n\t\t\t\thighlightP3: 'color(display-p3 0.972 0.8205 0.05)',\n\t\t\t},\n\t\t\tblue: {\n\t\t\t\tsolid: '#4465e9',\n\t\t\t\tfill: '#4465e9',\n\t\t\t\tlinedFill: '#6580ec',\n\t\t\t\tframeHeadingStroke: '#6681ec',\n\t\t\t\tframeHeadingFill: '#f9fafe',\n\t\t\t\tframeStroke: '#6681ec',\n\t\t\t\tframeFill: '#f9fafe',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#8AA3FF',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#dce1f8',\n\t\t\t\tpattern: '#6681ee',\n\t\t\t\thighlightSrgb: '#10acff',\n\t\t\t\thighlightP3: 'color(display-p3 0.308 0.6632 0.9996)',\n\t\t\t},\n\t\t\tgreen: {\n\t\t\t\tsolid: '#099268',\n\t\t\t\tfill: '#099268',\n\t\t\t\tlinedFill: '#0bad7c',\n\t\t\t\tframeHeadingStroke: '#37a684',\n\t\t\t\tframeHeadingFill: '#f8fcfa',\n\t\t\t\tframeStroke: '#37a684',\n\t\t\t\tframeFill: '#f8fcfa',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#6FC896',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#d3e9e3',\n\t\t\t\tpattern: '#39a785',\n\t\t\t\thighlightSrgb: '#00ffc8',\n\t\t\t\thighlightP3: 'color(display-p3 0.2536 0.984 0.7981)',\n\t\t\t},\n\t\t\tgrey: {\n\t\t\t\tsolid: '#9fa8b2',\n\t\t\t\tfill: '#9fa8b2',\n\t\t\t\tlinedFill: '#bbc1c9',\n\t\t\t\tframeHeadingStroke: '#aaaaab',\n\t\t\t\tframeHeadingFill: '#fbfcfc',\n\t\t\t\tframeStroke: '#aaaaab',\n\t\t\t\tframeFill: '#fcfcfd',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#C0CAD3',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#eceef0',\n\t\t\t\tpattern: '#bcc3c9',\n\t\t\t\thighlightSrgb: '#cbe7f1',\n\t\t\t\thighlightP3: 'color(display-p3 0.8163 0.9023 0.9416)',\n\t\t\t},\n\t\t\t'light-blue': {\n\t\t\t\tsolid: '#4ba1f1',\n\t\t\t\tfill: '#4ba1f1',\n\t\t\t\tlinedFill: '#7abaf5',\n\t\t\t\tframeHeadingStroke: '#6cb2f3',\n\t\t\t\tframeHeadingFill: '#f8fbfe',\n\t\t\t\tframeStroke: '#6cb2f3',\n\t\t\t\tframeFill: '#fafcff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#9BC4FD',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#ddedfa',\n\t\t\t\tpattern: '#6fbbf8',\n\t\t\t\thighlightSrgb: '#00f4ff',\n\t\t\t\thighlightP3: 'color(display-p3 0.1512 0.9414 0.9996)',\n\t\t\t},\n\t\t\t'light-green': {\n\t\t\t\tsolid: '#4cb05e',\n\t\t\t\tfill: '#4cb05e',\n\t\t\t\tlinedFill: '#7ec88c',\n\t\t\t\tframeHeadingStroke: '#6dbe7c',\n\t\t\t\tframeHeadingFill: '#f8fcf9',\n\t\t\t\tframeStroke: '#6dbe7c',\n\t\t\t\tframeFill: '#fafdfa',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#98D08A',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#dbf0e0',\n\t\t\t\tpattern: '#65cb78',\n\t\t\t\thighlightSrgb: '#65f641',\n\t\t\t\thighlightP3: 'color(display-p3 0.563 0.9495 0.3857)',\n\t\t\t},\n\t\t\t'light-red': {\n\t\t\t\tsolid: '#f87777',\n\t\t\t\tfill: '#f87777',\n\t\t\t\tlinedFill: '#f99a9a',\n\t\t\t\tframeHeadingStroke: '#f89090',\n\t\t\t\tframeHeadingFill: '#fffafa',\n\t\t\t\tframeStroke: '#f89090',\n\t\t\t\tframeFill: '#fffbfb',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#F7A5A1',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f4dadb',\n\t\t\t\tpattern: '#fe9e9e',\n\t\t\t\thighlightSrgb: '#ff7fa3',\n\t\t\t\thighlightP3: 'color(display-p3 0.9988 0.5301 0.6397)',\n\t\t\t},\n\t\t\t'light-violet': {\n\t\t\t\tsolid: '#e085f4',\n\t\t\t\tfill: '#e085f4',\n\t\t\t\tlinedFill: '#e9abf7',\n\t\t\t\tframeHeadingStroke: '#e59bf5',\n\t\t\t\tframeHeadingFill: '#fefaff',\n\t\t\t\tframeStroke: '#e59bf5',\n\t\t\t\tframeFill: '#fefbff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#DFB0F9',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f5eafa',\n\t\t\t\tpattern: '#e9acf8',\n\t\t\t\thighlightSrgb: '#ff88ff',\n\t\t\t\thighlightP3: 'color(display-p3 0.9676 0.5652 0.9999)',\n\t\t\t},\n\t\t\torange: {\n\t\t\t\tsolid: '#e16919',\n\t\t\t\tfill: '#e16919',\n\t\t\t\tlinedFill: '#ea8643',\n\t\t\t\tframeHeadingStroke: '#e68544',\n\t\t\t\tframeHeadingFill: '#fef9f6',\n\t\t\t\tframeStroke: '#e68544',\n\t\t\t\tframeFill: '#fef9f6',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FAA475',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f8e2d4',\n\t\t\t\tpattern: '#f78438',\n\t\t\t\thighlightSrgb: '#ffa500',\n\t\t\t\thighlightP3: 'color(display-p3 0.9988 0.6905 0.266)',\n\t\t\t},\n\t\t\tred: {\n\t\t\t\tsolid: '#e03131',\n\t\t\t\tfill: '#e03131',\n\t\t\t\tlinedFill: '#e75f5f',\n\t\t\t\tframeHeadingStroke: '#e55757',\n\t\t\t\tframeHeadingFill: '#fef7f7',\n\t\t\t\tframeStroke: '#e55757',\n\t\t\t\tframeFill: '#fef9f9',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FC8282',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f4dadb',\n\t\t\t\tpattern: '#e55959',\n\t\t\t\thighlightSrgb: '#ff636e',\n\t\t\t\thighlightP3: 'color(display-p3 0.9992 0.4376 0.45)',\n\t\t\t},\n\t\t\tviolet: {\n\t\t\t\tsolid: '#ae3ec9',\n\t\t\t\tfill: '#ae3ec9',\n\t\t\t\tlinedFill: '#be68d4',\n\t\t\t\tframeHeadingStroke: '#bc62d3',\n\t\t\t\tframeHeadingFill: '#fcf7fd',\n\t\t\t\tframeStroke: '#bc62d3',\n\t\t\t\tframeFill: '#fdf9fd',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#DB91FD',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#ecdcf2',\n\t\t\t\tpattern: '#bd63d3',\n\t\t\t\thighlightSrgb: '#c77cff',\n\t\t\t\thighlightP3: 'color(display-p3 0.7469 0.5089 0.9995)',\n\t\t\t},\n\t\t\tyellow: {\n\t\t\t\tsolid: '#f1ac4b',\n\t\t\t\tfill: '#f1ac4b',\n\t\t\t\tlinedFill: '#f5c27a',\n\t\t\t\tframeHeadingStroke: '#f3bb6c',\n\t\t\t\tframeHeadingFill: '#fefcf8',\n\t\t\t\tframeStroke: '#f3bb6c',\n\t\t\t\tframeFill: '#fffdfa',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FED49A',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\tsemi: '#f9f0e6',\n\t\t\t\tpattern: '#fecb92',\n\t\t\t\thighlightSrgb: '#fddd00',\n\t\t\t\thighlightP3: 'color(display-p3 0.972 0.8705 0.05)',\n\t\t\t},\n\t\t\twhite: {\n\t\t\t\tsolid: '#FFFFFF',\n\t\t\t\tfill: '#FFFFFF',\n\t\t\t\tlinedFill: '#ffffff',\n\t\t\t\tsemi: '#f5f5f5',\n\t\t\t\tpattern: '#f9f9f9',\n\t\t\t\tframeHeadingStroke: '#7d7d7d',\n\t\t\t\tframeHeadingFill: '#ffffff',\n\t\t\t\tframeStroke: '#7d7d7d',\n\t\t\t\tframeFill: '#ffffff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#FFFFFF',\n\t\t\t\tnoteText: '#000000',\n\t\t\t\thighlightSrgb: '#ffffff',\n\t\t\t\thighlightP3: 'color(display-p3 1 1 1)',\n\t\t\t},\n\t\t},\n\t\tdark: {\n\t\t\ttext: 'hsl(210, 17%, 98%)',\n\t\t\tbackground: 'hsl(240, 5%, 6.5%)',\n\t\t\tnegativeSpace: 'hsl(240, 5%, 6.5%)',\n\t\t\tsolid: '#010403',\n\t\t\tcursor: 'white',\n\t\t\tsnap: 'hsl(0, 76%, 60%)',\n\t\t\tselectionStroke: 'hsl(214, 84%, 56%)',\n\t\t\tselectionFill: 'hsl(209, 100%, 57%, 20%)',\n\t\t\tbrushFill: 'hsl(0, 0%, 56%, 10.2%)',\n\t\t\tbrushStroke: 'hsl(0, 0%, 56%, 25.1%)',\n\t\t\tselectedContrast: '#ffffff',\n\t\t\tlaser: 'hsl(0, 100%, 50%)',\n\t\t\tnoteBorder: 'rgb(20, 20, 20)',\n\n\t\t\tblack: {\n\t\t\t\tsolid: '#f2f2f2',\n\t\t\t\tfill: '#f2f2f2',\n\t\t\t\tlinedFill: '#ffffff',\n\t\t\t\tframeHeadingStroke: '#5c5c5c',\n\t\t\t\tframeHeadingFill: '#252525',\n\t\t\t\tframeStroke: '#5c5c5c',\n\t\t\t\tframeFill: '#0c0c0c',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#2c2c2c',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#2c3036',\n\t\t\t\tpattern: '#989898',\n\t\t\t\thighlightSrgb: '#d2b700',\n\t\t\t\thighlightP3: 'color(display-p3 0.8078 0.6225 0.0312)',\n\t\t\t},\n\t\t\tblue: {\n\t\t\t\tsolid: '#4f72fc', // 3c60f0\n\t\t\t\tfill: '#4f72fc',\n\t\t\t\tlinedFill: '#3c5cdd',\n\t\t\t\tframeHeadingStroke: '#384994',\n\t\t\t\tframeHeadingFill: '#1C2036',\n\t\t\t\tframeStroke: '#384994',\n\t\t\t\tframeFill: '#11141f',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#2A3F98',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#262d40',\n\t\t\t\tpattern: '#3a4b9e',\n\t\t\t\thighlightSrgb: '#0079d2',\n\t\t\t\thighlightP3: 'color(display-p3 0.0032 0.4655 0.7991)',\n\t\t\t},\n\t\t\tgreen: {\n\t\t\t\tsolid: '#099268',\n\t\t\t\tfill: '#099268',\n\t\t\t\tlinedFill: '#087856',\n\t\t\t\tframeHeadingStroke: '#10513C',\n\t\t\t\tframeHeadingFill: '#14241f',\n\t\t\t\tframeStroke: '#10513C',\n\t\t\t\tframeFill: '#0E1614',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#014429',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#253231',\n\t\t\t\tpattern: '#366a53',\n\t\t\t\thighlightSrgb: '#009774',\n\t\t\t\thighlightP3: 'color(display-p3 0.0085 0.582 0.4604)',\n\t\t\t},\n\t\t\tgrey: {\n\t\t\t\tsolid: '#9398b0',\n\t\t\t\tfill: '#9398b0',\n\t\t\t\tlinedFill: '#8388a5',\n\t\t\t\tframeHeadingStroke: '#42474D',\n\t\t\t\tframeHeadingFill: '#23262A',\n\t\t\t\tframeStroke: '#42474D',\n\t\t\t\tframeFill: '#151719',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#56595F',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#33373c',\n\t\t\t\tpattern: '#7c8187',\n\t\t\t\thighlightSrgb: '#9cb4cb',\n\t\t\t\thighlightP3: 'color(display-p3 0.6299 0.7012 0.7856)',\n\t\t\t},\n\t\t\t'light-blue': {\n\t\t\t\tsolid: '#4dabf7',\n\t\t\t\tfill: '#4dabf7',\n\t\t\t\tlinedFill: '#2793ec',\n\t\t\t\tframeHeadingStroke: '#075797',\n\t\t\t\tframeHeadingFill: '#142839',\n\t\t\t\tframeStroke: '#075797',\n\t\t\t\tframeFill: '#0B1823',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#1F5495',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#2a3642',\n\t\t\t\tpattern: '#4d7aa9',\n\t\t\t\thighlightSrgb: '#00bdc8',\n\t\t\t\thighlightP3: 'color(display-p3 0.0023 0.7259 0.7735)',\n\t\t\t},\n\t\t\t'light-green': {\n\t\t\t\tsolid: '#40c057',\n\t\t\t\tfill: '#40c057',\n\t\t\t\tlinedFill: '#37a44b',\n\t\t\t\tframeHeadingStroke: '#1C5427',\n\t\t\t\tframeHeadingFill: '#18251A',\n\t\t\t\tframeStroke: '#1C5427',\n\t\t\t\tframeFill: '#0F1911',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#21581D',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#2a3830',\n\t\t\t\tpattern: '#4e874e',\n\t\t\t\thighlightSrgb: '#00a000',\n\t\t\t\thighlightP3: 'color(display-p3 0.2711 0.6172 0.0195)',\n\t\t\t},\n\t\t\t'light-red': {\n\t\t\t\tsolid: '#ff8787',\n\t\t\t\tfill: '#ff8787',\n\t\t\t\tlinedFill: '#ff6666',\n\t\t\t\tframeHeadingStroke: '#6f3232',\n\t\t\t\tframeHeadingFill: '#341818',\n\t\t\t\tframeStroke: '#6f3232',\n\t\t\t\tframeFill: '#181212',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#7a3333',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#3c2b2b',\n\t\t\t\tpattern: '#a56767',\n\t\t\t\thighlightSrgb: '#db005b',\n\t\t\t\thighlightP3: 'color(display-p3 0.7849 0.0585 0.3589)',\n\t\t\t},\n\t\t\t'light-violet': {\n\t\t\t\tsolid: '#e599f7',\n\t\t\t\tfill: '#e599f7',\n\t\t\t\tlinedFill: '#dc71f4',\n\t\t\t\tframeHeadingStroke: '#6c367a',\n\t\t\t\tframeHeadingFill: '#2D2230',\n\t\t\t\tframeStroke: '#6c367a',\n\t\t\t\tframeFill: '#1C151E',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#762F8E',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#383442',\n\t\t\t\tpattern: '#9770a9',\n\t\t\t\thighlightSrgb: '#c400c7',\n\t\t\t\thighlightP3: 'color(display-p3 0.7024 0.0403 0.753)',\n\t\t\t},\n\t\t\torange: {\n\t\t\t\tsolid: '#f76707',\n\t\t\t\tfill: '#f76707',\n\t\t\t\tlinedFill: '#f54900',\n\t\t\t\tframeHeadingStroke: '#773a0e',\n\t\t\t\tframeHeadingFill: '#2f1d13',\n\t\t\t\tframeStroke: '#773a0e',\n\t\t\t\tframeFill: '#1c1512',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#7c3905',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#3b2e27',\n\t\t\t\tpattern: '#9f552d',\n\t\t\t\thighlightSrgb: '#d07a00',\n\t\t\t\thighlightP3: 'color(display-p3 0.7699 0.4937 0.0085)',\n\t\t\t},\n\t\t\tred: {\n\t\t\t\tsolid: '#e03131',\n\t\t\t\tfill: '#e03131',\n\t\t\t\tlinedFill: '#c31d1d',\n\t\t\t\tframeHeadingStroke: '#701e1e',\n\t\t\t\tframeHeadingFill: '#301616',\n\t\t\t\tframeStroke: '#701e1e',\n\t\t\t\tframeFill: '#1b1313',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#7e201f',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#382726',\n\t\t\t\tpattern: '#8f3734',\n\t\t\t\thighlightSrgb: '#de002c',\n\t\t\t\thighlightP3: 'color(display-p3 0.7978 0.0509 0.2035)',\n\t\t\t},\n\t\t\tviolet: {\n\t\t\t\tsolid: '#ae3ec9',\n\t\t\t\tfill: '#ae3ec9',\n\t\t\t\tlinedFill: '#8f2fa7',\n\t\t\t\tframeHeadingStroke: '#6d1583',\n\t\t\t\tframeHeadingFill: '#27152e',\n\t\t\t\tframeStroke: '#6d1583',\n\t\t\t\tframeFill: '#1b0f21',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#5f1c70',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#342938',\n\t\t\t\tpattern: '#763a8b',\n\t\t\t\thighlightSrgb: '#9e00ee',\n\t\t\t\thighlightP3: 'color(display-p3 0.5651 0.0079 0.8986)',\n\t\t\t},\n\t\t\tyellow: {\n\t\t\t\tsolid: '#ffc034',\n\t\t\t\tfill: '#ffc034',\n\t\t\t\tlinedFill: '#ffae00',\n\t\t\t\tframeHeadingStroke: '#684e12',\n\t\t\t\tframeHeadingFill: '#2a2113',\n\t\t\t\tframeStroke: '#684e12',\n\t\t\t\tframeFill: '#1e1911',\n\t\t\t\tframeText: '#f2f2f2',\n\t\t\t\tnoteFill: '#8a5e1c',\n\t\t\t\tnoteText: '#f2f2f2',\n\t\t\t\tsemi: '#3b352b',\n\t\t\t\tpattern: '#fecb92',\n\t\t\t\thighlightSrgb: '#d2b700',\n\t\t\t\thighlightP3: 'color(display-p3 0.8078 0.7225 0.0312)',\n\t\t\t},\n\t\t\twhite: {\n\t\t\t\tsolid: '#f3f3f3',\n\t\t\t\tfill: '#f3f3f3',\n\t\t\t\tlinedFill: '#f3f3f3',\n\t\t\t\tsemi: '#f5f5f5',\n\t\t\t\tpattern: '#f9f9f9',\n\t\t\t\tframeHeadingStroke: '#ffffff',\n\t\t\t\tframeHeadingFill: '#ffffff',\n\t\t\t\tframeStroke: '#ffffff',\n\t\t\t\tframeFill: '#ffffff',\n\t\t\t\tframeText: '#000000',\n\t\t\t\tnoteFill: '#eaeaea',\n\t\t\t\tnoteText: '#1d1d1d',\n\t\t\t\thighlightSrgb: '#ffffff',\n\t\t\t\thighlightP3: 'color(display-p3 1 1 1)',\n\t\t\t},\n\t\t},\n\t},\n}\n\n/**\n * Resolves a color style value to its actual CSS color string for a given theme and variant.\n * If the color is not a default theme color, returns the color value as-is.\n *\n * @param colors - The color palette for the current color mode (e.g. `theme.colors[colorMode]`)\n * @param color - The color style value to resolve\n * @param variant - Which variant of the color to return (solid, fill, pattern, etc.)\n * @returns The CSS color string for the specified color and variant\n *\n * @example\n * ```ts\n * import { getColorValue } from 'tldraw'\n *\n * const colors = editor.getCurrentTheme().colors[editor.getColorMode()]\n *\n * // Get the solid variant of red\n * const redSolid = getColorValue(colors, 'red', 'solid') // '#e03131'\n *\n * // Get the fill variant of blue\n * const blueFill = getColorValue(colors, 'blue', 'fill') // '#4465e9'\n *\n * // Custom color passes through unchanged\n * const customColor = getColorValue(colors, '#ff0000', 'solid') // '#ff0000'\n * ```\n *\n * @public\n */\nexport function getColorValue(\n\tcolors: TLThemeColors,\n\tcolor: TLDefaultColorStyle | string,\n\tvariant: keyof TLDefaultColor\n): string {\n\tconst colorEntry = colors[color as TLDefaultColorStyle]\n\tif (!colorEntry || typeof colorEntry === 'string') {\n\t\treturn color\n\t}\n\treturn colorEntry[variant]\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
20
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
21
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
22
|
+
if (decorator = decorators[i])
|
|
23
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
24
|
+
if (kind && result) __defProp(target, key, result);
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
var OverlayManager_exports = {};
|
|
28
|
+
__export(OverlayManager_exports, {
|
|
29
|
+
OverlayManager: () => OverlayManager
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(OverlayManager_exports);
|
|
32
|
+
var import_state = require("@tldraw/state");
|
|
33
|
+
class OverlayManager {
|
|
34
|
+
constructor(editor) {
|
|
35
|
+
this.editor = editor;
|
|
36
|
+
}
|
|
37
|
+
editor;
|
|
38
|
+
/** @internal */
|
|
39
|
+
_overlayUtils = /* @__PURE__ */ new Map();
|
|
40
|
+
/**
|
|
41
|
+
* Register an overlay util instance. Called during editor construction.
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
registerUtil(util) {
|
|
45
|
+
const type = util.constructor.type;
|
|
46
|
+
if (!type) {
|
|
47
|
+
throw new Error(`Overlay util ${util.constructor.name} is missing a static 'type' property.`);
|
|
48
|
+
}
|
|
49
|
+
if (this._overlayUtils.has(type)) {
|
|
50
|
+
throw new Error(`Duplicate overlay util type: "${type}"`);
|
|
51
|
+
}
|
|
52
|
+
this._overlayUtils.set(type, util);
|
|
53
|
+
}
|
|
54
|
+
getOverlayUtil(arg) {
|
|
55
|
+
const type = typeof arg === "string" ? arg : arg.type;
|
|
56
|
+
const util = this._overlayUtils.get(type);
|
|
57
|
+
if (!util) throw new Error(`No overlay util found for type: "${type}"`);
|
|
58
|
+
return util;
|
|
59
|
+
}
|
|
60
|
+
getOverlayUtilsInZOrder() {
|
|
61
|
+
const utils = Array.from(this._overlayUtils.values());
|
|
62
|
+
return utils.map((util, i) => ({ util, i, z: util.options.zIndex ?? 0 })).sort((a, b) => a.z - b.z || a.i - b.i).map((entry) => entry.util);
|
|
63
|
+
}
|
|
64
|
+
getActiveOverlayEntries() {
|
|
65
|
+
const entries = [];
|
|
66
|
+
for (const util of this.getOverlayUtilsInZOrder()) {
|
|
67
|
+
if (!util.isActive()) continue;
|
|
68
|
+
entries.push({ util, overlays: util.getOverlays() });
|
|
69
|
+
}
|
|
70
|
+
return entries;
|
|
71
|
+
}
|
|
72
|
+
getCurrentOverlays() {
|
|
73
|
+
const all = [];
|
|
74
|
+
for (const { overlays } of this.getActiveOverlayEntries()) {
|
|
75
|
+
all.push(...overlays);
|
|
76
|
+
}
|
|
77
|
+
return all;
|
|
78
|
+
}
|
|
79
|
+
// Hit-test geometry cache keyed by overlay identity. Entries remain valid
|
|
80
|
+
// while getActiveOverlayEntries() keeps returning the same overlay
|
|
81
|
+
// instances; when its reactive deps change, getOverlays() emits fresh
|
|
82
|
+
// objects and stale entries fall out by GC.
|
|
83
|
+
_geometryCache = /* @__PURE__ */ new WeakMap();
|
|
84
|
+
/**
|
|
85
|
+
* Get hit-test geometry for an overlay, cached by overlay identity. Lets
|
|
86
|
+
* hit-testing on a pointermove storm skip the per-overlay geometry
|
|
87
|
+
* allocation that {@link OverlayUtil.getGeometry} would otherwise do on
|
|
88
|
+
* every call.
|
|
89
|
+
*
|
|
90
|
+
* @public
|
|
91
|
+
*/
|
|
92
|
+
getOverlayGeometry(overlay) {
|
|
93
|
+
const cached = this._geometryCache.get(overlay);
|
|
94
|
+
if (cached !== void 0) return cached;
|
|
95
|
+
const util = this.getOverlayUtil(overlay);
|
|
96
|
+
const geometry = util.getGeometry(overlay);
|
|
97
|
+
this._geometryCache.set(overlay, geometry);
|
|
98
|
+
return geometry;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The currently hovered overlay id.
|
|
102
|
+
* @public
|
|
103
|
+
*/
|
|
104
|
+
_hoveredOverlayId = (0, import_state.atom)("hoveredOverlayId", null);
|
|
105
|
+
getHoveredOverlayId() {
|
|
106
|
+
return this._hoveredOverlayId.get();
|
|
107
|
+
}
|
|
108
|
+
getHoveredOverlay() {
|
|
109
|
+
const id = this._hoveredOverlayId.get();
|
|
110
|
+
if (!id) return null;
|
|
111
|
+
return this.getCurrentOverlays().find((o) => o.id === id) ?? null;
|
|
112
|
+
}
|
|
113
|
+
setHoveredOverlay(id) {
|
|
114
|
+
if (id === this._hoveredOverlayId.get()) return;
|
|
115
|
+
this._hoveredOverlayId.set(id);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Hit test all active overlays at a given page point.
|
|
119
|
+
* Returns the topmost overlay whose geometry contains the point, or null.
|
|
120
|
+
* Utils are walked from highest zIndex to lowest so the overlay painted on
|
|
121
|
+
* top also wins the hit test. Within a util, overlays are walked in
|
|
122
|
+
* array order: the first overlay whose geometry contains the point wins,
|
|
123
|
+
* so utils should place highest-priority overlays first in `getOverlays`.
|
|
124
|
+
* Interactive overlays (those with geometry) are checked; non-interactive are skipped.
|
|
125
|
+
*
|
|
126
|
+
* @param point - Point in page coordinates
|
|
127
|
+
* @param margin - Hit test margin
|
|
128
|
+
* @public
|
|
129
|
+
*/
|
|
130
|
+
getOverlayAtPoint(point, margin = 0) {
|
|
131
|
+
const entries = this.getActiveOverlayEntries();
|
|
132
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
133
|
+
const { overlays } = entries[i];
|
|
134
|
+
for (const overlay of overlays) {
|
|
135
|
+
const geometry = this.getOverlayGeometry(overlay);
|
|
136
|
+
if (!geometry) continue;
|
|
137
|
+
if (geometry.hitTestPoint(point, geometry.isFilled ? 0 : margin, true)) {
|
|
138
|
+
return overlay;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
__decorateClass([
|
|
146
|
+
import_state.computed
|
|
147
|
+
], OverlayManager.prototype, "getOverlayUtilsInZOrder", 1);
|
|
148
|
+
__decorateClass([
|
|
149
|
+
import_state.computed
|
|
150
|
+
], OverlayManager.prototype, "getActiveOverlayEntries", 1);
|
|
151
|
+
__decorateClass([
|
|
152
|
+
import_state.computed
|
|
153
|
+
], OverlayManager.prototype, "getCurrentOverlays", 1);
|
|
154
|
+
//# sourceMappingURL=OverlayManager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/lib/editor/overlays/OverlayManager.ts"],
|
|
4
|
+
"sourcesContent": ["import { atom, computed } from '@tldraw/state'\nimport { Geometry2d } from '../../primitives/geometry/Geometry2d'\nimport { VecLike } from '../../primitives/Vec'\nimport type { Editor } from '../Editor'\nimport { OverlayUtil, TLOverlay } from './OverlayUtil'\n\n/**\n * An active overlay util paired with the overlays it produced for the current\n * editor state. Returned by {@link OverlayManager.getActiveOverlayEntries} so\n * hit-test, render, and debug paths share a single scan per reactive tick.\n *\n * @public\n */\nexport interface TLOverlayEntry {\n\tutil: OverlayUtil\n\toverlays: TLOverlay[]\n}\n\n/** @public */\nexport class OverlayManager {\n\tconstructor(public readonly editor: Editor) {}\n\n\t/** @internal */\n\treadonly _overlayUtils = new Map<string, OverlayUtil>()\n\n\t/**\n\t * Register an overlay util instance. Called during editor construction.\n\t * @internal\n\t */\n\tregisterUtil(util: OverlayUtil) {\n\t\tconst type = (util.constructor as typeof OverlayUtil).type\n\t\tif (!type) {\n\t\t\tthrow new Error(`Overlay util ${util.constructor.name} is missing a static 'type' property.`)\n\t\t}\n\t\tif (this._overlayUtils.has(type)) {\n\t\t\tthrow new Error(`Duplicate overlay util type: \"${type}\"`)\n\t\t}\n\t\tthis._overlayUtils.set(type, util)\n\t}\n\n\t/**\n\t * Get an overlay util by type string, overlay instance, or by passing\n\t * a util class as a generic parameter for type-safe lookup.\n\t *\n\t * @example\n\t * ```ts\n\t * const util = editor.overlays.getOverlayUtil('brush')\n\t * const util = editor.overlays.getOverlayUtil<BrushOverlayUtil>('brush')\n\t * const util = editor.overlays.getOverlayUtil(myOverlay)\n\t * ```\n\t *\n\t * @public\n\t */\n\tgetOverlayUtil<T extends OverlayUtil>(\n\t\ttype: T extends OverlayUtil<infer O> ? O['type'] : string\n\t): T\n\tgetOverlayUtil<O extends TLOverlay>(overlay: O): OverlayUtil<O>\n\tgetOverlayUtil(arg: string | TLOverlay): OverlayUtil {\n\t\tconst type = typeof arg === 'string' ? arg : arg.type\n\t\tconst util = this._overlayUtils.get(type)\n\t\tif (!util) throw new Error(`No overlay util found for type: \"${type}\"`)\n\t\treturn util\n\t}\n\n\t/**\n\t * Returns all registered overlay utils in paint order (ascending zIndex).\n\t * Utils with the same zIndex preserve their registration order.\n\t *\n\t * @public\n\t */\n\t@computed getOverlayUtilsInZOrder(): OverlayUtil[] {\n\t\tconst utils = Array.from(this._overlayUtils.values())\n\t\t// Stable sort by zIndex (registration order breaks ties).\n\t\treturn utils\n\t\t\t.map((util, i) => ({ util, i, z: util.options.zIndex ?? 0 }))\n\t\t\t.sort((a, b) => a.z - b.z || a.i - b.i)\n\t\t\t.map((entry) => entry.util)\n\t}\n\n\t/**\n\t * Reactive list of active overlay utils paired with the overlays they\n\t * produced for the current editor state, in paint order (ascending\n\t * zIndex). Both the hit-test and render paths read from this single\n\t * cached scan instead of each re-deriving the active set. Active utils\n\t * are included even when their `getOverlays()` returns an empty array,\n\t * since `render()` may still draw non-interactive UI (e.g. the selection\n\t * bounding box during brushing).\n\t *\n\t * @public\n\t */\n\t@computed getActiveOverlayEntries(): TLOverlayEntry[] {\n\t\tconst entries: TLOverlayEntry[] = []\n\t\tfor (const util of this.getOverlayUtilsInZOrder()) {\n\t\t\tif (!util.isActive()) continue\n\t\t\tentries.push({ util, overlays: util.getOverlays() })\n\t\t}\n\t\treturn entries\n\t}\n\n\t/**\n\t * Reactively computed list of all currently active overlays, in paint order.\n\t * @public\n\t */\n\t@computed getCurrentOverlays(): TLOverlay[] {\n\t\tconst all: TLOverlay[] = []\n\t\tfor (const { overlays } of this.getActiveOverlayEntries()) {\n\t\t\tall.push(...overlays)\n\t\t}\n\t\treturn all\n\t}\n\n\t// Hit-test geometry cache keyed by overlay identity. Entries remain valid\n\t// while getActiveOverlayEntries() keeps returning the same overlay\n\t// instances; when its reactive deps change, getOverlays() emits fresh\n\t// objects and stale entries fall out by GC.\n\tprivate _geometryCache = new WeakMap<TLOverlay, Geometry2d | null>()\n\n\t/**\n\t * Get hit-test geometry for an overlay, cached by overlay identity. Lets\n\t * hit-testing on a pointermove storm skip the per-overlay geometry\n\t * allocation that {@link OverlayUtil.getGeometry} would otherwise do on\n\t * every call.\n\t *\n\t * @public\n\t */\n\tgetOverlayGeometry(overlay: TLOverlay): Geometry2d | null {\n\t\tconst cached = this._geometryCache.get(overlay)\n\t\tif (cached !== undefined) return cached\n\t\tconst util = this.getOverlayUtil(overlay)\n\t\tconst geometry = util.getGeometry(overlay)\n\t\tthis._geometryCache.set(overlay, geometry)\n\t\treturn geometry\n\t}\n\n\t/**\n\t * The currently hovered overlay id.\n\t * @public\n\t */\n\tprivate _hoveredOverlayId = atom<string | null>('hoveredOverlayId', null)\n\n\tgetHoveredOverlayId(): string | null {\n\t\treturn this._hoveredOverlayId.get()\n\t}\n\n\tgetHoveredOverlay(): TLOverlay | null {\n\t\tconst id = this._hoveredOverlayId.get()\n\t\tif (!id) return null\n\t\treturn this.getCurrentOverlays().find((o) => o.id === id) ?? null\n\t}\n\n\tsetHoveredOverlay(id: string | null) {\n\t\tif (id === this._hoveredOverlayId.get()) return\n\t\tthis._hoveredOverlayId.set(id)\n\t}\n\n\t/**\n\t * Hit test all active overlays at a given page point.\n\t * Returns the topmost overlay whose geometry contains the point, or null.\n\t * Utils are walked from highest zIndex to lowest so the overlay painted on\n\t * top also wins the hit test. Within a util, overlays are walked in\n\t * array order: the first overlay whose geometry contains the point wins,\n\t * so utils should place highest-priority overlays first in `getOverlays`.\n\t * Interactive overlays (those with geometry) are checked; non-interactive are skipped.\n\t *\n\t * @param point - Point in page coordinates\n\t * @param margin - Hit test margin\n\t * @public\n\t */\n\tgetOverlayAtPoint(point: VecLike, margin = 0): TLOverlay | null {\n\t\tconst entries = this.getActiveOverlayEntries()\n\t\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\t\tconst { overlays } = entries[i]\n\t\t\tfor (const overlay of overlays) {\n\t\t\t\tconst geometry = this.getOverlayGeometry(overlay)\n\t\t\t\tif (!geometry) continue\n\t\t\t\tif (geometry.hitTestPoint(point, geometry.isFilled ? 0 : margin, true)) {\n\t\t\t\t\treturn overlay\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var OverlayUtil_exports = {};
|
|
20
|
+
__export(OverlayUtil_exports, {
|
|
21
|
+
OverlayUtil: () => OverlayUtil
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(OverlayUtil_exports);
|
|
24
|
+
class OverlayUtil {
|
|
25
|
+
constructor(editor) {
|
|
26
|
+
this.editor = editor;
|
|
27
|
+
}
|
|
28
|
+
editor;
|
|
29
|
+
static type;
|
|
30
|
+
/**
|
|
31
|
+
* Options for this overlay util. Override this to provide customization options.
|
|
32
|
+
* Use {@link OverlayUtil.configure} to customize existing overlay utils.
|
|
33
|
+
*
|
|
34
|
+
* `zIndex` controls paint and hit-test order across utils — higher numbers
|
|
35
|
+
* paint on top and are hit-tested first. Ties resolve by registration order.
|
|
36
|
+
* Defaults to `0`; built-in utils use larger integers (100, 200, …) with
|
|
37
|
+
* gaps so custom utils can slot between.
|
|
38
|
+
*
|
|
39
|
+
* @public
|
|
40
|
+
*/
|
|
41
|
+
options = {};
|
|
42
|
+
/**
|
|
43
|
+
* Create a new overlay util class with the given options merged in.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* const MyBrush = BrushOverlayUtil.configure({ fill: 'rgba(0,0,255,0.1)' })
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
static configure(options) {
|
|
53
|
+
return class extends this {
|
|
54
|
+
// @ts-expect-error
|
|
55
|
+
options = { ...this.options, ...options };
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Returns hit-test geometry for an overlay instance, in page coordinates.
|
|
60
|
+
* Return null for non-interactive overlays (e.g. snap indicators, scribbles).
|
|
61
|
+
*/
|
|
62
|
+
getGeometry(_overlay) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Returns the cursor type to show when hovering this overlay.
|
|
67
|
+
*/
|
|
68
|
+
getCursor(_overlay) {
|
|
69
|
+
return void 0;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Render all active overlays into the canvas context.
|
|
73
|
+
* The context is already transformed to page space (camera transform applied).
|
|
74
|
+
* Called reactively when overlays or editor state changes.
|
|
75
|
+
*/
|
|
76
|
+
render(_ctx, _overlays) {
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Optional: render all active overlays into the minimap canvas.
|
|
80
|
+
* The context is already transformed to page space (minimap camera applied),
|
|
81
|
+
* so overlays can use the same page-space coordinates as in {@link OverlayUtil.render}.
|
|
82
|
+
*
|
|
83
|
+
* `zoom` is the minimap's screen-pixels-per-page-unit, analogous to
|
|
84
|
+
* `editor.getCamera().z`; use `1 / zoom` for one-minimap-pixel line widths.
|
|
85
|
+
*
|
|
86
|
+
* Most overlays should leave this blank — only overlays that are meaningful
|
|
87
|
+
* at minimap scale (e.g. brushes, collaborator cursors) should opt in.
|
|
88
|
+
*/
|
|
89
|
+
renderMinimap(_ctx, _overlays, _zoom) {
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=OverlayUtil.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/lib/editor/overlays/OverlayUtil.ts"],
|
|
4
|
+
"sourcesContent": ["import { TLCursorType } from '@tldraw/tlschema'\nimport { Geometry2d } from '../../primitives/geometry/Geometry2d'\nimport type { Editor } from '../Editor'\nimport { TLPointerEventInfo } from '../types/event-types'\n\n/** @public */\nexport interface TLOverlay<Props = Record<string, unknown>> {\n\t/**\n\t * Globally unique id for this overlay instance across all overlay utils.\n\t * Hit-test and hover lookup key on `id` alone, so utils must namespace their\n\t * ids (e.g. `'selection_fg:top_left'`, `'handle:<shapeId>:<handleId>'`) to\n\t * avoid colliding with overlays from other utils.\n\t */\n\tid: string\n\t/** The overlay util type that owns this instance */\n\ttype: string\n\t/** Arbitrary props for the overlay (handle id, corner name, etc.) */\n\tprops: Props\n}\n\n/** @public */\nexport interface TLOverlayUtilConstructor<U extends OverlayUtil = OverlayUtil> {\n\tnew (editor: Editor): U\n\ttype: string\n\tconfigure<T extends TLOverlayUtilConstructor<any>>(\n\t\tthis: T,\n\t\toptions: T extends new (...args: any[]) => { options: infer Options } ? Partial<Options> : never\n\t): T\n}\n\n/** @public */\nexport type TLAnyOverlayUtilConstructor = TLOverlayUtilConstructor<any>\n\n/**\n * Base class for overlay utilities. Overlays are ephemeral UI elements rendered\n * on top of the canvas (selection handles, rotation corners, shape handles, etc.).\n *\n * Each OverlayUtil defines a type of overlay and knows how to:\n * - Determine when its overlays should be active (predicate)\n * - Produce overlay instances from current editor state\n * - Provide hit-test geometry for interactive overlays\n * - Provide cursor style on hover\n * - Render into a canvas 2D context\n *\n * @public\n */\nexport abstract class OverlayUtil<T extends TLOverlay = TLOverlay> {\n\tconstructor(public editor: Editor) {}\n\tstatic type: string\n\n\t/**\n\t * Options for this overlay util. Override this to provide customization options.\n\t * Use {@link OverlayUtil.configure} to customize existing overlay utils.\n\t *\n\t * `zIndex` controls paint and hit-test order across utils \u2014 higher numbers\n\t * paint on top and are hit-tested first. Ties resolve by registration order.\n\t * Defaults to `0`; built-in utils use larger integers (100, 200, \u2026) with\n\t * gaps so custom utils can slot between.\n\t *\n\t * @public\n\t */\n\toptions: { zIndex?: number } = {}\n\n\t/**\n\t * Create a new overlay util class with the given options merged in.\n\t *\n\t * @example\n\t * ```ts\n\t * const MyBrush = BrushOverlayUtil.configure({ fill: 'rgba(0,0,255,0.1)' })\n\t * ```\n\t *\n\t * @public\n\t */\n\tstatic configure<T extends TLOverlayUtilConstructor<any>>(\n\t\tthis: T,\n\t\toptions: T extends new (...args: any[]) => { options: infer Options } ? Partial<Options> : never\n\t): T {\n\t\t// @ts-expect-error -- typescript has no idea what's going on here but it's fine\n\t\treturn class extends this {\n\t\t\t// @ts-expect-error\n\t\t\toptions = { ...this.options, ...options }\n\t\t}\n\t}\n\n\t/**\n\t * Whether this overlay util's overlays should currently be active.\n\t * Checked reactively to determine which overlays exist at any given time.\n\t */\n\tabstract isActive(): boolean\n\n\t/**\n\t * Returns the overlay instances that currently exist.\n\t * Called only when `isActive()` returns true.\n\t */\n\tabstract getOverlays(): T[]\n\n\t/**\n\t * Returns hit-test geometry for an overlay instance, in page coordinates.\n\t * Return null for non-interactive overlays (e.g. snap indicators, scribbles).\n\t */\n\tgetGeometry(_overlay: T): Geometry2d | null {\n\t\treturn null\n\t}\n\n\t/**\n\t * Returns the cursor type to show when hovering this overlay.\n\t */\n\tgetCursor(_overlay: T): TLCursorType | undefined {\n\t\treturn undefined\n\t}\n\n\t/**\n\t * Called when the user points down on this overlay, before the default\n\t * routing runs. Acts as an interrupt: define it to take over the event.\n\t *\n\t * Return `false` to continue with the default behavior (e.g. the\n\t * built-in rotate/resize handle transitions or shape-handle dispatch).\n\t * Return `true` \u2014 or nothing at all \u2014 to skip the default. In other\n\t * words, once you override this method you own the event unless you\n\t * explicitly opt back in by returning `false`.\n\t */\n\tonPointerDown?(overlay: T, info: TLPointerEventInfo): boolean | void\n\n\t/**\n\t * Render all active overlays into the canvas context.\n\t * The context is already transformed to page space (camera transform applied).\n\t * Called reactively when overlays or editor state changes.\n\t */\n\trender(_ctx: CanvasRenderingContext2D, _overlays: T[]): void {}\n\n\t/**\n\t * Optional: render all active overlays into the minimap canvas.\n\t * The context is already transformed to page space (minimap camera applied),\n\t * so overlays can use the same page-space coordinates as in {@link OverlayUtil.render}.\n\t *\n\t * `zoom` is the minimap's screen-pixels-per-page-unit, analogous to\n\t * `editor.getCamera().z`; use `1 / zoom` for one-minimap-pixel line widths.\n\t *\n\t * Most overlays should leave this blank \u2014 only overlays that are meaningful\n\t * at minimap scale (e.g. brushes, collaborator cursors) should opt in.\n\t */\n\trenderMinimap(_ctx: CanvasRenderingContext2D, _overlays: T[], _zoom: number): void {}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CO,MAAe,YAA6C;AAAA,EAClE,YAAmB,QAAgB;AAAhB;AAAA,EAAiB;AAAA,EAAjB;AAAA,EACnB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaP,UAA+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYhC,OAAO,UAEN,SACI;AAEJ,WAAO,cAAc,KAAK;AAAA;AAAA,MAEzB,UAAU,EAAE,GAAG,KAAK,SAAS,GAAG,QAAQ;AAAA,IACzC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,YAAY,UAAgC;AAC3C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,UAAuC;AAChD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO,MAAgC,WAAsB;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa9D,cAAc,MAAgC,WAAgB,OAAqB;AAAA,EAAC;AACrF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|