@markup-canvas/core 1.0.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.
Files changed (194) hide show
  1. package/README.md +245 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/lib/MarkupCanvas.d.ts +78 -0
  4. package/dist/lib/canvas/calcVisibleArea.d.ts +10 -0
  5. package/dist/lib/canvas/checkContainerDimensions.d.ts +1 -0
  6. package/dist/lib/canvas/config.d.ts +2 -0
  7. package/dist/lib/canvas/createCanvas.d.ts +2 -0
  8. package/dist/lib/canvas/createCanvasLayers.d.ts +6 -0
  9. package/dist/lib/canvas/getCanvasBounds.d.ts +2 -0
  10. package/dist/lib/canvas/getCanvasMethods.d.ts +12 -0
  11. package/dist/lib/canvas/getEmptyBounds.d.ts +2 -0
  12. package/dist/lib/canvas/index.d.ts +3 -0
  13. package/dist/lib/canvas/moveExistingContent.d.ts +1 -0
  14. package/dist/lib/canvas/setupCanvasContainer.d.ts +1 -0
  15. package/dist/lib/canvas/setupContentLayer.d.ts +1 -0
  16. package/dist/lib/canvas/setupTransformLayer.d.ts +2 -0
  17. package/dist/lib/config/constants.d.ts +2 -0
  18. package/dist/lib/config/createMarkupCanvasConfig.d.ts +2 -0
  19. package/dist/lib/constants.d.ts +7 -0
  20. package/dist/lib/events/EventEmitter.d.ts +7 -0
  21. package/dist/lib/events/constants.d.ts +7 -0
  22. package/dist/lib/events/index.d.ts +6 -0
  23. package/dist/lib/events/keyboard/handleKeyDown.d.ts +4 -0
  24. package/dist/lib/events/keyboard/handleKeyUp.d.ts +6 -0
  25. package/dist/lib/events/keyboard/setupKeyboardEvents.d.ts +2 -0
  26. package/dist/lib/events/keyboard/setupKeyboardNavigation.d.ts +2 -0
  27. package/dist/lib/events/mouse/handleClickToZoom.d.ts +2 -0
  28. package/dist/lib/events/mouse/handleMouseDown.d.ts +11 -0
  29. package/dist/lib/events/mouse/handleMouseLeave.d.ts +5 -0
  30. package/dist/lib/events/mouse/handleMouseMove.d.ts +7 -0
  31. package/dist/lib/events/mouse/handleMouseUp.d.ts +7 -0
  32. package/dist/lib/events/mouse/setupMouseDrag.d.ts +4 -0
  33. package/dist/lib/events/mouse/setupMouseEvents.d.ts +4 -0
  34. package/dist/lib/events/touch/getTouchCenter.d.ts +4 -0
  35. package/dist/lib/events/touch/getTouchDistance.d.ts +1 -0
  36. package/dist/lib/events/touch/handleTouchEnd.d.ts +2 -0
  37. package/dist/lib/events/touch/handleTouchMove.d.ts +2 -0
  38. package/dist/lib/events/touch/handleTouchStart.d.ts +2 -0
  39. package/dist/lib/events/touch/setupTouchEvents.d.ts +2 -0
  40. package/dist/lib/events/trackpad/createTrackpadPanHandler.d.ts +4 -0
  41. package/dist/lib/events/trackpad/detectTrackpadGesture.d.ts +2 -0
  42. package/dist/lib/events/utils/getAdaptiveZoomSpeed.d.ts +2 -0
  43. package/dist/lib/events/utils/resetClickState.d.ts +4 -0
  44. package/dist/lib/events/utils/resetDragState.d.ts +5 -0
  45. package/dist/lib/events/utils/updateCursor.d.ts +2 -0
  46. package/dist/lib/events/wheel/handleWheel.d.ts +2 -0
  47. package/dist/lib/events/wheel/setupWheelEvents.d.ts +2 -0
  48. package/dist/lib/events/wheel/setupWheelHandler.d.ts +2 -0
  49. package/dist/lib/helpers/index.d.ts +6 -0
  50. package/dist/lib/helpers/withClampedZoom.d.ts +2 -0
  51. package/dist/lib/helpers/withDebounce.d.ts +1 -0
  52. package/dist/lib/helpers/withFeatureEnabled.d.ts +2 -0
  53. package/dist/lib/helpers/withRAF.d.ts +4 -0
  54. package/dist/lib/helpers/withRulerCheck.d.ts +18 -0
  55. package/dist/lib/helpers/withRulerOffset.d.ts +3 -0
  56. package/dist/lib/matrix/canvasToContent.d.ts +2 -0
  57. package/dist/lib/matrix/clampZoom.d.ts +2 -0
  58. package/dist/lib/matrix/contentToCanvas.d.ts +2 -0
  59. package/dist/lib/matrix/createMatrix.d.ts +1 -0
  60. package/dist/lib/matrix/createMatrixString.d.ts +1 -0
  61. package/dist/lib/matrix/getZoomToMouseTransform.d.ts +2 -0
  62. package/dist/lib/matrix/index.d.ts +5 -0
  63. package/dist/lib/rulers/RulerElements.d.ts +6 -0
  64. package/dist/lib/rulers/constants.d.ts +19 -0
  65. package/dist/lib/rulers/createCornerBox.d.ts +2 -0
  66. package/dist/lib/rulers/createGridOverlay.d.ts +2 -0
  67. package/dist/lib/rulers/createHorizontalRuler.d.ts +2 -0
  68. package/dist/lib/rulers/createRulerElements.d.ts +3 -0
  69. package/dist/lib/rulers/createRulers.d.ts +2 -0
  70. package/dist/lib/rulers/createVerticalRuler.d.ts +2 -0
  71. package/dist/lib/rulers/index.d.ts +2 -0
  72. package/dist/lib/rulers/setupRulerEvents.d.ts +2 -0
  73. package/dist/lib/rulers/ticks/calculateTickSpacing.d.ts +1 -0
  74. package/dist/lib/rulers/ticks/createHorizontalTick.d.ts +2 -0
  75. package/dist/lib/rulers/ticks/createVerticalTick.d.ts +2 -0
  76. package/dist/lib/rulers/ticks/index.d.ts +3 -0
  77. package/dist/lib/rulers/updateGrid.d.ts +1 -0
  78. package/dist/lib/rulers/updateHorizontalRuler.d.ts +2 -0
  79. package/dist/lib/rulers/updateRulers.d.ts +2 -0
  80. package/dist/lib/rulers/updateVerticalRuler.d.ts +2 -0
  81. package/dist/lib/transform/applyTransform.d.ts +1 -0
  82. package/dist/lib/transform/applyZoomToCanvas.d.ts +2 -0
  83. package/dist/lib/transform/hardware-acceleration.d.ts +1 -0
  84. package/dist/lib/transform/index.d.ts +2 -0
  85. package/dist/lib/transition/disableTransition.d.ts +7 -0
  86. package/dist/lib/transition/enableTransition.d.ts +7 -0
  87. package/dist/lib/transition/index.d.ts +3 -0
  88. package/dist/lib/transition/withTransition.d.ts +2 -0
  89. package/dist/markup-canvas.cjs.js +2000 -0
  90. package/dist/markup-canvas.esm.js +1995 -0
  91. package/dist/markup-canvas.umd.js +2003 -0
  92. package/dist/markup-canvas.umd.min.js +1 -0
  93. package/dist/types/canvas.d.ts +86 -0
  94. package/dist/types/config.d.ts +38 -0
  95. package/dist/types/events.d.ts +33 -0
  96. package/dist/types/index.d.ts +5 -0
  97. package/dist/types/matrix.d.ts +17 -0
  98. package/dist/types/rulers.d.ts +31 -0
  99. package/dist/umd.d.ts +1 -0
  100. package/package.json +56 -0
  101. package/src/index.ts +19 -0
  102. package/src/lib/MarkupCanvas.ts +434 -0
  103. package/src/lib/canvas/calcVisibleArea.ts +20 -0
  104. package/src/lib/canvas/checkContainerDimensions.ts +20 -0
  105. package/src/lib/canvas/config.ts +29 -0
  106. package/src/lib/canvas/createCanvas.ts +61 -0
  107. package/src/lib/canvas/createCanvasLayers.ts +39 -0
  108. package/src/lib/canvas/getCanvasBounds.ts +68 -0
  109. package/src/lib/canvas/getCanvasMethods.ts +104 -0
  110. package/src/lib/canvas/getEmptyBounds.ts +22 -0
  111. package/src/lib/canvas/index.ts +3 -0
  112. package/src/lib/canvas/moveExistingContent.ts +9 -0
  113. package/src/lib/canvas/setupCanvasContainer.ts +22 -0
  114. package/src/lib/canvas/setupContentLayer.ts +6 -0
  115. package/src/lib/canvas/setupTransformLayer.ts +15 -0
  116. package/src/lib/config/constants.ts +56 -0
  117. package/src/lib/config/createMarkupCanvasConfig.ts +56 -0
  118. package/src/lib/constants.ts +16 -0
  119. package/src/lib/events/EventEmitter.ts +34 -0
  120. package/src/lib/events/constants.ts +9 -0
  121. package/src/lib/events/index.ts +6 -0
  122. package/src/lib/events/keyboard/handleKeyDown.ts +18 -0
  123. package/src/lib/events/keyboard/handleKeyUp.ts +28 -0
  124. package/src/lib/events/keyboard/setupKeyboardEvents.ts +114 -0
  125. package/src/lib/events/keyboard/setupKeyboardNavigation.ts +115 -0
  126. package/src/lib/events/mouse/handleClickToZoom.ts +54 -0
  127. package/src/lib/events/mouse/handleMouseDown.ts +45 -0
  128. package/src/lib/events/mouse/handleMouseLeave.ts +18 -0
  129. package/src/lib/events/mouse/handleMouseMove.ts +57 -0
  130. package/src/lib/events/mouse/handleMouseUp.ts +40 -0
  131. package/src/lib/events/mouse/setupMouseDrag.ts +159 -0
  132. package/src/lib/events/mouse/setupMouseEvents.ts +158 -0
  133. package/src/lib/events/touch/getTouchCenter.ts +6 -0
  134. package/src/lib/events/touch/getTouchDistance.ts +5 -0
  135. package/src/lib/events/touch/handleTouchEnd.ts +9 -0
  136. package/src/lib/events/touch/handleTouchMove.ts +58 -0
  137. package/src/lib/events/touch/handleTouchStart.ts +14 -0
  138. package/src/lib/events/touch/setupTouchEvents.ts +40 -0
  139. package/src/lib/events/trackpad/createTrackpadPanHandler.ts +35 -0
  140. package/src/lib/events/trackpad/detectTrackpadGesture.ts +22 -0
  141. package/src/lib/events/utils/getAdaptiveZoomSpeed.ts +21 -0
  142. package/src/lib/events/utils/resetClickState.ts +4 -0
  143. package/src/lib/events/utils/resetDragState.ts +17 -0
  144. package/src/lib/events/utils/updateCursor.ts +20 -0
  145. package/src/lib/events/wheel/handleWheel.ts +67 -0
  146. package/src/lib/events/wheel/setupWheelEvents.ts +24 -0
  147. package/src/lib/events/wheel/setupWheelHandler.ts +24 -0
  148. package/src/lib/helpers/index.ts +12 -0
  149. package/src/lib/helpers/withClampedZoom.ts +7 -0
  150. package/src/lib/helpers/withDebounce.ts +15 -0
  151. package/src/lib/helpers/withFeatureEnabled.ts +8 -0
  152. package/src/lib/helpers/withRAF.ts +38 -0
  153. package/src/lib/helpers/withRulerCheck.ts +52 -0
  154. package/src/lib/helpers/withRulerOffset.ts +14 -0
  155. package/src/lib/matrix/canvasToContent.ts +20 -0
  156. package/src/lib/matrix/clampZoom.ts +5 -0
  157. package/src/lib/matrix/contentToCanvas.ts +20 -0
  158. package/src/lib/matrix/createMatrix.ts +3 -0
  159. package/src/lib/matrix/createMatrixString.ts +3 -0
  160. package/src/lib/matrix/getZoomToMouseTransform.ts +46 -0
  161. package/src/lib/matrix/index.ts +5 -0
  162. package/src/lib/rulers/RulerElements.ts +6 -0
  163. package/src/lib/rulers/constants.ts +23 -0
  164. package/src/lib/rulers/createCornerBox.ts +27 -0
  165. package/src/lib/rulers/createGridOverlay.ts +22 -0
  166. package/src/lib/rulers/createHorizontalRuler.ts +24 -0
  167. package/src/lib/rulers/createRulerElements.ts +27 -0
  168. package/src/lib/rulers/createRulers.ts +94 -0
  169. package/src/lib/rulers/createVerticalRuler.ts +24 -0
  170. package/src/lib/rulers/index.ts +2 -0
  171. package/src/lib/rulers/setupRulerEvents.ts +23 -0
  172. package/src/lib/rulers/ticks/calculateTickSpacing.ts +15 -0
  173. package/src/lib/rulers/ticks/createHorizontalTick.ts +41 -0
  174. package/src/lib/rulers/ticks/createVerticalTick.ts +43 -0
  175. package/src/lib/rulers/ticks/index.ts +3 -0
  176. package/src/lib/rulers/updateGrid.ts +11 -0
  177. package/src/lib/rulers/updateHorizontalRuler.ts +32 -0
  178. package/src/lib/rulers/updateRulers.ts +33 -0
  179. package/src/lib/rulers/updateVerticalRuler.ts +31 -0
  180. package/src/lib/transform/applyTransform.ts +15 -0
  181. package/src/lib/transform/applyZoomToCanvas.ts +7 -0
  182. package/src/lib/transform/hardware-acceleration.ts +11 -0
  183. package/src/lib/transform/index.ts +2 -0
  184. package/src/lib/transition/disableTransition.ts +33 -0
  185. package/src/lib/transition/enableTransition.ts +26 -0
  186. package/src/lib/transition/index.ts +3 -0
  187. package/src/lib/transition/withTransition.ts +13 -0
  188. package/src/types/canvas.ts +89 -0
  189. package/src/types/config.ts +54 -0
  190. package/src/types/events.ts +31 -0
  191. package/src/types/index.ts +28 -0
  192. package/src/types/matrix.ts +19 -0
  193. package/src/types/rulers.ts +35 -0
  194. package/src/umd.ts +1 -0
