@tldraw/editor 3.7.0-canary.e1de2a6bd6b5 → 3.7.0-canary.e9078a30a022

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 (56) hide show
  1. package/dist-cjs/index.d.ts +3 -1
  2. package/dist-cjs/index.js +2 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +1 -1
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/LiveCollaborators.js +2 -1
  7. package/dist-cjs/lib/components/LiveCollaborators.js.map +2 -2
  8. package/dist-cjs/lib/components/Shape.js +6 -4
  9. package/dist-cjs/lib/components/Shape.js.map +2 -2
  10. package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js +2 -1
  11. package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js.map +2 -2
  12. package/dist-cjs/lib/editor/Editor.js +8 -2
  13. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  14. package/dist-cjs/lib/editor/managers/TextManager.js +9 -15
  15. package/dist-cjs/lib/editor/managers/TextManager.js.map +2 -2
  16. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  17. package/dist-cjs/lib/exports/FontEmbedder.js +2 -1
  18. package/dist-cjs/lib/exports/FontEmbedder.js.map +2 -2
  19. package/dist-cjs/lib/hooks/useEvent.js +18 -1
  20. package/dist-cjs/lib/hooks/useEvent.js.map +2 -2
  21. package/dist-cjs/version.js +3 -3
  22. package/dist-cjs/version.js.map +1 -1
  23. package/dist-esm/index.d.mts +3 -1
  24. package/dist-esm/index.mjs +3 -2
  25. package/dist-esm/index.mjs.map +2 -2
  26. package/dist-esm/lib/TldrawEditor.mjs +1 -1
  27. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  28. package/dist-esm/lib/components/LiveCollaborators.mjs +2 -1
  29. package/dist-esm/lib/components/LiveCollaborators.mjs.map +2 -2
  30. package/dist-esm/lib/components/Shape.mjs +6 -4
  31. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  32. package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs +2 -1
  33. package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs.map +2 -2
  34. package/dist-esm/lib/editor/Editor.mjs +9 -2
  35. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  36. package/dist-esm/lib/editor/managers/TextManager.mjs +9 -15
  37. package/dist-esm/lib/editor/managers/TextManager.mjs.map +2 -2
  38. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  39. package/dist-esm/lib/exports/FontEmbedder.mjs +2 -1
  40. package/dist-esm/lib/exports/FontEmbedder.mjs.map +2 -2
  41. package/dist-esm/lib/hooks/useEvent.mjs +18 -1
  42. package/dist-esm/lib/hooks/useEvent.mjs.map +2 -2
  43. package/dist-esm/version.mjs +3 -3
  44. package/dist-esm/version.mjs.map +1 -1
  45. package/package.json +7 -7
  46. package/src/index.ts +1 -1
  47. package/src/lib/TldrawEditor.tsx +1 -1
  48. package/src/lib/components/LiveCollaborators.tsx +3 -1
  49. package/src/lib/components/Shape.tsx +22 -10
  50. package/src/lib/components/default-components/DefaultSelectionForeground.tsx +4 -1
  51. package/src/lib/editor/Editor.ts +12 -5
  52. package/src/lib/editor/managers/TextManager.ts +9 -17
  53. package/src/lib/editor/shapes/ShapeUtil.ts +1 -1
  54. package/src/lib/exports/FontEmbedder.ts +2 -1
  55. package/src/lib/hooks/useEvent.tsx +29 -0
  56. package/src/version.ts +3 -3
@@ -1,3 +1,4 @@
1
+ import { useAtom } from '@tldraw/state-react'
1
2
  import { assert } from '@tldraw/utils'
2
3
  import { useCallback, useDebugValue, useLayoutEffect, useRef } from 'react'
3
4
 
@@ -42,3 +43,31 @@ export function useEvent<Args extends Array<unknown>, Result>(
42
43
  return fn(...args)
43
44
  }, [])
44
45
  }
46
+
47
+ /**
48
+ * like {@link useEvent}, but for use in reactive contexts - when the handler function changes, it
49
+ * will invalidate any reactive contexts that call it.
50
+ * @internal
51
+ */
52
+ export function useReactiveEvent<Args extends Array<unknown>, Result>(
53
+ handler: (...args: Args) => Result
54
+ ): (...args: Args) => Result {
55
+ const handlerAtom = useAtom<(...args: Args) => Result>('useReactiveEvent', () => handler)
56
+
57
+ // In a real implementation, this would run before layout effects
58
+ useLayoutEffect(() => {
59
+ handlerAtom.set(handler)
60
+ })
61
+
62
+ useDebugValue(handler)
63
+
64
+ return useCallback(
65
+ (...args: Args) => {
66
+ // In a real implementation, this would throw if called during render
67
+ const fn = handlerAtom.get()
68
+ assert(fn, 'fn does not exist')
69
+ return fn(...args)
70
+ },
71
+ [handlerAtom]
72
+ )
73
+ }
package/src/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.7.0-canary.e1de2a6bd6b5'
4
+ export const version = '3.7.0-canary.e9078a30a022'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2024-12-11T10:24:51.216Z',
8
- patch: '2024-12-11T10:24:51.216Z',
7
+ minor: '2025-01-07T10:43:08.697Z',
8
+ patch: '2025-01-07T10:43:08.697Z',
9
9
  }