diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 574bfef5a..0ba5f3067 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -46,6 +46,10 @@ jobs:
if: runner.os != 'Windows'
run: |
cd packages/docsifyjs+docsify/ && git checkout docs/emoji.md src/core/render/emoji-data.js && cd .. && cd ..
- git status && git submodule foreach git --no-pager diff && git add . && git diff --quiet && git diff --cached --quiet
+ git status
+ git --no-pager diff
+ git submodule foreach git --no-pager diff
+ git add .
+ git diff --quiet && git diff --cached --quiet
env:
CI: true
diff --git a/apps/docs b/apps/docs
index 9c5bad096..1bf1b89a0 160000
--- a/apps/docs
+++ b/apps/docs
@@ -1 +1 @@
-Subproject commit 9c5bad096ea08207ac87670f84c7d9581ba1cb3b
+Subproject commit 1bf1b89a047e7df54a1a328a0166ca814fb058e8
diff --git a/dist/cameras/CameraRig.d.ts b/dist/cameras/CameraRig.d.ts
index 1e55163bc..be5935638 100644
--- a/dist/cameras/CameraRig.d.ts
+++ b/dist/cameras/CameraRig.d.ts
@@ -2,7 +2,7 @@ import { type ElementAttributes } from '@lume/element';
import { Element3D, type Element3DAttributes } from '../core/Element3D.js';
import { FlingRotation, ScrollFling, PinchFling } from '../interaction/index.js';
import type { PerspectiveCamera } from './PerspectiveCamera.js';
-export type CameraRigAttributes = Element3DAttributes | 'verticalAngle' | 'minVerticalAngle' | 'maxVerticalAngle' | 'horizontalAngle' | 'minHorizontalAngle' | 'maxHorizontalAngle' | 'distance' | 'minDistance' | 'maxDistance' | 'active' | 'dollySpeed' | 'interactive' | 'dollyEpsilon' | 'dollyScrollLerp' | 'dollyPinchSlowdown' | 'rotationEpsilon' | 'rotationSlowdown' | 'initialPolarAngle' | 'minPolarAngle' | 'maxPolarAngle' | 'initialDistance';
+export type CameraRigAttributes = Element3DAttributes | 'verticalAngle' | 'minVerticalAngle' | 'maxVerticalAngle' | 'horizontalAngle' | 'minHorizontalAngle' | 'maxHorizontalAngle' | 'distance' | 'minDistance' | 'maxDistance' | 'active' | 'dollySpeed' | 'interactive' | 'rotationSpeed' | 'dynamicDolly' | 'dynamicRotation' | 'dollyEpsilon' | 'dollyScrollLerp' | 'dollyPinchSlowdown' | 'rotationEpsilon' | 'rotationSlowdown' | 'initialPolarAngle' | 'minPolarAngle' | 'maxPolarAngle' | 'initialDistance';
/**
* @class CameraRig
*
@@ -217,6 +217,44 @@ export declare class CameraRig extends Element3D {
* disabled, but the camera rig can still be manipulated programmatically.
*/
interactive: boolean;
+ /**
+ * @property {number} rotationSpeed
+ *
+ * *attribute*
+ *
+ * Default: `1`
+ *
+ * How much the camera rotates while dragging.
+ */
+ rotationSpeed: number;
+ /**
+ * @property {boolean} dynamicDolly
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective dolly speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective dolly speed towards zero. This is useful when zoomed
+ * into an object and having the dolly movements not be disproportionately
+ * huge while viewing fine details of the object.
+ */
+ dynamicDolly: boolean;
+ /**
+ * @property {boolean} dynamicRotation
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective rotation speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective rotation speed to allow for finer control. This is useful
+ * zoomed in to see fine details of an object and having the rotation not be
+ * disproportionately huge, for example when zooming into a 3D globe.
+ */
+ dynamicRotation: boolean;
/**
* @property {number} dollyEpsilon
*
diff --git a/dist/cameras/CameraRig.d.ts.map b/dist/cameras/CameraRig.d.ts.map
index 338305a32..cf7312564 100644
--- a/dist/cameras/CameraRig.d.ts.map
+++ b/dist/cameras/CameraRig.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"CameraRig.d.ts","sourceRoot":"","sources":["../../src/cameras/CameraRig.ts"],"names":[],"mappings":"AAOA,OAAO,EAA6C,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAEhG,OAAO,EAAC,SAAS,EAAE,KAAK,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,yBAAyB,CAAA;AAE9E,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAA;AAE7D,MAAM,MAAM,mBAAmB,GAC5B,mBAAmB,GACnB,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,oBAAoB,GACpB,oBAAoB,GACpB,UAAU,GACV,aAAa,GACb,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,iBAAiB,CAAA;AAIpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAEM,SAAU,SAAQ,SAAS;;IAChC;;;;;;;OAOG;IACH,SAAkB,SAAS,EAAE,IAAI,CAAO;IAExC;;;;;;;;;;OAUG;IACc,aAAa,SAAI;IAElC;;;;;OAKG;IACH,IACI,iBAAiB,WAEpB;IACD,IAAI,iBAAiB,CAAC,KAAK,QAAA,EAE1B;IAED;;;;;;;;OAQG;IACc,gBAAgB,SAAM;IAEvC;;;;;OAKG;IACH,IACI,aAAa,WAEhB;IACD,IAAI,aAAa,CAAC,KAAK,QAAA,EAEtB;IAED;;;;;;;;;;;;;;;OAeG;IACc,gBAAgB,SAAK;IAEtC;;;;;OAKG;IACH,IACI,aAAa,WAEhB;IACD,IAAI,aAAa,CAAC,KAAK,QAAA,EAEtB;IAED;;;;;;;;;;OAUG;IACc,eAAe,SAAI;IAEpC;;;;;;;;;;OAUG;IACc,kBAAkB,SAAY;IAE/C;;;;;;;;;;OAUG;IACc,kBAAkB,SAAW;IAE9C;;;;;;;;;;;;;;OAcG;IACc,QAAQ,SAAK;IAEtB,iBAAiB,SAA0B;IAEnD;;;;;OAKG;IACH,IACI,eAAe,WAElB;IACD,IAAI,eAAe,CAAC,KAAK,QAAA,EAExB;IAED;;;;;;;;;;;;OAYG;IACc,WAAW,SAAK;IAEzB,oBAAoB,SAAM;IAElC;;;;;;;;;;;;OAYG;IACc,WAAW,SAAK;IAEzB,oBAAoB,SAAM;IAElC;;;;;;;;OAQG;IACe,MAAM,UAAO;IAE/B;;;;;;OAMG;IACc,UAAU,SAAI;IAE/B;;;;;;;;;OASG;IACe,WAAW,UAAO;IAEpC;;;;;;;;;;;OAWG;IACc,YAAY,SAAO;IAEpC;;;;;;;;;OASG;IACc,eAAe,SAAM;IAEtC;;;;;;;;;;OAUG;IACc,kBAAkB,SAAO;IAE1C;;;;;;;;;;OAUG;IACc,eAAe,SAAO;IAEvC;;;;;;;;;;OAUG;IACc,gBAAgB,SAAO;IAEhC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAEvC,8CAA8C;IAC9C,IAAI,GAAG,kCAEN;IAEO,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,eAAe,CAAC,EAAE,SAAS,CAAA;IAEnC,aAAa,gBAAsB;IACnC,WAAW,cAAoB;IAC/B,UAAU,aAAmB;IAMpB,iBAAiB;IAqFjB,QAAQ,sBAmChB;CACD;AAED,OAAO,QAAQ,UAAU,CAAC;IACzB,UAAU,GAAG,CAAC;QACb,UAAU,iBAAiB;YAC1B,iBAAiB,EAAE,iBAAiB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;SACpE;KACD;CACD;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,iBAAiB,EAAE,SAAS,CAAA;KAC5B;CACD"}
\ No newline at end of file
+{"version":3,"file":"CameraRig.d.ts","sourceRoot":"","sources":["../../src/cameras/CameraRig.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/cameras/CameraRig.js b/dist/cameras/CameraRig.js
index c36cc40d6..d252e1614 100644
--- a/dist/cameras/CameraRig.js
+++ b/dist/cameras/CameraRig.js
@@ -105,6 +105,12 @@ let CameraRig = (() => {
let _dollySpeed_initializers = [];
let _interactive_decorators;
let _interactive_initializers = [];
+ let _rotationSpeed_decorators;
+ let _rotationSpeed_initializers = [];
+ let _dynamicDolly_decorators;
+ let _dynamicDolly_initializers = [];
+ let _dynamicRotation_decorators;
+ let _dynamicRotation_initializers = [];
let _dollyEpsilon_decorators;
let _dollyEpsilon_initializers = [];
let _dollyScrollLerp_decorators;
@@ -144,6 +150,9 @@ let CameraRig = (() => {
_active_decorators = [booleanAttribute];
_dollySpeed_decorators = [numberAttribute];
_interactive_decorators = [booleanAttribute];
+ _rotationSpeed_decorators = [numberAttribute];
+ _dynamicDolly_decorators = [booleanAttribute];
+ _dynamicRotation_decorators = [booleanAttribute];
_dollyEpsilon_decorators = [numberAttribute];
_dollyScrollLerp_decorators = [numberAttribute];
_dollyPinchSlowdown_decorators = [numberAttribute];
@@ -171,6 +180,9 @@ let CameraRig = (() => {
__esDecorate(null, null, _active_decorators, { kind: "field", name: "active", static: false, private: false, access: { has: obj => "active" in obj, get: obj => obj.active, set: (obj, value) => { obj.active = value; } }, metadata: _metadata }, _active_initializers, _instanceExtraInitializers);
__esDecorate(null, null, _dollySpeed_decorators, { kind: "field", name: "dollySpeed", static: false, private: false, access: { has: obj => "dollySpeed" in obj, get: obj => obj.dollySpeed, set: (obj, value) => { obj.dollySpeed = value; } }, metadata: _metadata }, _dollySpeed_initializers, _instanceExtraInitializers);
__esDecorate(null, null, _interactive_decorators, { kind: "field", name: "interactive", static: false, private: false, access: { has: obj => "interactive" in obj, get: obj => obj.interactive, set: (obj, value) => { obj.interactive = value; } }, metadata: _metadata }, _interactive_initializers, _instanceExtraInitializers);
+ __esDecorate(null, null, _rotationSpeed_decorators, { kind: "field", name: "rotationSpeed", static: false, private: false, access: { has: obj => "rotationSpeed" in obj, get: obj => obj.rotationSpeed, set: (obj, value) => { obj.rotationSpeed = value; } }, metadata: _metadata }, _rotationSpeed_initializers, _instanceExtraInitializers);
+ __esDecorate(null, null, _dynamicDolly_decorators, { kind: "field", name: "dynamicDolly", static: false, private: false, access: { has: obj => "dynamicDolly" in obj, get: obj => obj.dynamicDolly, set: (obj, value) => { obj.dynamicDolly = value; } }, metadata: _metadata }, _dynamicDolly_initializers, _instanceExtraInitializers);
+ __esDecorate(null, null, _dynamicRotation_decorators, { kind: "field", name: "dynamicRotation", static: false, private: false, access: { has: obj => "dynamicRotation" in obj, get: obj => obj.dynamicRotation, set: (obj, value) => { obj.dynamicRotation = value; } }, metadata: _metadata }, _dynamicRotation_initializers, _instanceExtraInitializers);
__esDecorate(null, null, _dollyEpsilon_decorators, { kind: "field", name: "dollyEpsilon", static: false, private: false, access: { has: obj => "dollyEpsilon" in obj, get: obj => obj.dollyEpsilon, set: (obj, value) => { obj.dollyEpsilon = value; } }, metadata: _metadata }, _dollyEpsilon_initializers, _instanceExtraInitializers);
__esDecorate(null, null, _dollyScrollLerp_decorators, { kind: "field", name: "dollyScrollLerp", static: false, private: false, access: { has: obj => "dollyScrollLerp" in obj, get: obj => obj.dollyScrollLerp, set: (obj, value) => { obj.dollyScrollLerp = value; } }, metadata: _metadata }, _dollyScrollLerp_initializers, _instanceExtraInitializers);
__esDecorate(null, null, _dollyPinchSlowdown_decorators, { kind: "field", name: "dollyPinchSlowdown", static: false, private: false, access: { has: obj => "dollyPinchSlowdown" in obj, get: obj => obj.dollyPinchSlowdown, set: (obj, value) => { obj.dollyPinchSlowdown = value; } }, metadata: _metadata }, _dollyPinchSlowdown_initializers, _instanceExtraInitializers);
@@ -503,6 +515,82 @@ let CameraRig = (() => {
* disabled, but the camera rig can still be manipulated programmatically.
*/
interactive = __runInitializers(this, _interactive_initializers, true
+ /**
+ * @property {number} rotationSpeed
+ *
+ * *attribute*
+ *
+ * Default: `1`
+ *
+ * How much the camera rotates while dragging.
+ */
+ );
+ /**
+ * @property {number} rotationSpeed
+ *
+ * *attribute*
+ *
+ * Default: `1`
+ *
+ * How much the camera rotates while dragging.
+ */
+ rotationSpeed = __runInitializers(this, _rotationSpeed_initializers, 1
+ /**
+ * @property {boolean} dynamicDolly
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective dolly speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective dolly speed towards zero. This is useful when zoomed
+ * into an object and having the dolly movements not be disproportionately
+ * huge while viewing fine details of the object.
+ */
+ );
+ /**
+ * @property {boolean} dynamicDolly
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective dolly speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective dolly speed towards zero. This is useful when zoomed
+ * into an object and having the dolly movements not be disproportionately
+ * huge while viewing fine details of the object.
+ */
+ dynamicDolly = __runInitializers(this, _dynamicDolly_initializers, false
+ /**
+ * @property {boolean} dynamicRotation
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective rotation speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective rotation speed to allow for finer control. This is useful
+ * zoomed in to see fine details of an object and having the rotation not be
+ * disproportionately huge, for example when zooming into a 3D globe.
+ */
+ );
+ /**
+ * @property {boolean} dynamicRotation
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective rotation speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective rotation speed to allow for finer control. This is useful
+ * zoomed in to see fine details of an object and having the rotation not be
+ * disproportionately huge, for example when zooming into a 3D globe.
+ */
+ dynamicRotation = __runInitializers(this, _dynamicRotation_initializers, false
/**
* @property {number} dollyEpsilon
*
@@ -671,6 +759,7 @@ let CameraRig = (() => {
flingRotation.maxFlingRotationX = this.maxVerticalAngle;
flingRotation.minFlingRotationY = this.minHorizontalAngle;
flingRotation.maxFlingRotationY = this.maxHorizontalAngle;
+ flingRotation.factor = this.rotationSpeed;
flingRotation.epsilon = this.rotationEpsilon;
flingRotation.slowdownAmount = this.rotationSlowdown;
scrollFling.minY = pinchFling.minX = this.__appliedMinDistance;
@@ -680,6 +769,37 @@ let CameraRig = (() => {
scrollFling.lerpAmount = this.dollyScrollLerp;
pinchFling.slowdownAmount = this.dollyPinchSlowdown;
});
+ this.createEffect(() => {
+ if (!this.dynamicDolly)
+ return;
+ // Dolly speed when position is at minDistance
+ const minDollySpeed = 0.001;
+ // Dolly speed when position is at maxDistance
+ const maxDollySpeed = 2 * this.dollySpeed;
+ // Scroll sensitivity is linear between min/max dolly speed and min/max distance.
+ const sens = ((maxDollySpeed - minDollySpeed) / (this.maxDistance - this.minDistance)) *
+ (this.threeCamera.position.z - this.minDistance) +
+ minDollySpeed;
+ scrollFling.sensitivity = sens < minDollySpeed ? minDollySpeed : sens;
+ });
+ this.createEffect(() => {
+ if (!this.dynamicRotation)
+ return;
+ // This only depends on the size of the scene and the FOV of the camera. The only
+ // issue is the camera's FOV is not reactive and is set by the scene at some point.
+ // In the case where the camera's FOV is not set yet, use the scene's perspective.
+ const perspective = this.threeCamera.three.fov
+ ? this.scene.calculatedSize.y / 2 / Math.tan((this.threeCamera.three.fov * Math.PI) / 360)
+ : this.scene.perspective;
+ // Plane positioned at origin facing camera with width equal to `minDistance`.
+ // `minDistance` is doubled because the expected `minDistance` should barely touch
+ // the object, whose size would be double `minDistance`.
+ const planeSize = (perspective * (this.minDistance * 2)) / this.threeCamera.position.z;
+ const degreesPerPixel = 180 / planeSize;
+ // Counteract the FlingRotation's delta modifier to get exact angular movement.
+ const sens = (1 / 0.15) * degreesPerPixel * this.rotationSpeed;
+ this.flingRotation.factor = sens <= 0 ? 1 : sens;
+ });
this.createEffect(() => {
if (this.interactive && !this.pinchFling?.interacting)
flingRotation.start();
@@ -729,7 +849,7 @@ let CameraRig = (() => {
comment="We don't set position here because it triggers the pre-upgrade handling due to the template running before perspective-camera is upgraded (due to Solid specifics) which causes the initial value to override the initial position calculated from scene.perspective."
xposition=${() => [0, 0, this.__appliedDistance]}
align-point="0.5 0.5 0.5"
- far="10000"
+ far="100000"
>
diff --git a/dist/cameras/CameraRig.js.map b/dist/cameras/CameraRig.js.map
index b023f8cb1..d1aa68ba3 100644
--- a/dist/cameras/CameraRig.js.map
+++ b/dist/cameras/CameraRig.js.map
@@ -1 +1 @@
-{"version":3,"file":"CameraRig.js","sourceRoot":"","sources":["../../src/cameras/CameraRig.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"CameraRig.js","sourceRoot":"","sources":["../../src/cameras/CameraRig.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,gFAAgF;AAChF,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAElC,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAClC,OAAO,IAAI,MAAM,eAAe,CAAA;AAChC,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,cAAc,CAAA;AAChD,OAAO,EAAC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAyB,MAAM,eAAe,CAAA;AAChG,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAC,SAAS,EAA2B,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,yBAAyB,CAAA;AAC9E,OAAO,EAAC,uBAAuB,EAAC,MAAM,iBAAiB,CAAA;AA8BvD,6FAA6F;AAE7F;;;;;;;;;;;;;;;;;;;GAmBG;IAGG,SAAS;4BADd,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;;;;sBACvB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAAjB,SAAQ,WAAS;;;;yCAsB/B,eAAe;iDAQf,eAAe;4CAiBf,eAAe;6CAQf,eAAe;4CAwBf,eAAe;6CAQf,eAAe;2CAmBf,eAAe;8CAaf,eAAe;8CAaf,eAAe;oCAiBf,eAAe;6CAEf,MAAM;+CAQN,eAAe;uCAqBf,eAAe;gDAEf,MAAM;uCAeN,eAAe;gDAEf,MAAM;kCAWN,gBAAgB;sCAShB,eAAe;uCAYf,gBAAgB;yCAWhB,eAAe;wCAef,gBAAgB;2CAehB,gBAAgB;wCAchB,eAAe;2CAYf,eAAe;8CAaf,eAAe;2CAaf,eAAe;4CAaf,eAAe;uCAEf,MAAM;2CAON,MAAM;2CACN,MAAM;YA5TP,0MAAI,iBAAiB,6DAEpB;YAuBD,8LAAI,aAAa,6DAEhB;YA8BD,8LAAI,aAAa,6DAEhB;YAsED,oMAAI,eAAe,6DAElB;YA5IgB,yLAAA,aAAa,6BAAb,aAAa,+FAAI;YAyBjB,kMAAA,gBAAgB,6BAAhB,gBAAgB,kGAAM;YAgCtB,kMAAA,gBAAgB,6BAAhB,gBAAgB,kGAAK;YA2BrB,+LAAA,eAAe,6BAAf,eAAe,iGAAI;YAanB,wMAAA,kBAAkB,6BAAlB,kBAAkB,oGAAY;YAa9B,wMAAA,kBAAkB,6BAAlB,kBAAkB,oGAAW;YAiB7B,0KAAA,QAAQ,6BAAR,QAAQ,0FAAK;YAEtB,qMAAA,iBAAiB,6BAAjB,iBAAiB,mGAA0B;YA6BlC,mLAAA,WAAW,6BAAX,WAAW,6FAAK;YAEzB,8MAAA,oBAAoB,6BAApB,oBAAoB,sGAAM;YAejB,mLAAA,WAAW,6BAAX,WAAW,6FAAK;YAEzB,8MAAA,oBAAoB,6BAApB,oBAAoB,sGAAM;YAWhB,oKAAA,MAAM,6BAAN,MAAM,wFAAO;YASd,gLAAA,UAAU,6BAAV,UAAU,4FAAI;YAYb,mLAAA,WAAW,6BAAX,WAAW,6FAAO;YAWnB,yLAAA,aAAa,6BAAb,aAAa,+FAAI;YAehB,sLAAA,YAAY,6BAAZ,YAAY,8FAAQ;YAepB,+LAAA,eAAe,6BAAf,eAAe,iGAAQ;YAcxB,sLAAA,YAAY,6BAAZ,YAAY,8FAAO;YAYnB,+LAAA,eAAe,6BAAf,eAAe,iGAAM;YAarB,wMAAA,kBAAkB,6BAAlB,kBAAkB,oGAAO;YAazB,+LAAA,eAAe,6BAAf,eAAe,iGAAO;YAatB,kMAAA,gBAAgB,6BAAhB,gBAAgB,kGAAO;YAEhC,mLAAA,WAAW,6BAAX,WAAW,6FAAoB;YAO/B,+LAAA,eAAe,6BAAf,eAAe,iGAAY;YAC3B,+LAAA,eAAe,6BAAf,eAAe,iGAAY;YA3VpC,6KAugBC;;;YAvgBK,uDAAS;;QACd;;;;;;;WAOG;QACe,SAAS,yDAAS,IAAI,EAAA;QAExC;;;;;;;;;;WAUG;QACc,aAAa,wDAAG,CAAC;QAElC;;;;;WAKG;UAP+B;QAElC;;;;;WAKG;QAEH,IAAI,iBAAiB;YACpB,OAAO,IAAI,CAAC,aAAa,CAAA;QAC1B,CAAC;QACD,IAAI,iBAAiB,CAAC,KAAK;YAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC3B,CAAC;QAED;;;;;;;;WAQG;QACc,gBAAgB,2DAAG,CAAC,EAAE;QAEvC;;;;;WAKG;UAPoC;QAEvC;;;;;WAKG;QAEH,IAAI,aAAa;YAChB,OAAO,IAAI,CAAC,gBAAgB,CAAA;QAC7B,CAAC;QACD,IAAI,aAAa,CAAC,KAAK;YACtB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;QAC9B,CAAC;QAED;;;;;;;;;;;;;;;WAeG;QACc,gBAAgB,2DAAG,EAAE;QAEtC;;;;;WAKG;UAPmC;QAEtC;;;;;WAKG;QAEH,IAAI,aAAa;YAChB,OAAO,IAAI,CAAC,gBAAgB,CAAA;QAC7B,CAAC;QACD,IAAI,aAAa,CAAC,KAAK;YACtB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;QAC9B,CAAC;QAED;;;;;;;;;;WAUG;QACc,eAAe,0DAAG,CAAC;QAEpC;;;;;;;;;;WAUG;UAZiC;QAEpC;;;;;;;;;;WAUG;QACc,kBAAkB,6DAAG,CAAC,QAAQ;QAE/C;;;;;;;;;;WAUG;UAZ4C;QAE/C;;;;;;;;;;WAUG;QACc,kBAAkB,6DAAG,QAAQ;QAE9C;;;;;;;;;;;;;;WAcG;UAhB2C;QAE9C;;;;;;;;;;;;;;WAcG;QACc,QAAQ,mDAAG,CAAC,CAAC,EAAA;QAEtB,iBAAiB,4DAAG,uBAAuB;QAEnD;;;;;WAKG;UAPgD;QAEnD;;;;;WAKG;QAEH,IAAI,eAAe;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAA;QACrB,CAAC;QACD,IAAI,eAAe,CAAC,KAAK;YACxB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACtB,CAAC;QAED;;;;;;;;;;;;WAYG;QACc,WAAW,sDAAG,CAAC,CAAC,EAAA;QAEzB,oBAAoB,+DAAG,GAAG;QAElC;;;;;;;;;;;;WAYG;UAd+B;QAElC;;;;;;;;;;;;WAYG;QACc,WAAW,sDAAG,CAAC,CAAC,EAAA;QAEzB,oBAAoB,+DAAG,GAAG;QAElC;;;;;;;;WAQG;UAV+B;QAElC;;;;;;;;WAQG;QACe,MAAM,iDAAG,IAAI;QAE/B;;;;;;WAMG;UAR4B;QAE/B;;;;;;WAMG;QACc,UAAU,qDAAG,CAAC;QAE/B;;;;;;;;;WASG;UAX4B;QAE/B;;;;;;;;;WASG;QACe,WAAW,sDAAG,IAAI;QAEpC;;;;;;;;WAQG;UAViC;QAEpC;;;;;;;;WAQG;QACc,aAAa,wDAAG,CAAC;QAElC;;;;;;;;;;;;WAYG;UAd+B;QAElC;;;;;;;;;;;;WAYG;QACe,YAAY,uDAAG,KAAK;QAEtC;;;;;;;;;;;;WAYG;UAdmC;QAEtC;;;;;;;;;;;;WAYG;QACe,eAAe,0DAAG,KAAK;QAEzC;;;;;;;;;;;WAWG;UAbsC;QAEzC;;;;;;;;;;;WAWG;QACc,YAAY,uDAAG,IAAI;QAEpC;;;;;;;;;WASG;UAXiC;QAEpC;;;;;;;;;WASG;QACc,eAAe,0DAAG,GAAG;QAEtC;;;;;;;;;;WAUG;UAZmC;QAEtC;;;;;;;;;;WAUG;QACc,kBAAkB,6DAAG,IAAI;QAE1C;;;;;;;;;;WAUG;UAZuC;QAE1C;;;;;;;;;;WAUG;QACc,eAAe,0DAAG,IAAI;QAEvC;;;;;;;;;;WAUG;UAZoC;QAEvC;;;;;;;;;;WAUG;QACc,gBAAgB,2DAAG,IAAI,EAAA;QAEhC,WAAW,8DAAoB;QAEvC,8CAA8C;QAC9C,IAAI,GAAG;YACN,OAAO,IAAI,CAAC,WAAW,CAAA;QACxB,CAAC;QAEO,eAAe,kEAAY;QAC3B,eAAe,kEAAY;QAEnC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAA;QACnC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;QAC/B,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;QAE7B,IAAI,qBAAqB;YACxB,OAAO,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,uBAAuB,CAAA;QACjG,CAAC;QAEQ,iBAAiB;YACzB,KAAK,CAAC,iBAAiB,EAAE,CAAA;YAEzB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;gBACtB,iEAAiE;gBACjE,uCAAuC;gBACvC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,CAAC;oBAAE,OAAM;gBAE7F,0DAA0D;gBAC1D,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;oBACtB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAA;oBACnD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAA;oBACvG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAA;gBACxG,CAAC,CAAC,CAAA;gBAEF,6DAA6D;gBAC7D,8DAA8D;gBAC9D,kEAAkE;gBAClE,0DAA0D;gBAC1D,2BAA2B;gBAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAA;gBAEhF,MAAM,EAAC,WAAW,EAAE,UAAU,EAAE,aAAa,EAAC,GAAG,IAAI,CAAA;gBAErD,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC/C,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC/C,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAA;gBACpD,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAA;gBACpD,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC/B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;gBAE9B,yDAAyD;gBACzD,WAAW,CACV,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAC5B,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAC3C,GAAG,EAAE,CAAC,IAAI,CAAC,WAAY,CAAC,CAAC,EACzB,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CACxC,CAAA;gBACD,oDAAoD;gBACpD,WAAW,CACV,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EACxB,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EACvC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACvB,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CACtC,CAAA;gBAED,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;oBACtB,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAA;oBACvD,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAA;oBACvD,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAA;oBACzD,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAA;oBACzD,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;oBACzC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAA;oBAC5C,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAA;oBAEpD,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAA;oBAC9D,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAA;oBAC9D,WAAW,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAA;oBAClE,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAA;oBAC5D,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAA;oBAC7C,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAA;gBACpD,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,YAAY;wBAAE,OAAM;oBAE9B,8CAA8C;oBAC9C,MAAM,aAAa,GAAG,KAAK,CAAA;oBAE3B,8CAA8C;oBAC9C,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAA;oBAEzC,iFAAiF;oBACjF,MAAM,IAAI,GACT,CAAC,CAAC,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;wBACxE,CAAC,IAAI,CAAC,WAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;wBAClD,aAAa,CAAA;oBAEd,WAAW,CAAC,WAAW,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAA;gBACtE,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,eAAe;wBAAE,OAAM;oBAEjC,iFAAiF;oBACjF,mFAAmF;oBACnF,kFAAkF;oBAClF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAY,CAAC,KAAK,CAAC,GAAG;wBAC9C,CAAC,CAAC,IAAI,CAAC,KAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAY,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;wBAC5F,CAAC,CAAC,IAAI,CAAC,KAAM,CAAC,WAAW,CAAA;oBAE1B,8EAA8E;oBAC9E,kFAAkF;oBAClF,wDAAwD;oBACxD,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;oBAEvF,MAAM,eAAe,GAAG,GAAG,GAAG,SAAS,CAAA;oBAEvC,+EAA+E;oBAC/E,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,aAAa,CAAA;oBAE9D,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBACjD,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;oBACtB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW;wBAAE,aAAa,CAAC,KAAK,EAAE,CAAA;;wBACvE,aAAa,CAAC,IAAI,EAAE,CAAA;gBAC1B,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;oBACtB,IAAI,IAAI,CAAC,WAAW,EAAE;wBACrB,WAAW,CAAC,KAAK,EAAE,CAAA;wBACnB,UAAU,CAAC,KAAK,EAAE,CAAA;qBAClB;yBAAM;wBACN,WAAW,CAAC,IAAI,EAAE,CAAA;wBAClB,UAAU,CAAC,IAAI,EAAE,CAAA;qBACjB;gBACF,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;oBACzB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;oBACvB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;gBACvB,CAAC,CAAC,CAAA;YACH,CAAC,CAAC,CAAA;QACH,CAAC;QAEQ,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;;;SAGtB,CAAC,EAAa,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;;;cAGzC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;;;;UAItC,CAAC,EAAa,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;;eAEzC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;;;;;;;;YAQnC,CAAC,GAAsB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;;eAEjD,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM;;kBAEd,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC;;;;;;;;;;;EAWpD,CAAA;;;;SAtgBI,SAAS"}
\ No newline at end of file
diff --git a/dist/interaction/FlingRotation.d.ts.map b/dist/interaction/FlingRotation.d.ts.map
index 686c4d790..cff4c01c8 100644
--- a/dist/interaction/FlingRotation.d.ts.map
+++ b/dist/interaction/FlingRotation.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"FlingRotation.d.ts","sourceRoot":"","sources":["../../src/interaction/FlingRotation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,OAAO,EAAmB,MAAM,cAAc,CAAA;AAGtD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAEnD,KAAK,OAAO,GAAG,OAAO,CACrB,IAAI,CACH,aAAa,EACX,iBAAiB,GACjB,iBAAiB,GACjB,sBAAsB,GACtB,sBAAsB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,QAAQ,GACR,SAAS,GACT,gBAAgB,CAClB,CACD,CAAA;AAED,qBAEM,aAAc,SAAQ,OAAO;;IAClC,sDAAsD;IAC9C,eAAe,EAAG,SAAS,CAAA;IAEnC;;;OAGG;IACK,eAAe,EAAG,SAAS,CAAA;IAEnC;;;OAGG;IACK,oBAAoB,EAAG,OAAO,CAAA;IAEtC;;;OAGG;IAGK,oBAAoB,EAAE,OAAO,CAA2B;IAEhE;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAM;IAE/B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAK;IAE9B;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAY;IAErC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAW;IAEpC,MAAM,SAAI;IAEV,OAAO,SAAO;IAEd;;;OAGG;IACH,cAAc,SAAO;gBAIT,OAAO,GAAE,OAAY;IA6GjC,KAAK,IAAI,IAAI;IA0Cb,IAAI,IAAI,IAAI;CAcZ"}
\ No newline at end of file
+{"version":3,"file":"FlingRotation.d.ts","sourceRoot":"","sources":["../../src/interaction/FlingRotation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,OAAO,EAAmB,MAAM,cAAc,CAAA;AAGtD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAEnD,KAAK,OAAO,GAAG,OAAO,CACrB,IAAI,CACH,aAAa,EACX,iBAAiB,GACjB,iBAAiB,GACjB,sBAAsB,GACtB,sBAAsB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,QAAQ,GACR,SAAS,GACT,gBAAgB,CAClB,CACD,CAAA;AAED,qBAEM,aAAc,SAAQ,OAAO;;IAClC,sDAAsD;IAC9C,eAAe,EAAG,SAAS,CAAA;IAEnC;;;OAGG;IACK,eAAe,EAAG,SAAS,CAAA;IAEnC;;;OAGG;IACK,oBAAoB,EAAG,OAAO,CAAA;IAEtC;;;OAGG;IAGK,oBAAoB,EAAE,OAAO,CAA2B;IAEhE;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAM;IAE/B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAK;IAE9B;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAY;IAErC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAW;IAEpC,MAAM,SAAI;IAEV,OAAO,SAAO;IAEd;;;OAGG;IACH,cAAc,SAAO;gBAIT,OAAO,GAAE,OAAY;IAiHjC,KAAK,IAAI,IAAI;IA0Cb,IAAI,IAAI,IAAI;CAcZ"}
\ No newline at end of file
diff --git a/dist/interaction/FlingRotation.js b/dist/interaction/FlingRotation.js
index c2cdf4b34..99dcd4971 100644
--- a/dist/interaction/FlingRotation.js
+++ b/dist/interaction/FlingRotation.js
@@ -137,6 +137,7 @@ let FlingRotation = (() => {
#lastY = 0;
#deltaX = 0;
#deltaY = 0;
+ #moveTimestamp = 0;
#onPointerDown = (event) => {
this.#pointerCount++;
if (this.#pointerCount === 1)
@@ -156,6 +157,7 @@ let FlingRotation = (() => {
#onMove = (event) => {
if (event.pointerId !== this.#mainPointer)
return;
+ this.#moveTimestamp = performance.now();
// We're not simply using event.movementX and event.movementY
// because of a Safari bug:
// https://bugs.webkit.org/show_bug.cgi?id=248119
@@ -179,7 +181,7 @@ let FlingRotation = (() => {
// stop dragging
// @ts-expect-error, whyyyy TypeScript It says that event type is Event instead of PointerEvent
this.interactionContainer.removeEventListener('pointermove', this.#onMove);
- if (this.#deltaX === 0 && this.#deltaY === 0)
+ if ((this.#deltaX === 0 && this.#deltaY === 0) || performance.now() - this.#moveTimestamp > 100)
return;
// slow the rotation down based on former drag speed
this.rotationXTarget.rotation = (x, y, z, _t, dt) => {
diff --git a/dist/interaction/FlingRotation.js.map b/dist/interaction/FlingRotation.js.map
index 58a636908..57a890b3f 100644
--- a/dist/interaction/FlingRotation.js.map
+++ b/dist/interaction/FlingRotation.js.map
@@ -1 +1 @@
-{"version":3,"file":"FlingRotation.js","sourceRoot":"","sources":["../../src/interaction/FlingRotation.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,wDAAwD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAExD,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAC,MAAM,cAAc,CAAA;AACtD,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAClC,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;IAsBhC,aAAa;4BADlB,QAAQ;;;;sBACmB,OAAO;;;;;;;;;;6BAAf,SAAQ,WAAO;;;;2CAEjC,MAAM;2CAMN,MAAM;gDAMN,MAAM;gDAQN,MAAM;YApBC,+LAAA,eAAe,6BAAf,eAAe,iGAAY;YAM3B,+LAAA,eAAe,6BAAf,eAAe,iGAAY;YAM3B,8MAAA,oBAAoB,6BAApB,oBAAoB,sGAAU;YAQ9B,8MAAA,oBAAoB,6BAApB,oBAAoB,sGAAoC;YAtBjE,6KAmOC;;;YAnOK,uDAAa;;QAClB,sDAAsD;QAC9C,eAAe,yHAAY;QAEnC;;;WAGG;QACK,eAAe,kEAAY;QAEnC;;;WAGG;QACK,oBAAoB,uEAAU;QAEtC;;;WAGG;QACH,0EAA0E;QAC1E,oCAAoC;QAC5B,oBAAoB,+DAAY,QAAQ,CAAC,eAAe;QAEhE;;;WAGG;UAL6D;QAEhE;;;WAGG;QACH,iBAAiB,GAAW,CAAC,EAAE,CAAA;QAE/B;;;WAGG;QACH,iBAAiB,GAAW,EAAE,CAAA;QAE9B;;;;WAIG;QACH,iBAAiB,GAAW,CAAC,QAAQ,CAAA;QAErC;;;;WAIG;QACH,iBAAiB,GAAW,QAAQ,CAAA;QAEpC,MAAM,GAAG,CAAC,CAAA;QAEV,OAAO,GAAG,IAAI,CAAA;QAEd;;;WAGG;QACH,cAAc,GAAG,IAAI,CAAA;QAErB,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAA;QAEhC,YAAY,UAAmB,EAAE;YAChC,KAAK,EAAE,CAAA;YACP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7B,CAAC;QAED,YAAY,GAAG,CAAC,CAAC,CAAA;QACjB,aAAa,GAAG,CAAC,CAAA;QAEjB,iEAAiE;QACjE,MAAM,GAAG,CAAC,CAAA;QACV,MAAM,GAAG,CAAC,CAAA;QAEV,OAAO,GAAG,CAAC,CAAA;QACX,OAAO,GAAG,CAAC,CAAA;QAEX,cAAc,GAAG,CAAC,KAAmB,EAAE,EAAE;YACxC,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC;gBAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAA;;gBAC5D,OAAM;YAEX,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAE9D,IAAI,CAAC,cAAc,EAAE,CAAA;YAErB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAA;YACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAA;YACrB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAEhB,+FAA+F;YAC/F,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAA;YAEvG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAA;QAC3G,CAAC,CAAA;QAED,OAAO,GAAG,CAAC,KAAmB,EAAE,EAAE;YACjC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY;gBAAE,OAAM;YAEjD,6DAA6D;YAC7D,2BAA2B;YAC3B,iDAAiD;YACjD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YACvC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YACvC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAA;YACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAA;YAErB,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;YAC7C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CACtC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAC9C,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,iBAAiB,CACtB,CAAA;YAED,IAAI,CAAC,OAAO,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;YAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CACtC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAC9C,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,iBAAiB,CACtB,CAAA;QACF,CAAC,CAAA;QAED,YAAY,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,aAAa,EAAE,CAAA;YAEpB,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE;gBAC7B,IAAI,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;oBACjE,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACnE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;gBACtB,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;aAC7E;YAED,gBAAgB;YAChB,+FAA+F;YAC/F,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAE1E,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;gBAAE,OAAM;YAEpD,oDAAoD;YACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACnD,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAA;gBAE7B,6FAA6F;gBAC7F,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAA;gBAElD,uDAAuD;gBACvD,iCAAiC;gBACjC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAEvD,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACvF,CAAC,CAAA;YAED,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACnD,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAA;gBAE7B,6FAA6F;gBAC7F,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAA;gBAElD,uDAAuD;gBACvD,iCAAiC;gBACjC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAEvD,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAA;YACvF,CAAC,CAAA;QACF,CAAC,CAAA;QAED,YAAY,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAA;QAE3D,UAAU,GAAG,KAAK,CAAA;QAElB,KAAK;YACJ,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAA;YAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;YAEtB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;gBACtB,wDAAwD;gBACxD,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC;oBAC5G,OAAM;gBAEP,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAA;gBAErC,yEAAyE;gBACzE,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAA;gBAE9G,2DAA2D;gBAC3D,8CAA8C;gBAC9C,4BAA4B;gBAC5B,+FAA+F;gBAC/F,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAA;gBAC1G,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CACzC,eAAe,EACf,GAAG,EAAE;oBACJ,OAAO,CAAC,KAAK,CACZ,mHAAmH,CACnH,CAAA;gBACF,CAAC,EACD,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC,CAC9B,CAAA;gBAED,SAAS,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;oBACtB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;oBAEtB,IAAI,CAAC,cAAc,EAAE,CAAA;oBAErB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;gBACtB,CAAC,CAAC,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,IAAI;YACH,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAA;YACjC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;YAEvB,IAAI,CAAC,WAAW,EAAE,CAAA;YAElB,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,cAAc;YACb,8BAA8B;YAC9B,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;YAC3C,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;QAC5C,CAAC;;;;SAlOI,aAAa"}
\ No newline at end of file
+{"version":3,"file":"FlingRotation.js","sourceRoot":"","sources":["../../src/interaction/FlingRotation.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/examples/camera-rig.html b/examples/camera-rig.html
new file mode 100644
index 000000000..84607efeb
--- /dev/null
+++ b/examples/camera-rig.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/cameras/CameraRig.ts b/src/cameras/CameraRig.ts
index 450394ead..f9ebbd150 100644
--- a/src/cameras/CameraRig.ts
+++ b/src/cameras/CameraRig.ts
@@ -26,6 +26,9 @@ export type CameraRigAttributes =
| 'active'
| 'dollySpeed'
| 'interactive'
+ | 'rotationSpeed'
+ | 'dynamicDolly'
+ | 'dynamicRotation'
| 'dollyEpsilon'
| 'dollyScrollLerp'
| 'dollyPinchSlowdown'
@@ -293,6 +296,47 @@ class CameraRig extends Element3D {
*/
@booleanAttribute interactive = true
+ /**
+ * @property {number} rotationSpeed
+ *
+ * *attribute*
+ *
+ * Default: `1`
+ *
+ * How much the camera rotates while dragging.
+ */
+ @numberAttribute rotationSpeed = 1
+
+ /**
+ * @property {boolean} dynamicDolly
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective dolly speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective dolly speed towards zero. This is useful when zoomed
+ * into an object and having the dolly movements not be disproportionately
+ * huge while viewing fine details of the object.
+ */
+ @booleanAttribute dynamicDolly = false
+
+ /**
+ * @property {boolean} dynamicRotation
+ *
+ * *attribute*
+ *
+ * Default: `false`
+ *
+ * When `true`, the effective rotation speed will be changed based on the
+ * camera's distance to `minDistance`. Getting closer to `minDistance` will
+ * lower the effective rotation speed to allow for finer control. This is useful
+ * zoomed in to see fine details of an object and having the rotation not be
+ * disproportionately huge, for example when zooming into a 3D globe.
+ */
+ @booleanAttribute dynamicRotation = false
+
/**
* @property {number} dollyEpsilon
*
@@ -427,6 +471,7 @@ class CameraRig extends Element3D {
flingRotation.maxFlingRotationX = this.maxVerticalAngle
flingRotation.minFlingRotationY = this.minHorizontalAngle
flingRotation.maxFlingRotationY = this.maxHorizontalAngle
+ flingRotation.factor = this.rotationSpeed
flingRotation.epsilon = this.rotationEpsilon
flingRotation.slowdownAmount = this.rotationSlowdown
@@ -438,6 +483,46 @@ class CameraRig extends Element3D {
pinchFling.slowdownAmount = this.dollyPinchSlowdown
})
+ this.createEffect(() => {
+ if (!this.dynamicDolly) return
+
+ // Dolly speed when position is at minDistance
+ const minDollySpeed = 0.001
+
+ // Dolly speed when position is at maxDistance
+ const maxDollySpeed = 2 * this.dollySpeed
+
+ // Scroll sensitivity is linear between min/max dolly speed and min/max distance.
+ const sens =
+ ((maxDollySpeed - minDollySpeed) / (this.maxDistance - this.minDistance)) *
+ (this.threeCamera!.position.z - this.minDistance) +
+ minDollySpeed
+
+ scrollFling.sensitivity = sens < minDollySpeed ? minDollySpeed : sens
+ })
+ this.createEffect(() => {
+ if (!this.dynamicRotation) return
+
+ // This only depends on the size of the scene and the FOV of the camera. The only
+ // issue is the camera's FOV is not reactive and is set by the scene at some point.
+ // In the case where the camera's FOV is not set yet, use the scene's perspective.
+ const perspective = this.threeCamera!.three.fov
+ ? this.scene!.calculatedSize.y / 2 / Math.tan((this.threeCamera!.three.fov * Math.PI) / 360)
+ : this.scene!.perspective
+
+ // Plane positioned at origin facing camera with width equal to `minDistance`.
+ // `minDistance` is doubled because the expected `minDistance` should barely touch
+ // the object, whose size would be double `minDistance`.
+ const planeSize = (perspective * (this.minDistance * 2)) / this.threeCamera!.position.z
+
+ const degreesPerPixel = 180 / planeSize
+
+ // Counteract the FlingRotation's delta modifier to get exact angular movement.
+ const sens = (1 / 0.15) * degreesPerPixel * this.rotationSpeed
+
+ this.flingRotation.factor = sens <= 0 ? 1 : sens
+ })
+
this.createEffect(() => {
if (this.interactive && !this.pinchFling?.interacting) flingRotation.start()
else flingRotation.stop()
@@ -487,7 +572,7 @@ class CameraRig extends Element3D {
comment="We don't set position here because it triggers the pre-upgrade handling due to the template running before perspective-camera is upgraded (due to Solid specifics) which causes the initial value to override the initial position calculated from scene.perspective."
xposition=${() => [0, 0, this.__appliedDistance]}
align-point="0.5 0.5 0.5"
- far="10000"
+ far="100000"
>
diff --git a/src/interaction/FlingRotation.ts b/src/interaction/FlingRotation.ts
index 757736e76..28421b2de 100644
--- a/src/interaction/FlingRotation.ts
+++ b/src/interaction/FlingRotation.ts
@@ -105,6 +105,8 @@ class FlingRotation extends Effects {
#deltaX = 0
#deltaY = 0
+ #moveTimestamp = 0
+
#onPointerDown = (event: PointerEvent) => {
this.#pointerCount++
if (this.#pointerCount === 1) this.#mainPointer = event.pointerId
@@ -128,6 +130,8 @@ class FlingRotation extends Effects {
#onMove = (event: PointerEvent) => {
if (event.pointerId !== this.#mainPointer) return
+ this.#moveTimestamp = performance.now()
+
// We're not simply using event.movementX and event.movementY
// because of a Safari bug:
// https://bugs.webkit.org/show_bug.cgi?id=248119
@@ -165,7 +169,7 @@ class FlingRotation extends Effects {
// @ts-expect-error, whyyyy TypeScript It says that event type is Event instead of PointerEvent
this.interactionContainer.removeEventListener('pointermove', this.#onMove)
- if (this.#deltaX === 0 && this.#deltaY === 0) return
+ if ((this.#deltaX === 0 && this.#deltaY === 0) || performance.now() - this.#moveTimestamp > 100) return
// slow the rotation down based on former drag speed
this.rotationXTarget.rotation = (x, y, z, _t, dt) => {