package/README.md ADDED
@@ -0,0 +1,245 @@
1
+ # @markup-canvas/core
2
+
3
+ High-performance canvas-like container with pan and zoom capabilities.
4
+
5
+ ## ✨ Live Demo
6
+
7
+ Check out the live demo: [https://markup-canvas.vercel.app/](https://markup-canvas.vercel.app/)
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install @markup-canvas/core
13
+ # or
14
+ pnpm add @markup-canvas/core
15
+ # or
16
+ yarn add @markup-canvas/core
17
+ ```
18
+
19
+ **Using React?** Check out [`@markup-canvas/react`](../react) for a React component and hooks.
20
+
21
+ ## Usage
22
+
23
+ ### Basic Setup
24
+
25
+ ```javascript
26
+ import { MarkupCanvas } from '@markup-canvas/core';
27
+
28
+ const container = document.getElementById('canvas');
29
+
30
+ const canvas = new MarkupCanvas(container, {
31
+ width: 20000,
32
+ height: 15000,
33
+ enableZoom: true,
34
+ enablePan: true,
35
+ enableKeyboard: true,
36
+ enableRulers: true,
37
+ enableGrid: true,
38
+ });
39
+ ```
40
+
41
+ ### Event Handling
42
+
43
+ Listen to various events emitted by the canvas:
44
+
45
+ ```javascript
46
+ // Zoom changes
47
+ canvas.on('zoom', (zoom) => {
48
+ console.log('Zoom level:', zoom);
49
+ });
50
+
51
+ // Transform changes (includes zoom and pan)
52
+ canvas.on('transform', (transform) => {
53
+ console.log('Transform:', transform);
54
+ // { scale: 1.5, translateX: 100, translateY: 50 }
55
+ });
56
+
57
+ // Pan changes
58
+ canvas.on('pan', (pan) => {
59
+ console.log('Pan position:', pan);
60
+ // { x: 100, y: 50 }
61
+ });
62
+
63
+ // Canvas is ready
64
+ canvas.on('ready', () => {
65
+ console.log('Canvas is ready!');
66
+ });
67
+ ```
68
+
69
+ ### Programmatic Control
70
+
71
+ Control the canvas programmatically with these methods:
72
+
73
+ ```javascript
74
+ // Zoom controls
75
+ canvas.zoomIn(0.1); // Zoom in by 10%
76
+ canvas.zoomOut(0.1); // Zoom out by 10%
77
+ canvas.resetZoom(); // Reset to 100%
78
+ canvas.setZoom(2.0); // Set specific zoom level
79
+
80
+ // Pan controls
81
+ canvas.scrollToPoint(x, y); // Pan to specific coordinates
82
+ canvas.centerContent(); // Center the content
83
+
84
+ // Fit to screen
85
+ canvas.fitToScreen(); // Fit content to viewport
86
+
87
+ // Get current state
88
+ const zoom = canvas.transform.scale;
89
+ const pan = {
90
+ x: canvas.transform.translateX,
91
+ y: canvas.transform.translateY
92
+ };
93
+ ```
94
+
95
+ ### Cleanup
96
+
97
+ Always cleanup when you're done:
98
+
99
+ ```javascript
100
+ canvas.cleanup();
101
+ ```
102
+
103
+ ### Complete Example
104
+
105
+ Here's a complete example with HTML:
106
+
107
+ ```html
108
+ <!DOCTYPE html>
109
+ <html>
110
+ <head>
111
+ <style>
112
+ #canvas-container {
113
+ width: 100vw;
114
+ height: 100vh;
115
+ position: relative;
116
+ }
117
+
118
+ .controls {
119
+ position: fixed;
120
+ top: 20px;
121
+ left: 20px;
122
+ z-index: 1000;
123
+ }
124
+
125
+ .content {
126
+ width: 800px;
127
+ height: 600px;
128
+ background: white;
129
+ padding: 20px;
130
+ }
131
+ </style>
132
+ </head>
133
+ <body>
134
+ <div class="controls">
135
+ <button onclick="canvas.zoomIn()">Zoom In</button>
136
+ <button onclick="canvas.zoomOut()">Zoom Out</button>
137
+ <button onclick="canvas.resetZoom()">Reset</button>
138
+ <button onclick="canvas.fitToScreen()">Fit</button>
139
+ <span id="zoom-display">100%</span>
140
+ </div>
141
+
142
+ <div id="canvas-container">
143
+ <div class="content">
144
+ <h1>Your Content Here</h1>
145
+ <p>This content can be panned and zoomed!</p>
146
+ </div>
147
+ </div>
148
+
149
+ <script type="module">
150
+ import { MarkupCanvas } from '@markup-canvas/core';
151
+
152
+ const container = document.getElementById('canvas-container');
153
+
154
+ window.canvas = new MarkupCanvas(container, {
155
+ width: 20000,
156
+ height: 15000,
157
+ enableZoom: true,
158
+ enablePan: true,
159
+ enableKeyboard: true,
160
+ enableRulers: true,
161
+ enableGrid: true,
162
+ });
163
+
164
+ // Update zoom display
165
+ canvas.on('zoom', (zoom) => {
166
+ document.getElementById('zoom-display').textContent =
167
+ `${Math.round(zoom * 100)}%`;
168
+ });
169
+ </script>
170
+ </body>
171
+ </html>
172
+ ```
173
+
174
+ ## Features
175
+
176
+ - 🚀 **High Performance**: 60fps smooth animations with GPU acceleration
177
+ - 🎯 **Precise Control**: Zoom, pan, and navigate with mouse, keyboard, or touch
178
+ - 📏 **Rulers & Grid**: Optional rulers and grid overlay
179
+ - 🎨 **Pure HTML**: Use any HTML content or framework components
180
+ - 🔧 **Event System**: Built-in EventEmitter for reactive updates
181
+ - 📦 **TypeScript**: Full TypeScript support with comprehensive types
182
+
183
+ ## Configuration Options
184
+
185
+ ### Canvas Dimensions
186
+ - `width?: number` - Canvas width in pixels
187
+ - `height?: number` - Canvas height in pixels
188
+ - `enableAcceleration?: boolean` - Enable hardware acceleration
189
+
190
+ ### Interaction Controls
191
+ - `enableZoom?: boolean` - Enable zoom functionality
192
+ - `enablePan?: boolean` - Enable pan functionality
193
+ - `enableTouch?: boolean` - Enable touch gestures
194
+ - `enableKeyboard?: boolean` - Enable keyboard controls
195
+ - `limitKeyboardEventsToCanvas?: boolean` - Limit keyboard events to when canvas is focused
196
+
197
+ ### Zoom Behavior
198
+ - `zoomSpeed?: number` - Zoom speed factor
199
+ - `minZoom?: number` - Minimum zoom level
200
+ - `maxZoom?: number` - Maximum zoom level
201
+ - `enableTransition?: boolean` - Enable smooth transitions
202
+ - `transitionDuration?: number` - Transition duration in ms
203
+ - `enableAdaptiveSpeed?: boolean` - Enable adaptive zoom speed
204
+
205
+ ### Pan Behavior
206
+ - `enableLeftDrag?: boolean` - Enable left mouse button drag
207
+ - `enableMiddleDrag?: boolean` - Enable middle mouse button drag
208
+ - `requireSpaceForMouseDrag?: boolean` - Require space key for mouse drag
209
+ - `keyboardPanStep?: number` - Keyboard pan step size
210
+ - `keyboardFastMultiplier?: number` - Fast pan multiplier (with shift)
211
+ - `keyboardZoomStep?: number` - Keyboard zoom step size
212
+
213
+ ### Click-to-Zoom
214
+ - `enableClickToZoom?: boolean` - Enable click to zoom
215
+ - `clickZoomLevel?: number` - Target zoom level for click-to-zoom
216
+ - `requireOptionForClickZoom?: boolean` - Require Option/Alt key for click-to-zoom
217
+
218
+ ### Visual Elements
219
+ - `enableRulers?: boolean` - Show rulers
220
+ - `enableGrid?: boolean` - Show background grid
221
+ - `gridColor?: string` - Grid line color
222
+
223
+ ### Ruler Styling
224
+ - `rulerBackgroundColor?: string` - Ruler background color
225
+ - `rulerBorderColor?: string` - Ruler border color
226
+ - `rulerTextColor?: string` - Ruler text color
227
+ - `rulerMajorTickColor?: string` - Major tick mark color
228
+ - `rulerMinorTickColor?: string` - Minor tick mark color
229
+ - `rulerFontSize?: number` - Ruler font size
230
+ - `rulerFontFamily?: string` - Ruler font family
231
+ - `rulerUnits?: string` - Ruler units label
232
+
233
+ ### Callbacks
234
+ - `onTransformUpdate?: (transform: Transform) => void` - Called on transform update
235
+
236
+ ## API
237
+
238
+ See the [main documentation](../../README.md) for full API reference.
239
+
240
+ ## License
241
+
242
+ **CC BY-NC 4.0** - Creative Commons Attribution-NonCommercial 4.0 International
243
+
244
+ This project is licensed for non-commercial use only. See the [LICENSE](../../LICENSE) file for details.
245
+
@@ -0,0 +1,2 @@
1
+ export { MarkupCanvas, MarkupCanvas as default } from "./lib/MarkupCanvas.js";
2
+ export type { BaseCanvas, Canvas, CanvasBounds, CanvasOptions, GestureInfo, MarkupCanvasConfig, MarkupCanvasEvents, MouseDragControls, Point, RulerCanvas, RulerOptions, RulerSystem, TouchState, Transform, ZoomBoundaryOptions, ZoomBoundaryResult, } from "./types/index.js";
@@ -0,0 +1,78 @@
1
+ import type { Canvas, CanvasBounds, MarkupCanvasConfig, MarkupCanvasEvents, Transform } from "@/types/index.js";
2
+ declare global {
3
+ interface Window {
4
+ __markupCanvasTransitionTimeout?: number;
5
+ }
6
+ }
7
+ export declare class MarkupCanvas implements Canvas {
8
+ private baseCanvas;
9
+ private cleanupFunctions;
10
+ private rulers;
11
+ private dragSetup;
12
+ config: Required<MarkupCanvasConfig>;
13
+ private _isReady;
14
+ private listen;
15
+ constructor(container: HTMLElement, options?: MarkupCanvasConfig);
16
+ private setupEventHandlers;
17
+ get container(): HTMLElement;
18
+ get transformLayer(): HTMLElement;
19
+ get contentLayer(): HTMLElement;
20
+ get transform(): Transform;
21
+ get isReady(): boolean;
22
+ get isTransforming(): boolean;
23
+ get visibleBounds(): {
24
+ x: number;
25
+ y: number;
26
+ width: number;
27
+ height: number;
28
+ };
29
+ getBounds(): CanvasBounds;
30
+ updateTransform(newTransform: Partial<Transform>): boolean;
31
+ private emitTransformEvents;
32
+ reset(): boolean;
33
+ handleResize(): boolean;
34
+ setZoom(zoomLevel: number): boolean;
35
+ canvasToContent(x: number, y: number): {
36
+ x: number;
37
+ y: number;
38
+ };
39
+ zoomToPoint(x: number, y: number, targetScale: number): boolean;
40
+ resetView(): boolean;
41
+ zoomToFitContent(): boolean;
42
+ panLeft(distance?: number): boolean;
43
+ panRight(distance?: number): boolean;
44
+ panUp(distance?: number): boolean;
45
+ panDown(distance?: number): boolean;
46
+ zoomIn(factor?: number): boolean;
47
+ zoomOut(factor?: number): boolean;
48
+ resetZoom(): boolean;
49
+ enableMouseDrag(): boolean;
50
+ disableMouseDrag(): boolean;
51
+ isMouseDragEnabled(): boolean;
52
+ toggleGrid(): boolean;
53
+ showGrid(): boolean;
54
+ hideGrid(): boolean;
55
+ isGridVisible(): boolean;
56
+ toggleRulers(): boolean;
57
+ showRulers(): boolean;
58
+ hideRulers(): boolean;
59
+ areRulersVisible(): boolean;
60
+ centerContent(): boolean;
61
+ fitToScreen(): boolean;
62
+ getVisibleArea(): {
63
+ x: number;
64
+ y: number;
65
+ width: number;
66
+ height: number;
67
+ };
68
+ isPointVisible(x: number, y: number): boolean;
69
+ scrollToPoint(x: number, y: number): boolean;
70
+ getConfig(): Required<MarkupCanvasConfig>;
71
+ updateConfig(newConfig: Partial<MarkupCanvasConfig>): void;
72
+ cleanup(): void;
73
+ on<K extends keyof MarkupCanvasEvents>(event: K, handler: (data: MarkupCanvasEvents[K]) => void): void;
74
+ off<K extends keyof MarkupCanvasEvents>(event: K, handler: (data: MarkupCanvasEvents[K]) => void): void;
75
+ emit<K extends keyof MarkupCanvasEvents>(event: K, data: MarkupCanvasEvents[K]): void;
76
+ removeAllListeners(): void;
77
+ destroy(): void;
78
+ }
@@ -0,0 +1,10 @@
1
+ export declare function calculateVisibleArea(canvasWidth: number, canvasHeight: number, contentWidth: number, contentHeight: number, transform: {
2
+ scale: number;
3
+ translateX: number;
4
+ translateY: number;
5
+ }): {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ };
@@ -0,0 +1 @@
1
+ export declare function checkContainerDimensions(container: HTMLElement): void;
@@ -0,0 +1,2 @@
1
+ import type { CanvasOptions } from "@/types/index.js";
2
+ export declare function createCanvasConfig(options?: CanvasOptions): Required<CanvasOptions>;
@@ -0,0 +1,2 @@
1
+ import type { BaseCanvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function createCanvas(container: HTMLElement, config: Required<MarkupCanvasConfig>): BaseCanvas | null;
@@ -0,0 +1,6 @@
1
+ import type { MarkupCanvasConfig } from "@/types/index.js";
2
+ export interface CanvasLayers {
3
+ transformLayer: HTMLElement;
4
+ contentLayer: HTMLElement;
5
+ }
6
+ export declare function createCanvasLayers(container: HTMLElement, config: Required<MarkupCanvasConfig>): CanvasLayers;
@@ -0,0 +1,2 @@
1
+ import type { BaseCanvas, CanvasBounds } from "@/types/index.js";
2
+ export declare function getCanvasBounds(canvas: BaseCanvas): CanvasBounds;
@@ -0,0 +1,12 @@
1
+ import type { BaseCanvas, Transform } from "@/types/index.js";
2
+ export declare function getCanvasMethods(): {
3
+ getBounds: (this: BaseCanvas) => import("@/types/index.js").CanvasBounds;
4
+ updateTransform: (this: BaseCanvas, newTransform: Partial<Transform>) => boolean;
5
+ reset: (this: BaseCanvas) => boolean;
6
+ handleResize: (this: BaseCanvas) => boolean;
7
+ setZoom: (this: BaseCanvas, zoomLevel: number) => boolean;
8
+ canvasToContent: (this: BaseCanvas, x: number, y: number) => import("@/types/index.js").Point;
9
+ zoomToPoint: (this: BaseCanvas, x: number, y: number, targetScale: number) => boolean;
10
+ resetView: (this: BaseCanvas) => boolean;
11
+ zoomToFitContent: (this: BaseCanvas) => boolean;
12
+ };
@@ -0,0 +1,2 @@
1
+ import type { CanvasBounds } from "@/types";
2
+ export declare function getEmptyBounds(): CanvasBounds;
@@ -0,0 +1,3 @@
1
+ export { createCanvasConfig } from "./config.js";
2
+ export { createCanvas } from "./createCanvas.js";
3
+ export { getCanvasBounds } from "./getCanvasBounds.js";
@@ -0,0 +1 @@
1
+ export declare function moveExistingContent(existingContent: Element[], contentLayer: HTMLElement, transformLayer: HTMLElement): void;
@@ -0,0 +1 @@
1
+ export declare function setupCanvasContainer(container: HTMLElement): void;
@@ -0,0 +1 @@
1
+ export declare function setupContentLayer(contentLayer: HTMLElement): void;
@@ -0,0 +1,2 @@
1
+ import type { MarkupCanvasConfig } from "@/types";
2
+ export declare function setupTransformLayer(transformLayer: HTMLElement, config: Required<MarkupCanvasConfig>): void;
@@ -0,0 +1,2 @@
1
+ import type { MarkupCanvasConfig } from "@/types";
2
+ export declare const DEFAULT_CONFIG: Required<MarkupCanvasConfig>;
@@ -0,0 +1,2 @@
1
+ import type { MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function createMarkupCanvasConfig(options?: MarkupCanvasConfig): Required<MarkupCanvasConfig>;
@@ -0,0 +1,7 @@
1
+ export declare const DEFAULT_ZOOM = 1;
2
+ export declare const ZOOM_CHANGE_THRESHOLD = 0.001;
3
+ export declare const FALLBACK_TRANSITION_DURATION = 0.2;
4
+ export declare const ZOOM_FIT_PADDING = 0.9;
5
+ export declare const CANVAS_CONTAINER_CLASS = "canvas-container";
6
+ export declare const TRANSFORM_LAYER_CLASS = "transform-layer";
7
+ export declare const CONTENT_LAYER_CLASS = "content-layer";
@@ -0,0 +1,7 @@
1
+ export declare class EventEmitter<Events extends Record<string, unknown>> {
2
+ private listeners;
3
+ on<K extends keyof Events>(event: K, handler: (data: Events[K]) => void): void;
4
+ off<K extends keyof Events>(event: K, handler: (data: Events[K]) => void): void;
5
+ emit<K extends keyof Events>(event: K, data: Events[K]): void;
6
+ removeAllListeners(): void;
7
+ }
@@ -0,0 +1,7 @@
1
+ export declare const REFERENCE_DISPLAY_AREA: number;
2
+ export declare const TRACKPAD_PINCH_SPEED_FACTOR = 0.05;
3
+ export declare const ADAPTIVE_ZOOM_FACTOR = 1;
4
+ export declare const CLICK_THRESHOLDS: {
5
+ readonly MAX_DURATION: 300;
6
+ readonly MAX_MOVEMENT: 5;
7
+ };
@@ -0,0 +1,6 @@
1
+ export { setupKeyboardEvents } from "./keyboard/setupKeyboardEvents.js";
2
+ export { setupMouseEvents } from "./mouse/setupMouseEvents.js";
3
+ export { setupTouchEvents } from "./touch/setupTouchEvents.js";
4
+ export { detectTrackpadGesture } from "./trackpad/detectTrackpadGesture.js";
5
+ export { getAdaptiveZoomSpeed } from "./utils/getAdaptiveZoomSpeed.js";
6
+ export { setupWheelEvents } from "./wheel/setupWheelEvents.js";
@@ -0,0 +1,4 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function handleKeyDown(event: KeyboardEvent, canvas: Canvas, config: Required<MarkupCanvasConfig>, isDragEnabled: boolean, isDragging: boolean, setters: {
3
+ setIsSpacePressed: (value: boolean) => void;
4
+ }): void;
@@ -0,0 +1,6 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function handleKeyUp(event: KeyboardEvent, canvas: Canvas, config: Required<MarkupCanvasConfig>, isDragEnabled: boolean, isDragging: boolean, setters: {
3
+ setIsSpacePressed: (value: boolean) => void;
4
+ setIsDragging: (value: boolean) => void;
5
+ setDragButton: (value: number) => void;
6
+ }): void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function setupKeyboardEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>): () => void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function setupKeyboardEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>): () => void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function handleClickToZoom(event: MouseEvent, canvas: Canvas, config: Required<MarkupCanvasConfig>, mouseDownTime: number, hasDragged: boolean, isDragging: boolean): void;
@@ -0,0 +1,11 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function handleMouseDown(event: MouseEvent, canvas: Canvas, config: Required<MarkupCanvasConfig>, isDragEnabled: boolean, isSpacePressed: boolean, setters: {
3
+ setMouseDownTime: (value: number) => void;
4
+ setMouseDownX: (value: number) => void;
5
+ setMouseDownY: (value: number) => void;
6
+ setHasDragged: (value: boolean) => void;
7
+ setIsDragging: (value: boolean) => void;
8
+ setDragButton: (value: number) => void;
9
+ setLastMouseX: (value: number) => void;
10
+ setLastMouseY: (value: number) => void;
11
+ }): void;
@@ -0,0 +1,5 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function handleMouseLeave(canvas: Canvas, config: Required<MarkupCanvasConfig>, isDragEnabled: boolean, isSpacePressed: boolean, isDragging: boolean, setters: {
3
+ setIsDragging: (value: boolean) => void;
4
+ setDragButton: (value: number) => void;
5
+ }): void;
@@ -0,0 +1,7 @@
1
+ import type { Canvas } from "@/types/index.js";
2
+ export declare function handleMouseMove(event: MouseEvent, canvas: Canvas, isDragEnabled: boolean, isDragging: boolean, mouseDownTime: number, mouseDownX: number, mouseDownY: number, lastMouseX: number, lastMouseY: number, setters: {
3
+ setHasDragged: (value: boolean) => void;
4
+ setIsDragging: (value: boolean) => void;
5
+ setLastMouseX: (value: number) => void;
6
+ setLastMouseY: (value: number) => void;
7
+ }): void;
@@ -0,0 +1,7 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function handleMouseUp(event: MouseEvent, canvas: Canvas, config: Required<MarkupCanvasConfig>, isDragEnabled: boolean, isSpacePressed: boolean, isDragging: boolean, dragButton: number, mouseDownTime: number, hasDragged: boolean, setters: {
3
+ setIsDragging: (value: boolean) => void;
4
+ setDragButton: (value: number) => void;
5
+ setMouseDownTime: (value: number) => void;
6
+ setHasDragged: (value: boolean) => void;
7
+ }): void;
@@ -0,0 +1,4 @@
1
+ import type { MouseDragControls } from "@/types/events.js";
2
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
3
+ export declare function setupMouseEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>, withControls: true): MouseDragControls;
4
+ export declare function setupMouseEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>, withControls: false): () => void;
@@ -0,0 +1,4 @@
1
+ import type { MouseDragControls } from "@/types/events.js";
2
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
3
+ export declare function setupMouseEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>, withControls: true): MouseDragControls;
4
+ export declare function setupMouseEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>, withControls: false): () => void;
@@ -0,0 +1,4 @@
1
+ export declare function getTouchCenter(touch1: Touch, touch2: Touch): {
2
+ x: number;
3
+ y: number;
4
+ };
@@ -0,0 +1 @@
1
+ export declare function getTouchDistance(touch1: Touch, touch2: Touch): number;
@@ -0,0 +1,2 @@
1
+ import type { TouchState } from "@/types/index.js";
2
+ export declare function handleTouchEnd(event: TouchEvent, touchState: TouchState): void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, TouchState } from "@/types/index.js";
2
+ export declare function handleTouchMove(event: TouchEvent, canvas: Canvas, touchState: TouchState): void;
@@ -0,0 +1,2 @@
1
+ import type { TouchState } from "@/types/index.js";
2
+ export declare function handleTouchStart(event: TouchEvent, touchState: TouchState): void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas } from "@/types/index.js";
2
+ export declare function setupTouchEvents(canvas: Canvas): () => void;
@@ -0,0 +1,4 @@
1
+ import type { BaseCanvas } from "@/types";
2
+ export declare const createTrackpadPanHandler: (canvas: BaseCanvas) => ((...args: unknown[]) => boolean) & {
3
+ cleanup: () => void;
4
+ };
@@ -0,0 +1,2 @@
1
+ import type { GestureInfo } from "@/types/index.js";
2
+ export declare function detectTrackpadGesture(event: WheelEvent): GestureInfo;
@@ -0,0 +1,2 @@
1
+ import type { BaseCanvas } from "@/types/index.js";
2
+ export declare function getAdaptiveZoomSpeed(canvas: BaseCanvas, baseSpeed: number): number;
@@ -0,0 +1,4 @@
1
+ export declare function resetClickState(setters: {
2
+ setMouseDownTime: (value: number) => void;
3
+ setHasDragged: (value: boolean) => void;
4
+ }): void;
@@ -0,0 +1,5 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function resetDragState(canvas: Canvas, config: Required<MarkupCanvasConfig>, isDragEnabled: boolean, isSpacePressed: boolean, setters: {
3
+ setIsDragging: (value: boolean) => void;
4
+ setDragButton: (value: number) => void;
5
+ }): void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function updateCursor(canvas: Canvas, config: Required<MarkupCanvasConfig>, isDragEnabled: boolean, isSpacePressed: boolean, isDragging: boolean): void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types/index.js";
2
+ export declare function handleWheel(event: WheelEvent, canvas: Canvas, config: Required<MarkupCanvasConfig>): boolean;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types";
2
+ export declare function setupWheelEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>): () => void;
@@ -0,0 +1,2 @@
1
+ import type { Canvas, MarkupCanvasConfig } from "@/types";
2
+ export declare function setupWheelEvents(canvas: Canvas, config: Required<MarkupCanvasConfig>): () => void;
@@ -0,0 +1,6 @@
1
+ export { withClampedZoom } from "./withClampedZoom.js";
2
+ export { withDebounce } from "./withDebounce.js";
3
+ export { withFeatureEnabled } from "./withFeatureEnabled.js";
4
+ export { withRAF, withRAFThrottle } from "./withRAF.js";
5
+ export { withRulerAdjustment, withRulerCheck, withRulerOffsetObject, withRulerOffsets, withRulerSize, } from "./withRulerCheck.js";
6
+ export { withRulerOffset } from "./withRulerOffset.js";
@@ -0,0 +1,2 @@
1
+ import type { MarkupCanvasConfig } from "@/types";
2
+ export declare function withClampedZoom<T>(config: Required<MarkupCanvasConfig>, operation: (clamp: (scale: number) => number) => T): T;
@@ -0,0 +1 @@
1
+ export declare function withDebounce(key: string, delay: number, operation: () => void): void;
@@ -0,0 +1,2 @@
1
+ import type { MarkupCanvasConfig } from "@/types";
2
+ export declare function withFeatureEnabled<T>(config: MarkupCanvasConfig, feature: keyof MarkupCanvasConfig, operation: () => T): T | null;
@@ -0,0 +1,4 @@
1
+ export declare function withRAF(operation: () => void): () => void;
2
+ export declare function withRAFThrottle<T extends (...args: unknown[]) => void>(func: T): T & {
3
+ cleanup: () => void;
4
+ };
@@ -0,0 +1,18 @@
1
+ export declare function withRulerCheck<T>(canvas: {
2
+ container: HTMLElement;
3
+ }, operation: (hasRulers: boolean) => T): T;
4
+ export declare function withRulerSize<T>(canvas: {
5
+ container: HTMLElement;
6
+ }, operation: (rulerSize: number) => T): T;
7
+ export declare function withRulerAdjustment(canvas: {
8
+ container: HTMLElement;
9
+ }, value: number, operation?: (adjustedValue: number) => void): number;
10
+ export declare function withRulerOffsets<T>(canvas: {
11
+ container: HTMLElement;
12
+ }, x: number, y: number, operation: (adjustedX: number, adjustedY: number) => T): T;
13
+ export declare function withRulerOffsetObject<T, C extends {
14
+ x: number;
15
+ y: number;
16
+ }>(canvas: {
17
+ container: HTMLElement;
18
+ }, coords: C, operation: (adjusted: C) => T): T;
@@ -0,0 +1,3 @@
1
+ export declare function withRulerOffset<T>(canvas: {
2
+ container: HTMLElement;
3
+ }, x: number, y: number, operation: (adjustedX: number, adjustedY: number) => T): T;