@filekit-studio/sketch 0.0.0-stage → 1.1.0

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.
@@ -0,0 +1,690 @@
1
+ import * as React from 'react';
2
+ import React__default from 'react';
3
+ import { S as SketchBoardElement, G as GridStyle, C as Camera, P as Point, T as ToolType, L as LaserMode, a as LaserStroke } from './index-DNRZSQHn.mjs';
4
+ export { A as AnchorPosition, b as ArrowType, c as Arrowhead, d as CanvasDimensions, E as EdgeStyle, e as ElementType, f as ExportPdfOptions, g as ExportPdfResult, F as FillStyle, h as FontFamily, i as LaserPoint, M as MarqueeBox, j as PointBinding, R as ResizeHandle, k as StrokeStyle, l as TableCell, m as TablePresetStyle, n as TextAlign, o as copyImageToClipboard, p as downloadFile, q as exportFrameToPng, r as exportToPng, s as exportToSvg, t as exportWhiteboardToPdf, u as getElementsBoundingBox } from './index-DNRZSQHn.mjs';
5
+
6
+ /**
7
+ * Document schema, initialization, serialization, and validation.
8
+ * Represents a local-first, standalone Sketch whiteboard document.
9
+ */
10
+
11
+ declare const SKETCH_DOCUMENT_VERSION = 1;
12
+ interface SketchDocument {
13
+ version: number;
14
+ id?: string;
15
+ name: string;
16
+ elements: SketchBoardElement[];
17
+ canvasBackground: string;
18
+ gridStyle: GridStyle;
19
+ createdAt: number;
20
+ updatedAt: number;
21
+ }
22
+ /**
23
+ * Creates a brand new default SketchDocument.
24
+ */
25
+ declare function createEmptyDocument(initial?: Partial<SketchDocument>): SketchDocument;
26
+ /**
27
+ * Serializes a SketchDocument to a formatted JSON string.
28
+ */
29
+ declare function serializeDocument(doc: SketchDocument): string;
30
+ /**
31
+ * Safely parses and validates a JSON string into a SketchDocument.
32
+ * Throws a descriptive error if the document structure is invalid.
33
+ */
34
+ declare function parseDocument(json: string): SketchDocument;
35
+ /**
36
+ * Validates whether an unknown object adheres to the SketchDocument schema.
37
+ */
38
+ declare function isValidSketchDocument(doc: unknown): doc is SketchDocument;
39
+
40
+ /**
41
+ * Imperative programmatic controller for Sketch.
42
+ * Can be accessed via editorRef on <SketchEditor /> or instantiated headlessly.
43
+ */
44
+
45
+ type SketchEventType = 'change' | 'select' | 'undo' | 'redo' | 'camera' | 'clear';
46
+ type SketchEventHandler<T = unknown> = (payload: T) => void;
47
+ interface SketchController {
48
+ loadDocument: (doc: SketchDocument) => void;
49
+ getDocument: () => SketchDocument;
50
+ clear: () => void;
51
+ addElement: (element: Partial<SketchBoardElement>) => SketchBoardElement;
52
+ updateElement: (id: string, patch: Partial<SketchBoardElement>) => void;
53
+ deleteElements: (ids: string[]) => void;
54
+ getElements: () => SketchBoardElement[];
55
+ getSelectedElements: () => SketchBoardElement[];
56
+ setSelection: (ids: string[]) => void;
57
+ clearSelection: () => void;
58
+ undo: () => void;
59
+ redo: () => void;
60
+ canUndo: () => boolean;
61
+ canRedo: () => boolean;
62
+ getCamera: () => Camera;
63
+ setZoom: (scale: number) => void;
64
+ panTo: (x: number, y: number) => void;
65
+ zoomToFit: () => void;
66
+ resetZoom: () => void;
67
+ on: <T = unknown>(event: SketchEventType, handler: SketchEventHandler<T>) => () => void;
68
+ destroy: () => void;
69
+ }
70
+ /**
71
+ * Creates an event bus for controller communication.
72
+ */
73
+ declare class SketchEventEmitter {
74
+ private listeners;
75
+ on<T = unknown>(event: SketchEventType, handler: SketchEventHandler<T>): () => void;
76
+ emit<T = unknown>(event: SketchEventType, payload: T): void;
77
+ clear(): void;
78
+ }
79
+
80
+ type ThemeMode = 'light' | 'dark' | 'system';
81
+ type PanelVariant = 'classic' | 'neumorphic';
82
+ interface SketchThemeContextValue {
83
+ theme: ThemeMode;
84
+ resolvedTheme: 'light' | 'dark';
85
+ isDark: boolean;
86
+ panelVariant: PanelVariant;
87
+ }
88
+ declare function useSketchThemeContext(): SketchThemeContextValue;
89
+ /**
90
+ * Robust theme hook for @filekit-studio/sketch.
91
+ * Supports explicit controlled prop ('dark' | 'light') or automatic inheritance
92
+ * from the host application's DOM classes via MutationObserver.
93
+ */
94
+ declare function useSketchTheme(themeProp?: ThemeMode): {
95
+ theme: ThemeMode;
96
+ resolvedTheme: "light" | "dark";
97
+ isDark: boolean;
98
+ panelVariant: PanelVariant;
99
+ };
100
+
101
+ /** Default starter elements provided when no document is supplied */
102
+ declare const DEFAULT_STARTER_ELEMENTS: SketchBoardElement[];
103
+ interface SketchUIConfig {
104
+ /** Display the top toolbar header (default: true) */
105
+ showTopBar?: boolean;
106
+ /** Display top bar Exit button (default: true if onExit provided) */
107
+ showExitButton?: boolean;
108
+ /** Display top bar board name title editor (default: true) */
109
+ showBoardName?: boolean;
110
+ /** Display top bar save status badge (default: true) */
111
+ showSaveIndicator?: boolean;
112
+ /** Display top bar undo/redo history buttons (default: true) */
113
+ showHistoryControls?: boolean;
114
+ /** Display top bar zoom percentage & reset controls (default: true) */
115
+ showZoomControls?: boolean;
116
+ /** Display top bar frames & artboards outline drawer toggle (default: true) */
117
+ showFramesOutline?: boolean;
118
+ /** Display presentation slideshow trigger and mode (default: true) */
119
+ showPresentation?: boolean;
120
+ /** Display top bar laser pointer toggle (default: true) */
121
+ showLaserPointer?: boolean;
122
+ /** Display top bar 1-click clipboard PNG copy button (default: true) */
123
+ showCopyImage?: boolean;
124
+ /** Display top bar clear canvas button (default: true) */
125
+ showClearButton?: boolean;
126
+ /** Display top bar export modal dropdown (default: true) */
127
+ showExportMenu?: boolean;
128
+ /** Display the left creation tool palette (default: true) */
129
+ showToolBar?: boolean;
130
+ /** Show select & hand pan tools (default: true) */
131
+ showSelectTool?: boolean;
132
+ /** Show geometric shapes flyout (default: true) */
133
+ showShapeTools?: boolean;
134
+ /** Show freehand draw tool (default: true) */
135
+ showDrawTool?: boolean;
136
+ /** Show magnetic connector arrows and lines (default: true) */
137
+ showArrowTool?: boolean;
138
+ /** Show text typography tool (default: true) */
139
+ showTextTool?: boolean;
140
+ /** Show sticky notes tool (default: true) */
141
+ showStickyNoteTool?: boolean;
142
+ /** Show matrix and grid table generator (default: true) */
143
+ showTableTool?: boolean;
144
+ /** Show insert image upload tool (default: true) */
145
+ showImageUpload?: boolean;
146
+ /** Enable tech and cloud architecture stencils (default: true) */
147
+ showTechStencils?: boolean;
148
+ /** Enable diagram templates flyout (default: true) */
149
+ showTemplates?: boolean;
150
+ /** Show eraser tool (default: true) */
151
+ showEraserTool?: boolean;
152
+ /** Show lock active tool toggle (default: true) */
153
+ showLockTool?: boolean;
154
+ /** Display the right element styling and properties panel (default: true) */
155
+ showPropertiesPanel?: boolean;
156
+ /** Display the bottom-right workspace overview minimap (default: true) */
157
+ showMinimap?: boolean;
158
+ /** Display the bottom-left keyboard shortcuts button (default: true) */
159
+ showShortcutsButton?: boolean;
160
+ /** Display the bottom-left documentation guide button (default: true if guideHref/onOpenGuide provided) */
161
+ showGuideButton?: boolean;
162
+ /** Enable right-click context menu on canvas & elements (default: true) */
163
+ showContextMenu?: boolean;
164
+ }
165
+ interface SketchEditorProps {
166
+ /**
167
+ * Controlled document or elements array.
168
+ * If provided, updates whenever value changes.
169
+ */
170
+ value?: SketchDocument | SketchBoardElement[];
171
+ /**
172
+ * Initial uncontrolled document or elements array.
173
+ */
174
+ defaultValue?: SketchDocument | SketchBoardElement[];
175
+ /**
176
+ * Callback fired whenever the document elements or title change.
177
+ */
178
+ onChange?: (document: SketchDocument) => void;
179
+ /**
180
+ * Callback fired when manual save is triggered (Ctrl+S or Save button).
181
+ */
182
+ onSave?: (document: SketchDocument) => void;
183
+ /**
184
+ * Local storage key used for auto-saving.
185
+ * Pass null or empty string to disable localStorage persistence.
186
+ * Default: 'filekit_sketch_document_v1'
187
+ */
188
+ storageKey?: string | null;
189
+ /**
190
+ * Initial whiteboard board title. Default: 'My Whiteboard'.
191
+ */
192
+ boardName?: string;
193
+ /**
194
+ * Callback fired when user renames the whiteboard.
195
+ */
196
+ onBoardNameChange?: (name: string) => void;
197
+ /**
198
+ * Read-only mode prevents canvas mutations and hides drawing tools.
199
+ */
200
+ readOnly?: boolean;
201
+ /**
202
+ * Panel aesthetic styling variant.
203
+ * - 'classic': Clean modern borders and subtle drop shadows (default).
204
+ * - 'neumorphic': Rich soft 3D neumorphic bevels and dual drop shadows.
205
+ */
206
+ panelVariant?: PanelVariant;
207
+ /**
208
+ * Theme mode: 'light', 'dark', or 'system'. Default: 'system'.
209
+ * When 'system' or omitted, automatically inherits dark/light mode from the host application.
210
+ */
211
+ theme?: ThemeMode;
212
+ /**
213
+ * Canvas background color hex. Default: '#f0f4f8'.
214
+ */
215
+ canvasBackground?: string;
216
+ /**
217
+ * Canvas grid pattern style: 'grid' | 'dots' | 'cross' | 'none'. Default: 'grid'.
218
+ */
219
+ gridStyle?: GridStyle;
220
+ /**
221
+ * Optional callback when user clicks the Exit button.
222
+ */
223
+ onExit?: () => void;
224
+ /**
225
+ * Link target for the Guide button in shortcuts modal.
226
+ */
227
+ guideHref?: string;
228
+ /**
229
+ * Callback when clicking the Guide button in shortcuts modal.
230
+ */
231
+ onOpenGuide?: () => void;
232
+ /**
233
+ * UI components visibility configuration.
234
+ */
235
+ uiConfig?: SketchUIConfig;
236
+ /**
237
+ * Ref or callback to receive the imperative SketchController instance.
238
+ */
239
+ controllerRef?: React__default.Ref<SketchController>;
240
+ /**
241
+ * Custom CSS class name for the outer container.
242
+ */
243
+ className?: string;
244
+ /**
245
+ * Custom inline styles for the outer container.
246
+ */
247
+ style?: React__default.CSSProperties;
248
+ }
249
+ /**
250
+ * <SketchEditor />
251
+ *
252
+ * Standalone, local-first interactive whiteboard and diagramming component for React & Next.js.
253
+ * Built with HTML5 Canvas, responsive controls, neumorphic styling, and zero external backend requirements.
254
+ */
255
+ declare const SketchEditor: React__default.ForwardRefExoticComponent<SketchEditorProps & React__default.RefAttributes<SketchController>>;
256
+
257
+ interface SketchViewerProps {
258
+ /**
259
+ * The document or elements array to render.
260
+ */
261
+ value?: SketchDocument | SketchBoardElement[];
262
+ /**
263
+ * Initial document or elements array.
264
+ */
265
+ defaultValue?: SketchDocument | SketchBoardElement[];
266
+ /**
267
+ * Color theme: 'light', 'dark', or 'system'. Default: 'system'.
268
+ */
269
+ theme?: ThemeMode;
270
+ /**
271
+ * Canvas background color hex. Defaults to theme standard.
272
+ */
273
+ canvasBackground?: string;
274
+ /**
275
+ * Grid pattern style: 'grid' | 'dots' | 'cross' | 'none'. Default: 'dots'.
276
+ */
277
+ gridStyle?: GridStyle;
278
+ /**
279
+ * Allow mouse/touch pan and zoom interaction. Default: true.
280
+ * When false, the diagram behaves as a completely static vector illustration.
281
+ */
282
+ interactive?: boolean;
283
+ /**
284
+ * Automatically centers and fits all elements into view on mount. Default: true.
285
+ */
286
+ autoFit?: boolean;
287
+ /**
288
+ * Show a subtle 1-click 'Copy Image' button in the top-right corner. Default: true.
289
+ */
290
+ showCopyButton?: boolean;
291
+ /**
292
+ * Show minimal zoom pill (- 100% + Fit) in the bottom corner. Default: false.
293
+ */
294
+ showZoomControls?: boolean;
295
+ /**
296
+ * Optional custom title badge shown in the top-left corner.
297
+ */
298
+ title?: string;
299
+ /**
300
+ * Granular UI visibility overrides.
301
+ */
302
+ uiConfig?: SketchUIConfig;
303
+ /**
304
+ * Imperative controller ref for programmatic interaction.
305
+ */
306
+ controllerRef?: React__default.Ref<SketchController>;
307
+ /**
308
+ * Custom CSS class name for the root container.
309
+ */
310
+ className?: string;
311
+ /**
312
+ * Custom inline styles for the root container.
313
+ */
314
+ style?: React__default.CSSProperties;
315
+ }
316
+ /**
317
+ * <SketchViewer />
318
+ *
319
+ * Lightweight, zero-chrome presentation viewer for documentation, MDX, and blog posts.
320
+ * Pre-configured with all editing controls hidden, read-only mode, and auto-fit viewport.
321
+ */
322
+ declare const SketchViewer: React__default.ForwardRefExoticComponent<SketchViewerProps & React__default.RefAttributes<SketchController>>;
323
+
324
+ interface SketchBoardCanvasProps {
325
+ elements: SketchBoardElement[];
326
+ setElements: React__default.Dispatch<React__default.SetStateAction<SketchBoardElement[]>>;
327
+ selectedIds: string[];
328
+ selectElement: (id: string, multi?: boolean) => void;
329
+ selectElements: (ids: string[]) => void;
330
+ clearSelection: () => void;
331
+ addElement: (el: SketchBoardElement) => void;
332
+ updateElement: (id: string, updates: Partial<SketchBoardElement>) => void;
333
+ deleteSelectedElements: () => void;
334
+ duplicateSelectedElements: () => void;
335
+ groupSelectedElements?: () => void;
336
+ ungroupSelectedElements?: () => void;
337
+ pushHistory: (elements: SketchBoardElement[]) => void;
338
+ undo: () => void;
339
+ redo: () => void;
340
+ camera: Camera;
341
+ setCamera: React__default.Dispatch<React__default.SetStateAction<Camera>>;
342
+ screenToWorld: (pt: Point) => Point;
343
+ worldToScreen: (pt: Point) => Point;
344
+ panBy: (dx: number, dy: number) => void;
345
+ zoomAtPoint: (factor: number, pivot: Point) => void;
346
+ tool: ToolType;
347
+ setTool: (tool: ToolType) => void;
348
+ gridStyle: GridStyle;
349
+ defaultStyles: Omit<SketchBoardElement, 'id' | 'x' | 'y' | 'width' | 'height'>;
350
+ editingElementId?: string | null;
351
+ setEditingElementId?: (id: string | null) => void;
352
+ isToolLocked?: boolean;
353
+ setIsToolLocked?: (locked: boolean | ((prev: boolean) => boolean)) => void;
354
+ canvasBackground?: string;
355
+ isPresentationOpen?: boolean;
356
+ laserColor?: string;
357
+ laserMode?: LaserMode;
358
+ laserStrokes?: LaserStroke[];
359
+ setLaserStrokes?: React__default.Dispatch<React__default.SetStateAction<LaserStroke[]>>;
360
+ laserPointerPos?: Point | null;
361
+ setLaserPointerPos?: (pt: Point | null) => void;
362
+ }
363
+ declare function SketchBoardCanvas({ elements, setElements, selectedIds, selectElement, selectElements, clearSelection, addElement, updateElement, deleteSelectedElements, duplicateSelectedElements, groupSelectedElements, ungroupSelectedElements, pushHistory, undo, redo, camera, screenToWorld, worldToScreen, panBy, zoomAtPoint, tool, setTool, isToolLocked, setIsToolLocked, gridStyle, defaultStyles, editingElementId: externalEditingId, setEditingElementId: setExternalEditingId, canvasBackground, isPresentationOpen, laserColor, laserMode, laserStrokes, setLaserStrokes, laserPointerPos, setLaserPointerPos, }: SketchBoardCanvasProps): React__default.JSX.Element;
364
+
365
+ interface SketchBoardToolBarProps {
366
+ tool: ToolType;
367
+ setTool: (tool: ToolType) => void;
368
+ isToolLocked?: boolean;
369
+ setIsToolLocked?: (locked: boolean | ((prev: boolean) => boolean)) => void;
370
+ onInsertImage?: (dataUrl: string) => void;
371
+ onOpenTemplates?: () => void;
372
+ isTemplatesOpen?: boolean;
373
+ onOpenTechStencils?: () => void;
374
+ isTechStencilsOpen?: boolean;
375
+ onInsertTablePreset?: (preset: 'blank' | 'matrix' | 'swot' | 'kanban', rows?: number, cols?: number) => void;
376
+ }
377
+ declare function SketchBoardToolBar({ tool, setTool, isToolLocked, setIsToolLocked, onInsertImage, onOpenTemplates, isTemplatesOpen, onOpenTechStencils, isTechStencilsOpen, onInsertTablePreset, }: SketchBoardToolBarProps): React__default.JSX.Element;
378
+
379
+ interface SketchBoardPropertiesPanelProps {
380
+ selectedElements: SketchBoardElement[];
381
+ updateSelectedElements: (updates: Partial<SketchBoardElement>) => void;
382
+ deleteSelectedElements: () => void;
383
+ duplicateSelectedElements: () => void;
384
+ groupSelectedElements?: () => void;
385
+ ungroupSelectedElements?: () => void;
386
+ alignSelectedElements?: (type: 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom') => void;
387
+ distributeSelectedElements?: (type: 'horizontal' | 'vertical') => void;
388
+ bringToFront: () => void;
389
+ sendToBack: () => void;
390
+ bringForward?: () => void;
391
+ sendBackward?: () => void;
392
+ defaultStyles: Omit<SketchBoardElement, 'id' | 'x' | 'y' | 'width' | 'height'>;
393
+ setDefaultStyles: React__default.Dispatch<React__default.SetStateAction<Omit<SketchBoardElement, 'id' | 'x' | 'y' | 'width' | 'height'>>>;
394
+ canvasBackground?: string;
395
+ setCanvasBackground?: (color: string) => void;
396
+ }
397
+ declare function SketchBoardPropertiesPanel({ selectedElements, updateSelectedElements, deleteSelectedElements, duplicateSelectedElements, groupSelectedElements, ungroupSelectedElements, alignSelectedElements, distributeSelectedElements, bringToFront, sendToBack, bringForward, sendBackward, defaultStyles, setDefaultStyles, canvasBackground, setCanvasBackground, }: SketchBoardPropertiesPanelProps): React__default.JSX.Element;
398
+
399
+ interface SketchBoardTopBarProps {
400
+ boardName: string;
401
+ setBoardName: (name: string) => void;
402
+ onOpenExport: () => void;
403
+ onOpenTemplates?: () => void;
404
+ onCopyImage?: () => void;
405
+ onClearBoard: () => void;
406
+ elementCount: number;
407
+ zoom: number;
408
+ zoomIn: () => void;
409
+ zoomOut: () => void;
410
+ resetCamera: () => void;
411
+ canUndo: boolean;
412
+ canRedo: boolean;
413
+ undo: () => void;
414
+ redo: () => void;
415
+ tool: ToolType;
416
+ setTool: (tool: ToolType) => void;
417
+ gridStyle: GridStyle;
418
+ setGridStyle: (style: GridStyle) => void;
419
+ onExit?: () => void;
420
+ saveStatus?: 'saved' | 'saving' | 'unsaved';
421
+ onManualSave?: () => void;
422
+ onStartPresentation?: () => void;
423
+ hasFrames?: boolean;
424
+ frameCount?: number;
425
+ isFramesOutlineOpen?: boolean;
426
+ onToggleFramesOutline?: () => void;
427
+ onOpenTechStencils?: () => void;
428
+ isTechStencilsOpen?: boolean;
429
+ isSpotlightActive?: boolean;
430
+ onToggleSpotlight?: () => void;
431
+ }
432
+ declare function SketchBoardTopBar({ boardName, setBoardName, onOpenExport, onOpenTemplates, onCopyImage, onClearBoard, elementCount, zoom, zoomIn, zoomOut, resetCamera, canUndo, canRedo, undo, redo, tool, setTool, gridStyle, setGridStyle, onExit, saveStatus, onManualSave, onStartPresentation, hasFrames, frameCount, isFramesOutlineOpen, onToggleFramesOutline, onOpenTechStencils, isTechStencilsOpen, isSpotlightActive, onToggleSpotlight, }: SketchBoardTopBarProps): React__default.JSX.Element;
433
+
434
+ interface SketchBoardMinimapProps {
435
+ elements: SketchBoardElement[];
436
+ camera: Camera;
437
+ setCamera: React__default.Dispatch<React__default.SetStateAction<Camera>>;
438
+ }
439
+ declare function SketchBoardMinimap({ elements, camera, setCamera }: SketchBoardMinimapProps): React__default.JSX.Element;
440
+
441
+ interface SketchBoardFloatingDockProps {
442
+ selectedElements: SketchBoardElement[];
443
+ updateSelectedElements: (updates: Partial<SketchBoardElement>) => void;
444
+ deleteSelectedElements: () => void;
445
+ duplicateSelectedElements: () => void;
446
+ groupSelectedElements?: () => void;
447
+ ungroupSelectedElements?: () => void;
448
+ alignSelectedElements?: (type: 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom') => void;
449
+ distributeSelectedElements?: (type: 'horizontal' | 'vertical') => void;
450
+ copySelectedImage?: () => void;
451
+ bringToFront: () => void;
452
+ sendToBack: () => void;
453
+ camera: Camera;
454
+ worldToScreen: (pt: Point) => Point;
455
+ onEditText?: (element: SketchBoardElement) => void;
456
+ onToggleSpotlight?: () => void;
457
+ }
458
+ declare function SketchBoardFloatingDock({ selectedElements, updateSelectedElements, deleteSelectedElements, duplicateSelectedElements, groupSelectedElements, ungroupSelectedElements, alignSelectedElements, distributeSelectedElements, copySelectedImage, bringToFront, sendToBack, camera, worldToScreen, onEditText, onToggleSpotlight, }: SketchBoardFloatingDockProps): React__default.JSX.Element | null;
459
+
460
+ interface SketchBoardContextMenuProps {
461
+ elements: SketchBoardElement[];
462
+ selectedIds?: string[];
463
+ boardName: string;
464
+ onManualSave: () => void;
465
+ onClearBoard: () => void;
466
+ gridStyle: GridStyle;
467
+ setGridStyle: (style: GridStyle) => void;
468
+ resetCamera: () => void;
469
+ canvasBackground?: string;
470
+ }
471
+ declare function SketchBoardContextMenu({ elements, selectedIds, boardName, onManualSave, onClearBoard, gridStyle, setGridStyle, resetCamera, canvasBackground, }: SketchBoardContextMenuProps): React__default.JSX.Element | null;
472
+
473
+ interface SketchBoardExportModalProps {
474
+ isOpen: boolean;
475
+ onClose: () => void;
476
+ elements: SketchBoardElement[];
477
+ selectedIds?: string[];
478
+ onImportElements: (elements: SketchBoardElement[]) => void;
479
+ boardName: string;
480
+ canvasBackground?: string;
481
+ gridStyle?: GridStyle;
482
+ }
483
+ declare function SketchBoardExportModal({ isOpen, onClose, elements, selectedIds, onImportElements, boardName, canvasBackground, gridStyle, }: SketchBoardExportModalProps): React__default.JSX.Element | null;
484
+
485
+ interface SketchBoardPresentationModeProps {
486
+ isOpen: boolean;
487
+ onClose: () => void;
488
+ elements: SketchBoardElement[];
489
+ selectedIds?: string[];
490
+ camera: Camera;
491
+ setCamera: React__default.Dispatch<React__default.SetStateAction<Camera>>;
492
+ isSpotlightActive?: boolean;
493
+ onToggleSpotlight?: () => void;
494
+ }
495
+ declare function SketchBoardPresentationMode({ isOpen, onClose, elements, selectedIds, camera, setCamera, isSpotlightActive, onToggleSpotlight, }: SketchBoardPresentationModeProps): React__default.JSX.Element | null;
496
+
497
+ interface SketchBoardFramesOutlineProps {
498
+ isOpen: boolean;
499
+ onClose: () => void;
500
+ elements: SketchBoardElement[];
501
+ setElements: React__default.Dispatch<React__default.SetStateAction<SketchBoardElement[]>>;
502
+ selectedIds: string[];
503
+ selectElements: (ids: string[]) => void;
504
+ updateElement: (id: string, updates: Partial<SketchBoardElement>) => void;
505
+ pushHistory: (newElements: SketchBoardElement[]) => void;
506
+ camera: Camera;
507
+ setCamera: React__default.Dispatch<React__default.SetStateAction<Camera>>;
508
+ onStartPresentation?: () => void;
509
+ }
510
+ declare function SketchBoardFramesOutline({ isOpen, onClose, elements, setElements, selectedIds, selectElements, updateElement, pushHistory, camera, setCamera, onStartPresentation, }: SketchBoardFramesOutlineProps): React__default.JSX.Element | null;
511
+
512
+ interface SketchBoardShortcutsModalProps {
513
+ guideHref?: string;
514
+ onOpenGuide?: () => void;
515
+ showShortcutsButton?: boolean;
516
+ showGuideButton?: boolean;
517
+ }
518
+ declare function SketchBoardShortcutsModal({ guideHref, onOpenGuide, showShortcutsButton, showGuideButton, }?: SketchBoardShortcutsModalProps): React__default.JSX.Element;
519
+
520
+ interface SketchBoardTechStencilsModalProps {
521
+ isOpen: boolean;
522
+ onClose: () => void;
523
+ onInsertTechStencil: (dataUrl: string, title: string, mode: 'badge' | 'standalone') => void;
524
+ }
525
+ declare function SketchBoardTechStencilsModal({ isOpen, onClose, onInsertTechStencil, }: SketchBoardTechStencilsModalProps): React__default.JSX.Element | null;
526
+
527
+ interface TemplateDefinition {
528
+ id: 'mindmap' | 'flowchart' | 'erd' | 'kanban' | 'user_journey';
529
+ title: string;
530
+ category: 'Brainstorming' | 'Diagrams' | 'Engineering' | 'Agile & Planning';
531
+ description: string;
532
+ tag: string;
533
+ tagColor: string;
534
+ elementsCount: number;
535
+ previewType: 'mindmap' | 'flowchart' | 'erd' | 'kanban' | 'journey';
536
+ }
537
+ declare const DIAGRAM_TEMPLATES: TemplateDefinition[];
538
+
539
+ interface SketchBoardTemplatesFlyoutProps {
540
+ isOpen: boolean;
541
+ onClose: () => void;
542
+ onSelectTemplate: (templateId: TemplateDefinition['id'], mode: 'append' | 'replace') => void;
543
+ hasExistingElements?: boolean;
544
+ }
545
+ declare function SketchBoardTemplatesFlyout({ isOpen, onClose, onSelectTemplate, hasExistingElements, }: SketchBoardTemplatesFlyoutProps): React__default.JSX.Element | null;
546
+
547
+ interface SketchBoardLaserDockProps {
548
+ laserColor: string;
549
+ setLaserColor: (color: string) => void;
550
+ laserMode: LaserMode;
551
+ setLaserMode: (mode: LaserMode) => void;
552
+ onClearLaser: () => void;
553
+ laserStrokeCount: number;
554
+ onExitLaser: () => void;
555
+ }
556
+ declare function SketchBoardLaserDock({ laserColor, setLaserColor, laserMode, setLaserMode, onClearLaser, laserStrokeCount, onExitLaser, }: SketchBoardLaserDockProps): React__default.JSX.Element;
557
+
558
+ interface SketchBoardSpotlightOverlayProps {
559
+ isActive: boolean;
560
+ onClose: () => void;
561
+ selectedElements: SketchBoardElement[];
562
+ allElements: SketchBoardElement[];
563
+ camera: Camera;
564
+ worldToScreen: (pt: Point) => Point;
565
+ screenToWorld: (pt: Point) => Point;
566
+ onSelectElement?: (id: string) => void;
567
+ isDark: boolean;
568
+ }
569
+ declare function SketchBoardSpotlightOverlay({ isActive, onClose, selectedElements, allElements, camera, worldToScreen, screenToWorld, onSelectElement, isDark, }: SketchBoardSpotlightOverlayProps): React__default.JSX.Element | null;
570
+
571
+ declare function useSketchBoardCamera(initialCamera?: Camera): {
572
+ camera: Camera;
573
+ setCamera: React.Dispatch<React.SetStateAction<Camera>>;
574
+ screenToWorld: (screenPt: Point) => Point;
575
+ worldToScreen: (worldPt: Point) => Point;
576
+ panBy: (deltaX: number, deltaY: number) => void;
577
+ zoomAtPoint: (newZoomFactor: number, screenPivot: Point) => void;
578
+ zoomIn: (screenPivot?: Point) => void;
579
+ zoomOut: (screenPivot?: Point) => void;
580
+ resetCamera: () => void;
581
+ };
582
+
583
+ type AlignmentType = 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom';
584
+ type DistributionType = 'horizontal' | 'vertical';
585
+ /**
586
+ * Aligns selected elements along a target edge or center axis
587
+ */
588
+ declare function alignElements(elements: SketchBoardElement[], selectedIds: string[], type: AlignmentType): SketchBoardElement[];
589
+ /**
590
+ * Distributes elements evenly along horizontal or vertical space
591
+ */
592
+ declare function distributeElements(elements: SketchBoardElement[], selectedIds: string[], type: DistributionType): SketchBoardElement[];
593
+
594
+ declare function useSketchBoardElements(initialElements?: SketchBoardElement[]): {
595
+ elements: SketchBoardElement[];
596
+ setElements: React.Dispatch<React.SetStateAction<SketchBoardElement[]>>;
597
+ setAllElements: (newElements: SketchBoardElement[]) => void;
598
+ selectedIds: string[];
599
+ setSelectedIds: React.Dispatch<React.SetStateAction<string[]>>;
600
+ selectedElements: SketchBoardElement[];
601
+ singleSelectedElement: SketchBoardElement | null;
602
+ addElement: (element: SketchBoardElement) => void;
603
+ updateElement: (id: string, updates: Partial<SketchBoardElement>) => void;
604
+ updateSelectedElements: (updates: Partial<SketchBoardElement>) => void;
605
+ deleteSelectedElements: () => void;
606
+ duplicateSelectedElements: () => void;
607
+ groupSelectedElements: () => void;
608
+ ungroupSelectedElements: () => void;
609
+ alignSelectedElements: (type: AlignmentType) => void;
610
+ distributeSelectedElements: (type: DistributionType) => void;
611
+ bringToFront: () => void;
612
+ sendToBack: () => void;
613
+ bringForward: () => void;
614
+ sendBackward: () => void;
615
+ selectElement: (id: string, multi?: boolean) => void;
616
+ selectElements: (ids: string[]) => void;
617
+ clearSelection: () => void;
618
+ };
619
+
620
+ declare function useSketchBoardHistory(initialElements?: SketchBoardElement[]): {
621
+ pushState: (newElements: SketchBoardElement[]) => void;
622
+ undo: () => SketchBoardElement[] | null;
623
+ redo: () => SketchBoardElement[] | null;
624
+ resetHistory: (initial?: SketchBoardElement[]) => void;
625
+ canUndo: boolean;
626
+ canRedo: boolean;
627
+ };
628
+
629
+ declare function useHydrated(): boolean;
630
+
631
+ declare const DEFAULT_ELEMENT_STYLES: Omit<SketchBoardElement, 'id' | 'x' | 'y' | 'width' | 'height'>;
632
+
633
+ interface TechIcon {
634
+ id: string;
635
+ name: string;
636
+ category: 'frontend' | 'backend' | 'database' | 'cloud' | 'tools';
637
+ color: string;
638
+ keywords: string[];
639
+ svg: string;
640
+ }
641
+ declare const TECH_CATEGORIES: readonly [{
642
+ readonly id: "all";
643
+ readonly label: "All Stencils";
644
+ }, {
645
+ readonly id: "frontend";
646
+ readonly label: "Frontend & UI";
647
+ }, {
648
+ readonly id: "backend";
649
+ readonly label: "Backend & Runtimes";
650
+ }, {
651
+ readonly id: "database";
652
+ readonly label: "Databases & Storage";
653
+ }, {
654
+ readonly id: "cloud";
655
+ readonly label: "Cloud & DevOps";
656
+ }, {
657
+ readonly id: "tools";
658
+ readonly label: "AI, Tools & APIs";
659
+ }];
660
+ declare const TECH_ICONS: TechIcon[];
661
+
662
+ /**
663
+ * Updates all arrow positions in real time based on their bound start & end elements
664
+ */
665
+ declare function updateBoundArrows(elements: SketchBoardElement[]): SketchBoardElement[];
666
+ /**
667
+ * Deep clones elements while properly remapping internal arrow start/end bindings
668
+ * and group IDs so cloned groups and arrows remain independent and attached to cloned shapes.
669
+ */
670
+ declare function cloneSketchBoardElements(elementsToClone: SketchBoardElement[], options?: {
671
+ deltaX?: number;
672
+ deltaY?: number;
673
+ highestZ?: number;
674
+ }): {
675
+ clonedElements: SketchBoardElement[];
676
+ newSelectedIds: string[];
677
+ };
678
+
679
+ /**
680
+ * Client-side file saving utility.
681
+ * Triggers a native browser download without server interaction.
682
+ */
683
+ interface FileSaverOptions {
684
+ mimeType?: string;
685
+ filters?: unknown;
686
+ [key: string]: unknown;
687
+ }
688
+ declare function saveOrDownloadFile(data: Blob | Uint8Array | string, filename: string, mimeTypeOrOptions?: string | FileSaverOptions): Promise<void>;
689
+
690
+ export { Camera, DEFAULT_ELEMENT_STYLES, DEFAULT_STARTER_ELEMENTS, DIAGRAM_TEMPLATES, GridStyle, LaserMode, LaserStroke, type PanelVariant, Point, SKETCH_DOCUMENT_VERSION, SketchBoardCanvas, SketchBoardContextMenu, SketchBoardElement, SketchBoardExportModal, SketchBoardFloatingDock, SketchBoardFramesOutline, SketchBoardLaserDock, SketchBoardMinimap, SketchBoardPresentationMode, SketchBoardPropertiesPanel, SketchBoardShortcutsModal, SketchBoardSpotlightOverlay, SketchBoardTechStencilsModal, SketchBoardTemplatesFlyout, SketchBoardToolBar, SketchBoardTopBar, type SketchController, type SketchDocument, SketchEditor, type SketchEditorProps, SketchEventEmitter, type SketchEventHandler, type SketchEventType, type SketchThemeContextValue, type SketchUIConfig, SketchViewer, type SketchViewerProps, TECH_CATEGORIES, TECH_ICONS, type TechIcon, type TemplateDefinition, type ThemeMode, ToolType, alignElements, cloneSketchBoardElements, createEmptyDocument, distributeElements, isValidSketchDocument, parseDocument, saveOrDownloadFile, serializeDocument, updateBoundArrows, useHydrated, useSketchBoardCamera, useSketchBoardElements, useSketchBoardHistory, useSketchTheme, useSketchThemeContext };