@yuzhouu/canvas-kit 0.1.2

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 (263) hide show
  1. package/README.md +145 -0
  2. package/_vendor/canvas-core/bindings/BindingUtil.ts +92 -0
  3. package/_vendor/canvas-core/bindings/BindingUtilRegistry.ts +22 -0
  4. package/_vendor/canvas-core/bindings/arrow/arrowBindingHelpers.ts +52 -0
  5. package/_vendor/canvas-core/contextMenu.ts +85 -0
  6. package/_vendor/canvas-core/editor/Editor.ts +2614 -0
  7. package/_vendor/canvas-core/editor/HistoryManager.ts +83 -0
  8. package/_vendor/canvas-core/editor/StateNode.ts +162 -0
  9. package/_vendor/canvas-core/editor/camera.ts +6 -0
  10. package/_vendor/canvas-core/editor/clipboard.ts +478 -0
  11. package/_vendor/canvas-core/editor/commands.ts +833 -0
  12. package/_vendor/canvas-core/editor/edgeScroll.ts +37 -0
  13. package/_vendor/canvas-core/editor/editorComputedHelpers.ts +257 -0
  14. package/_vendor/canvas-core/editor/editorSelectionTransforms.ts +116 -0
  15. package/_vendor/canvas-core/editor/events.ts +93 -0
  16. package/_vendor/canvas-core/editor/index.ts +12 -0
  17. package/_vendor/canvas-core/editor/interactions.ts +101 -0
  18. package/_vendor/canvas-core/editor/internal.ts +22 -0
  19. package/_vendor/canvas-core/editor/managers/BindingManager.ts +262 -0
  20. package/_vendor/canvas-core/editor/managers/CameraManager.ts +147 -0
  21. package/_vendor/canvas-core/editor/managers/ClipboardManager.ts +32 -0
  22. package/_vendor/canvas-core/editor/managers/DocumentSnapshotManager.ts +256 -0
  23. package/_vendor/canvas-core/editor/managers/InputsManager.ts +319 -0
  24. package/_vendor/canvas-core/editor/managers/InteractionTransientManager.ts +218 -0
  25. package/_vendor/canvas-core/editor/managers/QueryManager.ts +837 -0
  26. package/_vendor/canvas-core/editor/managers/RenderWindowManager.ts +347 -0
  27. package/_vendor/canvas-core/editor/managers/SelectionLayoutManager.ts +196 -0
  28. package/_vendor/canvas-core/editor/managers/SelectionManager.ts +98 -0
  29. package/_vendor/canvas-core/editor/managers/SelectionOverlayManager.ts +308 -0
  30. package/_vendor/canvas-core/editor/managers/ShapeEditingManager.ts +226 -0
  31. package/_vendor/canvas-core/editor/managers/ShapeGeometryManager.ts +162 -0
  32. package/_vendor/canvas-core/editor/managers/ShapeHierarchyManager.ts +797 -0
  33. package/_vendor/canvas-core/editor/managers/SideEffectManager.ts +83 -0
  34. package/_vendor/canvas-core/editor/managers/SnapManager.ts +433 -0
  35. package/_vendor/canvas-core/editor/managers/SnapSnapshotBuilder.ts +430 -0
  36. package/_vendor/canvas-core/editor/managers/SpatialIndexManager.ts +354 -0
  37. package/_vendor/canvas-core/editor/managers/ToolManager.ts +81 -0
  38. package/_vendor/canvas-core/editor/managers/queryState.ts +583 -0
  39. package/_vendor/canvas-core/editor/managers/selectionGeometry.ts +287 -0
  40. package/_vendor/canvas-core/editor/managers/shapeOrder.ts +350 -0
  41. package/_vendor/canvas-core/editor/managers/shapeReparenting.ts +160 -0
  42. package/_vendor/canvas-core/editor/managers/snapCalculations.ts +412 -0
  43. package/_vendor/canvas-core/editor/managers/snapGeometry.ts +202 -0
  44. package/_vendor/canvas-core/editor/managers/snapIndicators.ts +403 -0
  45. package/_vendor/canvas-core/editor/managers/snapTypes.ts +122 -0
  46. package/_vendor/canvas-core/editor/queries/shapeTransforms.ts +171 -0
  47. package/_vendor/canvas-core/editor/renderWindow.ts +439 -0
  48. package/_vendor/canvas-core/editor/resizeGeometry.ts +654 -0
  49. package/_vendor/canvas-core/editor/selection.ts +489 -0
  50. package/_vendor/canvas-core/editor/selectionHandleInteractions.ts +43 -0
  51. package/_vendor/canvas-core/editor/selectionOverlay.ts +567 -0
  52. package/_vendor/canvas-core/exports/integrity.ts +174 -0
  53. package/_vendor/canvas-core/exports/svg.ts +494 -0
  54. package/_vendor/canvas-core/geometry/Box.ts +80 -0
  55. package/_vendor/canvas-core/geometry/Ellipse2d.ts +67 -0
  56. package/_vendor/canvas-core/geometry/Geometry2d.ts +52 -0
  57. package/_vendor/canvas-core/geometry/Mat.ts +92 -0
  58. package/_vendor/canvas-core/geometry/Polyline2d.ts +63 -0
  59. package/_vendor/canvas-core/geometry/Rectangle2d.ts +64 -0
  60. package/_vendor/canvas-core/geometry/Vec.ts +123 -0
  61. package/_vendor/canvas-core/geometry/index.ts +13 -0
  62. package/_vendor/canvas-core/geometry/segments.ts +65 -0
  63. package/_vendor/canvas-core/index.ts +391 -0
  64. package/_vendor/canvas-core/plugins/index.ts +5 -0
  65. package/_vendor/canvas-core/plugins/types.ts +53 -0
  66. package/_vendor/canvas-core/reactivity.ts +16 -0
  67. package/_vendor/canvas-core/schema/records.ts +221 -0
  68. package/_vendor/canvas-core/schema/snapshots.ts +527 -0
  69. package/_vendor/canvas-core/shapes/ShapeUtil.ts +516 -0
  70. package/_vendor/canvas-core/shapes/ShapeUtilRegistry.ts +26 -0
  71. package/_vendor/canvas-core/shapes/capabilities.ts +67 -0
  72. package/_vendor/canvas-core/shapes/types.ts +20 -0
  73. package/_vendor/canvas-core/toolbar.ts +148 -0
  74. package/_vendor/canvas-core/tools/hand/HandTool.ts +75 -0
  75. package/_vendor/canvas-core/tools/index.ts +2 -0
  76. package/_vendor/canvas-core/tools/select/SelectTool.ts +33 -0
  77. package/_vendor/canvas-core/tools/select/selectContainment.ts +104 -0
  78. package/_vendor/canvas-core/tools/select/selectToolHelpers.ts +801 -0
  79. package/_vendor/canvas-core/tools/select/states/BrushingState.ts +145 -0
  80. package/_vendor/canvas-core/tools/select/states/DraggingSelectionHandleInteractionState.ts +116 -0
  81. package/_vendor/canvas-core/tools/select/states/IdleState.ts +159 -0
  82. package/_vendor/canvas-core/tools/select/states/PointingCanvasState.ts +41 -0
  83. package/_vendor/canvas-core/tools/select/states/PointingResizeHandleState.ts +78 -0
  84. package/_vendor/canvas-core/tools/select/states/PointingRotateHandleState.ts +64 -0
  85. package/_vendor/canvas-core/tools/select/states/PointingSelectionHandleInteractionState.ts +34 -0
  86. package/_vendor/canvas-core/tools/select/states/PointingShapeState.ts +140 -0
  87. package/_vendor/canvas-core/tools/select/states/ResizingState.ts +171 -0
  88. package/_vendor/canvas-core/tools/select/states/RotatingState.ts +124 -0
  89. package/_vendor/canvas-core/tools/select/states/SelectStateNode.ts +128 -0
  90. package/_vendor/canvas-core/tools/select/states/TranslatingState.ts +139 -0
  91. package/_vendor/canvas-core/tools/select/states/index.ts +11 -0
  92. package/_vendor/canvas-plugin-api/feature.ts +204 -0
  93. package/_vendor/canvas-plugin-api/index.ts +142 -0
  94. package/_vendor/canvas-product-react/api/apiRegistry.ts +35 -0
  95. package/_vendor/canvas-product-react/api/canvasProductApi.ts +422 -0
  96. package/_vendor/canvas-product-react/api/index.ts +31 -0
  97. package/_vendor/canvas-product-react/capabilities/clipboard/clipboardService.ts +36 -0
  98. package/_vendor/canvas-product-react/capabilities/clipboard/systemClipboard.ts +245 -0
  99. package/_vendor/canvas-product-react/capabilities/context-menu/systemContextMenu.ts +396 -0
  100. package/_vendor/canvas-product-react/capabilities/context-menu/useContextMenuSurface.ts +59 -0
  101. package/_vendor/canvas-product-react/capabilities/export/useSvgExport.ts +156 -0
  102. package/_vendor/canvas-product-react/capabilities/history/useHistoryControls.ts +23 -0
  103. package/_vendor/canvas-product-react/capabilities/pages/usePageControls.ts +41 -0
  104. package/_vendor/canvas-product-react/capabilities/toolbar/systemToolbar.ts +490 -0
  105. package/_vendor/canvas-product-react/capabilities/toolbar/useToolbarSurfaces.ts +92 -0
  106. package/_vendor/canvas-product-react/capabilities/zoom/useZoomControls.ts +27 -0
  107. package/_vendor/canvas-product-react/index.ts +84 -0
  108. package/_vendor/canvas-product-react/persistence/index.ts +18 -0
  109. package/_vendor/canvas-product-react/persistence/localSnapshotPersistence.ts +294 -0
  110. package/_vendor/canvas-product-react/runtime/CanvasProductRoot.tsx +250 -0
  111. package/_vendor/canvas-product-react/runtime/productDefinition.ts +72 -0
  112. package/_vendor/canvas-product-react/runtime/productServices.ts +96 -0
  113. package/_vendor/canvas-react/components/CanvasView.tsx +796 -0
  114. package/_vendor/canvas-react/components/OverlayLayer.tsx +879 -0
  115. package/_vendor/canvas-react/components/PageSpace.tsx +34 -0
  116. package/_vendor/canvas-react/components/ShapeLayer.tsx +428 -0
  117. package/_vendor/canvas-react/components/index.ts +4 -0
  118. package/_vendor/canvas-react/hooks/useEditor.ts +11 -0
  119. package/_vendor/canvas-react/hooks/useValue.ts +14 -0
  120. package/_vendor/canvas-react/host/CanvasRendererRegistryContext.tsx +14 -0
  121. package/_vendor/canvas-react/host/contextMenuRegistry.ts +61 -0
  122. package/_vendor/canvas-react/host/domEventGuards.ts +61 -0
  123. package/_vendor/canvas-react/host/index.ts +38 -0
  124. package/_vendor/canvas-react/host/pluginHost.ts +635 -0
  125. package/_vendor/canvas-react/host/rendererRegistry.tsx +58 -0
  126. package/_vendor/canvas-react/host/toolbarRegistry.ts +100 -0
  127. package/_vendor/canvas-react/index.ts +3 -0
  128. package/_vendor/plugin-arrow/ArrowBindingUtil.ts +239 -0
  129. package/_vendor/plugin-arrow/ArrowShapeUtil.ts +311 -0
  130. package/_vendor/plugin-arrow/ArrowTool.ts +208 -0
  131. package/_vendor/plugin-arrow/arrowGeometry.ts +441 -0
  132. package/_vendor/plugin-arrow/arrowTerminalBindingResolver.ts +253 -0
  133. package/_vendor/plugin-arrow/arrowTerminalCommands.ts +230 -0
  134. package/_vendor/plugin-arrow/canvas.tsx +92 -0
  135. package/_vendor/plugin-arrow/core.ts +409 -0
  136. package/_vendor/plugin-arrow/feature.ts +20 -0
  137. package/_vendor/plugin-arrow/index.ts +28 -0
  138. package/_vendor/plugin-arrow/selectionHandleInteractions.ts +154 -0
  139. package/_vendor/plugin-arrow/types.ts +63 -0
  140. package/_vendor/plugin-draw/DrawShapeRenderer.tsx +60 -0
  141. package/_vendor/plugin-draw/DrawShapeUtil.ts +372 -0
  142. package/_vendor/plugin-draw/DrawTool.ts +444 -0
  143. package/_vendor/plugin-draw/canvas.tsx +24 -0
  144. package/_vendor/plugin-draw/core.ts +515 -0
  145. package/_vendor/plugin-draw/drawGeometry.ts +491 -0
  146. package/_vendor/plugin-draw/drawHitTest.ts +271 -0
  147. package/_vendor/plugin-draw/drawInterpolation.ts +250 -0
  148. package/_vendor/plugin-draw/drawPath.ts +550 -0
  149. package/_vendor/plugin-draw/drawSegments.ts +106 -0
  150. package/_vendor/plugin-draw/drawSelectionTransform.ts +67 -0
  151. package/_vendor/plugin-draw/drawShapeGeometry.ts +307 -0
  152. package/_vendor/plugin-draw/drawStrokeGeometry.ts +454 -0
  153. package/_vendor/plugin-draw/feature.ts +20 -0
  154. package/_vendor/plugin-draw/index.ts +31 -0
  155. package/_vendor/plugin-draw/types.ts +36 -0
  156. package/_vendor/plugin-eraser/EraserTool.ts +297 -0
  157. package/_vendor/plugin-eraser/canvas.tsx +616 -0
  158. package/_vendor/plugin-eraser/core.ts +49 -0
  159. package/_vendor/plugin-eraser/feature.ts +20 -0
  160. package/_vendor/plugin-eraser/index.ts +4 -0
  161. package/_vendor/plugin-frame/FrameShapeUtil.ts +173 -0
  162. package/_vendor/plugin-frame/FrameTool.ts +225 -0
  163. package/_vendor/plugin-frame/canvas.tsx +75 -0
  164. package/_vendor/plugin-frame/core.ts +534 -0
  165. package/_vendor/plugin-frame/feature.ts +20 -0
  166. package/_vendor/plugin-frame/index.ts +6 -0
  167. package/_vendor/plugin-geo/GeoShapeUtil.ts +463 -0
  168. package/_vendor/plugin-geo/GeoTools.ts +247 -0
  169. package/_vendor/plugin-geo/canvas.tsx +90 -0
  170. package/_vendor/plugin-geo/core.ts +495 -0
  171. package/_vendor/plugin-geo/feature.ts +20 -0
  172. package/_vendor/plugin-geo/index.ts +7 -0
  173. package/_vendor/plugin-geo/types.ts +27 -0
  174. package/_vendor/plugin-group/GroupShapeUtil.ts +59 -0
  175. package/_vendor/plugin-group/canvas.tsx +59 -0
  176. package/_vendor/plugin-group/core.ts +40 -0
  177. package/_vendor/plugin-group/feature.ts +20 -0
  178. package/_vendor/plugin-group/index.ts +5 -0
  179. package/_vendor/plugin-image/ImageShapeUtil.ts +95 -0
  180. package/_vendor/plugin-image/canvas.tsx +212 -0
  181. package/_vendor/plugin-image/core.ts +542 -0
  182. package/_vendor/plugin-image/crop.ts +770 -0
  183. package/_vendor/plugin-image/cropInteractions.ts +350 -0
  184. package/_vendor/plugin-image/cropSession.ts +38 -0
  185. package/_vendor/plugin-image/feature.ts +20 -0
  186. package/_vendor/plugin-image/index.ts +29 -0
  187. package/_vendor/plugin-image/types.ts +55 -0
  188. package/_vendor/plugin-image-product-react/ImageImportController.tsx +143 -0
  189. package/_vendor/plugin-image-product-react/imageAssetService.ts +52 -0
  190. package/_vendor/plugin-image-product-react/imageBlobStore.ts +315 -0
  191. package/_vendor/plugin-image-product-react/imageHostActions.ts +438 -0
  192. package/_vendor/plugin-image-product-react/imageProductApi.ts +88 -0
  193. package/_vendor/plugin-image-product-react/imageToolbarHostBridge.ts +48 -0
  194. package/_vendor/plugin-image-product-react/imageToolbarRuntime.ts +21 -0
  195. package/_vendor/plugin-image-product-react/index.ts +60 -0
  196. package/_vendor/plugin-image-product-react/snapshotGuards.ts +33 -0
  197. package/_vendor/plugin-image-product-react/svgImageAssetInliner.ts +54 -0
  198. package/_vendor/plugin-image-product-react/useImageImport.ts +64 -0
  199. package/_vendor/plugin-laser/LaserTool.ts +154 -0
  200. package/_vendor/plugin-laser/canvas.tsx +645 -0
  201. package/_vendor/plugin-laser/core.ts +49 -0
  202. package/_vendor/plugin-laser/feature.ts +20 -0
  203. package/_vendor/plugin-laser/index.ts +4 -0
  204. package/_vendor/plugin-text/ArrowLabelBindingUtil.ts +336 -0
  205. package/_vendor/plugin-text/GeoLabelBindingUtil.ts +391 -0
  206. package/_vendor/plugin-text/TextShapeSvgExporter.ts +101 -0
  207. package/_vendor/plugin-text/TextShapeUtil.ts +284 -0
  208. package/_vendor/plugin-text/TextTool.ts +228 -0
  209. package/_vendor/plugin-text/canvas.tsx +115 -0
  210. package/_vendor/plugin-text/core.ts +422 -0
  211. package/_vendor/plugin-text/feature.ts +20 -0
  212. package/_vendor/plugin-text/host/RichTextEditingBox.tsx +144 -0
  213. package/_vendor/plugin-text/host/RichTextToolbar.tsx +266 -0
  214. package/_vendor/plugin-text/host/TiptapTextEditor.tsx +191 -0
  215. package/_vendor/plugin-text/host/richTextRendering.tsx +49 -0
  216. package/_vendor/plugin-text/host/textDomSelection.ts +93 -0
  217. package/_vendor/plugin-text/host/textEditingBoxStyle.ts +36 -0
  218. package/_vendor/plugin-text/host/textEntryFocus.ts +307 -0
  219. package/_vendor/plugin-text/host/textFontLoader.ts +149 -0
  220. package/_vendor/plugin-text/host/textMeasurement.ts +258 -0
  221. package/_vendor/plugin-text/host/textMeasurementSync.ts +77 -0
  222. package/_vendor/plugin-text/host/textRangeSelection.ts +134 -0
  223. package/_vendor/plugin-text/host/textShapeRendererRuntime.tsx +89 -0
  224. package/_vendor/plugin-text/host/textShapeSync.ts +173 -0
  225. package/_vendor/plugin-text/host/tiptapTextEditorController.ts +148 -0
  226. package/_vendor/plugin-text/index.ts +18 -0
  227. package/_vendor/plugin-text/richTextUtils.ts +259 -0
  228. package/_vendor/plugin-text/textInteractions.ts +366 -0
  229. package/_vendor/plugin-text/textLabelHelpers.ts +235 -0
  230. package/_vendor/plugin-text/textShapeHelpers.ts +123 -0
  231. package/_vendor/plugin-text/textStyle.ts +96 -0
  232. package/_vendor/plugin-text/textTypes.ts +48 -0
  233. package/_vendor/signals/atom.ts +74 -0
  234. package/_vendor/signals/computed.ts +132 -0
  235. package/_vendor/signals/core.ts +130 -0
  236. package/_vendor/signals/effect.ts +117 -0
  237. package/_vendor/signals/index.ts +9 -0
  238. package/_vendor/signals/types.ts +17 -0
  239. package/_vendor/store/Store.ts +171 -0
  240. package/_vendor/store/diff.ts +229 -0
  241. package/_vendor/store/history.ts +177 -0
  242. package/_vendor/store/index.ts +32 -0
  243. package/_vendor/store/types.ts +37 -0
  244. package/api/canvasKitApi.d.ts +29 -0
  245. package/index.css +3 -0
  246. package/index.d.ts +16 -0
  247. package/index.mjs +1 -0
  248. package/internal-modules.d.ts +187 -0
  249. package/package.json +48 -0
  250. package/product/Shell.d.ts +19 -0
  251. package/product/chromeContext.d.ts +70 -0
  252. package/product/createCanvasKitEditor.d.ts +6 -0
  253. package/product/index.d.ts +7 -0
  254. package/product/persistence.d.ts +3 -0
  255. package/product/product.d.ts +22 -0
  256. package/product/useCanvasClipboardShortcuts.d.ts +6 -0
  257. package/product-iyBbEPIs.mjs +4 -0
  258. package/product.mjs +1 -0
  259. package/standard/extensions.d.ts +1 -0
  260. package/standard/index.d.ts +3 -0
  261. package/standard/standardApi.d.ts +91 -0
  262. package/standard-BmrxwqpJ.mjs +44 -0
  263. package/standard.mjs +1 -0
