@excalidraw/common 0.18.0-abeeaeb → 0.18.0-afa3a65

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 (79) hide show
  1. package/dist/dev/index.js +91 -10
  2. package/dist/dev/index.js.map +2 -2
  3. package/dist/prod/index.js +3 -3
  4. package/dist/types/common/src/colors.d.ts +8 -0
  5. package/dist/types/common/src/constants.d.ts +44 -0
  6. package/dist/types/common/src/keys.d.ts +2 -0
  7. package/dist/types/common/src/random.d.ts +7 -0
  8. package/dist/types/element/src/Scene.d.ts +1 -1
  9. package/dist/types/element/src/comparisons.d.ts +5 -3
  10. package/dist/types/element/src/delta.d.ts +23 -1
  11. package/dist/types/element/src/flowchart.d.ts +5 -1
  12. package/dist/types/element/src/frame.d.ts +2 -2
  13. package/dist/types/element/src/index.d.ts +1 -0
  14. package/dist/types/element/src/linearElementEditor.d.ts +10 -0
  15. package/dist/types/element/src/mutateElement.d.ts +1 -1
  16. package/dist/types/element/src/newElement.d.ts +24 -2
  17. package/dist/types/element/src/sizeHelpers.d.ts +6 -0
  18. package/dist/types/element/src/stickyNote.d.ts +183 -0
  19. package/dist/types/element/src/textElement.d.ts +2 -1
  20. package/dist/types/element/src/transform.d.ts +25 -6
  21. package/dist/types/element/src/typeChecks.d.ts +3 -2
  22. package/dist/types/element/src/types.d.ts +35 -6
  23. package/dist/types/element/src/utils.d.ts +7 -3
  24. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +12 -0
  25. package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
  26. package/dist/types/excalidraw/actions/actionBoundText.d.ts +8 -0
  27. package/dist/types/excalidraw/actions/actionCanvas.d.ts +28 -0
  28. package/dist/types/excalidraw/actions/actionClipboard.d.ts +8 -0
  29. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +4 -0
  30. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +13 -1
  31. package/dist/types/excalidraw/actions/actionDeselect.d.ts +4 -0
  32. package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -2
  33. package/dist/types/excalidraw/actions/actionElementLink.d.ts +4 -0
  34. package/dist/types/excalidraw/actions/actionElementLock.d.ts +8 -0
  35. package/dist/types/excalidraw/actions/actionExport.d.ts +8 -0
  36. package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
  37. package/dist/types/excalidraw/actions/actionFrame.d.ts +63 -1
  38. package/dist/types/excalidraw/actions/actionGroup.d.ts +8 -0
  39. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +55 -1
  40. package/dist/types/excalidraw/actions/actionLink.d.ts +4 -0
  41. package/dist/types/excalidraw/actions/actionMenu.d.ts +4 -0
  42. package/dist/types/excalidraw/actions/actionProperties.d.ts +18 -6
  43. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +4 -0
  44. package/dist/types/excalidraw/actions/actionStyles.d.ts +5 -1
  45. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +4 -0
  46. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +4 -0
  47. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +4 -0
  48. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +4 -0
  49. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +4 -0
  50. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +4 -0
  51. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +4 -0
  52. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +4 -0
  53. package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
  54. package/dist/types/excalidraw/appState.d.ts +4 -0
  55. package/dist/types/excalidraw/components/App.arrowText.d.ts +40 -8
  56. package/dist/types/excalidraw/components/App.cursor.d.ts +8 -0
  57. package/dist/types/excalidraw/components/App.d.ts +92 -6
  58. package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
  59. package/dist/types/excalidraw/components/IconButton.d.ts +2 -0
  60. package/dist/types/excalidraw/components/Tools.d.ts +7 -2
  61. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +2 -0
  62. package/dist/types/excalidraw/components/icons.d.ts +1 -0
  63. package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +2 -2
  64. package/dist/types/excalidraw/data/blob.d.ts +8 -0
  65. package/dist/types/excalidraw/data/json.d.ts +4 -0
  66. package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
  67. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +5 -5
  68. package/dist/types/excalidraw/renderer/helpers.d.ts +25 -0
  69. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -1
  70. package/dist/types/excalidraw/scene/Renderer.d.ts +50 -1
  71. package/dist/types/excalidraw/scene/index.d.ts +1 -1
  72. package/dist/types/excalidraw/scene/types.d.ts +1 -0
  73. package/dist/types/excalidraw/types.d.ts +30 -2
  74. package/dist/types/excalidraw/viewport.d.ts +4 -0
  75. package/dist/types/math/src/curve.d.ts +19 -12
  76. package/dist/types/math/src/segment.d.ts +6 -0
  77. package/dist/types/utils/src/export.d.ts +1 -0
  78. package/dist/types/utils/src/shape.d.ts +2 -2
  79. package/package.json +1 -1
