mathlean-canvas 0.3.5 → 0.3.6

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 (26) hide show
  1. package/README.md +124 -6
  2. package/dist/InlineMathLiveField.d.ts +2 -1
  3. package/dist/MathCanvas/components/CanvasOverlayViewport.d.ts +5 -3
  4. package/dist/MathCanvas/components/CollaborationOverlay.d.ts +10 -0
  5. package/dist/MathCanvas/components/Toolbar.d.ts +5 -6
  6. package/dist/MathCanvas/components/icons.d.ts +8 -0
  7. package/dist/MathCanvas/core/hooks/useCanvasGlobalActions.d.ts +2 -9
  8. package/dist/MathCanvas/core/hooks/useCanvasSnapshot.d.ts +6 -2
  9. package/dist/MathCanvas/core/hooks/useCanvasStageInteractions.d.ts +31 -6
  10. package/dist/MathCanvas/core/hooks/useCanvasViewport.d.ts +5 -1
  11. package/dist/MathCanvas/features/geometry/components/CoordinatePlaneLayer.d.ts +2 -1
  12. package/dist/MathCanvas/features/graph/components/GraphLayer.d.ts +17 -2
  13. package/dist/MathCanvas/features/stroke/hooks/useStrokeState.d.ts +13 -3
  14. package/dist/MathCanvas/features/text/components/InlineMathBubble.d.ts +2 -1
  15. package/dist/MathCanvas/features/text/components/TextBlockEditor.d.ts +1 -2
  16. package/dist/MathCanvas/features/text/components/TextBlockMenu.d.ts +8 -3
  17. package/dist/MathCanvas/features/text/components/TextBlockView.d.ts +7 -1
  18. package/dist/MathCanvas/features/text/components/TextInteractionLayer.d.ts +11 -2
  19. package/dist/MathCanvas/features/text/hooks/useTextBlockActions.d.ts +2 -2
  20. package/dist/MathCanvas/features/text/hooks/useTextBlockLayoutEffects.d.ts +15 -18
  21. package/dist/MathCanvas/types.d.ts +101 -0
  22. package/dist/MathCanvas.d.ts +2 -2
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +14973 -14105
  25. package/dist/useInlineMathSession.d.ts +1 -1
  26. package/package.json +1 -1
@@ -9,6 +9,17 @@ type LatexPreview = {
9
9
  fallback: string;
10
10
  caretOffset?: number;
11
11
  } | null;
