@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.
- package/README.md +245 -0
- package/dist/index.d.ts +2 -0
- package/dist/lib/MarkupCanvas.d.ts +78 -0
- package/dist/lib/canvas/calcVisibleArea.d.ts +10 -0
- package/dist/lib/canvas/checkContainerDimensions.d.ts +1 -0
- package/dist/lib/canvas/config.d.ts +2 -0
- package/dist/lib/canvas/createCanvas.d.ts +2 -0
- package/dist/lib/canvas/createCanvasLayers.d.ts +6 -0
- package/dist/lib/canvas/getCanvasBounds.d.ts +2 -0
- package/dist/lib/canvas/getCanvasMethods.d.ts +12 -0
- package/dist/lib/canvas/getEmptyBounds.d.ts +2 -0
- package/dist/lib/canvas/index.d.ts +3 -0
- package/dist/lib/canvas/moveExistingContent.d.ts +1 -0
- package/dist/lib/canvas/setupCanvasContainer.d.ts +1 -0
- package/dist/lib/canvas/setupContentLayer.d.ts +1 -0
- package/dist/lib/canvas/setupTransformLayer.d.ts +2 -0
- package/dist/lib/config/constants.d.ts +2 -0
- package/dist/lib/config/createMarkupCanvasConfig.d.ts +2 -0
- package/dist/lib/constants.d.ts +7 -0
- package/dist/lib/events/EventEmitter.d.ts +7 -0
- package/dist/lib/events/constants.d.ts +7 -0
- package/dist/lib/events/index.d.ts +6 -0
- package/dist/lib/events/keyboard/handleKeyDown.d.ts +4 -0
- package/dist/lib/events/keyboard/handleKeyUp.d.ts +6 -0
- package/dist/lib/events/keyboard/setupKeyboardEvents.d.ts +2 -0
- package/dist/lib/events/keyboard/setupKeyboardNavigation.d.ts +2 -0
- package/dist/lib/events/mouse/handleClickToZoom.d.ts +2 -0
- package/dist/lib/events/mouse/handleMouseDown.d.ts +11 -0
- package/dist/lib/events/mouse/handleMouseLeave.d.ts +5 -0
- package/dist/lib/events/mouse/handleMouseMove.d.ts +7 -0
- package/dist/lib/events/mouse/handleMouseUp.d.ts +7 -0
- package/dist/lib/events/mouse/setupMouseDrag.d.ts +4 -0
- package/dist/lib/events/mouse/setupMouseEvents.d.ts +4 -0
- package/dist/lib/events/touch/getTouchCenter.d.ts +4 -0
- package/dist/lib/events/touch/getTouchDistance.d.ts +1 -0
- package/dist/lib/events/touch/handleTouchEnd.d.ts +2 -0
- package/dist/lib/events/touch/handleTouchMove.d.ts +2 -0
- package/dist/lib/events/touch/handleTouchStart.d.ts +2 -0
- package/dist/lib/events/touch/setupTouchEvents.d.ts +2 -0
- package/dist/lib/events/trackpad/createTrackpadPanHandler.d.ts +4 -0
- package/dist/lib/events/trackpad/detectTrackpadGesture.d.ts +2 -0
- package/dist/lib/events/utils/getAdaptiveZoomSpeed.d.ts +2 -0
- package/dist/lib/events/utils/resetClickState.d.ts +4 -0
- package/dist/lib/events/utils/resetDragState.d.ts +5 -0
- package/dist/lib/events/utils/updateCursor.d.ts +2 -0
- package/dist/lib/events/wheel/handleWheel.d.ts +2 -0
- package/dist/lib/events/wheel/setupWheelEvents.d.ts +2 -0
- package/dist/lib/events/wheel/setupWheelHandler.d.ts +2 -0
- package/dist/lib/helpers/index.d.ts +6 -0
- package/dist/lib/helpers/withClampedZoom.d.ts +2 -0
- package/dist/lib/helpers/withDebounce.d.ts +1 -0
- package/dist/lib/helpers/withFeatureEnabled.d.ts +2 -0
- package/dist/lib/helpers/withRAF.d.ts +4 -0
- package/dist/lib/helpers/withRulerCheck.d.ts +18 -0
- package/dist/lib/helpers/withRulerOffset.d.ts +3 -0
- package/dist/lib/matrix/canvasToContent.d.ts +2 -0
- package/dist/lib/matrix/clampZoom.d.ts +2 -0
- package/dist/lib/matrix/contentToCanvas.d.ts +2 -0
- package/dist/lib/matrix/createMatrix.d.ts +1 -0
- package/dist/lib/matrix/createMatrixString.d.ts +1 -0
- package/dist/lib/matrix/getZoomToMouseTransform.d.ts +2 -0
- package/dist/lib/matrix/index.d.ts +5 -0
- package/dist/lib/rulers/RulerElements.d.ts +6 -0
- package/dist/lib/rulers/constants.d.ts +19 -0
- package/dist/lib/rulers/createCornerBox.d.ts +2 -0
- package/dist/lib/rulers/createGridOverlay.d.ts +2 -0
- package/dist/lib/rulers/createHorizontalRuler.d.ts +2 -0
- package/dist/lib/rulers/createRulerElements.d.ts +3 -0
- package/dist/lib/rulers/createRulers.d.ts +2 -0
- package/dist/lib/rulers/createVerticalRuler.d.ts +2 -0
- package/dist/lib/rulers/index.d.ts +2 -0
- package/dist/lib/rulers/setupRulerEvents.d.ts +2 -0
- package/dist/lib/rulers/ticks/calculateTickSpacing.d.ts +1 -0
- package/dist/lib/rulers/ticks/createHorizontalTick.d.ts +2 -0
- package/dist/lib/rulers/ticks/createVerticalTick.d.ts +2 -0
- package/dist/lib/rulers/ticks/index.d.ts +3 -0
- package/dist/lib/rulers/updateGrid.d.ts +1 -0
- package/dist/lib/rulers/updateHorizontalRuler.d.ts +2 -0
- package/dist/lib/rulers/updateRulers.d.ts +2 -0
- package/dist/lib/rulers/updateVerticalRuler.d.ts +2 -0
- package/dist/lib/transform/applyTransform.d.ts +1 -0
- package/dist/lib/transform/applyZoomToCanvas.d.ts +2 -0
- package/dist/lib/transform/hardware-acceleration.d.ts +1 -0
- package/dist/lib/transform/index.d.ts +2 -0
- package/dist/lib/transition/disableTransition.d.ts +7 -0
- package/dist/lib/transition/enableTransition.d.ts +7 -0
- package/dist/lib/transition/index.d.ts +3 -0
- package/dist/lib/transition/withTransition.d.ts +2 -0
- package/dist/markup-canvas.cjs.js +2000 -0
- package/dist/markup-canvas.esm.js +1995 -0
- package/dist/markup-canvas.umd.js +2003 -0
- package/dist/markup-canvas.umd.min.js +1 -0
- package/dist/types/canvas.d.ts +86 -0
- package/dist/types/config.d.ts +38 -0
- package/dist/types/events.d.ts +33 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/matrix.d.ts +17 -0
- package/dist/types/rulers.d.ts +31 -0
- package/dist/umd.d.ts +1 -0
- package/package.json +56 -0
- package/src/index.ts +19 -0
- package/src/lib/MarkupCanvas.ts +434 -0
- package/src/lib/canvas/calcVisibleArea.ts +20 -0
- package/src/lib/canvas/checkContainerDimensions.ts +20 -0
- package/src/lib/canvas/config.ts +29 -0
- package/src/lib/canvas/createCanvas.ts +61 -0
- package/src/lib/canvas/createCanvasLayers.ts +39 -0
- package/src/lib/canvas/getCanvasBounds.ts +68 -0
- package/src/lib/canvas/getCanvasMethods.ts +104 -0
- package/src/lib/canvas/getEmptyBounds.ts +22 -0
- package/src/lib/canvas/index.ts +3 -0
- package/src/lib/canvas/moveExistingContent.ts +9 -0
- package/src/lib/canvas/setupCanvasContainer.ts +22 -0
- package/src/lib/canvas/setupContentLayer.ts +6 -0
- package/src/lib/canvas/setupTransformLayer.ts +15 -0
- package/src/lib/config/constants.ts +56 -0
- package/src/lib/config/createMarkupCanvasConfig.ts +56 -0
- package/src/lib/constants.ts +16 -0
- package/src/lib/events/EventEmitter.ts +34 -0
- package/src/lib/events/constants.ts +9 -0
- package/src/lib/events/index.ts +6 -0
- package/src/lib/events/keyboard/handleKeyDown.ts +18 -0
- package/src/lib/events/keyboard/handleKeyUp.ts +28 -0
- package/src/lib/events/keyboard/setupKeyboardEvents.ts +114 -0
- package/src/lib/events/keyboard/setupKeyboardNavigation.ts +115 -0
- package/src/lib/events/mouse/handleClickToZoom.ts +54 -0
- package/src/lib/events/mouse/handleMouseDown.ts +45 -0
- package/src/lib/events/mouse/handleMouseLeave.ts +18 -0
- package/src/lib/events/mouse/handleMouseMove.ts +57 -0
- package/src/lib/events/mouse/handleMouseUp.ts +40 -0
- package/src/lib/events/mouse/setupMouseDrag.ts +159 -0
- package/src/lib/events/mouse/setupMouseEvents.ts +158 -0
- package/src/lib/events/touch/getTouchCenter.ts +6 -0
- package/src/lib/events/touch/getTouchDistance.ts +5 -0
- package/src/lib/events/touch/handleTouchEnd.ts +9 -0
- package/src/lib/events/touch/handleTouchMove.ts +58 -0
- package/src/lib/events/touch/handleTouchStart.ts +14 -0
- package/src/lib/events/touch/setupTouchEvents.ts +40 -0
- package/src/lib/events/trackpad/createTrackpadPanHandler.ts +35 -0
- package/src/lib/events/trackpad/detectTrackpadGesture.ts +22 -0
- package/src/lib/events/utils/getAdaptiveZoomSpeed.ts +21 -0
- package/src/lib/events/utils/resetClickState.ts +4 -0
- package/src/lib/events/utils/resetDragState.ts +17 -0
- package/src/lib/events/utils/updateCursor.ts +20 -0
- package/src/lib/events/wheel/handleWheel.ts +67 -0
- package/src/lib/events/wheel/setupWheelEvents.ts +24 -0
- package/src/lib/events/wheel/setupWheelHandler.ts +24 -0
- package/src/lib/helpers/index.ts +12 -0
- package/src/lib/helpers/withClampedZoom.ts +7 -0
- package/src/lib/helpers/withDebounce.ts +15 -0
- package/src/lib/helpers/withFeatureEnabled.ts +8 -0
- package/src/lib/helpers/withRAF.ts +38 -0
- package/src/lib/helpers/withRulerCheck.ts +52 -0
- package/src/lib/helpers/withRulerOffset.ts +14 -0
- package/src/lib/matrix/canvasToContent.ts +20 -0
- package/src/lib/matrix/clampZoom.ts +5 -0
- package/src/lib/matrix/contentToCanvas.ts +20 -0
- package/src/lib/matrix/createMatrix.ts +3 -0
- package/src/lib/matrix/createMatrixString.ts +3 -0
- package/src/lib/matrix/getZoomToMouseTransform.ts +46 -0
- package/src/lib/matrix/index.ts +5 -0
- package/src/lib/rulers/RulerElements.ts +6 -0
- package/src/lib/rulers/constants.ts +23 -0
- package/src/lib/rulers/createCornerBox.ts +27 -0
- package/src/lib/rulers/createGridOverlay.ts +22 -0
- package/src/lib/rulers/createHorizontalRuler.ts +24 -0
- package/src/lib/rulers/createRulerElements.ts +27 -0
- package/src/lib/rulers/createRulers.ts +94 -0
- package/src/lib/rulers/createVerticalRuler.ts +24 -0
- package/src/lib/rulers/index.ts +2 -0
- package/src/lib/rulers/setupRulerEvents.ts +23 -0
- package/src/lib/rulers/ticks/calculateTickSpacing.ts +15 -0
- package/src/lib/rulers/ticks/createHorizontalTick.ts +41 -0
- package/src/lib/rulers/ticks/createVerticalTick.ts +43 -0
- package/src/lib/rulers/ticks/index.ts +3 -0
- package/src/lib/rulers/updateGrid.ts +11 -0
- package/src/lib/rulers/updateHorizontalRuler.ts +32 -0
- package/src/lib/rulers/updateRulers.ts +33 -0
- package/src/lib/rulers/updateVerticalRuler.ts +31 -0
- package/src/lib/transform/applyTransform.ts +15 -0
- package/src/lib/transform/applyZoomToCanvas.ts +7 -0
- package/src/lib/transform/hardware-acceleration.ts +11 -0
- package/src/lib/transform/index.ts +2 -0
- package/src/lib/transition/disableTransition.ts +33 -0
- package/src/lib/transition/enableTransition.ts +26 -0
- package/src/lib/transition/index.ts +3 -0
- package/src/lib/transition/withTransition.ts +13 -0
- package/src/types/canvas.ts +89 -0
- package/src/types/config.ts +54 -0
- package/src/types/events.ts +31 -0
- package/src/types/index.ts +28 -0
- package/src/types/matrix.ts +19 -0
- package/src/types/rulers.ts +35 -0
- 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
|
+
|
package/dist/index.d.ts
ADDED
|
@@ -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,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,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 @@
|
|
|
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,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,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,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 @@
|
|
|
1
|
+
export declare function getTouchDistance(touch1: Touch, touch2: Touch): number;
|
|
@@ -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,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 @@
|
|
|
1
|
+
export declare function withDebounce(key: string, delay: number, operation: () => void): void;
|
|
@@ -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;
|