@@ -98,6 +98,8 @@ export declare const actionToggleLinearEditor: {
98
98
  exportWithDarkMode: boolean;
99
99
  exportScale: number;
100
100
  currentItemStrokeColor: string;
101
+ currentItemStickynoteStrokeColor: string;
102
+ currentItemStickynoteBackgroundColor: string;
101
103
  currentItemBackgroundColor: string;
102
104
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
103
105
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -206,6 +208,8 @@ export declare const actionToggleLinearEditor: {
206
208
  elementStroke: readonly string[] | null;
207
209
  elementBackground: readonly string[] | null;
208
210
  bucketFill: readonly string[] | null;
211
+ stickyNoteStroke: readonly string[] | null;
212
+ stickyNoteBackground: readonly string[] | null;
209
213
  };
210
214
  };
211
215
  captureUpdate: "IMMEDIATELY";
@@ -252,6 +256,7 @@ export declare const actionTogglePolygon: {
252
256
  frameId: string | null;
253
257
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
254
258
  updated: number;
259
+ created: number | null;
255
260
  link: string | null;
256
261
  locked: boolean;
257
262
  customData?: Record<string, any>;
@@ -291,6 +296,7 @@ export declare const actionTogglePolygon: {
291
296
  frameId: string | null;
292
297
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
293
298
  updated: number;
299
+ created: number | null;
294
300
  link: string | null;
295
301
  locked: boolean;
296
302
  customData?: Record<string, any>;
@@ -325,6 +331,7 @@ export declare const actionTogglePolygon: {
325
331
  frameId: string | null;
326
332
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
327
333
  updated: number;
334
+ created: number | null;
328
335
  link: string | null;
329
336
  locked: boolean;
330
337
  customData?: Record<string, any>;
@@ -359,6 +366,43 @@ export declare const actionTogglePolygon: {
359
366
  frameId: string | null;
360
367
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
361
368
  updated: number;
369
+ created: number | null;
370
+ link: string | null;
371
+ locked: boolean;
372
+ customData?: Record<string, any>;
373
+ }> & Readonly<{
374
+ type: "stickynote";
375
+ baseHeight: number;
376
+ }> & {
377
+ index: import("@excalidraw/element/types").FractionalIndex;
378
+ }) | (Readonly<{
379
+ id: string;
380
+ x: number;
381
+ y: number;
382
+ strokeColor: string;
383
+ backgroundColor: string;
384
+ fillStyle: import("@excalidraw/element/types").FillStyle;
385
+ strokeWidth: number;
386
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
387
+ roundness: null | {
388
+ type: import("@excalidraw/element/types").RoundnessType;
389
+ value?: number;
390
+ };
391
+ roughness: number;
392
+ opacity: number;
393
+ width: number;
394
+ height: number;
395
+ angle: import("@excalidraw/math").Radians;
396
+ seed: number;
397
+ version: number;
398
+ versionNonce: number;
399
+ index: import("@excalidraw/element/types").FractionalIndex | null;
400
+ isDeleted: boolean;
401
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
402
+ frameId: string | null;
403
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
404
+ updated: number;
405
+ created: number | null;
362
406
  link: string | null;
363
407
  locked: boolean;
364
408
  customData?: Record<string, any>;
@@ -393,6 +437,7 @@ export declare const actionTogglePolygon: {
393
437
  frameId: string | null;
394
438
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
395
439
  updated: number;
440
+ created: number | null;
396
441
  link: string | null;
397
442
  locked: boolean;
398
443
  customData?: Record<string, any>;
@@ -427,6 +472,7 @@ export declare const actionTogglePolygon: {
427
472
  frameId: string | null;
428
473
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
429
474
  updated: number;
475
+ created: number | null;
430
476
  link: string | null;
431
477
  locked: boolean;
432
478
  customData?: Record<string, any>;
@@ -461,6 +507,7 @@ export declare const actionTogglePolygon: {
461
507
  frameId: string | null;
462
508
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
463
509
  updated: number;
510
+ created: number | null;
464
511
  link: string | null;
465
512
  locked: boolean;
466
513
  customData?: Record<string, any>;
@@ -498,6 +545,7 @@ export declare const actionTogglePolygon: {
498
545
  frameId: string | null;
499
546
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
500
547
  updated: number;
548
+ created: number | null;
501
549
  link: string | null;
502
550
  locked: boolean;
503
551
  customData?: Record<string, any>;
@@ -536,6 +584,7 @@ export declare const actionTogglePolygon: {
536
584
  frameId: string | null;
537
585
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
538
586
  updated: number;
587
+ created: number | null;
539
588
  link: string | null;
540
589
  locked: boolean;
541
590
  customData?: Record<string, any>;
@@ -571,6 +620,7 @@ export declare const actionTogglePolygon: {
571
620
  frameId: string | null;
572
621
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
573
622
  updated: number;
623
+ created: number | null;
574
624
  link: string | null;
575
625
  locked: boolean;
576
626
  customData?: Record<string, any>;
@@ -606,6 +656,7 @@ export declare const actionTogglePolygon: {
606
656
  frameId: string | null;
607
657
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
608
658
  updated: number;
659
+ created: number | null;
609
660
  link: string | null;
610
661
  locked: boolean;
611
662
  customData?: Record<string, any>;
@@ -613,15 +664,17 @@ export declare const actionTogglePolygon: {
613
664
  type: "text";
614
665
  fontSize: number;
615
666
  fontFamily: import("@excalidraw/element/types").FontFamilyValues;
667
+ baseFontSize: number | null;
616
668
  text: string;
617
669
  textAlign: import("@excalidraw/element/types").TextAlign;
618
670
  verticalAlign: import("@excalidraw/element/types").VerticalAlign;
619
- containerId: import("@excalidraw/element/types").ExcalidrawGenericElement["id"] | null;
671
+ containerId: import("@excalidraw/element/types").ExcalidrawTextContainer["id"] | null;
620
672
  originalText: string;
621
673
  autoResize: boolean;
622
674
  lineHeight: number & {
623
675
  _brand: "unitlessLineHeight";
624
676
  };
677
+ labelPosition?: number | null;
625
678
  }> & {
626
679
  index: import("@excalidraw/element/types").FractionalIndex;
627
680
  }) | (Readonly<{
@@ -651,6 +704,7 @@ export declare const actionTogglePolygon: {
651
704
  frameId: string | null;
652
705
  boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
653
706
  updated: number;
707
+ created: number | null;
654
708
  link: string | null;
655
709
  locked: boolean;
656
710
  customData?: Record<string, any>;
@@ -61,6 +61,8 @@ export declare const actionLink: {
61
61
  exportWithDarkMode: boolean;
62
62
  exportScale: number;
63
63
  currentItemStrokeColor: string;
64
+ currentItemStickynoteStrokeColor: string;
65
+ currentItemStickynoteBackgroundColor: string;
64
66
  currentItemBackgroundColor: string;
65
67
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
66
68
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -168,6 +170,8 @@ export declare const actionLink: {
168
170
  elementStroke: readonly string[] | null;
169
171
  elementBackground: readonly string[] | null;
170
172
  bucketFill: readonly string[] | null;
173
+ stickyNoteStroke: readonly string[] | null;
174
+ stickyNoteBackground: readonly string[] | null;
171
175
  };
172
176
  };
173
177
  captureUpdate: "IMMEDIATELY";
@@ -68,6 +68,8 @@ export declare const actionShortcuts: {
68
68
  exportWithDarkMode: boolean;
69
69
  exportScale: number;
70
70
  currentItemStrokeColor: string;
71
+ currentItemStickynoteStrokeColor: string;
72
+ currentItemStickynoteBackgroundColor: string;
71
73
  currentItemBackgroundColor: string;
72
74
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
73
75
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -158,6 +160,8 @@ export declare const actionShortcuts: {
158
160
  elementStroke: readonly string[] | null;
159
161
  elementBackground: readonly string[] | null;
160
162
  bucketFill: readonly string[] | null;
163
+ stickyNoteStroke: readonly string[] | null;
164
+ stickyNoteBackground: readonly string[] | null;
161
165
  };
162
166
  };
163
167
  captureUpdate: "EVENTUALLY";
@@ -1,18 +1,22 @@
1
1
  import { type StrokeWidthKey } from "@excalidraw/common";
2
2
  import { LinearElementEditor } from "@excalidraw/element";
3
- import type { Arrowhead, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawLinearElement, ExcalidrawTextElement, FontFamilyValues, StrokeVariability, NonDeleted, NonDeletedExcalidrawElement, TextAlign } from "@excalidraw/element/types";
3
+ import type { Arrowhead, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawFreeDrawElement, ExcalidrawLinearElement, ExcalidrawTextElement, FontFamilyValues, StrokeVariability, NonDeleted, NonDeletedExcalidrawElement, TextAlign } from "@excalidraw/element/types";
4
4
  import type { AppClassProperties, AppState, Primitive } from "../types";
5
- export declare const changeProperty: (elements: readonly ExcalidrawElement[], appState: AppState, callback: (element: NonDeletedExcalidrawElement) => ExcalidrawElement, includeBoundText?: boolean) => ExcalidrawElement[];
5
+ export declare const changeProperty: (elements: readonly ExcalidrawElement[], appState: AppState, callback: (element: NonDeletedExcalidrawElement) => ExcalidrawElement, includeBoundText?: boolean) => (ExcalidrawLinearElement | import("@excalidraw/element/types").ExcalidrawSelectionElement | import("@excalidraw/element/types").ExcalidrawRectangleElement | import("@excalidraw/element/types").ExcalidrawStickyNoteElement | import("@excalidraw/element/types").ExcalidrawDiamondElement | import("@excalidraw/element/types").ExcalidrawEllipseElement | import("@excalidraw/element/types").ExcalidrawEmbeddableElement | import("@excalidraw/element/types").ExcalidrawIframeElement | import("@excalidraw/element/types").ExcalidrawImageElement | import("@excalidraw/element/types").ExcalidrawFrameElement | import("@excalidraw/element/types").ExcalidrawMagicFrameElement | ExcalidrawTextElement | ExcalidrawFreeDrawElement)[];
6
6
  export declare const getFormValue: <T extends Primitive>(elements: readonly ExcalidrawElement[], app: AppClassProperties,
7
7
  /**
8
8
  * input value (usually the element attribute value,
9
9
  * but depends on what the action's PanelComponent input expects)
10
10
  */
11
11
  getValue: (element: ExcalidrawElement) => T, elementPredicate: true | ((element: ExcalidrawElement) => boolean), defaultValue: T | ((isSomeElementSelected: boolean) => T)) => T;
12
- export declare const actionChangeStrokeColor: import("./types").Action<Pick<AppState, "currentItemStrokeColor">> & {
12
+ export declare const actionChangeStrokeColor: import("./types").Action<Partial<AppState> & {
13
+ color?: string;
14
+ }> & {
13
15
  keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
14
16
  };
15
- export declare const actionChangeBackgroundColor: import("./types").Action<Pick<AppState, "currentItemBackgroundColor" | "viewBackgroundColor">> & {
17
+ export declare const actionChangeBackgroundColor: import("./types").Action<Partial<AppState> & {
18
+ color?: string;
19
+ }> & {
16
20
  keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
17
21
  };
18
22
  export declare const actionChangeBucketFillBackgroundColor: import("./types").Action<Pick<AppState, "currentItemBackgroundColor">> & {
@@ -45,7 +49,7 @@ export declare const actionDecreaseFontSize: {
45
49
  icon: import("react/jsx-runtime").JSX.Element;
46
50
  trackEvent: false;
47
51
  perform: (elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[], appState: Readonly<AppState>, value: unknown, app: AppClassProperties) => {
48
- elements: ExcalidrawElement[];
52
+ elements: (ExcalidrawLinearElement | import("@excalidraw/element/types").ExcalidrawSelectionElement | import("@excalidraw/element/types").ExcalidrawRectangleElement | import("@excalidraw/element/types").ExcalidrawStickyNoteElement | import("@excalidraw/element/types").ExcalidrawDiamondElement | import("@excalidraw/element/types").ExcalidrawEllipseElement | import("@excalidraw/element/types").ExcalidrawEmbeddableElement | import("@excalidraw/element/types").ExcalidrawIframeElement | import("@excalidraw/element/types").ExcalidrawImageElement | import("@excalidraw/element/types").ExcalidrawFrameElement | import("@excalidraw/element/types").ExcalidrawMagicFrameElement | ExcalidrawTextElement | ExcalidrawFreeDrawElement)[];
49
53
  appState: {
50
54
  currentItemFontSize: number;
51
55
  contextMenu: {
@@ -102,6 +106,8 @@ export declare const actionDecreaseFontSize: {
102
106
  exportWithDarkMode: boolean;
103
107
  exportScale: number;
104
108
  currentItemStrokeColor: string;
109
+ currentItemStickynoteStrokeColor: string;
110
+ currentItemStickynoteBackgroundColor: string;
105
111
  currentItemBackgroundColor: string;
106
112
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
107
113
  currentItemStrokeWidthKey: StrokeWidthKey;
@@ -210,6 +216,8 @@ export declare const actionDecreaseFontSize: {
210
216
  elementStroke: readonly string[] | null;
211
217
  elementBackground: readonly string[] | null;
212
218
  bucketFill: readonly string[] | null;
219
+ stickyNoteStroke: readonly string[] | null;
220
+ stickyNoteBackground: readonly string[] | null;
213
221
  };
214
222
  };
215
223
  captureUpdate: "IMMEDIATELY";
@@ -224,7 +232,7 @@ export declare const actionIncreaseFontSize: {
224
232
  icon: import("react/jsx-runtime").JSX.Element;
225
233
  trackEvent: false;
226
234
  perform: (elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[], appState: Readonly<AppState>, value: unknown, app: AppClassProperties) => {
227
- elements: ExcalidrawElement[];
235
+ elements: (ExcalidrawLinearElement | import("@excalidraw/element/types").ExcalidrawSelectionElement | import("@excalidraw/element/types").ExcalidrawRectangleElement | import("@excalidraw/element/types").ExcalidrawStickyNoteElement | import("@excalidraw/element/types").ExcalidrawDiamondElement | import("@excalidraw/element/types").ExcalidrawEllipseElement | import("@excalidraw/element/types").ExcalidrawEmbeddableElement | import("@excalidraw/element/types").ExcalidrawIframeElement | import("@excalidraw/element/types").ExcalidrawImageElement | import("@excalidraw/element/types").ExcalidrawFrameElement | import("@excalidraw/element/types").ExcalidrawMagicFrameElement | ExcalidrawTextElement | ExcalidrawFreeDrawElement)[];
228
236
  appState: {
229
237
  currentItemFontSize: number;
230
238
  contextMenu: {
@@ -281,6 +289,8 @@ export declare const actionIncreaseFontSize: {
281
289
  exportWithDarkMode: boolean;
282
290
  exportScale: number;
283
291
  currentItemStrokeColor: string;
292
+ currentItemStickynoteStrokeColor: string;
293
+ currentItemStickynoteBackgroundColor: string;
284
294
  currentItemBackgroundColor: string;
285
295
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
286
296
  currentItemStrokeWidthKey: StrokeWidthKey;
@@ -389,6 +399,8 @@ export declare const actionIncreaseFontSize: {
389
399
  elementStroke: readonly string[] | null;
390
400
  elementBackground: readonly string[] | null;
391
401
  bucketFill: readonly string[] | null;
402
+ stickyNoteStroke: readonly string[] | null;
403
+ stickyNoteBackground: readonly string[] | null;
392
404
  };
393
405
  };
394
406
  captureUpdate: "IMMEDIATELY";
@@ -68,6 +68,8 @@ export declare const actionSelectAll: {
68
68
  exportWithDarkMode: boolean;
69
69
  exportScale: number;
70
70
  currentItemStrokeColor: string;
71
+ currentItemStickynoteStrokeColor: string;
72
+ currentItemStickynoteBackgroundColor: string;
71
73
  currentItemBackgroundColor: string;
72
74
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
73
75
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -169,6 +171,8 @@ export declare const actionSelectAll: {
169
171
  elementStroke: readonly string[] | null;
170
172
  elementBackground: readonly string[] | null;
171
173
  bucketFill: readonly string[] | null;
174
+ stickyNoteStroke: readonly string[] | null;
175
+ stickyNoteBackground: readonly string[] | null;
172
176
  };
173
177
  };
174
178
  captureUpdate: "IMMEDIATELY";
@@ -66,6 +66,8 @@ export declare const actionCopyStyles: {
66
66
  exportWithDarkMode: boolean;
67
67
  exportScale: number;
68
68
  currentItemStrokeColor: string;
69
+ currentItemStickynoteStrokeColor: string;
70
+ currentItemStickynoteBackgroundColor: string;
69
71
  currentItemBackgroundColor: string;
70
72
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
71
73
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -170,6 +172,8 @@ export declare const actionCopyStyles: {
170
172
  elementStroke: readonly string[] | null;
171
173
  elementBackground: readonly string[] | null;
172
174
  bucketFill: readonly string[] | null;
175
+ stickyNoteStroke: readonly string[] | null;
176
+ stickyNoteBackground: readonly string[] | null;
173
177
  };
174
178
  };
175
179
  captureUpdate: "EVENTUALLY";
@@ -189,7 +193,7 @@ export declare const actionPasteStyles: {
189
193
  elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[];
190
194
  captureUpdate: "EVENTUALLY";
191
195
  } | {
192
- elements: import("@excalidraw/element/types").OrderedExcalidrawElement[];
196
+ elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[];
193
197
  captureUpdate: "IMMEDIATELY";
194
198
  };
195
199
  keyTest: (event: KeyboardEvent | import("react").KeyboardEvent<Element>) => boolean;
@@ -62,6 +62,8 @@ export declare const actionToggleArrowBinding: {
62
62
  exportWithDarkMode: boolean;
63
63
  exportScale: number;
64
64
  currentItemStrokeColor: string;
65
+ currentItemStickynoteStrokeColor: string;
66
+ currentItemStickynoteBackgroundColor: string;
65
67
  currentItemBackgroundColor: string;
66
68
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
67
69
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -171,6 +173,8 @@ export declare const actionToggleArrowBinding: {
171
173
  elementStroke: readonly string[] | null;
172
174
  elementBackground: readonly string[] | null;
173
175
  bucketFill: readonly string[] | null;
176
+ stickyNoteStroke: readonly string[] | null;
177
+ stickyNoteBackground: readonly string[] | null;
174
178
  };
175
179
  };
176
180
  captureUpdate: "NEVER";
@@ -66,6 +66,8 @@ export declare const actionToggleGridMode: {
66
66
  exportWithDarkMode: boolean;
67
67
  exportScale: number;
68
68
  currentItemStrokeColor: string;
69
+ currentItemStickynoteStrokeColor: string;
70
+ currentItemStickynoteBackgroundColor: string;
69
71
  currentItemBackgroundColor: string;
70
72
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
71
73
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -173,6 +175,8 @@ export declare const actionToggleGridMode: {
173
175
  elementStroke: readonly string[] | null;
174
176
  elementBackground: readonly string[] | null;
175
177
  bucketFill: readonly string[] | null;
178
+ stickyNoteStroke: readonly string[] | null;
179
+ stickyNoteBackground: readonly string[] | null;
176
180
  };
177
181
  };
178
182
  captureUpdate: "EVENTUALLY";
@@ -62,6 +62,8 @@ export declare const actionToggleMidpointSnapping: {
62
62
  exportWithDarkMode: boolean;
63
63
  exportScale: number;
64
64
  currentItemStrokeColor: string;
65
+ currentItemStickynoteStrokeColor: string;
66
+ currentItemStickynoteBackgroundColor: string;
65
67
  currentItemBackgroundColor: string;
66
68
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
67
69
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -171,6 +173,8 @@ export declare const actionToggleMidpointSnapping: {
171
173
  elementStroke: readonly string[] | null;
172
174
  elementBackground: readonly string[] | null;
173
175
  bucketFill: readonly string[] | null;
176
+ stickyNoteStroke: readonly string[] | null;
177
+ stickyNoteBackground: readonly string[] | null;
174
178
  };
175
179
  };
176
180
  captureUpdate: "NEVER";
@@ -65,6 +65,8 @@ export declare const actionToggleObjectsSnapMode: {
65
65
  exportWithDarkMode: boolean;
66
66
  exportScale: number;
67
67
  currentItemStrokeColor: string;
68
+ currentItemStickynoteStrokeColor: string;
69
+ currentItemStickynoteBackgroundColor: string;
68
70
  currentItemBackgroundColor: string;
69
71
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
70
72
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -172,6 +174,8 @@ export declare const actionToggleObjectsSnapMode: {
172
174
  elementStroke: readonly string[] | null;
173
175
  elementBackground: readonly string[] | null;
174
176
  bucketFill: readonly string[] | null;
177
+ stickyNoteStroke: readonly string[] | null;
178
+ stickyNoteBackground: readonly string[] | null;
175
179
  };
176
180
  };
177
181
  captureUpdate: "EVENTUALLY";
@@ -70,6 +70,8 @@ export declare const actionToggleSearchMenu: {
70
70
  exportWithDarkMode: boolean;
71
71
  exportScale: number;
72
72
  currentItemStrokeColor: string;
73
+ currentItemStickynoteStrokeColor: string;
74
+ currentItemStickynoteBackgroundColor: string;
73
75
  currentItemBackgroundColor: string;
74
76
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
75
77
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -158,6 +160,8 @@ export declare const actionToggleSearchMenu: {
158
160
  elementStroke: readonly string[] | null;
159
161
  elementBackground: readonly string[] | null;
160
162
  bucketFill: readonly string[] | null;
163
+ stickyNoteStroke: readonly string[] | null;
164
+ stickyNoteBackground: readonly string[] | null;
161
165
  };
162
166
  };
163
167
  captureUpdate: "EVENTUALLY";
@@ -67,6 +67,8 @@ export declare const actionToggleStats: {
67
67
  exportWithDarkMode: boolean;
68
68
  exportScale: number;
69
69
  currentItemStrokeColor: string;
70
+ currentItemStickynoteStrokeColor: string;
71
+ currentItemStickynoteBackgroundColor: string;
70
72
  currentItemBackgroundColor: string;
71
73
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
72
74
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -172,6 +174,8 @@ export declare const actionToggleStats: {
172
174
  elementStroke: readonly string[] | null;
173
175
  elementBackground: readonly string[] | null;
174
176
  bucketFill: readonly string[] | null;
177
+ stickyNoteStroke: readonly string[] | null;
178
+ stickyNoteBackground: readonly string[] | null;
175
179
  };
176
180
  };
177
181
  captureUpdate: "EVENTUALLY";
@@ -64,6 +64,8 @@ export declare const actionToggleViewMode: {
64
64
  exportWithDarkMode: boolean;
65
65
  exportScale: number;
66
66
  currentItemStrokeColor: string;
67
+ currentItemStickynoteStrokeColor: string;
68
+ currentItemStickynoteBackgroundColor: string;
67
69
  currentItemBackgroundColor: string;
68
70
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
69
71
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -172,6 +174,8 @@ export declare const actionToggleViewMode: {
172
174
  elementStroke: readonly string[] | null;
173
175
  elementBackground: readonly string[] | null;
174
176
  bucketFill: readonly string[] | null;
177
+ stickyNoteStroke: readonly string[] | null;
178
+ stickyNoteBackground: readonly string[] | null;
175
179
  };
176
180
  };
177
181
  captureUpdate: "EVENTUALLY";
@@ -64,6 +64,8 @@ export declare const actionToggleZenMode: {
64
64
  exportWithDarkMode: boolean;
65
65
  exportScale: number;
66
66
  currentItemStrokeColor: string;
67
+ currentItemStickynoteStrokeColor: string;
68
+ currentItemStickynoteBackgroundColor: string;
67
69
  currentItemBackgroundColor: string;
68
70
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
69
71
  currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
@@ -172,6 +174,8 @@ export declare const actionToggleZenMode: {
172
174
  elementStroke: readonly string[] | null;
173
175
  elementBackground: readonly string[] | null;
174
176
  bucketFill: readonly string[] | null;
177
+ stickyNoteStroke: readonly string[] | null;
178
+ stickyNoteBackground: readonly string[] | null;
175
179
  };
176
180
  };
177
181
  captureUpdate: "EVENTUALLY";
@@ -0,0 +1,39 @@
1
+ import type { ColorPaletteCustom, ColorTuple } from "@excalidraw/common";
2
+ import type { ExcalidrawElement } from "@excalidraw/element/types";
3
+ import type { AppState } from "../types";
4
+ export type ColorProperty = "strokeColor" | "backgroundColor";
5
+ /**
6
+ * Sticky notes are their own color domain: own defaults, own top picks, no
7
+ * transparent. A pick targets the regular domain, the sticky domain, or both
8
+ * ("mixed" selections write both defaults and use the regular picker).
9
+ */
10
+ export type ColorTargetKind = "regular" | "sticky" | "mixed";
11
+ export type ColorDefaultKey = "currentItemStrokeColor" | "currentItemBackgroundColor" | "currentItemStickynoteStrokeColor" | "currentItemStickynoteBackgroundColor";
12
+ export type ColorTargetAppState = Pick<AppState, "selectedElementIds" | "editingTextElement" | "activeTool" | ColorDefaultKey>;
13
+ export type ColorTarget = {
14
+ kind: ColorTargetKind;
15
+ property: ColorProperty;
16
+ /** the current-item defaults a pick is written to (normalized per domain) */
17
+ appStateKeys: readonly ColorDefaultKey[];
18
+ /** the default shown when no element is targeted */
19
+ currentValue: string;
20
+ palette: ColorPaletteCustom;
21
+ topPicks: ColorTuple;
22
+ customizableTopPicks: keyof AppState["colorTopPicks"];
23
+ excludedColors: readonly string[] | undefined;
24
+ };
25
+ /**
26
+ * Who a stroke/background pick targets. Resolve it from the state an action
27
+ * runs against, at execution time — never capture it in a render closure:
28
+ * the memoized picker keeps a stale `onChange`, and the always-visible top
29
+ * picks fire it without a re-render.
30
+ *
31
+ * Targets are the selected color-capable elements (for stroke incl. bound
32
+ * labels, since a note's visible text is its label) plus the text being
33
+ * edited (`handleTextWysiwyg` deselects while editing) — or, for a
34
+ * background pick on a note's label, the note (see `getColorTargetElement`).
35
+ * With no target, the active tool decides the domain.
36
+ */
37
+ export declare const resolveColorTarget: (appState: ColorTargetAppState, elements: readonly ExcalidrawElement[], property: ColorProperty) => ColorTarget;
38
+ /** the current-item default updates for a picked color */
39
+ export declare const getColorTargetAppStateUpdates: (target: ColorTarget, color: string) => Partial<AppState>;
@@ -29,6 +29,8 @@ export declare const clearAppStateForLocalStorage: (appState: Partial<AppState>)
29
29
  exportWithDarkMode?: boolean | undefined;
30
30
  exportScale?: number | undefined;
31
31
  currentItemStrokeColor?: string | undefined;
32
+ currentItemStickynoteStrokeColor?: string | undefined;
33
+ currentItemStickynoteBackgroundColor?: string | undefined;
32
34
  currentItemBackgroundColor?: string | undefined;
33
35
  currentItemFillStyle?: import("@excalidraw/element/types").FillStyle | undefined;
34
36
  currentItemStrokeWidthKey?: import("@excalidraw/common").StrokeWidthKey | undefined;
@@ -82,6 +84,8 @@ export declare const clearAppStateForLocalStorage: (appState: Partial<AppState>)
82
84
  elementStroke: readonly string[] | null;
83
85
  elementBackground: readonly string[] | null;
84
86
  bucketFill: readonly string[] | null;
87
+ stickyNoteStroke: readonly string[] | null;
88
+ stickyNoteBackground: readonly string[] | null;
85
89
  } | undefined;
86
90
  };
87
91
  export declare const cleanAppStateForExport: (appState: Partial<AppState>) => {
@@ -1,15 +1,23 @@
1
+ import { LinearElementEditor } from "@excalidraw/element";
1
2
  import type { ArrowEndpoint } from "@excalidraw/element";
2
- import type { ExcalidrawElement, ExcalidrawTextElement, FixedPoint, NonDeleted } from "@excalidraw/element/types";
3
+ import type { ExcalidrawElement, ExcalidrawTextElement, FixedPoint, NonDeleted, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
3
4
  import type App from "./App";
4
- import type { AppState } from "../types";
5
+ import type { AppState, PointerDownState } from "../types";
5
6
  /**
6
- * The text tool's interaction with arrows: the hover affordance showing where
7
- * a click would attach text to an arrow — a free endpoint (binds the arrow to
8
- * a new text element positioned against that endpoint) or the arrow's midpoint
9
- * (adds a label bound to the arrow) — and the endpoint-bound flavor of
10
- * drag-sizing a new text.
7
+ * Text ↔ arrow interactions.
11
8
  *
12
- * The scene-level logic lives in `@excalidraw/element`'s `arrowEndpointText.ts`.
9
+ * With the text tool: the hover affordance showing where a click would attach
10
+ * text to an arrow — a free endpoint (binds the arrow to a new text element
11
+ * positioned against that endpoint) or the arrow's midpoint (adds a label
12
+ * bound to the arrow) — and the endpoint-bound flavor of drag-sizing a new
13
+ * text.
14
+ *
15
+ * With the selection tool: dragging an arrow's existing label along the arrow
16
+ * — the grab affordance, the drag itself, and where a double-click starts
17
+ * editing a label the drag has moved.
18
+ *
19
+ * The scene-level logic lives in `@excalidraw/element`'s
20
+ * `arrowEndpointText.ts` and `linearElementEditor.ts`.
13
21
  */
14
22
  export declare class AppArrowText {
15
23
  private app;
@@ -69,4 +77,28 @@ export declare class AppArrowText {
69
77
  x: number;
70
78
  y: number;
71
79
  }): boolean;
80
+ /**
81
+ * Whether the arrow's label is what a grab at this position would pick up:
82
+ * the pointer is over the label, and no element stacked above the arrow
83
+ * owns the hit instead.
84
+ */
85
+ isBoundTextGrabbable(element: NonDeletedExcalidrawElement, x: number, y: number): boolean;
86
+ /**
87
+ * The pointer-move half of dragging a label along its arrow. Owns the move
88
+ * whenever the gesture started on the label (`pointerDownState.hit.arrowLabel`),
89
+ * dragging only once past the threshold. Returns whether it owned it.
90
+ */
91
+ maybeDragLabel(linearElementEditor: LinearElementEditor, pointerDownState: PointerDownState, pointerCoords: {
92
+ x: number;
93
+ y: number;
94
+ }): boolean;
95
+ /**
96
+ * Where a double-click on a labeled arrow should start text editing: the
97
+ * center of the label itself, which a label drag may have moved away from
98
+ * the arrow's midpoint. Null when the element is not a labeled arrow.
99
+ */
100
+ getLabelCenter(element: ExcalidrawElement): {
101
+ x: number;
102
+ y: number;
103
+ } | null;
72
104
  }
@@ -24,6 +24,14 @@ export declare class AppCursor {
24
24
  reset: () => void;
25
25
  /** applies the given tool's cursor (defaults to the active tool) */
26
26
  applyForTool: (activeTool?: AppState["activeTool"]) => void;
27
+ /**
28
+ * Re-runs the hover cursor logic at the last known pointer position by
29
+ * re-dispatching a synthetic pointermove — for state changes that alter
30
+ * what hovering means without the pointer moving (e.g. the tool reverting
31
+ * to selection after an element is created). Mouse only: touch and pen
32
+ * have no resting hover to restore.
33
+ */
34
+ refreshHover: () => void;
27
35
  /** clears the inline cursor so the environment default (CSS) applies */
28
36
  private clear;
29
37
  private applyEraser;