tldraw 4.2.0-canary.5887eb336025 → 4.2.0-canary.682d37df65b9

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.
Files changed (41) hide show
  1. package/dist-cjs/index.d.ts +21 -4
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/shapes/shared/RichTextLabel.js +1 -1
  5. package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +2 -2
  6. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -2
  7. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  8. package/dist-cjs/lib/ui/components/DebugMenu/DefaultDebugMenuContent.js +10 -7
  9. package/dist-cjs/lib/ui/components/DebugMenu/DefaultDebugMenuContent.js.map +2 -2
  10. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +1 -1
  11. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  12. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  13. package/dist-cjs/lib/ui/getLocalFiles.js +18 -3
  14. package/dist-cjs/lib/ui/getLocalFiles.js.map +2 -2
  15. package/dist-cjs/lib/ui/version.js +3 -3
  16. package/dist-cjs/lib/ui/version.js.map +1 -1
  17. package/dist-esm/index.d.mts +21 -4
  18. package/dist-esm/index.mjs +1 -1
  19. package/dist-esm/index.mjs.map +2 -2
  20. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +2 -1
  21. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
  22. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -2
  23. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  24. package/dist-esm/lib/ui/components/DebugMenu/DefaultDebugMenuContent.mjs +10 -7
  25. package/dist-esm/lib/ui/components/DebugMenu/DefaultDebugMenuContent.mjs.map +2 -2
  26. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +2 -2
  27. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  28. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  29. package/dist-esm/lib/ui/getLocalFiles.mjs +18 -3
  30. package/dist-esm/lib/ui/getLocalFiles.mjs.map +2 -2
  31. package/dist-esm/lib/ui/version.mjs +3 -3
  32. package/dist-esm/lib/ui/version.mjs.map +1 -1
  33. package/package.json +3 -3
  34. package/src/index.ts +3 -0
  35. package/src/lib/shapes/shared/RichTextLabel.tsx +2 -1
  36. package/src/lib/tools/SelectTool/childStates/Idle.ts +2 -2
  37. package/src/lib/ui/components/DebugMenu/DefaultDebugMenuContent.tsx +27 -7
  38. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +2 -2
  39. package/src/lib/ui/context/events.tsx +1 -0
  40. package/src/lib/ui/getLocalFiles.ts +20 -3
  41. package/src/lib/ui/version.ts +3 -3
@@ -29,8 +29,17 @@ import { TldrawUiMenuGroup } from '../primitives/menus/TldrawUiMenuGroup'
29
29
  import { TldrawUiMenuItem } from '../primitives/menus/TldrawUiMenuItem'
30
30
  import { TldrawUiMenuSubmenu } from '../primitives/menus/TldrawUiMenuSubmenu'
31
31
 
32
+ /** @public */
33
+ export interface CustomDebugFlags {
34
+ customDebugFlags?: Record<string, DebugFlag<boolean>>
35
+ customFeatureFlags?: Record<string, DebugFlag<boolean>>
36
+ }
37
+
32
38
  /** @public @react */