@@ -0,0 +1,148 @@
1
+ import type { Editor } from "./editor/Editor";
2
+ import type { ShapeId, ShapeRecordBase } from "./schema/records";
3
+
4
+ export const SET_ACTIVE_TOOL_TOOLBAR_ACTION_ID = "editor.tool.set-active-tool";
5
+ export const TOGGLE_TOOL_LOCKED_TOOLBAR_ACTION_ID =
6
+ "editor.tool.toggle-locked";
7
+
8
+ export type ToolbarSurface = "selection" | "tool";
9
+ export type ToolbarPlacement = "chrome" | "context";
10
+
11
+ export interface ToolbarSelectionSnapshot {
12
+ selectedShapeIds: readonly ShapeId[];
13
+ selectedShapes: readonly ShapeRecordBase[];
14
+ count: number;
15
+ singleShapeType: ShapeRecordBase["type"] | null;
16
+ commonShapeType: ShapeRecordBase["type"] | null;
17
+ canResetRotation: boolean;
18
+ isMixedFrameAndPointHandleSelection: boolean;
19
+ }
20
+
21
+ export interface ToolbarToolSnapshot {
22
+ activeToolId: string;
23
+ isToolLocked: boolean;
24
+ }
25
+
26
+ export interface ToolbarContext {
27
+ editor: Editor;
28
+ selection: ToolbarSelectionSnapshot;
29
+ tool: ToolbarToolSnapshot;
30
+ }
31
+
32
+ export type ToolbarActionValue = string | number | boolean | null;
33
+
34
+ export interface ToolbarActionRunInput<TValue extends ToolbarActionValue> {
35
+ context: ToolbarContext;
36
+ value: TValue;
37
+ }
38
+
39
+ export interface ToolbarAction<
40
+ TValue extends ToolbarActionValue = ToolbarActionValue,
41
+ > {
42
+ id: string;
43
+ isVisible?(context: ToolbarContext): boolean;
44
+ isEnabled?(context: ToolbarContext): boolean;
45
+ getValue?(context: ToolbarContext): TValue;
46
+ run(input: ToolbarActionRunInput<TValue>): void;
47
+ }
48
+
49
+ export interface ToolbarButtonItem {
50
+ kind: "button";
51
+ id: string;
52
+ actionId: string;
53
+ label: string;
54
+ icon: string;
55
+ value?: ToolbarActionValue;
56
+ shortcut?: string;
57
+ dataUi?: string;
58
+ }
59
+
60
+ export interface ToolbarSegmentedOption {
61
+ value: string;
62
+ label: string;
63
+ icon?: string;
64
+ dataUi?: string;
65
+ }
66
+
67
+ export interface ToolbarSegmentedItem {
68
+ kind: "segmented";
69
+ id: string;
70
+ actionId: string;
71
+ options: readonly ToolbarSegmentedOption[];
72
+ }
73
+
74
+ export interface ToolbarSwatchOption {
75
+ value: string;
76
+ label: string;
77
+ color: string;
78
+ dataUi?: string;
79
+ }
80
+
81
+ export interface ToolbarSwatchesItem {
82
+ kind: "swatches";
83
+ id: string;
84
+ actionId: string;
85
+ label: string;
86
+ options: readonly ToolbarSwatchOption[];
87
+ }
88
+
89
+ export interface ToolbarStepperOption {
90
+ value: number;
91
+ label: string;
92
+ dataUi?: string;
93
+ }
94
+
95
+ export interface ToolbarStepperItem {
96
+ kind: "stepper";
97
+ id: string;
98
+ actionId: string;
99
+ label: string;
100
+ options: readonly ToolbarStepperOption[];
101
+ dataUi?: string;
102
+ }
103
+
104
+ export interface ToolbarTextInputItem {
105
+ kind: "text-input";
106
+ id: string;
107
+ actionId: string;
108
+ label: string;
109
+ placeholder?: string;
110
+ dataUi?: string;
111
+ }
112
+
113
+ export interface ToolbarBadgeItem {
114
+ kind: "badge";
115
+ id: string;
116
+ label: string;
117
+ dataUi?: string;
118
+ }
119
+
120
+ export interface ToolbarSeparatorItem {
121
+ kind: "separator";
122
+ id: string;
123
+ }
124
+
125
+ export type ToolbarItem =
126
+ | ToolbarButtonItem
127
+ | ToolbarSegmentedItem
128
+ | ToolbarSwatchesItem
129
+ | ToolbarStepperItem
130
+ | ToolbarTextInputItem
131
+ | ToolbarBadgeItem
132
+ | ToolbarSeparatorItem;
133
+
134
+ export interface ToolbarGroup {
135
+ id: string;
136
+ order?: number;
137
+ items: readonly ToolbarItem[];
138
+ }
139
+
140
+ export interface ToolbarContribution {
141
+ id: string;
142
+ surface: ToolbarSurface;
143
+ placement?: ToolbarPlacement;
144
+ order?: number;
145
+ actionIds: readonly string[];
146
+ when?(context: ToolbarContext): boolean;
147
+ getGroups(context: ToolbarContext): readonly ToolbarGroup[];
148
+ }
@@ -0,0 +1,75 @@
1
+ import type { Camera } from "../../schema/records";
2
+ import type { Editor } from "../../editor/Editor";
3
+ import type { PointerEditorEvent } from "../../editor/events";
4
+ import { StateNode } from "../../editor/StateNode";
5
+ import type { Vec } from "../../geometry/Vec";
6
+
7
+ interface PanningInfo {
8
+ originScreenPoint: Vec;
9
+ originCamera: Camera;
10
+ }
11
+
12
+ export class HandTool extends StateNode {
13
+ constructor(editor: Editor) {
14
+ super(editor, "hand");
15
+ this.initial = "idle";
16
+ this.addChild(new HandIdleState(editor, this));
17
+ this.addChild(new HandPanningState(editor, this));
18
+ }
19
+ }
20
+
21
+ class HandIdleState extends StateNode {
22
+ constructor(editor: Editor, parent: StateNode) {
23
+ super(editor, "idle", parent);
24
+ }
25
+
26
+ protected onPointerDown(event: PointerEditorEvent): void {
27
+ if (event.button !== 0) {
28
+ return;
29
+ }
30
+ this.transition("panning", {
31
+ originScreenPoint: event.screenPoint.clone(),
32
+ originCamera: this.editor.getCurrentCamera(),
33
+ } satisfies PanningInfo);
34
+ }
35
+ }
36
+
37
+ class HandPanningState extends StateNode {
38
+ private info: PanningInfo | null = null;
39
+
40
+ constructor(editor: Editor, parent: StateNode) {
41
+ super(editor, "panning", parent);
42
+ }
43
+
44
+ protected onEnter(info?: unknown): void {
45
+ this.info = info as PanningInfo;
46
+ }
47
+
48
+ protected onPointerMove(event: PointerEditorEvent): void {
49
+ if (!this.info) {
50
+ return;
51
+ }
52
+
53
+ const delta = event.screenPoint.sub(this.info.originScreenPoint);
54
+ const zoom = this.info.originCamera.z;
55
+ this.editor.setCamera(
56
+ {
57
+ x: this.info.originCamera.x - delta.x / zoom,
58
+ y: this.info.originCamera.y - delta.y / zoom,
59
+ },
60
+ { source: "user" },
61
+ );
62
+ }
63
+
64
+ protected onPointerUp(): void {
65
+ this.transition("idle");
66
+ }
67
+
68
+ protected onCancel(): void {
69
+ this.transition("idle");
70
+ }
71
+
72
+ protected onExit(): void {
73
+ this.info = null;
74
+ }
75
+ }
@@ -0,0 +1,2 @@
1
+ export { HandTool } from "./hand/HandTool";
2
+ export { SelectTool } from "./select/SelectTool";
@@ -0,0 +1,33 @@
1
+ import type { Editor } from "../../editor/Editor";
2
+ import { StateNode } from "../../editor/StateNode";
3
+ import {
4
+ BrushingState,
5
+ DraggingSelectionHandleInteractionState,
6
+ IdleState,
7
+ PointingCanvasState,
8
+ PointingResizeHandleState,
9
+ PointingRotateHandleState,
10
+ PointingSelectionHandleInteractionState,
11
+ PointingShapeState,
12
+ ResizingState,
13
+ RotatingState,
14
+ TranslatingState,
15
+ } from "./states";
16
+
17
+ export class SelectTool extends StateNode {
18
+ constructor(editor: Editor) {
19
+ super(editor, "select");
20
+ this.initial = "idle";
21
+ this.addChild(new IdleState(editor, this));
22
+ this.addChild(new PointingCanvasState(editor, this));
23
+ this.addChild(new BrushingState(editor, this));
24
+ this.addChild(new PointingShapeState(editor, this));
25
+ this.addChild(new TranslatingState(editor, this));
26
+ this.addChild(new PointingResizeHandleState(editor, this));
27
+ this.addChild(new ResizingState(editor, this));
28
+ this.addChild(new PointingRotateHandleState(editor, this));
29
+ this.addChild(new RotatingState(editor, this));
30
+ this.addChild(new PointingSelectionHandleInteractionState(editor, this));
31
+ this.addChild(new DraggingSelectionHandleInteractionState(editor, this));
32
+ }
33
+ }
@@ -0,0 +1,104 @@
1
+ import type { Editor } from "../../editor/Editor";
2
+ import type { ShapeId, ShapeParentId } from "../../schema/records";
3
+
4
+ /**
5
+ * Containment / reparenting helpers used by the translating gesture. These are
6
+ * pure with respect to the state node: they read and mutate editor state only,
7
+ * driven by the set of shape ids being dragged.
8
+ */
9
+
10
+ export function getSharedCurrentParentId(
11
+ editor: Editor,
12
+ shapeIds: readonly ShapeId[],
13
+ ): ShapeParentId | null {
14
+ let parentId: ShapeParentId | null = null;
15
+ for (const shapeId of shapeIds) {
16
+ const shape = editor.getShape(shapeId);
17
+ if (!shape) {
18
+ return null;
19
+ }
20
+
21
+ if (!parentId) {
22
+ parentId = shape.parentId;
23
+ continue;
24
+ }
25
+
26
+ if (shape.parentId !== parentId) {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ return parentId;
32
+ }
33
+
34
+ export function resolveContainmentParentId(
35
+ editor: Editor,
36
+ shapeIds: readonly ShapeId[],
37
+ ): ShapeParentId | null {
38
+ const containingParentId = editor.getContainingShapeParentId(shapeIds);
39
+ if (!containingParentId) {
40
+ return null;
41
+ }
42
+
43
+ const currentParentId = getSharedCurrentParentId(editor, shapeIds);
44
+ if (
45
+ !currentParentId ||
46
+ !currentParentId.startsWith("shape:") ||
47
+ containingParentId === currentParentId
48
+ ) {
49
+ return containingParentId;
50
+ }
51
+
52
+ const currentParentShape = editor.getShape(currentParentId as ShapeId);
53
+ if (
54
+ !currentParentShape ||
55
+ !editor
56
+ .getShapeUtil(currentParentShape)
57
+ .canReceiveChildren(currentParentShape)
58
+ ) {
59
+ return containingParentId;
60
+ }
61
+
62
+ const stillIntersectsCurrentParent = shapeIds.every((shapeId) => {
63
+ const containment = editor.getShapeContainment(
64
+ currentParentShape.id,
65
+ shapeId,
66
+ );
67
+ return containment === "inside" || containment === "intersecting";
68
+ });
69
+
70
+ return stillIntersectsCurrentParent ? currentParentId : containingParentId;
71
+ }
72
+
73
+ export function updateDropTarget(
74
+ editor: Editor,
75
+ shapeIds: readonly ShapeId[],
76
+ ): void {
77
+ const parentId = resolveContainmentParentId(editor, shapeIds);
78
+ const currentParentId = getSharedCurrentParentId(editor, shapeIds);
79
+ if (parentId === currentParentId) {
80
+ editor.setDropTargetShapeId(null);
81
+ return;
82
+ }
83
+ const targetShape = parentId ? editor.getShape(parentId as ShapeId) : null;
84
+ editor.setDropTargetShapeId(targetShape?.id ?? null);
85
+ }
86
+
87
+ export function applyContainmentParent(
88
+ editor: Editor,
89
+ shapeIds: readonly ShapeId[],
90
+ ): void {
91
+ const parentId = resolveContainmentParentId(editor, shapeIds);
92
+ if (!parentId) {
93
+ return;
94
+ }
95
+
96
+ const needsReparent = shapeIds.some(
97
+ (shapeId) => editor.getShape(shapeId)?.parentId !== parentId,
98
+ );
99
+ if (!needsReparent) {
100
+ return;
101
+ }
102
+
103
+ editor.commands.reparentShapes({ ids: [...shapeIds], parentId });
104
+ }