@tsdraw/core 0.8.4 → 0.8.5

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/dist/index.cjs CHANGED
@@ -249,8 +249,13 @@ function setViewport(viewport, updater) {
249
249
  function panViewport(viewport, dx, dy) {
250
250
  return { ...viewport, x: viewport.x + dx, y: viewport.y + dy };
251
251
  }
252
- function zoomViewport(viewport, factor, centerX, centerY) {
253
- const zoom = Math.max(0.1, Math.min(4, viewport.zoom * factor));
252
+ var DEFAULT_ZOOM_RANGE = { min: 0.1, max: 4 };
253
+ function clampZoom(zoom, range) {
254
+ const { min, max } = range ?? DEFAULT_ZOOM_RANGE;
255
+ return Math.max(min, Math.min(max, zoom));
256
+ }
257
+ function zoomViewport(viewport, factor, centerX, centerY, zoomRange) {
258
+ const zoom = clampZoom(viewport.zoom * factor, zoomRange);
254
259
  if (centerX == null || centerY == null) {
255
260
  return { ...viewport, zoom };
256
261
  }
@@ -305,7 +310,8 @@ var SLIDE_FRICTION = 0.92;
305
310
  var SLIDE_MIN_SPEED = 0.01;
306
311
  var SLIDE_MAX_SPEED = 2;
307
312
  var SLIDE_MIN_VELOCITY_TO_START = 0.1;
308
- function startCameraSlide(session, applyPan, onFrame) {
313
+ function startCameraSlide(session, applyPan, onFrame, slideOptions) {
314
+ const friction = slideOptions?.friction ?? SLIDE_FRICTION;
309
315
  const timeSinceLastMove = performance.now() - session.lastMoveTime;
310
316
  const FRAME_DURATION = 16;
311
317
  const decayFactor = Math.pow(1 - VELOCITY_LERP_FACTOR, timeSinceLastMove / FRAME_DURATION);
@@ -325,7 +331,7 @@ function startCameraSlide(session, applyPan, onFrame) {
325
331
  lastTime = now;
326
332
  applyPan(dirX * currentSpeed * elapsed, dirY * currentSpeed * elapsed);
327
333
  onFrame();
328
- currentSpeed *= SLIDE_FRICTION;
334
+ currentSpeed *= friction;
329
335
  if (currentSpeed < SLIDE_MIN_SPEED) {
330
336
  rafId = 0;
331
337
  return;
@@ -1711,7 +1717,7 @@ var Editor = class {
1711
1717
  historyBatchChanged = false;
1712
1718
  // Creates a new editor instance with the given options (with defaults if not provided)
1713
1719
  constructor(opts = {}) {
1714
- this.options = { dragDistanceSquared: opts.dragDistanceSquared ?? DRAG_DISTANCE_SQUARED };
1720
+ this.options = { dragDistanceSquared: opts.dragDistanceSquared ?? DRAG_DISTANCE_SQUARED, zoomRange: opts.zoomRange };
1715
1721
  this.lastDocumentSnapshot = this.getDocumentSnapshot();
1716
1722
  this.store.listen(() => {
1717
1723
  this.captureDocumentHistory();
@@ -1825,7 +1831,7 @@ var Editor = class {
1825
1831
  this.viewport = {
1826
1832
  x: partial.x ?? this.viewport.x,
1827
1833
  y: partial.y ?? this.viewport.y,
1828
- zoom: Math.max(0.1, Math.min(4, rawZoom))
1834
+ zoom: clampZoom(rawZoom, this.options.zoomRange)
1829
1835
  };
1830
1836
  this.emitChange();
1831
1837
  }
@@ -1836,7 +1842,7 @@ var Editor = class {
1836
1842
  });
1837
1843
  }
1838
1844
  zoomAt(factor, screenX, screenY) {
1839
- this.viewport = zoomViewport(this.viewport, factor, screenX, screenY);
1845
+ this.viewport = zoomViewport(this.viewport, factor, screenX, screenY, this.options.zoomRange);
1840
1846
  this.emitChange();
1841
1847
  }
1842
1848
  deleteShapes(ids) {
@@ -2260,6 +2266,7 @@ exports.CanvasRenderer = CanvasRenderer;
2260
2266
  exports.CircleDrawingState = CircleDrawingState;
2261
2267
  exports.CircleIdleState = CircleIdleState;
2262
2268
  exports.DEFAULT_COLORS = DEFAULT_COLORS;
2269
+ exports.DEFAULT_ZOOM_RANGE = DEFAULT_ZOOM_RANGE;
2263
2270
  exports.DRAG_DISTANCE_SQUARED = DRAG_DISTANCE_SQUARED;
2264
2271
  exports.DocumentStore = DocumentStore;
2265
2272
  exports.ERASER_MARGIN = ERASER_MARGIN;
@@ -2288,6 +2295,7 @@ exports.boundsIntersect = boundsIntersect;
2288
2295
  exports.boundsOf = boundsOf;
2289
2296
  exports.buildStartPositions = buildStartPositions;
2290
2297
  exports.buildTransformSnapshots = buildTransformSnapshots;
2298
+ exports.clampZoom = clampZoom;
2291
2299
  exports.closestOnSegment = closestOnSegment;
2292
2300
  exports.createViewport = createViewport;
2293
2301
  exports.decodeFirstPoint = decodeFirstPoint;