12
+ type MathOverlayCaret = {
13
+ left: number;
14
+ top: number;
15
+ height: number;
16
+ } | null;
17
+ type InlineMathEditorRect = {
18
+ left: number;
19
+ top: number;
20
+ width: number;
21
+ height: number;
22
+ } | null;
12
23
  type UseTextBlockLayoutEffectsOptions = {
13
24
  activeInlineMathDraft: string;
14
25
  activeInlineMathSession: InlineMathSession;
@@ -24,12 +35,7 @@ type UseTextBlockLayoutEffectsOptions = {
24
35
  editingSelection: number;
25
36
  editingValue: string;
26
37
  editingWidth: number;
27
- inlineMathEditorRect: {
28
- left: number;
29
- top: number;
30
- width: number;
31
- height: number;
32
- } | null;
38
+ inlineMathEditorRect: InlineMathEditorRect;
33
39
  inlineMathBubbleRef: MutableRefObject<HTMLDivElement | null>;
34
40
  inlineMathFieldRef: MutableRefObject<HTMLElement | null>;
35
41
  latexPreview: LatexPreview;
@@ -41,18 +47,9 @@ type UseTextBlockLayoutEffectsOptions = {
41
47
  setEditingHeight: Dispatch<SetStateAction<number>>;
42
48
  setEditingInlineMathAtoms: Dispatch<SetStateAction<InlineMathAtom[]>>;
43
49
  setEditingWidth: Dispatch<SetStateAction<number>>;
44
- setInlineMathEditorRect: Dispatch<SetStateAction<{
45
- left: number;
46
- top: number;
47
- width: number;
48
- height: number;
49
- } | null>>;
50
- setMathOverlayCaret: Dispatch<SetStateAction<{
51
- left: number;
52
- top: number;
53
- height: number;
54
- } | null>>;
50
+ setInlineMathEditorRect: Dispatch<SetStateAction<InlineMathEditorRect>>;
51
+ setMathOverlayCaret: Dispatch<SetStateAction<MathOverlayCaret>>;
55
52
  textareaRef: MutableRefObject<HTMLTextAreaElement | null>;
56
53
  };
57
- export declare function useTextBlockLayoutEffects({ activeInlineMathDraft, activeInlineMathSession, blocks, containerRef, editableMirrorContentRef, editableMirrorRef, editingBlockId, editingDisplayValue, editingHeight, editingSelection, editingValue, editingWidth, inlineMathEditorRect, inlineMathBubbleRef, inlineMathFieldRef, latexPreview, overlayRefs, renderMode, resetInlineMathState, setBlockHeights, setBlockWidths, setEditingHeight, setEditingInlineMathAtoms, setEditingWidth, setInlineMathEditorRect, setMathOverlayCaret, textareaRef, }: UseTextBlockLayoutEffectsOptions): void;
54
+ export declare function useTextBlockLayoutEffects({ activeInlineMathDraft, activeInlineMathSession, blockHeights, blockWidths, blocks, containerRef, editableMirrorContentRef, editableMirrorRef, editingBlockId, editingDisplayValue, editingHeight, editingSelection, editingValue, editingWidth, inlineMathEditorRect, inlineMathBubbleRef, inlineMathFieldRef, latexPreview, overlayRefs, renderMode, resetInlineMathState, setBlockHeights, setBlockWidths, setEditingHeight, setEditingInlineMathAtoms, setEditingWidth, setInlineMathEditorRect, setMathOverlayCaret, textareaRef, }: UseTextBlockLayoutEffectsOptions): void;
58
55
  export {};
@@ -18,6 +18,7 @@ export type GeometryObjectKind = "point" | "segment" | "polygon" | "angle" | "ci
18
18
  export type GeometryDirection = "left" | "right" | "up" | "down";
19
19
  export type GraphDirection = "upLeft" | "up" | "upRight" | "left" | "right" | "downLeft" | "down" | "downRight";
20
20
  export type CoordinatePlaneMode = "blank" | "grid" | "plane";
21
+ export type TextboxMenuPanel = "color" | "format" | "mode" | null;
21
22
  export type GeometryLabelTarget = {
22
23
  kind: "segment" | "angle" | "circle";
23
24
  id: string;
@@ -227,9 +228,92 @@ export type CanvasState = {
227
228
  geoHelperSegments: GeoHelperSegment[];
228
229
  geoRightAngleMarkers: GeoRightAngleMarker[];
229
230
  coordinatePlaneMode: CoordinatePlaneMode;
231
+ coordinateLabelsVisible?: boolean;
230
232
  renderMode: RenderMode;
231
233
  shortcutSettings?: ShortcutSettings;
232
234
  };
235
+ export type DocumentCanvasState = Omit<CanvasState, "shortcutSettings">;
236
+ export type PointerPresence = {
237
+ x: number;
238
+ y: number;
239
+ xPct: number;
240
+ yPct: number;
241
+ tool: string | null;
242
+ };
243
+ export type StrokePreviewPoint = {
244
+ x: number;
245
+ y: number;
246
+ };
247
+ export type StrokePreview = {
248
+ id: string;
249
+ tool: "pen" | "eraser" | string;
250
+ color?: string;
251
+ width?: number;
252
+ points: StrokePreviewPoint[];
253
+ };
254
+ export type RemotePointerPresence = PointerPresence & {
255
+ id: string;
256
+ color?: string;
257
+ label?: string;
258
+ };
259
+ export type ObjectTransformPreview = {
260
+ id: string;
261
+ objectType: "text" | "graphNode";
262
+ objectId: string;
263
+ x: number;
264
+ y: number;
265
+ width?: number;
266
+ height?: number;
267
+ textBlock?: TextBlock;
268
+ graphNode?: GraphNode;
269
+ };
270
+ export type TextDraftPreview = {
271
+ id: string;
272
+ blockId: string;
273
+ x: number;
274
+ y: number;
275
+ width: number;
276
+ height: number;
277
+ content: string;
278
+ renderMode: RenderMode;
279
+ selectionStart?: number;
280
+ selectionEnd?: number;
281
+ fontSize?: number;
282
+ textBlock?: TextBlock;
283
+ };
284
+ export type CollaborationPreviewPhase = "start" | "update" | "end";
285
+ export type CollaborationMessageBase = {
286
+ senderId: string;
287
+ documentId?: string;
288
+ sentAt?: number;
289
+ };
290
+ export type CollaborationDocumentMessage = CollaborationMessageBase & {
291
+ type: "document";
292
+ revision?: string | number;
293
+ state: DocumentCanvasState;
294
+ };
295
+ export type CollaborationPresenceMessage = CollaborationMessageBase & {
296
+ type: "presence";
297
+ presence: PointerPresence;
298
+ color?: string;
299
+ label?: string;
300
+ };
301
+ export type CollaborationStrokePreviewMessage = CollaborationMessageBase & {
302
+ type: "stroke-preview";
303
+ phase: CollaborationPreviewPhase;
304
+ preview: StrokePreview;
305
+ };
306
+ export type CollaborationObjectTransformMessage = CollaborationMessageBase & {
307
+ type: "object-transform";
308
+ phase: CollaborationPreviewPhase;
309
+ preview: ObjectTransformPreview;
310
+ };
311
+ export type CollaborationTextDraftMessage = CollaborationMessageBase & {
312
+ type: "text-draft";
313
+ phase: CollaborationPreviewPhase;
314
+ preview: TextDraftPreview;
315
+ };
316
+ export type CollaborationMessage = CollaborationDocumentMessage | CollaborationPresenceMessage | CollaborationStrokePreviewMessage | CollaborationObjectTransformMessage | CollaborationTextDraftMessage;
233
317
  export type StageMouseEvent = Parameters<NonNullable<React.ComponentProps<typeof Stage>["onMouseDown"]>>[0];
234
318
  export type StageTouchEvent = Parameters<NonNullable<React.ComponentProps<typeof Stage>["onTouchStart"]>>[0];
235
319
  export type StagePointerEvent = StageMouseEvent | StageTouchEvent;
@@ -259,5 +343,22 @@ export type MathCanvasProps = {
259
343
  className?: string;
260
344
  style?: React.CSSProperties;
261
345
  initialState?: CanvasState;
346
+ documentState?: DocumentCanvasState;
347
+ idPrefix?: string;
262
348
  onStateChange?: (state: CanvasState) => void;
349
+ onDocumentStateChange?: (state: DocumentCanvasState) => void;
350
+ onPointerPresence?: (presence: PointerPresence) => void;
351
+ onStrokePreviewStart?: (preview: StrokePreview) => void;
352
+ onStrokePreviewUpdate?: (preview: StrokePreview) => void;
353
+ onStrokePreviewEnd?: (preview: StrokePreview) => void;
354
+ onObjectTransformPreviewStart?: (preview: ObjectTransformPreview) => void;
355
+ onObjectTransformPreviewUpdate?: (preview: ObjectTransformPreview) => void;
356
+ onObjectTransformPreviewEnd?: (preview: ObjectTransformPreview) => void;
357
+ onTextDraftPreviewStart?: (preview: TextDraftPreview) => void;
358
+ onTextDraftPreviewUpdate?: (preview: TextDraftPreview) => void;
359
+ onTextDraftPreviewEnd?: (preview: TextDraftPreview) => void;
360
+ remotePresence?: RemotePointerPresence[];
361
+ remoteStrokePreviews?: StrokePreview[];
362
+ remoteObjectTransformPreviews?: ObjectTransformPreview[];
363
+ remoteTextDraftPreviews?: TextDraftPreview[];
263
364
  };
@@ -2,6 +2,6 @@ import "katex/dist/katex.min.css";
2
2
  import "mathlive";
3
3
  import "mathlive/fonts.css";
4
4
  import "mathlive/static.css";
5
- export type { CanvasState, MathCanvasProps, GeoPoint, GeoSegment, GeoPolygon, GeoAngle, GeoCircle, GeoHelperSegment, GeoRightAngleMarker, } from "./MathCanvas/types";
5
+ export type { CanvasState, CollaborationMessage, CollaborationMessageBase, CollaborationDocumentMessage, CollaborationObjectTransformMessage, CollaborationPresenceMessage, CollaborationPreviewPhase, CollaborationStrokePreviewMessage, CollaborationTextDraftMessage, DocumentCanvasState, MathCanvasProps, ObjectTransformPreview, PointerPresence, RemotePointerPresence, StrokePreview, TextboxMenuPanel, TextDraftPreview, GeoPoint, GeoSegment, GeoPolygon, GeoAngle, GeoCircle, GeoHelperSegment, GeoRightAngleMarker, } from "./MathCanvas/types";
6
6
  import type { MathCanvasProps } from "./MathCanvas/types";
7
- export default function MathCanvas({ darkMode, className, style, initialState, onStateChange }: MathCanvasProps): import("react/jsx-runtime").JSX.Element;
7
+ export default function MathCanvas(props: MathCanvasProps): import("react/jsx-runtime").JSX.Element;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { default } from "./MathCanvas";
2
2
  export { default as MathCanvas } from "./MathCanvas";
3
- export type { CanvasState, MathCanvasProps } from "./MathCanvas";
3
+ export type { CanvasState, CollaborationMessage, CollaborationMessageBase, CollaborationDocumentMessage, CollaborationObjectTransformMessage, CollaborationPresenceMessage, CollaborationPreviewPhase, CollaborationStrokePreviewMessage, CollaborationTextDraftMessage, DocumentCanvasState, MathCanvasProps, ObjectTransformPreview, PointerPresence, RemotePointerPresence, StrokePreview, TextDraftPreview, } from "./MathCanvas";