tldraw 3.16.0-canary.947c633374a9 → 3.16.0-canary.9a2aa6d47255
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 +10 -0
- package/dist-cjs/index.js +2 -1
- package/dist-cjs/index.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/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/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-esm/index.d.mts +10 -0
- package/dist-esm/index.mjs +3 -1
- package/dist-esm/index.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/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/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -0
- package/src/lib/defaultExternalContentHandlers.ts +12 -4
- package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +1 -1
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +20 -22
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +3 -0
- package/tldraw.css +3 -0
|
@@ -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
|
|
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-canary.
|
|
4
|
+
export const version = '3.16.0-canary.9a2aa6d47255'
|
|
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-21T12:50:12.632Z',
|
|
8
|
+
patch: '2025-08-21T12:50:12.632Z',
|
|
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
|
@@ -2830,6 +2830,9 @@ it from receiving any pointer events or affecting the cursor. */
|
|
|
2830
2830
|
}
|
|
2831
2831
|
|
|
2832
2832
|
@media (hover: hover) {
|
|
2833
|
+
.tlui-style-panel .tlui-button[aria-expanded='true'] {
|
|
2834
|
+
background: none;
|
|
2835
|
+
}
|
|
2833
2836
|
.tlui-style-panel .tlui-button[data-state='open']:not(:hover)::after {
|
|
2834
2837
|
opacity: 1;
|
|
2835
2838
|
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|