@tldraw/editor 3.14.0-canary.a2263c31d532 → 3.14.0-canary.b477608fafb4

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 (127) hide show
  1. package/dist-cjs/index.d.ts +0 -17
  2. package/dist-cjs/index.js +8 -8
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/editor/Editor.js +19 -56
  5. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  6. package/dist-cjs/lib/editor/derivations/bindingsIndex.js +22 -22
  7. package/dist-cjs/lib/editor/derivations/bindingsIndex.js.map +2 -2
  8. package/dist-cjs/lib/editor/derivations/parentsToChildren.js +16 -16
  9. package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
  10. package/dist-cjs/lib/editor/managers/{ClickManager.js → ClickManager/ClickManager.js} +1 -1
  11. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +7 -0
  12. package/dist-cjs/lib/editor/managers/{EdgeScrollManager.js → EdgeScrollManager/EdgeScrollManager.js} +2 -2
  13. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +7 -0
  14. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +7 -0
  15. package/dist-cjs/lib/editor/managers/{FontManager.js → FontManager/FontManager.js} +5 -1
  16. package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +7 -0
  17. package/dist-cjs/lib/editor/managers/{HistoryManager.js → HistoryManager/HistoryManager.js} +64 -6
  18. package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js.map +7 -0
  19. package/dist-cjs/lib/editor/managers/{ScribbleManager.js → ScribbleManager/ScribbleManager.js} +1 -1
  20. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js.map +7 -0
  21. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +7 -0
  22. package/dist-cjs/lib/editor/managers/{TickManager.js → TickManager/TickManager.js} +1 -1
  23. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +7 -0
  24. package/dist-cjs/lib/editor/managers/{UserPreferencesManager.js → UserPreferencesManager/UserPreferencesManager.js} +1 -1
  25. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +7 -0
  26. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +1 -1
  27. package/dist-cjs/lib/exports/getSvgJsx.js.map +1 -1
  28. package/dist-cjs/lib/primitives/Box.js +33 -33
  29. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  30. package/dist-cjs/lib/utils/reorderShapes.js +11 -10
  31. package/dist-cjs/lib/utils/reorderShapes.js.map +2 -2
  32. package/dist-cjs/lib/utils/richText.js.map +1 -1
  33. package/dist-cjs/version.js +3 -3
  34. package/dist-cjs/version.js.map +1 -1
  35. package/dist-esm/index.d.mts +0 -17
  36. package/dist-esm/index.mjs +12 -8
  37. package/dist-esm/index.mjs.map +2 -2
  38. package/dist-esm/lib/editor/Editor.mjs +19 -56
  39. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  40. package/dist-esm/lib/editor/derivations/bindingsIndex.mjs +22 -22
  41. package/dist-esm/lib/editor/derivations/bindingsIndex.mjs.map +2 -2
  42. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs +16 -16
  43. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
  44. package/dist-esm/lib/editor/managers/{ClickManager.mjs → ClickManager/ClickManager.mjs} +1 -1
  45. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +7 -0
  46. package/dist-esm/lib/editor/managers/{EdgeScrollManager.mjs → EdgeScrollManager/EdgeScrollManager.mjs} +2 -2
  47. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +7 -0
  48. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +7 -0
  49. package/dist-esm/lib/editor/managers/{FontManager.mjs → FontManager/FontManager.mjs} +5 -1
  50. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +7 -0
  51. package/dist-esm/lib/editor/managers/{HistoryManager.mjs → HistoryManager/HistoryManager.mjs} +60 -2
  52. package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs.map +7 -0
  53. package/dist-esm/lib/editor/managers/{ScribbleManager.mjs → ScribbleManager/ScribbleManager.mjs} +1 -1
  54. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs.map +7 -0
  55. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +7 -0
  56. package/dist-esm/lib/editor/managers/{TickManager.mjs → TickManager/TickManager.mjs} +1 -1
  57. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +7 -0
  58. package/dist-esm/lib/editor/managers/{UserPreferencesManager.mjs → UserPreferencesManager/UserPreferencesManager.mjs} +1 -1
  59. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +7 -0
  60. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +1 -1
  61. package/dist-esm/lib/exports/getSvgJsx.mjs.map +1 -1
  62. package/dist-esm/lib/primitives/Box.mjs +33 -33
  63. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  64. package/dist-esm/lib/utils/reorderShapes.mjs +11 -10
  65. package/dist-esm/lib/utils/reorderShapes.mjs.map +2 -2
  66. package/dist-esm/lib/utils/richText.mjs.map +1 -1
  67. package/dist-esm/version.mjs +3 -3
  68. package/dist-esm/version.mjs.map +1 -1
  69. package/package.json +7 -7
  70. package/src/index.ts +13 -7
  71. package/src/lib/editor/Editor.ts +21 -58
  72. package/src/lib/editor/derivations/bindingsIndex.ts +27 -26
  73. package/src/lib/editor/derivations/parentsToChildren.ts +28 -25
  74. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +442 -0
  75. package/src/lib/editor/managers/{ClickManager.ts → ClickManager/ClickManager.ts} +3 -3
  76. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +374 -0
  77. package/src/lib/editor/managers/{EdgeScrollManager.ts → EdgeScrollManager/EdgeScrollManager.ts} +3 -3
  78. package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +455 -0
  79. package/src/lib/editor/managers/{FocusManager.ts → FocusManager/FocusManager.ts} +1 -1
  80. package/src/lib/editor/managers/FontManager/FontManager.test.ts +263 -0
  81. package/src/lib/editor/managers/{FontManager.ts → FontManager/FontManager.ts} +6 -2
  82. package/src/lib/editor/managers/{HistoryManager.test.ts → HistoryManager/HistoryManager.test.ts} +388 -1
  83. package/src/lib/editor/managers/{HistoryManager.ts → HistoryManager/HistoryManager.ts} +73 -2
  84. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +624 -0
  85. package/src/lib/editor/managers/{ScribbleManager.ts → ScribbleManager/ScribbleManager.ts} +2 -2
  86. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +485 -0
  87. package/src/lib/editor/managers/TextManager/TextManager.test.ts +411 -0
  88. package/src/lib/editor/managers/{TextManager.ts → TextManager/TextManager.ts} +1 -1
  89. package/src/lib/editor/managers/TickManager/TickManager.test.ts +314 -0
  90. package/src/lib/editor/managers/{TickManager.ts → TickManager/TickManager.ts} +2 -2
  91. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +591 -0
  92. package/src/lib/editor/managers/{UserPreferencesManager.ts → UserPreferencesManager/UserPreferencesManager.ts} +2 -2
  93. package/src/lib/editor/shapes/ShapeUtil.ts +1 -1
  94. package/src/lib/exports/getSvgJsx.tsx +1 -1
  95. package/src/lib/primitives/Box.test.ts +588 -7
  96. package/src/lib/primitives/Box.ts +33 -33
  97. package/src/lib/utils/reorderShapes.ts +10 -13
  98. package/src/lib/utils/richText.ts +1 -1
  99. package/src/version.ts +3 -3
  100. package/dist-cjs/lib/editor/managers/ClickManager.js.map +0 -7
  101. package/dist-cjs/lib/editor/managers/EdgeScrollManager.js.map +0 -7
  102. package/dist-cjs/lib/editor/managers/FocusManager.js.map +0 -7
  103. package/dist-cjs/lib/editor/managers/FontManager.js.map +0 -7
  104. package/dist-cjs/lib/editor/managers/HistoryManager.js.map +0 -7
  105. package/dist-cjs/lib/editor/managers/ScribbleManager.js.map +0 -7
  106. package/dist-cjs/lib/editor/managers/Stack.js +0 -82
  107. package/dist-cjs/lib/editor/managers/Stack.js.map +0 -7
  108. package/dist-cjs/lib/editor/managers/TextManager.js.map +0 -7
  109. package/dist-cjs/lib/editor/managers/TickManager.js.map +0 -7
  110. package/dist-cjs/lib/editor/managers/UserPreferencesManager.js.map +0 -7
  111. package/dist-esm/lib/editor/managers/ClickManager.mjs.map +0 -7
  112. package/dist-esm/lib/editor/managers/EdgeScrollManager.mjs.map +0 -7
  113. package/dist-esm/lib/editor/managers/FocusManager.mjs.map +0 -7
  114. package/dist-esm/lib/editor/managers/FontManager.mjs.map +0 -7
  115. package/dist-esm/lib/editor/managers/HistoryManager.mjs.map +0 -7
  116. package/dist-esm/lib/editor/managers/ScribbleManager.mjs.map +0 -7
  117. package/dist-esm/lib/editor/managers/Stack.mjs +0 -62
  118. package/dist-esm/lib/editor/managers/Stack.mjs.map +0 -7
  119. package/dist-esm/lib/editor/managers/TextManager.mjs.map +0 -7
  120. package/dist-esm/lib/editor/managers/TickManager.mjs.map +0 -7
  121. package/dist-esm/lib/editor/managers/UserPreferencesManager.mjs.map +0 -7
  122. package/src/lib/editor/managers/ScribbleManager.test.ts +0 -32
  123. package/src/lib/editor/managers/Stack.ts +0 -71
  124. /package/dist-cjs/lib/editor/managers/{FocusManager.js → FocusManager/FocusManager.js} +0 -0
  125. /package/dist-cjs/lib/editor/managers/{TextManager.js → TextManager/TextManager.js} +0 -0
  126. /package/dist-esm/lib/editor/managers/{FocusManager.mjs → FocusManager/FocusManager.mjs} +0 -0
  127. /package/dist-esm/lib/editor/managers/{TextManager.mjs → TextManager/TextManager.mjs} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/utils/richText.ts"],