33
- export function DefaultDebugMenuContent() {
39
+ export function DefaultDebugMenuContent({
40
+ customDebugFlags,
41
+ customFeatureFlags,
42
+ }: CustomDebugFlags) {
34
43
  const editor = useEditor()
35
44
  const { addToast } = useToasts()
36
45
  const { addDialog } = useDialogs()
@@ -161,15 +170,21 @@ export function DefaultDebugMenuContent() {
161
170
  <TldrawUiMenuItem id="throw-error" onSelect={() => setError(true)} label={'Throw error'} />
162
171
  </TldrawUiMenuGroup>
163
172
  <TldrawUiMenuGroup id="flags">
164
- <DebugFlags />
165
- <FeatureFlags />
173
+ <DebugFlags customDebugFlags={customDebugFlags} />
174
+ <FeatureFlags customFeatureFlags={customFeatureFlags} />
166
175
  </TldrawUiMenuGroup>
167
176
  </>
168
177
  )
169
178
  }
179
+
180
+ /** @public */
181
+ export interface DebugFlagsProps {
182
+ customDebugFlags?: Record<string, DebugFlag<boolean>> | undefined
183
+ }
184
+
170
185
  /** @public @react */
171
- export function DebugFlags() {
172
- const items = Object.values(debugFlags)
186
+ export function DebugFlags(props: DebugFlagsProps) {
187
+ const items = Object.values(props.customDebugFlags ?? debugFlags)
173
188
  if (!items.length) return null
174
189
  return (
175
190
  <TldrawUiMenuSubmenu id="debug flags" label="Debug flags">
@@ -181,9 +196,14 @@ export function DebugFlags() {
181
196
  </TldrawUiMenuSubmenu>
182
197
  )
183
198
  }
199
+ /** @public */
200
+ export interface FeatureFlagsProps {
201
+ customFeatureFlags?: Record<string, DebugFlag<boolean>> | undefined
202
+ }
203
+
184
204
  /** @public @react */
185
- export function FeatureFlags() {
186
- const items = Object.values(featureFlags)
205
+ export function FeatureFlags(props: FeatureFlagsProps) {
206
+ const items = Object.values(props.customFeatureFlags ?? featureFlags)
187
207
  if (!items.length) return null
188
208
  return (
189
209
  <TldrawUiMenuSubmenu id="feature flags" label="Feature flags">
@@ -1,4 +1,4 @@
1
- import { preventDefault, TiptapEditor, useEditor } from '@tldraw/editor'
1
+ import { openWindow, preventDefault, TiptapEditor, useEditor } from '@tldraw/editor'
2
2
  import { useEffect, useRef, useState } from 'react'
3
3
  import { useUiEvents } from '../../context/events'
4
4
  import { useTranslation } from '../../hooks/useTranslation/useTranslation'
@@ -44,7 +44,7 @@ export function LinkEditor({ textEditor, value: initialValue, onClose }: LinkEdi
44
44
 
45
45
  const handleVisitLink = () => {
46
46
  trackEvent('rich-text', { operation: 'link-visit', source })
47
- window.open(linkifiedValue, '_blank', 'noopener, noreferrer')
47
+ openWindow(linkifiedValue, '_blank')
48
48
  onClose()
49
49
  }
50
50
 
@@ -24,6 +24,7 @@ export type TLUiEventSource =
24
24
  | 'rich-text-menu'
25
25
  | 'image-toolbar'
26
26
  | 'video-toolbar'
27
+ | 'fairy-panel'
27
28
  | 'unknown'
28
29
 
29
30
  /** @public */
@@ -9,17 +9,34 @@ export function getLocalFiles(options?: {
9
9
  input.type = 'file'
10
10
  input.accept = mimeTypes?.join(',')
11
11
  input.multiple = allowMultiple
12
+ input.style.display = 'none'
13
+
14
+ function dispose() {
15
+ input.removeEventListener('change', onchange)
16
+ input.removeEventListener('cancel', oncancel)
17
+ input.remove()
18
+ }
12
19
 
13
20
  async function onchange(e: Event) {
14
21
  const fileList = (e.target as HTMLInputElement).files
15
- if (!fileList || fileList.length === 0) return
22
+ if (!fileList || fileList.length === 0) {
23
+ resolve([])
24
+ dispose()
25
+ return
26
+ }
16
27
  const files = Array.from(fileList)
17
28
  input.value = ''
18
29
  resolve(files)
19
- input.removeEventListener('change', onchange)
20
- input.remove()
30
+ dispose()
31
+ }
32
+
33
+ function oncancel() {
34
+ resolve([])
35
+ dispose()
21
36
  }
22
37
 
38
+ document.body.appendChild(input)
39
+ input.addEventListener('cancel', oncancel)
23
40
  input.addEventListener('change', onchange)
24
41
  input?.click()
25
42
  })
@@ -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 = '4.2.0-canary.5887eb336025'
4
+ export const version = '4.2.0-canary.682d37df65b9'
5
5
  export const publishDates = {
6
6
  major: '2025-09-18T14:39:22.803Z',
7
- minor: '2025-10-16T09:29:09.234Z',
8
- patch: '2025-10-16T09:29:09.234Z',
7
+ minor: '2025-10-29T18:16:39.423Z',
8
+ patch: '2025-10-29T18:16:39.423Z',
9
9
  }