tldraw 3.16.0-internal.51e99e128bd4 → 3.16.0-next.15f085081fd5
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 +20 -1
- package/dist-cjs/index.js +5 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/Tldraw.js +12 -2
- package/dist-cjs/lib/Tldraw.js.map +2 -2
- package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -4
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +3 -0
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +3 -0
- package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js +13 -12
- package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
- package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
- package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
- package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +6 -6
- package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
- package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +1 -1
- package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +31 -37
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
- package/dist-cjs/lib/ui/context/actions.js +16 -2
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/components.js +2 -0
- package/dist-cjs/lib/ui/context/components.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +1 -0
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
- package/dist-cjs/lib/ui/kbd-utils.js +9 -3
- package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
- package/dist-cjs/lib/ui/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-esm/index.d.mts +20 -1
- package/dist-esm/index.mjs +7 -2
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/Tldraw.mjs +14 -4
- package/dist-esm/lib/Tldraw.mjs.map +2 -2
- package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -4
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +3 -0
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -0
- package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs +13 -12
- package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
- package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
- package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
- package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +6 -6
- package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
- package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +1 -1
- package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +31 -37
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
- package/dist-esm/lib/ui/context/actions.mjs +16 -2
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/components.mjs +2 -0
- package/dist-esm/lib/ui/context/components.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +1 -0
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
- package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
- package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
- package/dist-esm/lib/ui/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +3 -1
- package/src/lib/Tldraw.tsx +15 -2
- package/src/lib/defaultExternalContentHandlers.ts +12 -4
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +4 -0
- package/src/lib/shapes/image/ImageShapeUtil.tsx +3 -0
- package/src/lib/ui/TldrawUi.tsx +16 -10
- package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
- package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
- package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +1 -1
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +20 -22
- package/src/lib/ui/context/actions.tsx +16 -2
- package/src/lib/ui/context/components.tsx +3 -0
- package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +1 -0
- package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +1 -0
- package/src/lib/ui/kbd-utils.ts +10 -3
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +3 -0
- package/tldraw.css +11 -0
- package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
- package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
|
@@ -34,7 +34,7 @@ class TooltipManager {
|
|
|
34
34
|
sideOffset: number
|
|
35
35
|
showOnMobile: boolean
|
|
36
36
|
targetElement: HTMLElement
|
|
37
|
-
delayDuration: number
|
|
37
|
+
delayDuration: number
|
|
38
38
|
} | null>('current tooltip', null)
|
|
39
39
|
private destroyTimeoutId: number | null = null
|
|
40
40
|
|
|
@@ -52,7 +52,7 @@ class TooltipManager {
|
|
|
52
52
|
side: 'top' | 'right' | 'bottom' | 'left',
|
|
53
53
|
sideOffset: number,
|
|
54
54
|
showOnMobile: boolean,
|
|
55
|
-
delayDuration: number
|
|
55
|
+
delayDuration: number
|
|
56
56
|
) {
|
|
57
57
|
// Clear any existing destroy timeout
|
|
58
58
|
if (this.destroyTimeoutId) {
|
|
@@ -139,11 +139,9 @@ export function TldrawUiTooltipProvider({ children }: TldrawUiTooltipProviderPro
|
|
|
139
139
|
|
|
140
140
|
// The singleton tooltip component that renders once
|
|
141
141
|
function TooltipSingleton() {
|
|
142
|
-
const editor = useMaybeEditor()
|
|
143
142
|
const [isOpen, setIsOpen] = useState(false)
|
|
144
143
|
const triggerRef = useRef<HTMLDivElement>(null)
|
|
145
144
|
const isFirstShowRef = useRef(true)
|
|
146
|
-
const showTimeoutRef = useRef<number | null>(null)
|
|
147
145
|
|
|
148
146
|
const currentTooltip = useValue(
|
|
149
147
|
'current tooltip',
|
|
@@ -153,12 +151,7 @@ function TooltipSingleton() {
|
|
|
153
151
|
|
|
154
152
|
// Update open state and trigger position
|
|
155
153
|
useEffect(() => {
|
|
156
|
-
|
|
157
|
-
if (showTimeoutRef.current) {
|
|
158
|
-
clearTimeout(showTimeoutRef.current)
|
|
159
|
-
showTimeoutRef.current = null
|
|
160
|
-
}
|
|
161
|
-
|
|
154
|
+
let timer: ReturnType<typeof setTimeout> | null = null
|
|
162
155
|
if (currentTooltip && triggerRef.current) {
|
|
163
156
|
// Position the invisible trigger element over the active element
|
|
164
157
|
const activeRect = currentTooltip.targetElement.getBoundingClientRect()
|
|
@@ -173,11 +166,12 @@ function TooltipSingleton() {
|
|
|
173
166
|
trigger.style.zIndex = '9999'
|
|
174
167
|
|
|
175
168
|
// Handle delay for first show
|
|
176
|
-
if (isFirstShowRef.current
|
|
177
|
-
|
|
169
|
+
if (isFirstShowRef.current) {
|
|
170
|
+
// eslint-disable-next-line no-restricted-globals
|
|
171
|
+
timer = setTimeout(() => {
|
|
178
172
|
setIsOpen(true)
|
|
179
173
|
isFirstShowRef.current = false
|
|
180
|
-
}, currentTooltip.delayDuration
|
|
174
|
+
}, currentTooltip.delayDuration)
|
|
181
175
|
} else {
|
|
182
176
|
// Subsequent tooltips show immediately
|
|
183
177
|
setIsOpen(true)
|
|
@@ -188,7 +182,13 @@ function TooltipSingleton() {
|
|
|
188
182
|
// Reset first show state after tooltip is hidden
|
|
189
183
|
isFirstShowRef.current = true
|
|
190
184
|
}
|
|
191
|
-
|
|
185
|
+
|
|
186
|
+
return () => {
|
|
187
|
+
if (timer !== null) {
|
|
188
|
+
clearTimeout(timer)
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}, [currentTooltip])
|
|
192
192
|
|
|
193
193
|
if (!currentTooltip) {
|
|
194
194
|
return null
|
|
@@ -249,15 +249,13 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
249
249
|
return <>{children}</>
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
+
const delayDurationToUse =
|
|
253
|
+
delayDuration ?? (editor?.options.tooltipDelayMs || DEFAULT_TOOLTIP_DELAY_MS)
|
|
254
|
+
|
|
252
255
|
// Fallback to old behavior if no provider
|
|
253
256
|
if (!hasProvider) {
|
|
254
257
|
return (
|
|
255
|
-
<_Tooltip.Root
|
|
256
|
-
delayDuration={
|
|
257
|
-
delayDuration ?? (editor?.options.tooltipDelayMs || DEFAULT_TOOLTIP_DELAY_MS)
|
|
258
|
-
}
|
|
259
|
-
disableHoverableContent
|
|
260
|
-
>
|
|
258
|
+
<_Tooltip.Root delayDuration={delayDurationToUse} disableHoverableContent>
|
|
261
259
|
<_Tooltip.Trigger asChild ref={ref}>
|
|
262
260
|
{children}
|
|
263
261
|
</_Tooltip.Trigger>
|
|
@@ -288,7 +286,7 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
288
286
|
sideToUse,
|
|
289
287
|
sideOffset,
|
|
290
288
|
showOnMobile,
|
|
291
|
-
|
|
289
|
+
delayDurationToUse
|
|
292
290
|
)
|
|
293
291
|
}
|
|
294
292
|
|
|
@@ -306,7 +304,7 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
306
304
|
sideToUse,
|
|
307
305
|
sideOffset,
|
|
308
306
|
showOnMobile,
|
|
309
|
-
|
|
307
|
+
delayDurationToUse
|
|
310
308
|
)
|
|
311
309
|
}
|
|
312
310
|
|
|
@@ -36,6 +36,7 @@ import { useTranslation } from '../hooks/useTranslation/useTranslation'
|
|
|
36
36
|
import { TLUiIconType } from '../icon-types'
|
|
37
37
|
import { TLUiOverrideHelpers, useDefaultHelpers } from '../overrides'
|
|
38
38
|
import { useA11y } from './a11y'
|
|
39
|
+
import { useTldrawUiComponents } from './components'
|
|
39
40
|
import { TLUiEventSource, useUiEvents } from './events'
|
|
40
41
|
|
|
41
42
|
/** @public */
|
|
@@ -98,6 +99,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
98
99
|
const _editor = useMaybeEditor()
|
|
99
100
|
const showCollaborationUi = useShowCollaborationUi()
|
|
100
101
|
const helpers = useDefaultHelpers()
|
|
102
|
+
const components = useTldrawUiComponents()
|
|
101
103
|
const trackEvent = useUiEvents()
|
|
102
104
|
const a11y = useA11y()
|
|
103
105
|
const msg = useTranslation()
|
|
@@ -176,7 +178,9 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
176
178
|
kbd: 'cmd+alt+/,ctrl+alt+/',
|
|
177
179
|
onSelect(source) {
|
|
178
180
|
trackEvent('open-kbd-shortcuts', { source })
|
|
179
|
-
helpers.addDialog({
|
|
181
|
+
helpers.addDialog({
|
|
182
|
+
component: components.KeyboardShortcutsDialog ?? DefaultKeyboardShortcutsDialog,
|
|
183
|
+
})
|
|
180
184
|
},
|
|
181
185
|
},
|
|
182
186
|
{
|
|
@@ -1755,7 +1759,17 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1755
1759
|
}
|
|
1756
1760
|
|
|
1757
1761
|
return actions
|
|
1758
|
-
}, [
|
|
1762
|
+
}, [
|
|
1763
|
+
helpers,
|
|
1764
|
+
_editor,
|
|
1765
|
+
trackEvent,
|
|
1766
|
+
overrides,
|
|
1767
|
+
defaultDocumentName,
|
|
1768
|
+
showCollaborationUi,
|
|
1769
|
+
msg,
|
|
1770
|
+
a11y,
|
|
1771
|
+
components,
|
|
1772
|
+
])
|
|
1759
1773
|
|
|
1760
1774
|
return <ActionsContext.Provider value={asActions(actions)}>{children}</ActionsContext.Provider>
|
|
1761
1775
|
}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
import { CursorChatBubble } from '../components/CursorChatBubble'
|
|
13
13
|
import { DefaultDebugMenu } from '../components/DebugMenu/DefaultDebugMenu'
|
|
14
14
|
import { DefaultDebugPanel } from '../components/DefaultDebugPanel'
|
|
15
|
+
import { DefaultFollowingIndicator } from '../components/DefaultFollowingIndicator'
|
|
15
16
|
import { DefaultMenuPanel } from '../components/DefaultMenuPanel'
|
|
16
17
|
import { DefaultDialogs } from '../components/Dialogs'
|
|
17
18
|
import { TLUiHelpMenuProps } from '../components/HelpMenu/DefaultHelpMenu'
|
|
@@ -72,6 +73,7 @@ export interface TLUiComponents {
|
|
|
72
73
|
Dialogs?: ComponentType | null
|
|
73
74
|
Toasts?: ComponentType | null
|
|
74
75
|
A11y?: ComponentType | null
|
|
76
|
+
FollowingIndicator?: ComponentType | null
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
const TldrawUiComponentsContext = createContext<TLUiComponents | null>(null)
|
|
@@ -119,6 +121,7 @@ export function TldrawUiComponentsProvider({
|
|
|
119
121
|
Dialogs: DefaultDialogs,
|
|
120
122
|
Toasts: DefaultToasts,
|
|
121
123
|
A11y: DefaultA11yAnnouncer,
|
|
124
|
+
FollowingIndicator: DefaultFollowingIndicator,
|
|
122
125
|
..._overrides,
|
|
123
126
|
}),
|
|
124
127
|
[_overrides, showCollaborationUi]
|
|
@@ -187,6 +187,7 @@ export const DEFAULT_TRANSLATION = {
|
|
|
187
187
|
'geo-style.pentagon': 'Pentagon',
|
|
188
188
|
'geo-style.rectangle': 'Rectangle',
|
|
189
189
|
'geo-style.rhombus': 'Rhombus',
|
|
190
|
+
'geo-style.rhombus-2': 'Rhombus left',
|
|
190
191
|
'geo-style.star': 'Star',
|
|
191
192
|
'geo-style.trapezoid': 'Trapezoid',
|
|
192
193
|
'geo-style.triangle': 'Triangle',
|
package/src/lib/ui/kbd-utils.ts
CHANGED
|
@@ -31,9 +31,16 @@ export function kbd(str: string) {
|
|
|
31
31
|
)
|
|
32
32
|
.flat()
|
|
33
33
|
.map((sub, index) => {
|
|
34
|
-
if (sub === '
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
if (sub[0] === '+') return []
|
|
35
|
+
|
|
36
|
+
let modifiedKey
|
|
37
|
+
if (sub === '__CTRL__') {
|
|
38
|
+
modifiedKey = 'Ctrl'
|
|
39
|
+
} else if (sub === '__ALT__') {
|
|
40
|
+
modifiedKey = 'Alt'
|
|
41
|
+
} else {
|
|
42
|
+
modifiedKey = sub[0].toUpperCase() + sub.slice(1)
|
|
43
|
+
}
|
|
37
44
|
return tlenv.isDarwin || !index ? modifiedKey : ['+', modifiedKey]
|
|
38
45
|
})
|
|
39
46
|
.flat()
|
package/src/lib/ui/version.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is automatically generated by internal/scripts/refresh-assets.ts.
|
|
2
2
|
// Do not edit manually. Or do, I'm a comment, not a cop.
|
|
3
3
|
|
|
4
|
-
export const version = '3.16.0-
|
|
4
|
+
export const version = '3.16.0-next.15f085081fd5'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2024-09-13T14:36:29.063Z',
|
|
7
|
-
minor: '2025-08-
|
|
8
|
-
patch: '2025-08-
|
|
7
|
+
minor: '2025-08-27T13:43:07.665Z',
|
|
8
|
+
patch: '2025-08-27T13:43:07.665Z',
|
|
9
9
|
}
|
package/src/lib/ui.css
CHANGED
|
@@ -1047,6 +1047,9 @@
|
|
|
1047
1047
|
}
|
|
1048
1048
|
|
|
1049
1049
|
@media (hover: hover) {
|
|
1050
|
+
.tlui-style-panel .tlui-button[aria-expanded='true'] {
|
|
1051
|
+
background: none;
|
|
1052
|
+
}
|
|
1050
1053
|
.tlui-style-panel .tlui-button[data-state='open']:not(:hover)::after {
|
|
1051
1054
|
opacity: 1;
|
|
1052
1055
|
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
package/tldraw.css
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
--tl-layer-watermark: 200;
|
|
34
34
|
--tl-layer-canvas-shapes: 300;
|
|
35
35
|
--tl-layer-canvas-overlays: 500;
|
|
36
|
+
--tl-layer-canvas-in-front: 600;
|
|
36
37
|
--tl-layer-canvas-blocker: 10000;
|
|
37
38
|
|
|
38
39
|
/* Canvas overlays z-index */
|
|
@@ -301,6 +302,13 @@ input,
|
|
|
301
302
|
contain: strict;
|
|
302
303
|
}
|
|
303
304
|
|
|
305
|
+
.tl-canvas__in-front {
|
|
306
|
+
position: absolute;
|
|
307
|
+
inset: 0;
|
|
308
|
+
pointer-events: none;
|
|
309
|
+
z-index: var(--tl-layer-canvas-in-front);
|
|
310
|
+
}
|
|
311
|
+
|
|
304
312
|
.tl-shapes {
|
|
305
313
|
position: relative;
|
|
306
314
|
z-index: var(--tl-layer-canvas-shapes);
|
|
@@ -2830,6 +2838,9 @@ it from receiving any pointer events or affecting the cursor. */
|
|
|
2830
2838
|
}
|
|
2831
2839
|
|
|
2832
2840
|
@media (hover: hover) {
|
|
2841
|
+
.tlui-style-panel .tlui-button[aria-expanded='true'] {
|
|
2842
|
+
background: none;
|
|
2843
|
+
}
|
|
2833
2844
|
.tlui-style-panel .tlui-button[data-state='open']:not(:hover)::after {
|
|
2834
2845
|
opacity: 1;
|
|
2835
2846
|
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/lib/ui/components/FollowingIndicator.tsx"],
|
|
4
|
-
"sourcesContent": ["import { useEditor, usePresence, useValue } from '@tldraw/editor'\n\nexport function FollowingIndicator() {\n\tconst editor = useEditor()\n\tconst followingUserId = useValue('follow', () => editor.getInstanceState().followingUserId, [\n\t\teditor,\n\t])\n\tif (!followingUserId) return null\n\treturn <FollowingIndicatorInner userId={followingUserId} />\n}\n\nfunction FollowingIndicatorInner({ userId }: { userId: string }) {\n\tconst presence = usePresence(userId)\n\tif (!presence) return null\n\treturn <div className=\"tlui-following-indicator\" style={{ borderColor: presence.color }} />\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQQ;AARR,oBAAiD;AAE1C,SAAS,qBAAqB;AACpC,QAAM,aAAS,yBAAU;AACzB,QAAM,sBAAkB,wBAAS,UAAU,MAAM,OAAO,iBAAiB,EAAE,iBAAiB;AAAA,IAC3F;AAAA,EACD,CAAC;AACD,MAAI,CAAC,gBAAiB,QAAO;AAC7B,SAAO,4CAAC,2BAAwB,QAAQ,iBAAiB;AAC1D;AAEA,SAAS,wBAAwB,EAAE,OAAO,GAAuB;AAChE,QAAM,eAAW,2BAAY,MAAM;AACnC,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,4CAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,aAAa,SAAS,MAAM,GAAG;AAC1F;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/lib/ui/components/FollowingIndicator.tsx"],
|
|
4
|
-
"sourcesContent": ["import { useEditor, usePresence, useValue } from '@tldraw/editor'\n\nexport function FollowingIndicator() {\n\tconst editor = useEditor()\n\tconst followingUserId = useValue('follow', () => editor.getInstanceState().followingUserId, [\n\t\teditor,\n\t])\n\tif (!followingUserId) return null\n\treturn <FollowingIndicatorInner userId={followingUserId} />\n}\n\nfunction FollowingIndicatorInner({ userId }: { userId: string }) {\n\tconst presence = usePresence(userId)\n\tif (!presence) return null\n\treturn <div className=\"tlui-following-indicator\" style={{ borderColor: presence.color }} />\n}\n"],
|
|
5
|
-
"mappings": "AAQQ;AARR,SAAS,WAAW,aAAa,gBAAgB;AAE1C,SAAS,qBAAqB;AACpC,QAAM,SAAS,UAAU;AACzB,QAAM,kBAAkB,SAAS,UAAU,MAAM,OAAO,iBAAiB,EAAE,iBAAiB;AAAA,IAC3F;AAAA,EACD,CAAC;AACD,MAAI,CAAC,gBAAiB,QAAO;AAC7B,SAAO,oBAAC,2BAAwB,QAAQ,iBAAiB;AAC1D;AAEA,SAAS,wBAAwB,EAAE,OAAO,GAAuB;AAChE,QAAM,WAAW,YAAY,MAAM;AACnC,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,oBAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,aAAa,SAAS,MAAM,GAAG;AAC1F;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|