4
- "sourcesContent": ["import { getSchema, JSONContent, Editor as TTEditor } from '@tiptap/core'\nimport { Node } from '@tiptap/pm/model'\nimport { EditorProviderProps } from '@tiptap/react'\nimport { TLRichText } from '@tldraw/tlschema'\nimport { assert } from '@tldraw/utils'\nimport { Editor } from '../editor/Editor'\nimport { TLFontFace } from '../editor/managers/FontManager'\n\n/**\n * This is the TipTap editor! Docs are {@link https://tiptap.dev/docs}.\n *\n * @public\n */\nexport type TiptapEditor = TTEditor\n\n/**\n * A TipTap node. See {@link https://tiptap.dev/docs}.\n * @public\n */\nexport type TiptapNode = Node\n\n/** @public */\nexport interface TLTextOptions {\n\ttipTapConfig?: EditorProviderProps\n\taddFontsFromNode?: RichTextFontVisitor\n}\n\n/** @public */\nexport interface RichTextFontVisitorState {\n\treadonly family: string\n\treadonly weight: string\n\treadonly style: string\n}\n\n/** @public */\nexport type RichTextFontVisitor = (\n\tnode: TiptapNode,\n\tstate: RichTextFontVisitorState,\n\taddFont: (font: TLFontFace) => void\n) => RichTextFontVisitorState\n\n/** @public */\nexport function getFontsFromRichText(\n\teditor: Editor,\n\trichText: TLRichText,\n\tinitialState: RichTextFontVisitorState\n) {\n\tconst { tipTapConfig, addFontsFromNode } = editor.getTextOptions()\n\tassert(tipTapConfig, 'textOptions.tipTapConfig must be set to use rich text')\n\tassert(addFontsFromNode, 'textOptions.addFontsFromNode must be set to use rich text')\n\n\tconst schema = getSchema(tipTapConfig.extensions ?? [])\n\tconst rootNode = Node.fromJSON(schema, richText as JSONContent)\n\n\tconst fonts = new Set<TLFontFace>()\n\n\tfunction addFont(font: TLFontFace) {\n\t\tfonts.add(font)\n\t}\n\n\tfunction visit(node: TiptapNode, state: RichTextFontVisitorState) {\n\t\tstate = addFontsFromNode!(node, state, addFont)\n\n\t\tfor (const child of node.children) {\n\t\t\tvisit(child, state)\n\t\t}\n\t}\n\n\tvisit(rootNode, initialState)\n\n\treturn Array.from(fonts)\n}\n"],
4
+ "sourcesContent": ["import { getSchema, JSONContent, Editor as TTEditor } from '@tiptap/core'\nimport { Node } from '@tiptap/pm/model'\nimport { EditorProviderProps } from '@tiptap/react'\nimport { TLRichText } from '@tldraw/tlschema'\nimport { assert } from '@tldraw/utils'\nimport { Editor } from '../editor/Editor'\nimport { TLFontFace } from '../editor/managers/FontManager/FontManager'\n\n/**\n * This is the TipTap editor! Docs are {@link https://tiptap.dev/docs}.\n *\n * @public\n */\nexport type TiptapEditor = TTEditor\n\n/**\n * A TipTap node. See {@link https://tiptap.dev/docs}.\n * @public\n */\nexport type TiptapNode = Node\n\n/** @public */\nexport interface TLTextOptions {\n\ttipTapConfig?: EditorProviderProps\n\taddFontsFromNode?: RichTextFontVisitor\n}\n\n/** @public */\nexport interface RichTextFontVisitorState {\n\treadonly family: string\n\treadonly weight: string\n\treadonly style: string\n}\n\n/** @public */\nexport type RichTextFontVisitor = (\n\tnode: TiptapNode,\n\tstate: RichTextFontVisitorState,\n\taddFont: (font: TLFontFace) => void\n) => RichTextFontVisitorState\n\n/** @public */\nexport function getFontsFromRichText(\n\teditor: Editor,\n\trichText: TLRichText,\n\tinitialState: RichTextFontVisitorState\n) {\n\tconst { tipTapConfig, addFontsFromNode } = editor.getTextOptions()\n\tassert(tipTapConfig, 'textOptions.tipTapConfig must be set to use rich text')\n\tassert(addFontsFromNode, 'textOptions.addFontsFromNode must be set to use rich text')\n\n\tconst schema = getSchema(tipTapConfig.extensions ?? [])\n\tconst rootNode = Node.fromJSON(schema, richText as JSONContent)\n\n\tconst fonts = new Set<TLFontFace>()\n\n\tfunction addFont(font: TLFontFace) {\n\t\tfonts.add(font)\n\t}\n\n\tfunction visit(node: TiptapNode, state: RichTextFontVisitorState) {\n\t\tstate = addFontsFromNode!(node, state, addFont)\n\n\t\tfor (const child of node.children) {\n\t\t\tvisit(child, state)\n\t\t}\n\t}\n\n\tvisit(rootNode, initialState)\n\n\treturn Array.from(fonts)\n}\n"],
5
5
  "mappings": "AAAA,SAAS,iBAAkD;AAC3D,SAAS,YAAY;AAGrB,SAAS,cAAc;AAsChB,SAAS,qBACf,QACA,UACA,cACC;AACD,QAAM,EAAE,cAAc,iBAAiB,IAAI,OAAO,eAAe;AACjE,SAAO,cAAc,uDAAuD;AAC5E,SAAO,kBAAkB,2DAA2D;AAEpF,QAAM,SAAS,UAAU,aAAa,cAAc,CAAC,CAAC;AACtD,QAAM,WAAW,KAAK,SAAS,QAAQ,QAAuB;AAE9D,QAAM,QAAQ,oBAAI,IAAgB;AAElC,WAAS,QAAQ,MAAkB;AAClC,UAAM,IAAI,IAAI;AAAA,EACf;AAEA,WAAS,MAAM,MAAkB,OAAiC;AACjE,YAAQ,iBAAkB,MAAM,OAAO,OAAO;AAE9C,eAAW,SAAS,KAAK,UAAU;AAClC,YAAM,OAAO,KAAK;AAAA,IACnB;AAAA,EACD;AAEA,QAAM,UAAU,YAAY;AAE5B,SAAO,MAAM,KAAK,KAAK;AACxB;",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,8 @@
