@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,177 @@
1
+ import { atom, type Atom, type Signal } from "@land/signals";
2
+ import {
3
+ composeRecordsDiff,
4
+ createEmptyRecordsDiff,
5
+ hasRecordsDiff,
6
+ invertRecordsDiff,
7
+ } from "./diff";
8
+ import type { RecordsDiff, StoreRecord } from "./types";
9
+
10
+ export interface StoreHistoryMark<TRecord extends StoreRecord = StoreRecord> {
11
+ id: string;
12
+ forward: RecordsDiff<TRecord>;
13
+ parentIds: readonly string[];
14
+ }
15
+
16
+ export interface StoreHistoryEntry<TRecord extends StoreRecord = StoreRecord> {
17
+ forward: RecordsDiff<TRecord>;
18
+ inverse: RecordsDiff<TRecord>;
19
+ label: string;
20
+ }
21
+
22
+ export interface StoreHistoryState {
23
+ canUndo: boolean;
24
+ canRedo: boolean;
25
+ undoDepth: number;
26
+ redoDepth: number;
27
+ }
28
+
29
+ export function createStoreHistoryMark<TRecord extends StoreRecord>(
30
+ id: string,
31
+ parentIds: readonly string[] = [],
32
+ ): StoreHistoryMark<TRecord> {
33
+ return {
34
+ id,
35
+ forward: createEmptyRecordsDiff<TRecord>(),
36
+ parentIds,
37
+ };
38
+ }
39
+
40
+ export function appendStoreHistoryMark<
41
+ TRecord extends StoreRecord,
42
+ TNextRecord extends TRecord,
43
+ >(
44
+ mark: StoreHistoryMark<TRecord>,
45
+ diff: RecordsDiff<TNextRecord>,
46
+ ): StoreHistoryMark<TRecord | TNextRecord> {
47
+ return {
48
+ id: mark.id,
49
+ forward: composeRecordsDiff(mark.forward, diff),
50
+ parentIds: mark.parentIds,
51
+ };
52
+ }
53
+
54
+ export function createStoreHistoryEntry<TRecord extends StoreRecord>(
55
+ label: string,
56
+ forward: RecordsDiff<TRecord>,
57
+ ): StoreHistoryEntry<TRecord> {
58
+ return {
59
+ forward,
60
+ inverse: invertRecordsDiff(forward),
61
+ label,
62
+ };
63
+ }
64
+
65
+ export class StoreHistoryBuffer<TRecord extends StoreRecord = StoreRecord> {
66
+ private readonly marks = new Map<string, StoreHistoryMark<TRecord>>();
67
+ private readonly undoStack: StoreHistoryEntry<TRecord>[] = [];
68
+ private readonly redoStack: StoreHistoryEntry<TRecord>[] = [];
69
+ private readonly _state: Atom<StoreHistoryState> = atom<StoreHistoryState>(
70
+ "store.history.state",
71
+ {
72
+ canUndo: false,
73
+ canRedo: false,
74
+ undoDepth: 0,
75
+ redoDepth: 0,
76
+ },
77
+ );
78
+ readonly state: Signal<StoreHistoryState> = this._state;
79
+
80
+ clear(): void {
81
+ this.marks.clear();
82
+ this.undoStack.length = 0;
83
+ this.redoStack.length = 0;
84
+ this.publishState();
85
+ }
86
+
87
+ mark(id: string): void {
88
+ this.marks.set(id, createStoreHistoryMark<TRecord>(id, [
89
+ ...this.marks.keys(),
90
+ ]));
91
+ }
92
+
93
+ append(diff: RecordsDiff<TRecord>): void {
94
+ if (!hasRecordsDiff(diff)) {
95
+ return;
96
+ }
97
+
98
+ if (this.marks.size > 0) {
99
+ for (const [id, mark] of this.marks.entries()) {
100
+ this.marks.set(id, appendStoreHistoryMark(mark, diff));
101
+ }
102
+ return;
103
+ }
104
+
105
+ this.undoStack.push(createStoreHistoryEntry("change", diff));
106
+ this.redoStack.length = 0;
107
+ this.publishState();
108
+ }
109
+
110
+ bailToMark(id: string): RecordsDiff<TRecord> | null {
111
+ const mark = this.marks.get(id);
112
+ if (!mark) return null;
113
+ this.marks.delete(id);
114
+ if (!hasRecordsDiff(mark.forward)) {
115
+ return null;
116
+ }
117
+
118
+ const inverse = invertRecordsDiff(mark.forward);
119
+ for (const parentId of mark.parentIds) {
120
+ const parent = this.marks.get(parentId);
121
+ if (!parent) {
122
+ continue;
123
+ }
124
+ this.marks.set(parentId, appendStoreHistoryMark(parent, inverse));
125
+ }
126
+
127
+ return inverse;
128
+ }
129
+
130
+ squashToMark(id: string, label = id): StoreHistoryEntry<TRecord> | null {
131
+ const mark = this.marks.get(id);
132
+ if (!mark) return null;
133
+ this.marks.delete(id);
134
+ if (!hasRecordsDiff(mark.forward)) {
135
+ return null;
136
+ }
137
+
138
+ if (mark.parentIds.some((parentId) => this.marks.has(parentId))) {
139
+ return null;
140
+ }
141
+
142
+ const entry = createStoreHistoryEntry(label, mark.forward);
143
+ this.undoStack.push(entry);
144
+ this.redoStack.length = 0;
145
+ this.publishState();
146
+ return entry;
147
+ }
148
+
149
+ undo(): StoreHistoryEntry<TRecord> | null {
150
+ const entry = this.undoStack.pop() ?? null;
151
+ if (!entry) return null;
152
+ this.redoStack.push(entry);
153
+ this.publishState();
154
+ return entry;
155
+ }
156
+
157
+ redo(): StoreHistoryEntry<TRecord> | null {
158
+ const entry = this.redoStack.pop() ?? null;
159
+ if (!entry) return null;
160
+ this.undoStack.push(entry);
161
+ this.publishState();
162
+ return entry;
163
+ }
164
+
165
+ getEntries(): readonly StoreHistoryEntry<TRecord>[] {
166
+ return this.undoStack;
167
+ }
168
+
169
+ private publishState(): void {
170
+ this._state.set({
171
+ canUndo: this.undoStack.length > 0,
172
+ canRedo: this.redoStack.length > 0,
173
+ undoDepth: this.undoStack.length,
174
+ redoDepth: this.redoStack.length,
175
+ });
176
+ }
177
+ }
@@ -0,0 +1,32 @@
1
+ export {
2
+ composeRecordsDiff,
3
+ createEmptyRecordsDiff,
4
+ filterRecordsDiff,
5
+ getRecordMap,
6
+ getRecordsDiff,
7
+ hasRecordsDiff,
8
+ invertRecordsDiff,
9
+ squashRecordsDiffs,
10
+ } from "./diff";
11
+ export {
12
+ appendStoreHistoryMark,
13
+ createStoreHistoryEntry,
14
+ createStoreHistoryMark,
15
+ StoreHistoryBuffer,
16
+ } from "./history";
17
+ export { Store } from "./Store";
18
+ export type {
19
+ ChangeSource,
20
+ RecordUpdate,
21
+ RecordsDiff,
22
+ ScopedStoreRecord,
23
+ StoreRecord,
24
+ StoreChange,
25
+ StoreScopeOf,
26
+ StoreSnapshot,
27
+ } from "./types";
28
+ export type {
29
+ StoreHistoryEntry,
30
+ StoreHistoryMark,
31
+ StoreHistoryState,
32
+ } from "./history";
@@ -0,0 +1,37 @@
1
+ export type ChangeSource = "user" | "system" | "history";
2
+
3
+ export interface StoreRecord {
4
+ id: string;
5
+ }
6
+
7
+ export interface ScopedStoreRecord<TScope extends string = string>
8
+ extends StoreRecord {
9
+ scope: TScope;
10
+ }
11
+
12
+ export type StoreScopeOf<TRecord> =
13
+ TRecord extends { scope: infer TScope extends string } ? TScope : never;
14
+
15
+ export interface StoreSnapshot<
16
+ TRecord extends StoreRecord = StoreRecord,
17
+ TSchemaVersion extends number = number,
18
+ > {
19
+ schemaVersion: TSchemaVersion;
20
+ records: TRecord[];
21
+ }
22
+
23
+ export interface RecordUpdate<TRecord extends StoreRecord = StoreRecord> {
24
+ before: TRecord;
25
+ after: TRecord;
26
+ }
27
+
28
+ export interface RecordsDiff<TRecord extends StoreRecord = StoreRecord> {
29
+ added: TRecord[];
30
+ updated: RecordUpdate<TRecord>[];
31
+ removed: TRecord[];
32
+ }
33
+
34
+ export interface StoreChange<TRecord extends StoreRecord = StoreRecord> {
35
+ source: ChangeSource;
36
+ diff: RecordsDiff<TRecord>;
37
+ }
@@ -0,0 +1,29 @@
1
+ import { type CanvasProductApiOptions, type CanvasProductApiContext, type CanvasProductSessionSnapshot } from "@land/canvas-product-react/api";
2
+ import { type StandardCanvasApi, type StandardCanvasApiSnapshot, type StandardCanvasFrameInput, type StandardCanvasShapeInput, type StandardCanvasTextInput } from "../standard";
3
+ import { type ImageProductApi } from "@land/plugin-image-product-react";
4
+ export type CanvasKitShapeInput = StandardCanvasShapeInput;
5
+ export type CanvasKitTextInput = StandardCanvasTextInput;
6
+ export type CanvasKitFrameInput = StandardCanvasFrameInput;
7
+ export declare const CANVAS_KIT_TOOL_IDS: readonly ["select", "hand", "rectangle", "ellipse", "diamond", "arrow", "draw", "text", "frame", "eraser", "laser"];
8
+ export type CanvasKitToolId = (typeof CANVAS_KIT_TOOL_IDS)[number];
9
+ export interface CanvasKitApiSnapshot extends StandardCanvasApiSnapshot<CanvasKitToolId> {
10
+ productId: "canvas-kit";
11
+ session: CanvasProductSessionSnapshot<CanvasKitToolId>;
12
+ }
13
+ export interface CanvasKitApi extends StandardCanvasApi<CanvasKitToolId> {
14
+ image: ImageProductApi | null;
15
+ snapshot(): CanvasKitApiSnapshot;
16
+ }
17
+ export interface CanvasKitApiOptions<TToolId extends string = CanvasKitToolId> extends CanvasProductApiContext {
18
+ assertToolId?: (toolId: string) => asserts toolId is TToolId;
19
+ }
20
+ export type CanvasKitApiWithTools<TToolId extends string> = StandardCanvasApi<TToolId> & {
21
+ image: ImageProductApi | null;
22
+ };
23
+ declare global {
24
+ interface Window {
25
+ landCanvasKit?: CanvasKitApi;
26
+ }
27
+ }
28
+ export declare function createCanvasKitApi(context: CanvasKitApiOptions<CanvasKitToolId>): CanvasKitApi;
29
+ export declare function createCanvasKitApiWithTools<TToolId extends string>(context: CanvasProductApiOptions<TToolId>): CanvasKitApiWithTools<TToolId>;
package/index.css ADDED
@@ -0,0 +1,3 @@
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
+ @layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.relative{position:relative}.contents{display:contents}.hidden{display:none}.h-full{height:100%}.w-full{width:100%}.overflow-hidden{overflow:hidden}}:root{--canvas-background:oklch(97.7% .004 95);--canvas-dot:oklch(82% .01 95);--border:oklch(84% .012 240);--accent:oklch(90% .024 210);--accent-foreground:oklch(24% .03 235);--muted-foreground:oklch(45% .018 245);--chrome-background:oklch(100% 5.96046e-8 none/.94);--chrome-foreground:oklch(18% .018 255);--chrome-border:var(--border)}@supports (color:color-mix(in lab, red, red)){:root{--chrome-border:color-mix(in oklch, var(--border) 88%, oklch(22% .02 255))}}:root{--chrome-border-width:1px;--chrome-radius:.5rem;--chrome-control-radius:.375rem;--chrome-control-border-width:0px;--chrome-spacing:.25rem;--toolbar-control-size:1.75rem;--toolbar-floating-offset:.5rem;--toolbar-floating-shift-padding:.5rem;--toolbar-title-padding-inline:.5rem;--toolbar-title-font-size:.75rem;--toolbar-title-line-height:1rem;--toolbar-separator-width:1px;--toolbar-separator-height:1.25rem;--toolbar-separator-margin-inline:.25rem;--toolbar-button-font-size:.8125rem;--shadow-chrome:0 14px 34px -26px #0f172a6b, 0 6px 16px -12px #0f172a3d}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden}body{background:var(--canvas-background);color:var(--chrome-foreground);margin:0;font-family:SF Pro Text,Segoe UI,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif}.relative{position:relative}.absolute{position:absolute}.inset-0{inset:0}.block{display:block}.h-full{height:100%}.min-h-full{min-height:100%}.w-full{width:100%}.overflow-hidden{overflow:hidden}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;user-select:none}.pointer-events-none{pointer-events:none}.outline-none{outline:none}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.ic-canvas{background-color:var(--canvas-background)!important}.land-app-shell{background:linear-gradient(var(--canvas-background), var(--canvas-background)), var(--canvas-background);color:var(--chrome-foreground)}.land-rich-text-editor p{margin:0}
3
+ /*$vite$:1*/
package/index.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /// <reference path="./internal-modules.d.ts" />
2
+ import { type ComponentPropsWithoutRef } from "react";
3
+ import type { CanvasKitApi } from "./api/canvasKitApi";
4
+ import { createCanvasKitApi, createCanvasKitApiWithTools } from "./api/canvasKitApi";
5
+ import { createCanvasKitProduct, canvasKitProduct } from "./product/product";
6
+ import "./index.css";
7
+ export interface CanvasKitProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
8
+ exposeApiOnWindow?: boolean;
9
+ onReady?: (api: CanvasKitApi) => void;
10
+ }
11
+ export type CanvasKitHandle = CanvasKitApi | null;
12
+ export declare const CanvasKit: import("react").ForwardRefExoticComponent<CanvasKitProps & import("react").RefAttributes<CanvasKitHandle>>;
13
+ export { createCanvasKitApi, createCanvasKitApiWithTools, createCanvasKitProduct, canvasKitProduct, };
14
+ export { CANVAS_KIT_TOOL_IDS } from "./api/canvasKitApi";
15
+ export type { CanvasKitApi, CanvasKitApiOptions, CanvasKitApiSnapshot, CanvasKitApiWithTools, CanvasKitFrameInput, CanvasKitShapeInput, CanvasKitTextInput, CanvasKitToolId, } from "./api/canvasKitApi";
16
+ export type { CanvasKitProductOptions } from "./product/product";
package/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{c as o,d as e,l as s,n as t,t as a,u as i}from"./product-iyBbEPIs.mjs";import{forwardRef as n,useEffect as r,useImperativeHandle as p,useMemo as d,useState as c}from"react";import{jsx as l}from"react/jsx-runtime";var m=n(({className:o,exposeApiOnWindow:s=!1,onReady:a,style:i,...n},m)=>{const[u,h]=c(null),f=d(()=>t({exposeApiOnWindow:s,onApiDispose(){h(null)},onApiReady(o){h(o)}}),[s]);return p(m,()=>u,[u]),r(()=>{u&&a?.(u)},[u,a]),/* @__PURE__ */l("div",{"data-ui":"canvas-kit-component-root",className:o,style:{width:"100%",height:"100%",overflow:"hidden",...i??{}},...n,children:/* @__PURE__ */l(e,{product:f})})});export{o as CANVAS_KIT_TOOL_IDS,m as CanvasKit,a as canvasKitProduct,s as createCanvasKitApi,i as createCanvasKitApiWithTools,t as createCanvasKitProduct};
@@ -0,0 +1,187 @@
1
+ declare module "@land/signals" {
2
+ export * from "./_vendor/signals/index";
3
+ }
4
+
5
+ declare module "@land/store" {
6
+ export * from "./_vendor/store/index";
7
+ }
8
+
9
+ declare module "@land/canvas-core" {
10
+ export * from "./_vendor/canvas-core/index";
11
+ }
12
+
13
+ declare module "@land/canvas-plugin-api" {
14
+ export * from "./_vendor/canvas-plugin-api/index";
15
+ }
16
+
17
+ declare module "@land/canvas-react" {
18
+ export * from "./_vendor/canvas-react/index";
19
+ }
20
+
21
+ declare module "@land/canvas-react/host" {
22
+ export * from "./_vendor/canvas-react/host/index";
23
+ }
24
+
25
+ declare module "@land/canvas-product-react" {
26
+ export * from "./_vendor/canvas-product-react/index";
27
+ }
28
+
29
+ declare module "@land/canvas-product-react/api" {
30
+ export * from "./_vendor/canvas-product-react/api/index";
31
+ }
32
+
33
+ declare module "@land/canvas-product-react/persistence" {
34
+ export * from "./_vendor/canvas-product-react/persistence/index";
35
+ }
36
+
37
+ declare module "@land/canvas-kit/standard" {
38
+ export * from "./standard/index";
39
+ }
40
+
41
+ declare module "@land/plugin-arrow" {
42
+ export * from "./_vendor/plugin-arrow/index";
43
+ }
44
+
45
+ declare module "@land/plugin-arrow/core" {
46
+ export * from "./_vendor/plugin-arrow/core";
47
+ }
48
+
49
+ declare module "@land/plugin-arrow/canvas" {
50
+ export * from "./_vendor/plugin-arrow/canvas";
51
+ }
52
+
53
+ declare module "@land/plugin-arrow/feature" {
54
+ export * from "./_vendor/plugin-arrow/feature";
55
+ }
56
+
57
+ declare module "@land/plugin-draw" {
58
+ export * from "./_vendor/plugin-draw/index";
59
+ }
60
+
61
+ declare module "@land/plugin-draw/core" {
62
+ export * from "./_vendor/plugin-draw/core";
63
+ }
64
+
65
+ declare module "@land/plugin-draw/canvas" {
66
+ export * from "./_vendor/plugin-draw/canvas";
67
+ }
68
+
69
+ declare module "@land/plugin-draw/feature" {
70
+ export * from "./_vendor/plugin-draw/feature";
71
+ }
72
+
73
+ declare module "@land/plugin-eraser" {
74
+ export * from "./_vendor/plugin-eraser/index";
75
+ }
76
+
77
+ declare module "@land/plugin-eraser/core" {
78
+ export * from "./_vendor/plugin-eraser/core";
79
+ }
80
+
81
+ declare module "@land/plugin-eraser/canvas" {
82
+ export * from "./_vendor/plugin-eraser/canvas";
83
+ }
84
+
85
+ declare module "@land/plugin-eraser/feature" {
86
+ export * from "./_vendor/plugin-eraser/feature";
87
+ }
88
+
89
+ declare module "@land/plugin-laser" {
90
+ export * from "./_vendor/plugin-laser/index";
91
+ }
92
+
93
+ declare module "@land/plugin-laser/core" {
94
+ export * from "./_vendor/plugin-laser/core";
95
+ }
96
+
97
+ declare module "@land/plugin-laser/canvas" {
98
+ export * from "./_vendor/plugin-laser/canvas";
99
+ }
100
+
101
+ declare module "@land/plugin-laser/feature" {
102
+ export * from "./_vendor/plugin-laser/feature";
103
+ }
104
+
105
+ declare module "@land/plugin-frame" {
106
+ export * from "./_vendor/plugin-frame/index";
107
+ }
108
+
109
+ declare module "@land/plugin-frame/core" {
110
+ export * from "./_vendor/plugin-frame/core";
111
+ }
112
+
113
+ declare module "@land/plugin-frame/canvas" {
114
+ export * from "./_vendor/plugin-frame/canvas";
115
+ }
116
+
117
+ declare module "@land/plugin-frame/feature" {
118
+ export * from "./_vendor/plugin-frame/feature";
119
+ }
120
+
121
+ declare module "@land/plugin-geo" {
122
+ export * from "./_vendor/plugin-geo/index";
123
+ }
124
+
125
+ declare module "@land/plugin-geo/core" {
126
+ export * from "./_vendor/plugin-geo/core";
127
+ }
128
+
129
+ declare module "@land/plugin-geo/canvas" {
130
+ export * from "./_vendor/plugin-geo/canvas";
131
+ }
132
+
133
+ declare module "@land/plugin-geo/feature" {
134
+ export * from "./_vendor/plugin-geo/feature";
135
+ }
136
+
137
+ declare module "@land/plugin-group" {
138
+ export * from "./_vendor/plugin-group/index";
139
+ }
140
+
141
+ declare module "@land/plugin-group/core" {
142
+ export * from "./_vendor/plugin-group/core";
143
+ }
144
+
145
+ declare module "@land/plugin-group/canvas" {
146
+ export * from "./_vendor/plugin-group/canvas";
147
+ }
148
+
149
+ declare module "@land/plugin-group/feature" {
150
+ export * from "./_vendor/plugin-group/feature";
151
+ }
152
+
153
+ declare module "@land/plugin-image" {
154
+ export * from "./_vendor/plugin-image/index";
155
+ }
156
+
157
+ declare module "@land/plugin-image/core" {
158
+ export * from "./_vendor/plugin-image/core";
159
+ }
160
+
161
+ declare module "@land/plugin-image/canvas" {
162
+ export * from "./_vendor/plugin-image/canvas";
163
+ }
164
+
165
+ declare module "@land/plugin-image/feature" {
166
+ export * from "./_vendor/plugin-image/feature";
167
+ }
168
+
169
+ declare module "@land/plugin-image-product-react" {
170
+ export * from "./_vendor/plugin-image-product-react/index";
171
+ }
172
+
173
+ declare module "@land/plugin-text" {
174
+ export * from "./_vendor/plugin-text/index";
175
+ }
176
+
177
+ declare module "@land/plugin-text/core" {
178
+ export * from "./_vendor/plugin-text/core";
179
+ }
180
+
181
+ declare module "@land/plugin-text/canvas" {
182
+ export * from "./_vendor/plugin-text/canvas";
183
+ }
184
+
185
+ declare module "@land/plugin-text/feature" {
186
+ export * from "./_vendor/plugin-text/feature";
187
+ }
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@yuzhouu/canvas-kit",
3
+ "version": "0.1.2",
4
+ "description": "Land canvas packaged as an all-in-one React canvas kit and typed API surface.",
5
+ "type": "module",
6
+ "main": "./index.mjs",
7
+ "module": "./index.mjs",
8
+ "types": "./index.d.ts",
9
+ "sideEffects": [
10
+ "./index.css"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "types": "./index.d.ts",
15
+ "import": "./index.mjs",
16
+ "default": "./index.mjs"
17
+ },
18
+ "./product": {
19
+ "types": "./product/index.d.ts",
20
+ "import": "./product.mjs",
21
+ "default": "./product.mjs"
22
+ },
23
+ "./standard": {
24
+ "types": "./standard/index.d.ts",
25
+ "import": "./standard.mjs",
26
+ "default": "./standard.mjs"
27
+ },
28
+ "./style.css": "./index.css",
29
+ "./package.json": "./package.json"
30
+ },
31
+ "peerDependencies": {
32
+ "react": "^19.0.0",
33
+ "react-dom": "^19.0.0"
34
+ },
35
+ "dependencies": {
36
+ "@tiptap/core": "^3.25.0",
37
+ "@tiptap/extension-bold": "^3.25.0",
38
+ "@tiptap/extension-bubble-menu": "^3.25.0",
39
+ "@tiptap/extension-italic": "^3.25.0",
40
+ "@tiptap/extension-strike": "^3.25.0",
41
+ "@tiptap/pm": "^3.25.0",
42
+ "@tiptap/react": "^3.25.0",
43
+ "@tiptap/starter-kit": "^3.25.0"
44
+ },
45
+ "publishConfig": {
46
+ "access": "public"
47
+ }
48
+ }
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from "react";
2
+ import type { CanvasProductShellProps } from "@land/canvas-product-react";
3
+ import { type CanvasProductApiContext } from "@land/canvas-product-react/api";
4
+ import type { StandardCanvasApi } from "../standard";
5
+ import type { CanvasKitApi } from "../api/canvasKitApi";
6
+ import { type CanvasKitChromeContext } from "./chromeContext";
7
+ import { persistCanvasKitEditorSnapshot } from "./persistence";
8
+ export type CanvasKitChromeRenderer<TApi extends StandardCanvasApi = CanvasKitApi> = (context: CanvasKitChromeContext<TApi>) => ReactNode;
9
+ export type CanvasKitApiFactory<TApi extends StandardCanvasApi = CanvasKitApi> = (context: CanvasProductApiContext) => TApi;
10
+ export type CanvasKitShellProps<TApi extends StandardCanvasApi = CanvasKitApi> = CanvasProductShellProps & {
11
+ chrome?: CanvasKitChromeRenderer<TApi>;
12
+ createApi?: CanvasKitApiFactory<TApi>;
13
+ exposeApiOnWindow?: boolean;
14
+ onApiDispose?: () => void;
15
+ onApiReady?: (api: TApi) => void;
16
+ persistEditorSnapshot?: typeof persistCanvasKitEditorSnapshot;
17
+ windowKey?: string;
18
+ };
19
+ export declare function CanvasKitShell<TApi extends StandardCanvasApi = CanvasKitApi>(props: CanvasKitShellProps<TApi>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,70 @@
1
+ import { type ReactNode } from "react";
2
+ import type { Editor, EditorSelectionState, EditorToolState, ShapeCapabilityManifest, ShapeId } from "@land/canvas-core";
3
+ import type { CanvasPluginHostRuntime } from "@land/canvas-react/host";
4
+ import type { CanvasProductDefinition, ProductServiceRegistry } from "@land/canvas-product-react";
5
+ import { type ContextMenuSurface, type HistoryControls, type PageControls, type SvgExportControls, type ToolbarSurfaces, type ZoomControlsState } from "@land/canvas-product-react";
6
+ import type { ContextMenuOpenSnapshot, ToolbarActionValue, ToolbarContext } from "@land/canvas-core";
7
+ import type { StandardCanvasApi, StandardCanvasLayerNode } from "../standard";
8
+ import { type ImageAssetService } from "@land/plugin-image-product-react";
9
+ export type { ContextMenuCommandItem, ContextMenuItem, ContextMenuSection, EditorSelectionState, EditorToolState, ShapeCapabilityManifest, ShapeId, ToolbarActionValue, ToolbarContext, ToolbarGroup, ToolbarItem, } from "@land/canvas-core";
10
+ export type { ContextMenuSurface, HistoryControls, PageControls, SvgExportControls, ToolbarSurfaces, ZoomControlsState, } from "@land/canvas-product-react";
11
+ export type { StandardCanvasLayerNode } from "../standard";
12
+ export interface CanvasKitToolbarActionState {
13
+ value: ToolbarActionValue | undefined;
14
+ isEnabled: boolean;
15
+ isVisible: boolean;
16
+ }
17
+ export interface CanvasKitToolbarRuntime {
18
+ getActionState(input: {
19
+ actionId: string;
20
+ context: ToolbarContext;
21
+ }): CanvasKitToolbarActionState | null;
22
+ runAction(input: {
23
+ actionId: string;
24
+ context: ToolbarContext;
25
+ value?: ToolbarActionValue;
26
+ }): void;
27
+ }
28
+ export interface CanvasKitChromeContext<TApi extends StandardCanvasApi = StandardCanvasApi> {
29
+ api: TApi;
30
+ canvas: ReactNode | null;
31
+ contextMenu: CanvasKitContextMenuState;
32
+ currentPageId: string;
33
+ currentPageShapeIds: readonly ShapeId[];
34
+ history: HistoryControls;
35
+ isReady: boolean;
36
+ layers: readonly StandardCanvasLayerNode[];
37
+ pages: PageControls;
38
+ productId: string;
39
+ product: CanvasProductDefinition;
40
+ selection: EditorSelectionState;
41
+ selectedShapeIds: readonly ShapeId[];
42
+ shapeCapabilityManifest: ShapeCapabilityManifest;
43
+ svgExport: SvgExportControls;
44
+ tool: EditorToolState;
45
+ toolbarRuntime: CanvasKitToolbarRuntime;
46
+ toolbarSurfaces: ToolbarSurfaces;
47
+ zoom: ZoomControlsState;
48
+ }
49
+ export interface CanvasKitContextMenuState {
50
+ openSnapshot: ContextMenuOpenSnapshot | null;
51
+ onOpenChange: (snapshot: ContextMenuOpenSnapshot | null) => void;
52
+ runAction(input: {
53
+ actionId: string;
54
+ context: NonNullable<ContextMenuSurface["context"]>;
55
+ value?: ToolbarActionValue;
56
+ }): void;
57
+ surface: ContextMenuSurface;
58
+ }
59
+ export declare function useCanvasKitChromeContext<TApi extends StandardCanvasApi>({ api, canvas, contextMenuOpenSnapshot, editor, imageAssetService, isReady, onContextMenuOpenChange, pluginHostRuntime, product, }: {
60
+ api: TApi;
61
+ canvas: ReactNode | null;
62
+ contextMenuOpenSnapshot: ContextMenuOpenSnapshot | null;
63
+ editor: Editor;
64
+ imageAssetService: ImageAssetService;
65
+ isReady: boolean;
66
+ onContextMenuOpenChange: (snapshot: ContextMenuOpenSnapshot | null) => void;
67
+ pluginHostRuntime: CanvasPluginHostRuntime;
68
+ product: CanvasProductDefinition;
69
+ services: ProductServiceRegistry;
70
+ }): CanvasKitChromeContext<TApi>;
@@ -0,0 +1,6 @@
1
+ import { Editor, type AssetId, type LandCorePlugin } from "@land/canvas-core";
2
+ export interface CreateCanvasKitEditorOptions {
3
+ corePlugins: readonly LandCorePlugin[];
4
+ resolveAssetUrl?: (assetId: AssetId) => string | null;
5
+ }
6
+ export declare function createCanvasKitEditor(options: CreateCanvasKitEditorOptions): Editor;
@@ -0,0 +1,7 @@
1
+ export { createCanvasKitEditor } from "./createCanvasKitEditor";
2
+ export type { CreateCanvasKitEditorOptions } from "./createCanvasKitEditor";
3
+ export { useCanvasKitChromeContext, type EditorSelectionState, type EditorToolState, type HistoryControls, type PageControls, type CanvasKitContextMenuState, type CanvasKitChromeContext, type CanvasKitToolbarActionState, type CanvasKitToolbarRuntime, type ShapeCapabilityManifest, type ShapeId, type StandardCanvasLayerNode, type SvgExportControls, type ContextMenuCommandItem, type ContextMenuItem, type ContextMenuSection, type ToolbarActionValue, type ToolbarContext, type ToolbarGroup, type ToolbarItem, type ToolbarSurfaces, type ZoomControlsState, } from "./chromeContext";
4
+ export { createCanvasKitProduct, canvasKitProduct, type CanvasKitProductOptions, } from "./product";
5
+ export { CANVAS_KIT_STORAGE_NAMESPACE, persistCanvasKitEditorSnapshot, } from "./persistence";
6
+ export { CanvasKitShell, type CanvasKitApiFactory, type CanvasKitChromeRenderer, } from "./Shell";
7
+ export type { CanvasKitShellProps } from "./Shell";
@@ -0,0 +1,3 @@
1
+ import type { Editor } from "@land/canvas-core";
2
+ export declare const CANVAS_KIT_STORAGE_NAMESPACE = "land.canvasKit";
3
+ export declare function persistCanvasKitEditorSnapshot(editor: Editor): Promise<void>;