1
- const version = "3.14.0-canary.a2263c31d532";
1
+ const version = "3.14.0-canary.b477608fafb4";
2
2
  const publishDates = {
3
3
  major: "2024-09-13T14:36:29.063Z",
4
- minor: "2025-06-03T15:55:11.843Z",
5
- patch: "2025-06-03T15:55:11.843Z"
4
+ minor: "2025-06-07T18:16:19.438Z",
5
+ patch: "2025-06-07T18:16:19.438Z"
6
6
  };
7
7
  export {
8
8
  publishDates,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/version.ts"],
4
- "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '3.14.0-canary.a2263c31d532'\nexport const publishDates = {\n\tmajor: '2024-09-13T14:36:29.063Z',\n\tminor: '2025-06-03T15:55:11.843Z',\n\tpatch: '2025-06-03T15:55:11.843Z',\n}\n"],
4
+ "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '3.14.0-canary.b477608fafb4'\nexport const publishDates = {\n\tmajor: '2024-09-13T14:36:29.063Z',\n\tminor: '2025-06-07T18:16:19.438Z',\n\tpatch: '2025-06-07T18:16:19.438Z',\n}\n"],
5
5
  "mappings": "AAGO,MAAM,UAAU;AAChB,MAAM,eAAe;AAAA,EAC3B,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACR;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tldraw/editor",
3
3
  "description": "A tiny little drawing app (editor).",
4
- "version": "3.14.0-canary.a2263c31d532",
4
+ "version": "3.14.0-canary.b477608fafb4",
5
5
  "author": {
6
6
  "name": "tldraw Inc.",
7
7
  "email": "hello@tldraw.com"
@@ -48,12 +48,12 @@
48
48
  "@tiptap/core": "^2.9.1",
49
49
  "@tiptap/pm": "^2.9.1",
50
50
  "@tiptap/react": "^2.9.1",
51
- "@tldraw/state": "3.14.0-canary.a2263c31d532",
52
- "@tldraw/state-react": "3.14.0-canary.a2263c31d532",
53
- "@tldraw/store": "3.14.0-canary.a2263c31d532",
54
- "@tldraw/tlschema": "3.14.0-canary.a2263c31d532",
55
- "@tldraw/utils": "3.14.0-canary.a2263c31d532",
56
- "@tldraw/validate": "3.14.0-canary.a2263c31d532",
51
+ "@tldraw/state": "3.14.0-canary.b477608fafb4",
52
+ "@tldraw/state-react": "3.14.0-canary.b477608fafb4",
53
+ "@tldraw/store": "3.14.0-canary.b477608fafb4",
54
+ "@tldraw/tlschema": "3.14.0-canary.b477608fafb4",
55
+ "@tldraw/utils": "3.14.0-canary.b477608fafb4",
56
+ "@tldraw/validate": "3.14.0-canary.b477608fafb4",
57
57
  "@types/core-js": "^2.5.8",
58
58
  "@use-gesture/react": "^10.3.1",
59
59
  "classnames": "^2.5.1",
package/src/index.ts CHANGED
@@ -148,15 +148,18 @@ export {
148
148
  type BindingOnShapeIsolateOptions,
149
149
  type TLBindingUtilConstructor,
150
150
  } from './lib/editor/bindings/BindingUtil'
151
- export { ClickManager, type TLClickState } from './lib/editor/managers/ClickManager'
152
- export { EdgeScrollManager } from './lib/editor/managers/EdgeScrollManager'
151
+ export { ClickManager, type TLClickState } from './lib/editor/managers/ClickManager/ClickManager'
152
+ export { EdgeScrollManager } from './lib/editor/managers/EdgeScrollManager/EdgeScrollManager'
153
153
  export {
154
154
  FontManager,
155
155
  type TLFontFace,
156
156
  type TLFontFaceSource,
157
- } from './lib/editor/managers/FontManager'
158
- export { HistoryManager } from './lib/editor/managers/HistoryManager'
159
- export { ScribbleManager, type ScribbleItem } from './lib/editor/managers/ScribbleManager'
157
+ } from './lib/editor/managers/FontManager/FontManager'
158
+ export { HistoryManager } from './lib/editor/managers/HistoryManager/HistoryManager'
159
+ export {
160
+ ScribbleManager,
161
+ type ScribbleItem,
162
+ } from './lib/editor/managers/ScribbleManager/ScribbleManager'
160
163
  export {
161
164
  BoundsSnaps,
162
165
  type BoundsSnapGeometry,
@@ -170,8 +173,11 @@ export {
170
173
  type SnapData,
171
174
  type SnapIndicator,
172
175
  } from './lib/editor/managers/SnapManager/SnapManager'
173
- export { TextManager, type TLMeasureTextSpanOpts } from './lib/editor/managers/TextManager'
174
- export { UserPreferencesManager } from './lib/editor/managers/UserPreferencesManager'
176
+ export {
177
+ TextManager,
178
+ type TLMeasureTextSpanOpts,
179
+ } from './lib/editor/managers/TextManager/TextManager'
180
+ export { UserPreferencesManager } from './lib/editor/managers/UserPreferencesManager/UserPreferencesManager'
175
181
  export { BaseBoxShapeUtil, type TLBaseBoxShape } from './lib/editor/shapes/BaseBoxShapeUtil'
176
182
  export {
177
183
  ShapeUtil,
@@ -148,16 +148,16 @@ import { bindingsIndex } from './derivations/bindingsIndex'
148
148
  import { notVisibleShapes } from './derivations/notVisibleShapes'
149
149
  import { parentsToChildren } from './derivations/parentsToChildren'
150
150
  import { deriveShapeIdsInCurrentPage } from './derivations/shapeIdsInCurrentPage'
151
- import { ClickManager } from './managers/ClickManager'
152
- import { EdgeScrollManager } from './managers/EdgeScrollManager'
153
- import { FocusManager } from './managers/FocusManager'
154
- import { FontManager } from './managers/FontManager'
155
- import { HistoryManager } from './managers/HistoryManager'
156
- import { ScribbleManager } from './managers/ScribbleManager'
151
+ import { ClickManager } from './managers/ClickManager/ClickManager'
152
+ import { EdgeScrollManager } from './managers/EdgeScrollManager/EdgeScrollManager'
153
+ import { FocusManager } from './managers/FocusManager/FocusManager'
154
+ import { FontManager } from './managers/FontManager/FontManager'
155
+ import { HistoryManager } from './managers/HistoryManager/HistoryManager'
156
+ import { ScribbleManager } from './managers/ScribbleManager/ScribbleManager'
157
157
  import { SnapManager } from './managers/SnapManager/SnapManager'
158
- import { TextManager } from './managers/TextManager'
159
- import { TickManager } from './managers/TickManager'
160
- import { UserPreferencesManager } from './managers/UserPreferencesManager'
158
+ import { TextManager } from './managers/TextManager/TextManager'
159
+ import { TickManager } from './managers/TickManager/TickManager'
160
+ import { UserPreferencesManager } from './managers/UserPreferencesManager/UserPreferencesManager'
161
161
  import { ShapeUtil, TLGeometryOpts, TLResizeMode } from './shapes/ShapeUtil'
162
162
  import { RootState } from './tools/RootState'
163
163
  import { StateNode, TLStateNodeConstructor } from './tools/StateNode'
@@ -328,7 +328,7 @@ export class Editor extends EventEmitter<TLEventMap> {
328
328
  this.store = store
329
329
  this.history = new HistoryManager<TLRecord>({
330
330
  store,
331
- annotateError: (error) => {
331
+ annotateError: (error: any) => {
332
332
  this.annotateError(error, { origin: 'history.batch', willCrashApp: true })
333
333
  this.crash(error)
334
334
  },
@@ -3717,10 +3717,7 @@ export class Editor extends EventEmitter<TLEventMap> {
3717
3717
  */
3718
3718
  @computed getViewportScreenCenter() {
3719
3719
  const viewportScreenBounds = this.getViewportScreenBounds()
3720
- return new Vec(
3721
- viewportScreenBounds.midX - viewportScreenBounds.minX,
3722
- viewportScreenBounds.midY - viewportScreenBounds.minY
3723
- )
3720
+ return new Vec(viewportScreenBounds.w / 2, viewportScreenBounds.h / 2)
3724
3721
  }
3725
3722
 
3726
3723
  /**
@@ -4646,44 +4643,6 @@ export class Editor extends EventEmitter<TLEventMap> {
4646
4643
  )! as T
4647
4644
  }
4648
4645
 
4649
- private _shapePageGeometryCaches: Record<string, ComputedCache<Geometry2d, TLShape>> = {}
4650
-
4651
- /**
4652
- * Get the geometry of a shape in page-space.
4653
- *
4654
- * @example
4655
- * ```ts
4656
- * editor.getShapePageGeometry(myShape)
4657
- * editor.getShapePageGeometry(myShapeId)
4658
- * editor.getShapePageGeometry(myShapeId, { context: "arrow" })
4659
- * ```
4660
- *
4661
- * @param shape - The shape (or shape id) to get the geometry for.
4662
- * @param opts - Additional options about the request for geometry. Passed to {@link ShapeUtil.getGeometry}.
4663
- *
4664
- * @public
4665
- */
4666
- getShapePageGeometry<T extends Geometry2d>(shape: TLShape | TLShapeId, opts?: TLGeometryOpts): T {
4667
- const context = opts?.context ?? 'none'
4668
- if (!this._shapePageGeometryCaches[context]) {
4669
- this._shapePageGeometryCaches[context] = this.store.createComputedCache(
4670
- 'bounds',
4671
- (shape) => {
4672
- const geometry = this.getShapeGeometry(shape.id, opts)
4673
- const pageTransform = this.getShapePageTransform(shape.id)
4674
- return geometry.transform(pageTransform)
4675
- },
4676
- {
4677
- // we only depend directly on the shape id, and changing geometry/transform will update us anyway
4678
- areRecordsEqual: () => true,
4679
- }
4680
- )
4681
- }
4682
- return this._shapePageGeometryCaches[context].get(
4683
- typeof shape === 'string' ? shape : shape.id
4684
- )! as T
4685
- }
4686
-
4687
4646
  /** @internal */
4688
4647
  @computed private _getShapeHandlesCache(): ComputedCache<TLHandle[] | undefined, TLShape> {
4689
4648
  return this.store.createComputedCache(
@@ -4796,7 +4755,10 @@ export class Editor extends EventEmitter<TLEventMap> {
4796
4755
  /** @internal */
4797
4756
  @computed private _getShapePageBoundsCache(): ComputedCache<Box, TLShape> {
4798
4757
  return this.store.createComputedCache<Box, TLShape>('pageBoundsCache', (shape) => {
4799
- return this.getShapePageGeometry(shape).bounds
4758
+ const pageTransform = this.getShapePageTransform(shape)
4759
+ if (!pageTransform) return undefined
4760
+ const geometry = this.getShapeGeometry(shape)
4761
+ return Box.FromPoints(pageTransform.applyToPoints(geometry.vertices))
4800
4762
  })
4801
4763
  }
4802
4764
 
@@ -4870,11 +4832,12 @@ export class Editor extends EventEmitter<TLEventMap> {
4870
4832
  if (frameAncestors.length === 0) return undefined
4871
4833
 
4872
4834
  const pageMask = frameAncestors
4873
- .map<Vec[] | undefined>(
4874
- (s) =>
4875
- // Apply the frame transform to the frame outline to get the frame outline in the current page space
4876
- this.getShapePageGeometry(s.id).vertices
4877
- )
4835
+ .map<Vec[] | undefined>((s) => {
4836
+ // Apply the frame transform to the frame outline to get the frame outline in the current page space
4837
+ const geometry = this.getShapeGeometry(s.id)
4838
+ const pageTransform = this.getShapePageTransform(s.id)
4839
+ return pageTransform.applyToPoints(geometry.vertices)
4840
+ })
4878
4841
  .reduce((acc, b) => {
4879
4842
  if (!(b && acc)) return undefined
4880
4843
  const intersection = intersectPolygonPolygon(acc, b)
@@ -1,41 +1,42 @@
1
1
  import { Computed, RESET_VALUE, computed, isUninitialized } from '@tldraw/state'
2
- import { TLBinding, TLShapeId } from '@tldraw/tlschema'
2
+ import { TLArrowBinding, TLBinding, TLShapeId, TLUnknownBinding } from '@tldraw/tlschema'
3
3
  import { objectMapValues } from '@tldraw/utils'
4
4
  import { Editor } from '../Editor'
5
5
 
6
6
  type TLBindingsIndex = Map<TLShapeId, TLBinding[]>
7
7
 
8
- export const bindingsIndex = (editor: Editor): Computed<TLBindingsIndex> => {
9
- const { store } = editor
10
- const bindingsHistory = store.query.filterHistory('binding')
11
- const bindingsQuery = store.query.records('binding')
12
- function fromScratch() {
13
- const allBindings = bindingsQuery.get() as TLBinding[]
8
+ function fromScratch(bindingsQuery: Computed<(TLArrowBinding | TLUnknownBinding)[], unknown>) {
9
+ const allBindings = bindingsQuery.get() as TLBinding[]
14
10
 
15
- const shape2Binding: TLBindingsIndex = new Map()
11
+ const shapesToBindings: TLBindingsIndex = new Map()
16
12
 
17
- for (const binding of allBindings) {
18
- const { fromId, toId } = binding
19
- const bindingsForFromShape = shape2Binding.get(fromId)
20
- if (!bindingsForFromShape) {
21
- shape2Binding.set(fromId, [binding])
22
- } else {
23
- bindingsForFromShape.push(binding)
24
- }
25
- const bindingsForToShape = shape2Binding.get(toId)
26
- if (!bindingsForToShape) {
27
- shape2Binding.set(toId, [binding])
28
- } else {
29
- bindingsForToShape.push(binding)
30
- }
13
+ for (const binding of allBindings) {
14
+ const { fromId, toId } = binding
15
+ const bindingsForFromShape = shapesToBindings.get(fromId)
16
+ if (!bindingsForFromShape) {
17
+ shapesToBindings.set(fromId, [binding])
18
+ } else {
19
+ bindingsForFromShape.push(binding)
20
+ }
21
+ const bindingsForToShape = shapesToBindings.get(toId)
22
+ if (!bindingsForToShape) {
23
+ shapesToBindings.set(toId, [binding])
24
+ } else {
25
+ bindingsForToShape.push(binding)
31
26
  }
32
-
33
- return shape2Binding
34
27
  }
35
28
 
29
+ return shapesToBindings
30
+ }
31
+
32
+ export const bindingsIndex = (editor: Editor): Computed<TLBindingsIndex> => {
33
+ const { store } = editor
34
+ const bindingsHistory = store.query.filterHistory('binding')
35
+ const bindingsQuery = store.query.records('binding')
36
+
36
37
  return computed<TLBindingsIndex>('arrowBindingsIndex', (_lastValue, lastComputedEpoch) => {
37
38
  if (isUninitialized(_lastValue)) {
38
- return fromScratch()
39
+ return fromScratch(bindingsQuery)
39
40
  }
40
41
 
41
42
  const lastValue = _lastValue
@@ -43,7 +44,7 @@ export const bindingsIndex = (editor: Editor): Computed<TLBindingsIndex> => {
43
44
  const diff = bindingsHistory.getDiffSince(lastComputedEpoch)
44
45
 
45
46
  if (diff === RESET_VALUE) {
46
- return fromScratch()
47
+ return fromScratch(bindingsQuery)
47
48
  }
48
49
 
49
50
  let nextValue: TLBindingsIndex | undefined = undefined
@@ -1,45 +1,48 @@
1
- import { computed, isUninitialized, RESET_VALUE } from '@tldraw/state'
2
- import { RecordsDiff } from '@tldraw/store'
1
+ import { Computed, computed, isUninitialized, RESET_VALUE } from '@tldraw/state'
2
+ import { CollectionDiff, RecordsDiff } from '@tldraw/store'
3
3
  import { isShape, TLParentId, TLRecord, TLShape, TLShapeId, TLStore } from '@tldraw/tlschema'
4
4
  import { compact, sortByIndex } from '@tldraw/utils'
5
5
 
6
- type Parents2Children = Record<TLParentId, TLShapeId[]>
6
+ type ParentShapeIdsToChildShapeIds = Record<TLParentId, TLShapeId[]>
7
7
 
8
- export const parentsToChildren = (store: TLStore) => {
9
- const shapeIdsQuery = store.query.ids<'shape'>('shape')
10
- const shapeHistory = store.query.filterHistory('shape')
8
+ function fromScratch(
9
+ shapeIdsQuery: Computed<Set<TLShapeId>, CollectionDiff<TLShapeId>>,
10
+ store: TLStore
11
+ ) {
12
+ const result: ParentShapeIdsToChildShapeIds = {}
13
+ const shapeIds = shapeIdsQuery.get()
14
+ const shapes = Array(shapeIds.size) as TLShape[]
15
+ shapeIds.forEach((id) => shapes.push(store.get(id)!))
11
16
 
12
- function fromScratch() {
13
- const result: Parents2Children = {}
14
- const shapeIds = shapeIdsQuery.get()
15
- const shapes = Array(shapeIds.size) as TLShape[]
16
- shapeIds.forEach((id) => shapes.push(store.get(id)!))
17
+ // Sort the shapes by index
18
+ shapes.sort(sortByIndex)
17
19
 
18
- // Sort the shapes by index
19
- shapes.sort(sortByIndex)
20
+ // Populate the result object with an array for each parent.
21
+ shapes.forEach((shape) => {
22
+ if (!result[shape.parentId]) {
23
+ result[shape.parentId] = []
24
+ }
25
+ result[shape.parentId].push(shape.id)
26
+ })
20
27
 
21
- // Populate the result object with an array for each parent.
22
- shapes.forEach((shape) => {
23
- if (!result[shape.parentId]) {
24
- result[shape.parentId] = []
25
- }
26
- result[shape.parentId].push(shape.id)
27
- })
28
+ return result
29
+ }
28
30
 
29
- return result
30
- }
31
+ export const parentsToChildren = (store: TLStore) => {
32
+ const shapeIdsQuery = store.query.ids<'shape'>('shape')
33
+ const shapeHistory = store.query.filterHistory('shape')
31
34
 
32
- return computed<Parents2Children>(
35
+ return computed<ParentShapeIdsToChildShapeIds>(
33
36
  'parentsToChildrenWithIndexes',
34
37
  (lastValue, lastComputedEpoch) => {
35
38
  if (isUninitialized(lastValue)) {
36
- return fromScratch()
39
+ return fromScratch(shapeIdsQuery, store)
37
40
  }
38
41
 
39
42
  const diff = shapeHistory.getDiffSince(lastComputedEpoch)
40
43
 
41
44
  if (diff === RESET_VALUE) {
42
- return fromScratch()
45
+ return fromScratch(shapeIdsQuery, store)
43
46
  }
44
47
 
45
48
  if (diff.length === 0) return lastValue