@react-motion-router/stack 2.0.0-beta.sha-112968d → 2.0.0-beta.sha-c19f37e

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/web-gesture-events/Gestures/GestureEvent.js","../../../node_modules/web-gesture-events/Gestures/LongPressEvent.js","../../../node_modules/web-gesture-events/Gestures/TapEvent.js","../../../node_modules/web-gesture-events/Gestures/DoubleTapEvent.js","../../../node_modules/web-gesture-events/Gestures/SwipeEvent.js","../../../node_modules/web-gesture-events/Gestures/PanEvent.js","../../../node_modules/web-gesture-events/Gestures/PinchEvent.js","../../../node_modules/web-gesture-events/Gestures/RotateEvent.js","../../../node_modules/web-gesture-events/utils.js","../../../node_modules/web-gesture-events/index.js","../src/common/events.ts","../src/HistoryEntry.ts","../src/Navigation.ts","../src/common/utils.ts","../src/Screen.tsx","../src/common/types.ts","../src/common/constants.ts","../src/common/promise-wrapper.ts","../src/Router.tsx","../src/common/hooks.ts","../src/Anchor.tsx","../src/animation-configs/keyframe-presets.ts","../src/animation-configs/keyframe-options-presets.ts","../src/animation-configs/animation-presets.ts","../src/GestureRegion.tsx"],"sourcesContent":["\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar GestureEventTypeEnum;\r\n(function (GestureEventTypeEnum) {\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"tap\"] = 0] = \"tap\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"longpress\"] = 1] = \"longpress\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pinchstart\"] = 2] = \"pinchstart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pinch\"] = 3] = \"pinch\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pinchend\"] = 4] = \"pinchend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"rotatestart\"] = 5] = \"rotatestart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"rotate\"] = 6] = \"rotate\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"rotateend\"] = 7] = \"rotateend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"swipestart\"] = 8] = \"swipestart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"swipe\"] = 9] = \"swipe\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"swipeend\"] = 10] = \"swipeend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"panstart\"] = 11] = \"panstart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pan\"] = 12] = \"pan\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"panend\"] = 13] = \"panend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"doubletap\"] = 14] = \"doubletap\";\r\n})(GestureEventTypeEnum || (GestureEventTypeEnum = {}));\r\nclass GestureEvent extends TouchEvent {\r\n constructor(type, touchEvent) {\r\n super(type, {\r\n touches: Array.from(touchEvent.touches),\r\n targetTouches: Array.from(touchEvent.targetTouches),\r\n changedTouches: Array.from(touchEvent.changedTouches),\r\n ctrlKey: touchEvent.ctrlKey,\r\n shiftKey: touchEvent.shiftKey,\r\n altKey: touchEvent.altKey,\r\n metaKey: touchEvent.metaKey,\r\n bubbles: true,\r\n cancelable: true\r\n });\r\n if (type.includes(\"end\") || touchEvent.type.includes(\"end\")) {\r\n this.gestureTarget = touchEvent.changedTouches[0].target;\r\n this.x = touchEvent.changedTouches[0].clientX;\r\n this.y = touchEvent.changedTouches[0].clientY;\r\n return;\r\n }\r\n this.gestureTarget = touchEvent.touches[0].target;\r\n this.x = touchEvent.touches[0].clientX;\r\n this.y = touchEvent.touches[0].clientY;\r\n }\r\n}\r\nexports.default = GestureEvent;\r\n//# sourceMappingURL=GestureEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nclass LongPressEvent extends GestureEvent_1.default {\r\n constructor(touchEvent, duration) {\r\n super('longpress', touchEvent);\r\n this.duration = 0;\r\n this.duration = duration;\r\n }\r\n}\r\nexports.default = LongPressEvent;\r\n//# sourceMappingURL=LongPressEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nclass TapEvent extends GestureEvent_1.default {\r\n constructor(touchEvent) {\r\n super('tap', touchEvent);\r\n this.duration = 0;\r\n }\r\n}\r\nexports.default = TapEvent;\r\n//# sourceMappingURL=TapEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nclass DoubleTapEvent extends GestureEvent_1.default {\r\n constructor(touchEvent) {\r\n super('doubletap', touchEvent);\r\n }\r\n}\r\nexports.default = DoubleTapEvent;\r\n//# sourceMappingURL=DoubleTapEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SwipeEndEvent = exports.SwipeStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar SwipeLifecycleStateEnum;\r\n(function (SwipeLifecycleStateEnum) {\r\n SwipeLifecycleStateEnum[SwipeLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n SwipeLifecycleStateEnum[SwipeLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(SwipeLifecycleStateEnum || (SwipeLifecycleStateEnum = {}));\r\nclass SwipeEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, swipeData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"swipestart\";\r\n break;\r\n case \"end\":\r\n eventType = \"swipeend\";\r\n break;\r\n default:\r\n eventType = \"swipe\";\r\n }\r\n super(eventType, touchEvent);\r\n this.velocity = swipeData.velocity;\r\n this.direction = swipeData.direction;\r\n }\r\n}\r\nclass SwipeEvent extends SwipeEventBase {\r\n constructor(touchEvent, swipeData) {\r\n super(touchEvent, swipeData);\r\n }\r\n}\r\nexports.default = SwipeEvent;\r\nclass SwipeStartEvent extends SwipeEventBase {\r\n constructor(touchEvent, swipeData) {\r\n super(touchEvent, swipeData, \"start\");\r\n }\r\n}\r\nexports.SwipeStartEvent = SwipeStartEvent;\r\nclass SwipeEndEvent extends SwipeEventBase {\r\n constructor(touchEvent, swipeData) {\r\n super(touchEvent, swipeData, \"end\");\r\n }\r\n}\r\nexports.SwipeEndEvent = SwipeEndEvent;\r\n//# sourceMappingURL=SwipeEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PanEndEvent = exports.PanStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar PanLifecycleStateEnum;\r\n(function (PanLifecycleStateEnum) {\r\n PanLifecycleStateEnum[PanLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n PanLifecycleStateEnum[PanLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(PanLifecycleStateEnum || (PanLifecycleStateEnum = {}));\r\nclass PanEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, panData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"panstart\";\r\n break;\r\n case \"end\":\r\n eventType = \"panend\";\r\n break;\r\n default:\r\n eventType = \"pan\";\r\n }\r\n super(eventType, touchEvent);\r\n this.velocity = panData.velocity;\r\n this.translation = {\r\n x: panData.translation.x,\r\n y: panData.translation.y,\r\n magnitude: panData.translation.magnitude,\r\n clientX: panData.translation.clientX,\r\n clientY: panData.translation.clientY,\r\n clientMagnitude: panData.translation.clientMagnitude\r\n };\r\n }\r\n}\r\nclass PanEvent extends PanEventBase {\r\n constructor(touchEvent, panData) {\r\n super(touchEvent, panData);\r\n }\r\n}\r\nexports.default = PanEvent;\r\nclass PanStartEvent extends PanEventBase {\r\n constructor(touchEvent, panData) {\r\n super(touchEvent, panData, \"start\");\r\n }\r\n}\r\nexports.PanStartEvent = PanStartEvent;\r\nclass PanEndEvent extends PanEventBase {\r\n constructor(touchEvent, panData) {\r\n super(touchEvent, panData, \"end\");\r\n }\r\n}\r\nexports.PanEndEvent = PanEndEvent;\r\n//# sourceMappingURL=PanEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PinchEndEvent = exports.PinchStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar PinchLifecycleStateEnum;\r\n(function (PinchLifecycleStateEnum) {\r\n PinchLifecycleStateEnum[PinchLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n PinchLifecycleStateEnum[PinchLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(PinchLifecycleStateEnum || (PinchLifecycleStateEnum = {}));\r\nclass PinchEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, pinchData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"pinchstart\";\r\n break;\r\n case \"end\":\r\n eventType = \"pinchend\";\r\n break;\r\n default:\r\n eventType = \"pinch\";\r\n }\r\n super(eventType, touchEvent);\r\n Object.defineProperty(this, 'scale', {\r\n value: pinchData.scale,\r\n writable: false\r\n });\r\n }\r\n}\r\nclass PinchEvent extends PinchEventBase {\r\n constructor(touchEvent, pinchData) {\r\n super(touchEvent, pinchData);\r\n }\r\n}\r\nexports.default = PinchEvent;\r\nclass PinchStartEvent extends PinchEventBase {\r\n constructor(touchEvent, pinchData) {\r\n super(touchEvent, pinchData, \"start\");\r\n }\r\n}\r\nexports.PinchStartEvent = PinchStartEvent;\r\nclass PinchEndEvent extends PinchEventBase {\r\n constructor(touchEvent, pinchData) {\r\n super(touchEvent, pinchData, \"end\");\r\n }\r\n}\r\nexports.PinchEndEvent = PinchEndEvent;\r\n//# sourceMappingURL=PinchEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.RotateEndEvent = exports.RotateStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar RotateLifecycleStateEnum;\r\n(function (RotateLifecycleStateEnum) {\r\n RotateLifecycleStateEnum[RotateLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n RotateLifecycleStateEnum[RotateLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(RotateLifecycleStateEnum || (RotateLifecycleStateEnum = {}));\r\nclass RotateEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, rotationData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"rotatestart\";\r\n break;\r\n case \"end\":\r\n eventType = \"rotateend\";\r\n break;\r\n default:\r\n eventType = \"rotate\";\r\n }\r\n super(eventType, touchEvent);\r\n this.anchor = {\r\n x: rotationData.anchor.x,\r\n y: rotationData.anchor.y,\r\n clientX: rotationData.anchor.clientX,\r\n clientY: rotationData.anchor.clientY\r\n };\r\n Object.defineProperty(this, 'rotation', {\r\n value: rotationData.rotation,\r\n writable: false\r\n });\r\n this.rotationDeg = rotationData.rotationDeg;\r\n }\r\n}\r\nclass RotateEvent extends RotateEventBase {\r\n constructor(touchEvent, rotationData) {\r\n super(touchEvent, rotationData);\r\n }\r\n}\r\nexports.default = RotateEvent;\r\nclass RotateStartEvent extends RotateEventBase {\r\n constructor(touchEvent, rotationData) {\r\n super(touchEvent, rotationData, \"start\");\r\n }\r\n}\r\nexports.RotateStartEvent = RotateStartEvent;\r\nclass RotateEndEvent extends RotateEventBase {\r\n constructor(touchEvent, rotationData) {\r\n super(touchEvent, rotationData, \"end\");\r\n }\r\n}\r\nexports.RotateEndEvent = RotateEndEvent;\r\n//# sourceMappingURL=RotateEvent.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.closest = exports.Vec2 = exports.assert = void 0;\r\nfunction assert(condition, message) {\r\n if (!condition) {\r\n throw new Error(message);\r\n }\r\n}\r\nexports.assert = assert;\r\nclass Vec2 {\r\n constructor(_x, _y) {\r\n this._x = 0;\r\n this._y = 0;\r\n this._clientX = 0;\r\n this._clientY = 0;\r\n this._clientX = _x;\r\n this._clientY = _y;\r\n this._x = this.translateX(_x);\r\n this._y = this.translateY(_y);\r\n }\r\n translateY(_y) {\r\n return -(_y - window.innerHeight / 2);\r\n }\r\n translateX(_x) {\r\n return _x - window.innerWidth / 2;\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n get clientX() {\r\n return this._clientX;\r\n }\r\n get clientY() {\r\n return this._clientY;\r\n }\r\n set x(_x) {\r\n this._clientX = _x;\r\n this._x = this.translateX(_x);\r\n }\r\n set y(_y) {\r\n this._clientY = _y;\r\n this._y = this.translateY(_y);\r\n }\r\n add(vector) {\r\n this._x += vector.x;\r\n this._y += vector.y;\r\n this._clientX += vector.clientX;\r\n this._clientY += vector.clientY;\r\n return this;\r\n }\r\n substract(vector) {\r\n this._x -= vector.x;\r\n this._y -= vector.y;\r\n this._clientX -= vector.clientX;\r\n this._clientY -= vector.clientY;\r\n return this;\r\n }\r\n dot(vector) {\r\n const scalar = (this._x * vector.x) + (this._y * vector.y);\r\n return scalar;\r\n }\r\n get magnitude() {\r\n return Math.sqrt(Math.pow(this._x, 2) + Math.pow(this._y, 2));\r\n }\r\n get clientMagnitude() {\r\n return Math.sqrt(Math.pow(this._clientX, 2) + Math.pow(this._clientY, 2));\r\n }\r\n}\r\nexports.Vec2 = Vec2;\r\nfunction closest(needle, haystack) {\r\n return haystack.reduce((a, b) => {\r\n let a_diff = Math.abs(a - needle);\r\n let b_diff = Math.abs(b - needle);\r\n if (a_diff === b_diff) {\r\n return a > b ? a : b;\r\n }\r\n else {\r\n return b_diff < a_diff ? b : a;\r\n }\r\n });\r\n}\r\nexports.closest = closest;\r\n//# sourceMappingURL=utils.js.map","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.RotateEndEvent = exports.RotateEvent = exports.RotateStartEvent = exports.PinchEndEvent = exports.PinchEvent = exports.PinchStartEvent = exports.PanEndEvent = exports.PanEvent = exports.PanStartEvent = exports.SwipeEndEvent = exports.SwipeEvent = exports.SwipeStartEvent = exports.DoubleTapEvent = exports.LongPressEvent = exports.GestureEvent = exports.TapEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./Gestures/GestureEvent\"));\r\nexports.GestureEvent = GestureEvent_1.default;\r\nconst LongPressEvent_1 = __importDefault(require(\"./Gestures/LongPressEvent\"));\r\nexports.LongPressEvent = LongPressEvent_1.default;\r\nconst TapEvent_1 = __importDefault(require(\"./Gestures/TapEvent\"));\r\nexports.TapEvent = TapEvent_1.default;\r\nconst DoubleTapEvent_1 = __importDefault(require(\"./Gestures/DoubleTapEvent\"));\r\nexports.DoubleTapEvent = DoubleTapEvent_1.default;\r\nconst SwipeEvent_1 = __importStar(require(\"./Gestures/SwipeEvent\"));\r\nexports.SwipeEvent = SwipeEvent_1.default;\r\nObject.defineProperty(exports, \"SwipeEndEvent\", { enumerable: true, get: function () { return SwipeEvent_1.SwipeEndEvent; } });\r\nObject.defineProperty(exports, \"SwipeStartEvent\", { enumerable: true, get: function () { return SwipeEvent_1.SwipeStartEvent; } });\r\nconst PanEvent_1 = __importStar(require(\"./Gestures/PanEvent\"));\r\nexports.PanEvent = PanEvent_1.default;\r\nObject.defineProperty(exports, \"PanEndEvent\", { enumerable: true, get: function () { return PanEvent_1.PanEndEvent; } });\r\nObject.defineProperty(exports, \"PanStartEvent\", { enumerable: true, get: function () { return PanEvent_1.PanStartEvent; } });\r\nconst PinchEvent_1 = __importStar(require(\"./Gestures/PinchEvent\"));\r\nexports.PinchEvent = PinchEvent_1.default;\r\nObject.defineProperty(exports, \"PinchEndEvent\", { enumerable: true, get: function () { return PinchEvent_1.PinchEndEvent; } });\r\nObject.defineProperty(exports, \"PinchStartEvent\", { enumerable: true, get: function () { return PinchEvent_1.PinchStartEvent; } });\r\nconst RotateEvent_1 = __importStar(require(\"./Gestures/RotateEvent\"));\r\nexports.RotateEvent = RotateEvent_1.default;\r\nObject.defineProperty(exports, \"RotateEndEvent\", { enumerable: true, get: function () { return RotateEvent_1.RotateEndEvent; } });\r\nObject.defineProperty(exports, \"RotateStartEvent\", { enumerable: true, get: function () { return RotateEvent_1.RotateStartEvent; } });\r\nconst utils_1 = require(\"./utils\");\r\nvar CartesianDirectionEnum;\r\n(function (CartesianDirectionEnum) {\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"right\"] = 0] = \"right\";\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"up\"] = 1] = \"up\";\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"left\"] = 2] = \"left\";\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"down\"] = 3] = \"down\";\r\n})(CartesianDirectionEnum || (CartesianDirectionEnum = {}));\r\nclass GestureProvider {\r\n constructor() {\r\n this.touchStart = new TouchEvent('touchstart') || {};\r\n this.touchMove = new TouchEvent('touchmove') || {};\r\n this.touchEnd = new TouchEvent('touchend') || {};\r\n this.touchCancel = new TouchEvent('touchcancel') || {};\r\n this.velocity = 0;\r\n this.dxDy = new utils_1.Vec2(0, 0);\r\n this.scale = 1;\r\n this.rotation = 0;\r\n this.rotationDeg = 0;\r\n this.anchor = new utils_1.Vec2(0, 0);\r\n this.octant = 0;\r\n this.isPanning = false;\r\n this.isPinching = false;\r\n this.isSwiping = false;\r\n this.isRotating = false;\r\n this.touchStartTime = 0;\r\n this.touchEndTime = 0;\r\n this.lastTouchTime = 0;\r\n this.taps = 0;\r\n this.scaleBase = 0;\r\n this.touchMoved = false;\r\n this.touchDown = false;\r\n this.shouldFire = false;\r\n this.pointers = 0;\r\n this.isLongPress = false;\r\n this.longPressTimeout = 0;\r\n this.touchStartListener = this.onTouchStart.bind(this);\r\n this.touchMoveListener = this.onTouchMove.bind(this);\r\n this.touchEndListener = this.onTouchEnd.bind(this);\r\n this.touchCancelListener = this.onTouchCancel.bind(this);\r\n this.currentTarget = window;\r\n this.config = {\r\n longPressDuration: 500,\r\n tapDelay: 500,\r\n minPointers: 1,\r\n numberOfTaps: 0\r\n };\r\n if (!GestureProvider.listening) {\r\n if (TouchEvent)\r\n window.addEventListener('touchstart', this.touchStartListener, true);\r\n GestureProvider.listening = true;\r\n }\r\n }\r\n bind(target) {\r\n this.unbind(this.currentTarget);\r\n target.addEventListener('touchmove', this.touchMoveListener, true);\r\n target.addEventListener('touchend', this.touchEndListener, true);\r\n target.addEventListener('touchcancel', this.touchCancelListener, true);\r\n this.currentTarget = target;\r\n }\r\n unbind(target) {\r\n target.removeEventListener('touchmove', this.touchMoveListener);\r\n target.removeEventListener('touchend', this.touchEndListener);\r\n target.removeEventListener('touchcancel', this.touchCancelListener);\r\n }\r\n clean() {\r\n this.touchMoved = false;\r\n this.touchStartTime = 0;\r\n this.touchDown = false;\r\n this.scaleBase = 0;\r\n if (this.longPressTimeout && !this.isLongPress) {\r\n clearTimeout(this.longPressTimeout);\r\n this.longPressTimeout = 0;\r\n }\r\n this.isLongPress = false;\r\n }\r\n onPointerLeave(touchEnd) {\r\n if (!touchEnd.touches.length) {\r\n if (this.isSwiping) {\r\n const swipeEndEvent = new SwipeEvent_1.SwipeEndEvent(touchEnd, {\r\n velocity: this.velocity,\r\n direction: CartesianDirectionEnum[(0, utils_1.closest)(this.octant, [0, 1, 2, 3])]\r\n });\r\n this.dispatchEvent(swipeEndEvent);\r\n this.isSwiping = false;\r\n }\r\n if (this.isPanning) {\r\n const panEndEvent = new PanEvent_1.PanEndEvent(touchEnd, {\r\n translation: this.dxDy,\r\n velocity: this.velocity\r\n });\r\n this.dispatchEvent(panEndEvent);\r\n this.isPanning = false;\r\n }\r\n }\r\n if (touchEnd.touches.length === 1) {\r\n this.scaleBase = 0;\r\n if (this.isPinching) {\r\n const pinchEndEvent = new PinchEvent_1.PinchEndEvent(touchEnd, {\r\n scale: this.scale\r\n });\r\n this.dispatchEvent(pinchEndEvent);\r\n this.isPinching = false;\r\n }\r\n if (this.isRotating) {\r\n const rotateEndEvent = new RotateEvent_1.RotateEndEvent(touchEnd, {\r\n rotation: this.rotation,\r\n rotationDeg: this.rotationDeg,\r\n anchor: this.anchor\r\n });\r\n this.dispatchEvent(rotateEndEvent);\r\n this.isRotating = false;\r\n }\r\n }\r\n }\r\n dispatchEvent(gestureEvent) {\r\n queueMicrotask(() => {\r\n this.currentTarget.dispatchEvent(gestureEvent);\r\n });\r\n }\r\n onTouchStart(touchStart) {\r\n if (this.currentTarget !== touchStart.touches[0].target) {\r\n this.clean();\r\n this.unbind(this.currentTarget);\r\n this.pointers = this.touchEnd.touches.length;\r\n this.taps = 0;\r\n }\r\n this.touchStart = touchStart;\r\n const minPointers = parseInt(touchStart.touches[0].target.dataset.minpointers || '0') || this.config.minPointers;\r\n if (this.touchStart.touches.length < minPointers) {\r\n this.shouldFire = false;\r\n return;\r\n }\r\n this.shouldFire = true;\r\n this.touchStartTime = touchStart.timeStamp;\r\n this.touchDown = true;\r\n if (!this.pointers)\r\n this.bind(touchStart.touches[0].target);\r\n this.pointers = this.touchStart.touches.length;\r\n const longPressDuration = parseFloat(this.currentTarget.dataset.longpressduration || '0') || this.config.longPressDuration;\r\n if (!this.longPressTimeout) {\r\n this.longPressTimeout = setTimeout(() => {\r\n if (!this.touchMoved && this.touchDown) {\r\n const touchDuration = Date.now() - this.touchStartTime;\r\n const longPressEvent = new LongPressEvent_1.default(this.touchStart, touchDuration);\r\n this.dispatchEvent(longPressEvent);\r\n this.isLongPress = true;\r\n this.longPressTimeout = 0;\r\n }\r\n }, longPressDuration);\r\n }\r\n if (this.touchStart.touches.length > 1) {\r\n const originPointerPrimary = new utils_1.Vec2(this.touchStart.touches[0].clientX, this.touchStart.touches[0].clientY);\r\n const originPointerSecondary = new utils_1.Vec2(this.touchStart.touches[1].clientX, this.touchStart.touches[1].clientY);\r\n this.scaleBase = originPointerPrimary.substract(originPointerSecondary).magnitude;\r\n }\r\n else\r\n this.scaleBase = 0;\r\n }\r\n onTouchMove(touchMove) {\r\n if (!this.shouldFire)\r\n return;\r\n this.touchMoved = true;\r\n this.touchMove = touchMove;\r\n if (touchMove.touches.length > 1 && this.touchStart.touches.length > 1) {\r\n if (touchMove.touches[1].clientX !== this.touchStart.touches[1].clientX\r\n || touchMove.touches[1].clientY !== this.touchStart.touches[1].clientY) {\r\n const currentPointerPrimary = new utils_1.Vec2(this.touchMove.touches[0].clientX, this.touchMove.touches[0].clientY);\r\n const currentPointerSecondary = new utils_1.Vec2(this.touchMove.touches[1].clientX, this.touchMove.touches[1].clientY);\r\n const originPointerPrimary = new utils_1.Vec2(this.touchStart.touches[0].clientX, this.touchStart.touches[0].clientY);\r\n const distance = currentPointerPrimary.substract(currentPointerSecondary);\r\n if (this.scaleBase && Math.abs(this.scaleBase - distance.magnitude) > 10) {\r\n const scaleFactor = distance.magnitude / this.scaleBase;\r\n this.scale = scaleFactor;\r\n if (this.isPinching) {\r\n const pinchEvent = new PinchEvent_1.default(touchMove, {\r\n scale: scaleFactor\r\n });\r\n this.dispatchEvent(pinchEvent);\r\n }\r\n else {\r\n const pinchStartEvent = new PinchEvent_1.PinchStartEvent(touchMove, {\r\n scale: scaleFactor\r\n });\r\n this.dispatchEvent(pinchStartEvent);\r\n this.isPinching = true;\r\n }\r\n }\r\n this.anchor = currentPointerPrimary;\r\n let rotationAngle = Math.atan2((originPointerPrimary.clientY - currentPointerSecondary.clientY), (originPointerPrimary.clientX - currentPointerSecondary.clientX));\r\n rotationAngle < 0 ? rotationAngle += 1.5708 : rotationAngle -= 1.5708;\r\n this.rotation = rotationAngle;\r\n this.rotationDeg = rotationAngle * 180 / Math.PI;\r\n this.anchor = this.anchor;\r\n if (this.isRotating) {\r\n const rotateEvent = new RotateEvent_1.default(touchMove, {\r\n anchor: this.anchor,\r\n rotation: this.rotation,\r\n rotationDeg: this.rotationDeg\r\n });\r\n this.dispatchEvent(rotateEvent);\r\n }\r\n else {\r\n const rotateStartEvent = new RotateEvent_1.RotateStartEvent(touchMove, {\r\n anchor: this.anchor,\r\n rotation: this.rotation,\r\n rotationDeg: this.rotationDeg\r\n });\r\n this.dispatchEvent(rotateStartEvent);\r\n this.isRotating = true;\r\n }\r\n }\r\n }\r\n const origin = new utils_1.Vec2(this.touchStart.touches[0].clientX, this.touchStart.touches[0].clientY);\r\n const currentPosition = new utils_1.Vec2(this.touchMove.touches[0].clientX, this.touchMove.touches[0].clientY);\r\n const dxDy = currentPosition.substract(origin);\r\n const length = dxDy.magnitude;\r\n const normalised = {\r\n x: dxDy.x / length,\r\n y: dxDy.y / length\r\n };\r\n const angle = Math.atan2(normalised.y, normalised.x);\r\n this.octant = Math.round(4 * angle / (2 * Math.PI) + 4) % 4;\r\n const dt = (touchMove.timeStamp - this.touchStart.timeStamp) / 1000;\r\n const velocity = dxDy.magnitude / dt;\r\n if (this.isSwiping) {\r\n const swipeEvent = new SwipeEvent_1.default(touchMove, {\r\n direction: CartesianDirectionEnum[(0, utils_1.closest)(this.octant, [0, 1, 2, 3])],\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(swipeEvent);\r\n }\r\n else {\r\n const swipeStartEvent = new SwipeEvent_1.SwipeStartEvent(touchMove, {\r\n direction: CartesianDirectionEnum[(0, utils_1.closest)(this.octant, [0, 1, 2, 3])],\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(swipeStartEvent);\r\n this.isSwiping = true;\r\n }\r\n this.dxDy = dxDy;\r\n this.velocity = velocity;\r\n if (this.isPanning) {\r\n const panEvent = new PanEvent_1.default(touchMove, {\r\n translation: dxDy,\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(panEvent);\r\n }\r\n else {\r\n const panStartEvent = new PanEvent_1.PanStartEvent(touchMove, {\r\n translation: dxDy,\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(panStartEvent);\r\n this.isPanning = true;\r\n }\r\n }\r\n onTouchEnd(touchEnd) {\r\n const numberOfTaps = parseInt(this.currentTarget.dataset.numberoftaps || '0') || this.config.numberOfTaps;\r\n this.taps++;\r\n this.shouldFire = Boolean(this.taps > numberOfTaps);\r\n if (this.shouldFire) {\r\n this.touchEnd = touchEnd;\r\n this.touchEndTime = touchEnd.timeStamp;\r\n const maxTapDelay = parseFloat(this.currentTarget.dataset.tapdelay || '0') || this.config.tapDelay;\r\n if (!this.touchMoved && !this.isLongPress) {\r\n if (this.taps === 1 || (this.touchEndTime - this.lastTouchTime) < maxTapDelay) {\r\n if (this.taps % 2 === numberOfTaps) {\r\n const doubleTapEvent = new DoubleTapEvent_1.default(touchEnd);\r\n this.dispatchEvent(doubleTapEvent);\r\n this.taps = 0;\r\n }\r\n const tapEvent = new TapEvent_1.default(touchEnd);\r\n this.dispatchEvent(tapEvent);\r\n }\r\n else {\r\n this.taps = 0;\r\n }\r\n }\r\n }\r\n this.pointers = this.touchEnd.touches.length;\r\n this.lastTouchTime = this.touchEndTime;\r\n this.onPointerLeave(touchEnd);\r\n this.unbind(this.currentTarget);\r\n this.clean();\r\n }\r\n onTouchCancel(touchCancel) {\r\n if (!this.shouldFire)\r\n return;\r\n this.touchCancel = touchCancel;\r\n this.unbind(this.currentTarget);\r\n this.clean();\r\n }\r\n}\r\nexports.default = GestureProvider;\r\nGestureProvider.listening = false;\r\nif (TouchEvent)\r\n window.gestureProvider = new GestureProvider();\r\n//# sourceMappingURL=index.js.map","import { GestureEvent } from 'web-gesture-events';\nimport { NavigateOptions, NavigationProps } from './types';\n\nexport class NavigateEvent extends Event {\n public readonly routerId: string;\n public readonly route: string;\n public readonly props: NavigationProps;\n public readonly navigationType: NonNullable<NavigateOptions['type']>;\n public readonly signal: AbortSignal;\n public readonly committed: Promise<NavigationHistoryEntry>;\n public readonly transition: NavigationTransition;\n\n constructor(\n routerId: string,\n route: string,\n props: NavigationProps,\n type: NavigateOptions['type'],\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n super('navigate');\n this.routerId = routerId;\n this.route = route;\n this.props = props;\n this.navigationType = type ?? 'push';\n this.signal = signal;\n this.committed = committed;\n this.transition = transition;\n }\n}\n\nexport class BackEvent extends Event {\n public readonly routerId: string;\n public readonly signal: AbortSignal;\n public readonly committed: Promise<NavigationHistoryEntry>;\n public readonly transition: NavigationTransition;\n\n constructor(\n routerId: string,\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n super('back');\n this.routerId = routerId;\n this.signal = signal;\n this.committed = committed;\n this.transition = transition;\n }\n}\n\nexport class ForwardEvent extends Event {\n public readonly routerId: string;\n public readonly signal: AbortSignal;\n public readonly committed: Promise<NavigationHistoryEntry>;\n public readonly transition: NavigationTransition;\n\n constructor(\n routerId: string,\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n super('forward');\n this.routerId = routerId;\n this.signal = signal;\n this.committed = committed;\n this.transition = transition;\n }\n}\n\nexport class GestureStartEvent extends Event {\n public readonly source: GestureEvent;\n\n constructor(source: GestureEvent) {\n super('gesture-start');\n this.source = source;\n }\n}\n\nexport class GestureEndEvent extends Event {\n public readonly source: GestureEvent;\n\n constructor(source: GestureEvent) {\n super('gesture-end');\n this.source = source;\n }\n}\n\nexport class GestureCancelEvent extends Event {\n constructor() {\n super('gesture-cancel');\n }\n}","export class HistoryEntry implements Omit<NavigationHistoryEntry, 'url'> {\n public readonly routerId: string;\n readonly #nativeEntry: NavigationHistoryEntry;\n public readonly index: number;\n\n constructor(\n nativeEntry: NavigationHistoryEntry,\n routerId: string,\n index: number\n ) {\n this.#nativeEntry = nativeEntry;\n this.routerId = routerId;\n this.index = index;\n }\n\n public set ondispose(\n handler: ((this: NavigationHistoryEntry, ev: Event) => void) | null\n ) {\n this.#nativeEntry.ondispose = handler;\n }\n\n public get ondispose() {\n return this.#nativeEntry.ondispose;\n }\n\n public get id() {\n return this.#nativeEntry.id;\n }\n\n public get globalIndex() {\n return this.#nativeEntry.index;\n }\n\n public get url() {\n if (!this.#nativeEntry.url) return null;\n return new URL(this.#nativeEntry.url);\n }\n\n public get key() {\n return this.#nativeEntry.key;\n }\n\n public get sameDocument() {\n return this.#nativeEntry.sameDocument;\n }\n\n public addEventListener<K extends keyof NavigationHistoryEntryEventMap>(\n type: K,\n listener: (\n this: NavigationHistoryEntry,\n ev: NavigationHistoryEntryEventMap[K]\n ) => void,\n options?: boolean | AddEventListenerOptions\n ): () => void;\n public addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): () => void;\n public addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): () => void {\n this.#nativeEntry.addEventListener(type, listener, options);\n\n return () => this.#nativeEntry.removeEventListener(type, listener, options);\n }\n\n public removeEventListener<K extends keyof NavigationHistoryEntryEventMap>(\n type: K,\n listener: (\n this: NavigationHistoryEntry,\n ev: NavigationHistoryEntryEventMap[K]\n ) => void,\n options?: boolean | EventListenerOptions\n ): void;\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void;\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n this.#nativeEntry.addEventListener(type, listener, options);\n }\n\n public dispatchEvent(event: Event): boolean {\n return this.#nativeEntry.dispatchEvent(event);\n }\n\n public getState<T>() {\n return this.#nativeEntry.getState() as T;\n }\n}","import {\n FIRST_INDEX,\n LAST_INDEX,\n LoadNavigationTransition,\n NavigationBase,\n NavigationBaseConfig,\n PathPattern,\n SINGLE_ELEMENT_LENGTH,\n matchRoute,\n resolveBaseURLFromPattern\n} from '@react-motion-router/core';\nimport {\n GoBackOptions,\n GoForwardOptions,\n NavigateOptions,\n NavigationBaseOptions,\n NavigationProps,\n RouterEventMap\n} from './common/types';\nimport { BackEvent, ForwardEvent, NavigateEvent } from './common/events';\nimport { HistoryEntry } from './HistoryEntry';\n\nexport interface NavigationConfig extends NavigationBaseConfig<\n RouterEventMap\n> {\n preload(\n pathname: string,\n props?: NavigationProps,\n options?: NavigationBaseOptions\n ): Promise<boolean>;\n getCommitted(): Promise<NavigationHistoryEntry> | null;\n getTransition(): NavigationTransition | LoadNavigationTransition | null;\n getPathPatterns(): PathPattern[];\n}\n\nexport class Navigation extends NavigationBase<RouterEventMap> {\n private readonly config;\n\n constructor(config: NavigationConfig) {\n super(config);\n this.config = config;\n }\n\n public preload(\n route: string,\n props: NavigationProps = {},\n options: NavigationBaseOptions = {}\n ) {\n const { pathname } = new URL(route, this.baseURL);\n return this.config.preload(pathname, props, options);\n }\n\n public replace(\n route: string,\n props: NavigationProps = {},\n options: NavigationBaseOptions = {}\n ) {\n return this.navigate(route, props, { ...options, type: 'replace' });\n }\n\n public push(\n route: string,\n props: NavigationProps = {},\n options: NavigationBaseOptions = {}\n ) {\n return this.navigate(route, props, { ...options, type: 'push' });\n }\n\n public reload(props: NavigationProps = {}) {\n return window.navigation.reload({ state: props });\n }\n\n public traverseTo(key: string, options: NavigationBaseOptions = {}) {\n const result = window.navigation.traverseTo(key);\n const transition = window.navigation.transition!;\n\n const fromIndex = transition.from.index;\n const destinationIndex = window.navigation\n .entries()\n .findIndex(entry => entry.key === key);\n\n const controller = new AbortController();\n controller.signal\n .addEventListener(\n 'abort',\n () => this.traverseTo(transition.from.key), { once: true }\n );\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n let event;\n if (fromIndex > destinationIndex) {\n event = this.createBackEvent(\n controller.signal,\n result.committed,\n transition\n );\n } else {\n event = this.createForwardEvent(\n controller.signal,\n result.committed,\n transition\n );\n }\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n public navigate(\n route: string,\n props: NavigationProps = {},\n options: NavigateOptions = {}\n ) {\n const { type: history = 'push' } = options;\n\n const url = new URL(route, this.baseURL);\n const result = window.navigation\n .navigate(url.href, { history, state: props });\n const transition = window.navigation.transition!;\n\n const controller = new AbortController();\n controller.signal\n .addEventListener('abort', () => this.goBack(), { once: true });\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n const event = this.createNavigateEvent(\n route,\n props,\n history,\n controller.signal,\n result.committed,\n transition\n );\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n public goBack(options: GoBackOptions = {}) {\n if (!this.canGoBack()) return;\n\n const result = window.navigation.traverseTo(this.previous.key);\n const transition = window.navigation.transition!;\n\n const controller = new AbortController();\n controller.signal\n .addEventListener('abort', () => this.goForward(), { once: true });\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n const event = this.createBackEvent(\n controller.signal,\n result.committed,\n transition\n );\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n public goForward(options: GoForwardOptions = {}) {\n if (!this.canGoForward()) return;\n\n const result = window.navigation.traverseTo(this.next.key);\n const transition = window.navigation.transition!;\n\n const controller = new AbortController();\n controller.signal\n .addEventListener('abort', () => this.goBack(), { once: true });\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n const event = this.createForwardEvent(\n controller.signal,\n result.committed,\n transition\n );\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n private createBackEvent(\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n if (!this.routerId) throw new Error('Router ID is not set');\n return new BackEvent(this.routerId, signal, committed, transition);\n }\n\n private createForwardEvent(\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n if (!this.routerId) throw new Error('Router ID is not set');\n return new ForwardEvent(this.routerId, signal, committed, transition);\n }\n\n private createNavigateEvent(\n route: string,\n props: NavigationProps,\n type: NavigateOptions['type'],\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n if (!this.routerId) throw new Error('Router ID is not set');\n return new NavigateEvent(\n this.routerId,\n route,\n props,\n type,\n signal,\n committed,\n transition\n );\n }\n\n public get committed() {\n return this.config.getCommitted();\n }\n\n public get transition() {\n return this.config.getTransition();\n }\n\n public get globalEntries() {\n return window.navigation.entries();\n }\n\n /**\n * Returns the list of history entries **owned by this router**, derived from the\n * browser’s global navigation history.\n *\n * ---\n *\n * ### Mental model\n *\n * The Web Navigation API exposes a **single, flat history list**.\n * This router projects a **scoped, ordered view** of that list ensuring the\n * router can only see entries it created.\n *\n * Each global entry is classified as one of:\n *\n * - **Owned by this router**\n * - **Owned by a nested router**\n * - **Owned by a different (foreign) router**\n *\n * The resulting entry list is built by iterating global history **from the\n * beginning**, applying ownership rules, and stopping when ownership is lost.\n *\n * ---\n *\n * ### Ownership & contiguity rules\n *\n * 1. **Entries owned by this router**\n * - Are included\n * - Preserve global ordering\n *\n * 2. **Entries owned by nested routers**\n * - Exactly **one entry is included** (the nested router’s mount point),\n * because it must be rendered by the parent router\n * - All subsequent entries belonging to that same nested scope are excluded\n *\n * 3. **Entries owned by a foreign router**\n * - Are excluded\n * - **Terminate entry collection** once at least one entry has been matched\n *\n * This means contiguity is enforced **only across routers that cannot be\n * matched by this router at all**.\n *\n * ---\n *\n * ### Important invariants\n *\n * - Returned entries are always in **global history order**\n * - Local indices are **stable and monotonic**\n * - Nested router entries never leak into the parent router\n * - Entry collection stops once navigation leaves this router’s ownership\n * after it has begun\n *\n * ---\n *\n * ### Example\n *\n * Global history:\n * ```\n * 0: / (parent)\n * 1: /world (parent)\n * 2: /world/1 (nested mount point)\n * 3: /world/2 (nested)\n * 4: /about (parent)\n * 5: /other-router/page (foreign)\n * 6: / (parent)\n * ```\n *\n * Parent router entries:\n * ```\n * /, /world, /world/1, /about\n * ```\n *\n * Collection stops at index 5 because ownership is transferred to a\n * foreign router.\n *\n *\n * This approach balances correctness, simplicity, and predictable behavior\n * without requiring global history rewriting or fragile index arithmetic.\n */\n public get entries() {\n const nestedPathPatterns = this.config\n .getPathPatterns()\n .filter(({ pattern }) => pattern.endsWith('**'));\n let nestedScopePathPattern: PathPattern | null = null;\n let lastMatchedIndex = LAST_INDEX;\n let terminated = false;\n return this.globalEntries\n .filter((entry, index) => {\n if (!entry.url) return false;\n if (terminated) return false;\n const url = new URL(entry.url);\n const resolvedBaseURL = resolveBaseURLFromPattern(\n this.baseURLPattern.pathname, url.pathname\n );\n if (!resolvedBaseURL) {\n if (lastMatchedIndex !== LAST_INDEX)\n terminated = true;\n return false;\n }\n\n if (nestedScopePathPattern) {\n // we're in a nested scope, check if the current URL is also apart of the same scope and exit.\n const nestedBaseURLPattern = new URLPattern(\n nestedScopePathPattern.pattern,\n resolvedBaseURL.href\n );\n if (\n matchRoute(\n url.pathname,\n url.pathname,\n nestedBaseURLPattern.pathname,\n nestedScopePathPattern.caseSensitive\n )\n ) {\n return false;\n }\n }\n\n nestedScopePathPattern = nestedPathPatterns.find(\n ({ pattern, caseSensitive }) => (\n matchRoute(\n pattern,\n url.pathname,\n this.baseURLPattern.pathname,\n caseSensitive\n )\n )\n ) ?? null;\n\n lastMatchedIndex = index;\n return true;\n })\n .map((entry, index) => {\n return new HistoryEntry(entry, this.routerId, index);\n });\n }\n\n /**\n * Returns the **local history index** for this router, derived from the\n * browser’s global navigation state.\n *\n * ---\n *\n * ### Problem this solves\n *\n * The Web Navigation API exposes a **single, flat history list**.\n * This router exposes a **scoped history view** that:\n *\n * - filters out entries owned by nested routers\n * - preserves global ordering\n * - reindexes entries locally\n *\n * As a result, there is **no arithmetic relationship** between:\n *\n * - `window.navigation.currentEntry.index` (global)\n * - this router’s local `index`\n *\n * This getter computes the local index **by identity**, not position.\n *\n * ---\n *\n * ### High-level behavior\n *\n * The returned index is:\n *\n * > the index of the **most recent local entry** that appears in the\n * > browser’s global history **at or before** the current global entry.\n *\n * ---\n *\n * ### Resolution strategy\n *\n * 1. If the current global index is **before** this router’s first entry,\n * the index resolves to `0`.\n *\n * 2. If the current global index is **after** this router’s last entry,\n * the index resolves to `entries.length - 1`.\n *\n * 3. Otherwise:\n * - A window of global history is sliced from the first local entry\n * up to and including the current global entry.\n * - Local entries are scanned **from newest to oldest**.\n * - The first local entry whose `key` appears in that global slice\n * determines the local index.\n *\n * Entry identity is determined by **history entry keys**, not URLs or\n * global indices.\n *\n * ---\n *\n * ### Why key-based matching is required\n *\n * - Global indices are sparse once nested routers are involved\n * - URLs may repeat or be replaced\n * - History entries can be inserted between parent entries\n *\n * Keys provide the only stable identity that survives these cases.\n *\n * ---\n *\n * ### Invariant\n *\n * The returned index always satisfies:\n *\n * ```\n * 0 ≤ index < entries.length\n * ```\n *\n * and monotonically tracks navigation through global history.\n *\n * ---\n *\n * ### Example\n *\n * Global history:\n * ```\n * 0: /\n * 1: /world\n * 2: /world/1 (nested)\n * 3: /about ← current\n * ```\n *\n * Local router entries:\n * ```\n * / (index 0)\n * /world (index 1)\n * /about (index 2)\n * ```\n *\n * Result:\n * ```\n * index === 2\n * ```\n */\n public get index() {\n const globalCurrentIndex = window.navigation\n .currentEntry\n ?.index ?? LAST_INDEX;\n const firstEntryGlobalIndex = this.entries\n .at(FIRST_INDEX)\n ?.globalIndex ?? LAST_INDEX;\n const lastEntryGlobalIndex = this.entries\n .at(LAST_INDEX)\n ?.globalIndex ?? LAST_INDEX;\n if (globalCurrentIndex <= firstEntryGlobalIndex)\n return FIRST_INDEX;\n else if (globalCurrentIndex >= lastEntryGlobalIndex)\n return this.entries.length - SINGLE_ELEMENT_LENGTH;\n else {\n const scopedEntries = this.globalEntries\n .slice(\n firstEntryGlobalIndex,\n globalCurrentIndex + SINGLE_ELEMENT_LENGTH\n );\n return this.entries.findLastIndex(entry => {\n return scopedEntries\n .findLastIndex(\n globalEntry => entry.key === globalEntry.key\n ) > LAST_INDEX;\n });\n }\n }\n\n public get previous(): HistoryEntry | null {\n return this.entries[this.index - SINGLE_ELEMENT_LENGTH] ?? null;\n }\n\n public get next(): HistoryEntry | null {\n return this.entries[this.index + SINGLE_ELEMENT_LENGTH] ?? null;\n }\n\n public get current() {\n return this.entries[this.index];\n }\n\n public canGoBack(\n this: Navigation\n ): this is Navigation & { previous: HistoryEntry } {\n return Boolean(this.previous?.url?.origin === globalThis.location.origin);\n }\n\n public canGoForward(\n this: Navigation\n ): this is Navigation & { next: HistoryEntry } {\n return Boolean(this.next?.url?.origin === globalThis.location.origin);\n }\n}","export function searchParamsToObject(searchParams: URLSearchParams) {\n return Object.fromEntries(searchParams.entries());\n}\n\nexport function searchParamsFromObject(params: { [key: string]: any }) {\n return new URLSearchParams(params).toString();\n}\n\nexport function isGesture(info?: unknown) {\n if (info && typeof info === 'object' && 'gesture' in info)\n return Boolean(info.gesture);\n return false;\n}\n\nexport function isRollback(info?: unknown) {\n if (info && typeof info === 'object' && 'rollback' in info)\n return Boolean(info.rollback);\n return false;\n}\n\nexport function deepEquals<T>(obj1: T, obj2: T): boolean {\n if (obj1 === obj2) {\n return true;\n }\n\n if (\n obj1 === null\n || obj2 === null\n || typeof obj1 !== 'object'\n || typeof obj2 !== 'object'\n ) {\n return false;\n }\n\n const keys1 = Object.keys(obj1) as (keyof T)[];\n const keys2 = Object.keys(obj2) as (keyof T)[];\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (!keys2.includes(key) || !deepEquals(obj1[key], obj2[key])) {\n return false;\n }\n }\n\n return true;\n}","import { matchRoute, ScreenBase } from '@react-motion-router/core';\nimport type {\n PlainObject,\n ScreenBaseProps,\n ScreenBaseState,\n ScreenBaseComponentProps,\n ScreenBaseConfig\n} from '@react-motion-router/core';\nimport { Navigation } from './Navigation';\nimport {\n HistoryEntryState,\n RouteProp,\n ScreenInternalProps,\n SwipeDirection\n} from './common/types';\nimport { Router } from './Router';\nimport { searchParamsToObject } from './common/utils';\nimport { HistoryEntry } from './HistoryEntry';\n\nexport type ScreenComponentProps<\n T extends PlainObject = object\n> = ScreenBaseComponentProps<RouteProp<T>, Navigation>;\n\nexport interface ScreenConfig extends ScreenBaseConfig<RouteProp> {\n readonly title?: string;\n readonly presentation?: 'default' | 'dialog' | 'modal';\n readonly keepAlive?: boolean;\n readonly gestureDirection?: SwipeDirection;\n readonly gestureAreaWidth?: number;\n readonly gestureMinFlingVelocity?: number;\n readonly gestureHysteresis?: number;\n readonly gestureDisabled?: boolean;\n}\n\nexport interface ScreenProps extends ScreenBaseProps {\n config?: ScreenConfig;\n}\n\nexport class Screen extends ScreenBase<\n ScreenProps,\n ScreenBaseState,\n RouteProp\n> {\n readonly #historyEntry: HistoryEntry;\n\n constructor(props: ScreenProps, router: Router) {\n super(props, router);\n\n const id = this.internalProps.id;\n const historyEntry = router.navigation\n .entries\n .find(entry => entry.key === id);\n if (!historyEntry)\n throw new Error(`No history entry found for: ${id}`);\n this.#historyEntry = historyEntry;\n }\n\n public static getDerivedStateFromProps(props: ScreenProps) {\n if (\n props.config?.presentation === 'dialog'\n || props.config?.presentation === 'modal'\n )\n return { elementType: 'dialog' };\n else\n return { elementType: 'div' };\n }\n\n protected setParams(newParams: PlainObject): void {\n super.setParams(newParams);\n this.setHistoryState(\n ({ params }) => ({ params: { ...params, ...newParams } })\n );\n }\n\n protected setConfig(newConfig: NonNullable<ScreenProps['config']>): void {\n super.setConfig(newConfig);\n this.setHistoryState(({ config }) => {\n // navigation history state can only accept structured cloneable objects.\n // a lot of the config options are function which cannot be structured cloned.\n const unsafe = new Set([\n 'footer', 'header',\n 'onEnter', 'onEntered',\n 'onExit', 'onExited',\n 'onLoad',\n 'animation',\n ]);\n return {\n config: {\n ...config,\n ...Object.fromEntries(\n Object.entries(newConfig).filter(([key]) => !unsafe.has(key))\n ),\n },\n };\n });\n }\n\n protected get router() {\n return this.context as Router;\n }\n\n private get internalProps() {\n return this.props as unknown as ScreenInternalProps;\n }\n\n public get resolvedPathname() {\n return this.internalProps.resolvedPathname;\n }\n\n private get historyEntryState() {\n const entry = this.#historyEntry;\n if (entry?.url) {\n const state = entry.getState<HistoryEntryState>() ?? {};\n const queryParams = searchParamsToObject(entry.url.searchParams);\n const pathParams = matchRoute(\n this.props.path,\n entry.url.pathname,\n this.context.baseURLPattern.pathname,\n this.props.caseSensitive\n )?.params;\n state.params = {\n ...state.params,\n ...queryParams,\n ...pathParams,\n };\n\n return state;\n }\n return {};\n }\n\n public get id() {\n return this.internalProps.id.toString();\n }\n\n public get params() {\n return {\n ...this.props.defaultParams,\n ...this.historyEntryState.params,\n ...this.state.params,\n };\n }\n\n public get config() {\n return {\n ...this.props.config,\n ...this.historyEntryState.config,\n ...this.state.config,\n };\n }\n\n protected get routeProp() {\n const setParams = this.setParams.bind(this);\n const setConfig = this.setConfig.bind(this);\n const{ path } = this.props;\n const { focused } = this.state;\n const { params, config, resolvedPathname } = this;\n return {\n setParams,\n setConfig,\n path,\n resolvedPathname,\n focused,\n params,\n config,\n };\n }\n\n protected setHistoryState(\n newState: PlainObject | ((prevState: PlainObject) => PlainObject)\n ) {\n if (!this.state.focused) return;\n const prevState = this.#historyEntry.getState<HistoryEntryState>() ?? {};\n if (newState instanceof Function) {\n newState = newState(prevState);\n }\n const state = {\n ...prevState ?? {},\n ...newState,\n };\n window.navigation.updateCurrentEntry({ state });\n }\n\n private onClickOutside(e: MouseEvent) {\n if (!this.transitionProvider.current?.ref.current) return;\n const navigation = this.context?.navigation as Navigation | undefined;\n if (\n e.composedPath().includes(this.transitionProvider.current.ref.current)\n ) return;\n navigation?.goBack();\n }\n\n public onEnter(signal: AbortSignal) {\n const transitionProviderRef = this.transitionProvider.current?.ref;\n if (\n transitionProviderRef?.current instanceof HTMLDialogElement\n && transitionProviderRef.current.open === false\n ) {\n const navigation = this.context?.navigation as Navigation | undefined;\n if (this.props.config?.presentation === 'modal') {\n transitionProviderRef.current.showModal();\n } else {\n transitionProviderRef.current.show();\n }\n transitionProviderRef.current.style.maxHeight = 'unset';\n transitionProviderRef.current.style.maxWidth = 'unset';\n transitionProviderRef.current.style.width = 'max-content';\n transitionProviderRef.current.style.height = 'max-content';\n\n const onClickOutside = this.onClickOutside.bind(this);\n\n // closed by form submit or ESC key\n transitionProviderRef.current.addEventListener('close', function () {\n if (this.returnValue !== 'screen-exit') {\n this.style.display = 'block';\n navigation?.goBack();\n }\n\n navigation?.removeEventListener('click', onClickOutside);\n }, { once: true });\n\n navigation?.addEventListener('click', onClickOutside);\n }\n\n return super.onEnter(signal);\n };\n\n public onExited(signal: AbortSignal) {\n const transitionProviderRef = this.transitionProvider.current?.ref;\n if (transitionProviderRef?.current instanceof HTMLDialogElement) {\n transitionProviderRef.current.close('screen-exit');\n }\n\n return super.onExited(signal);\n }\n}","import {\n PlainObject,\n RoutePropBase,\n RouterBaseEventMap\n} from '@react-motion-router/core';\nimport { ScreenProps } from '../Screen';\nimport { RefObject } from 'react';\nimport {\n BackEvent,\n ForwardEvent,\n GestureCancelEvent,\n GestureEndEvent,\n GestureStartEvent,\n NavigateEvent\n} from './events';\n\nexport interface NavigationBaseOptions {\n\tsignal?: AbortSignal;\n}\n\nexport interface NavigateOptions extends NavigationBaseOptions {\n\ttype?: 'push' | 'replace';\n}\n\nexport interface GoBackOptions extends NavigationBaseOptions { }\nexport interface GoForwardOptions extends NavigationBaseOptions { }\n\nexport interface NavigationProps {\n\tparams?: Record<any, any>;\n\tconfig?: ScreenProps['config']\n}\n\nexport type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };\n\nexport type XOR<T, U> = (T | U) extends object\n ? (Without<T, U> & U) | (Without<U, T> & T)\n : T | U;\n\nexport interface HistoryEntryState {\n\tconfig?: ScreenProps['config'];\n\tparams?: PlainObject;\n}\n\nexport function isRefObject<T>(\n value?: React.LegacyRef<T>\n): value is RefObject<T> {\n if (\n value !== null\n\t\t&& typeof value === 'object'\n\t\t&& Object.hasOwn(value, 'current')\n ) return true;\n return false;\n}\n\nexport interface RouterEventMap extends RouterBaseEventMap {\n\t'navigate': NavigateEvent;\n\t'back': BackEvent;\n\t'forward': ForwardEvent;\n\t'gesture-start': GestureStartEvent;\n\t'gesture-end': GestureEndEvent;\n\t'gesture-cancel': GestureCancelEvent;\n}\n\nexport interface RouteProp<\n T extends PlainObject = {}\n> extends RoutePropBase<ScreenProps['config'], T> { }\n\nexport type SwipeDirection = 'up'\n | 'down'\n | 'left'\n | 'right'\n | 'horizontal'\n | 'vertical';\nexport type Direction = Exclude<SwipeDirection, 'horizontal' | 'vertical'>;\n\nconst directions: Record<SwipeDirection, Direction[]> = {\n 'horizontal': ['left', 'right'] as const,\n 'vertical': ['up', 'down'] as const,\n 'up': ['up'] as const,\n 'down': ['down'] as const,\n 'left': ['left'] as const,\n 'right': ['right'] as const,\n};\nexport function isSupportedDirection(\n direction: Exclude<SwipeDirection, 'horizontal' | 'vertical'>,\n supported: SwipeDirection\n) {\n return directions[supported].includes(direction);\n}\n\nexport function isOutOfBounds(\n direction: SwipeDirection,\n { x, y }: { x: number, y: number },\n clientRect: DOMRect,\n gestureAreaWidth: number\n) {\n if (\n direction === 'right'\n && Math.abs(x - clientRect.left) >= gestureAreaWidth\n ) return false;\n if (\n direction === 'left'\n && Math.abs(x - clientRect.right) >= gestureAreaWidth\n ) return false;\n if (\n direction === 'down'\n && Math.abs(y - clientRect.top) >= gestureAreaWidth\n ) return false;\n if (\n direction === 'up'\n && Math.abs(y - clientRect.bottom) >= gestureAreaWidth\n ) return false;\n}\n\nexport function isHorizontalDirection(\n direction: SwipeDirection\n): direction is 'left' | 'right' | 'horizontal' {\n return direction === 'left'\n || direction === 'right'\n || direction === 'horizontal';\n}\n\nexport interface ScreenInternalProps {\n resolvedPathname: string;\n id: React.Key;\n}","export const DEFAULT_GESTURE_CONFIG = {\n gestureHysteresis: 0.5,\n gestureMinFlingVelocity: 400,\n gestureAreaWidth: 100,\n gestureDirection: 'right',\n gestureDisabled: false,\n} as const;\n\nexport const DEFAULT_PRELOAD_FORCE_THRESHOLD = 0.5;\nexport const DEFAULT_PLAYBACK_RATE = 1;","export class PromiseWrapper<T> {\n public promise: Promise<T>;\n public state: 'pending' | 'resolved' | 'rejected';\n #nativeResolve: ((value: T | PromiseLike<T>) => void) | null;\n #nativeReject: ((reason: unknown) => void) | null;\n constructor() {\n this.state = 'pending';\n this.#nativeResolve = this.#nativeReject = null;\n this.promise = new Promise((resolve, reject) => {\n this.#nativeResolve = resolve;\n this.#nativeReject = reject;\n });\n }\n\n public resolve(value: T) {\n this.state = 'resolved';\n this.#nativeResolve?.(value);\n }\n\n public reject(reason: unknown) {\n this.state = 'rejected';\n // Do not report unhandled promise rejections.\n this.promise.catch(() => {});\n this.#nativeReject?.(reason);\n }\n}","import {\n FIRST_INDEX,\n LAST_INDEX,\n RouterBase,\n SINGLE_ELEMENT_LENGTH,\n cloneAndInject,\n matchRoute\n} from '@react-motion-router/core';\nimport type {\n ClonedElementType,\n LoadEvent,\n NestedRouterContext,\n RouterBaseConfig,\n RouterBaseProps,\n RouterBaseState,\n ScreenChild\n} from '@react-motion-router/core';\nimport { Navigation } from './Navigation';\nimport { ScreenProps, Screen, ScreenConfig } from './Screen';\nimport {\n HistoryEntryState,\n isHorizontalDirection,\n isOutOfBounds,\n isRefObject,\n isSupportedDirection,\n NavigationBaseOptions,\n NavigationProps,\n RouterEventMap,\n ScreenInternalProps,\n SwipeDirection\n} from './common/types';\nimport { createRef, startTransition } from 'react';\nimport { SwipeStartEvent, SwipeEndEvent } from 'web-gesture-events';\nimport { GestureTimeline } from 'web-animations-extension';\nimport { deepEquals, isGesture, isRollback } from './common/utils';\nimport {\n GestureCancelEvent,\n GestureEndEvent,\n GestureStartEvent\n} from './common/events';\nimport {\n DEFAULT_GESTURE_CONFIG,\n DEFAULT_PLAYBACK_RATE\n} from './common/constants';\nimport { PromiseWrapper } from './common/promise-wrapper';\n\nexport interface RouterConfig extends RouterBaseConfig {\n screenConfig?: ScreenConfig;\n disableBrowserRouting?: boolean;\n initialPathname?: string;\n shouldIntercept?(navigateEvent: NavigateEvent): boolean;\n onIntercept?(navigateEvent: NavigateEvent): void;\n}\n\nexport interface RouterProps extends RouterBaseProps<Screen> {\n config?: RouterConfig;\n}\n\ntype InjectedScreenProps = Pick<ScreenProps, 'config' | 'defaultParams'> &\n ScreenInternalProps;\nexport interface RouterState extends RouterBaseState {\n transition: NavigationTransition | LoadEvent['transition'] | null;\n screenStack: ClonedElementType<ScreenChild<Screen>, InjectedScreenProps>[];\n gestureDirection: SwipeDirection;\n gestureAreaWidth: number;\n gestureMinFlingVelocity: number;\n gestureHysteresis: number;\n gestureDisabled: boolean;\n fromKey: React.Key | null;\n destinationKey: React.Key | null;\n documentTitle?: string;\n controller: AbortController | null;\n}\n\nexport class Router extends RouterBase<\n RouterProps,\n RouterState,\n RouterEventMap\n> {\n public readonly navigation;\n #committed: PromiseWrapper<NavigationHistoryEntry> | null = null;\n\n constructor(\n props: RouterProps,\n context: React.ContextType<typeof NestedRouterContext>\n ) {\n super(props, context);\n this.navigation = new Navigation({\n addEventListener: this.addEventListener.bind(this),\n removeEventListener: this.removeEventListener.bind(this),\n dispatchEvent: this.dispatchEvent.bind(this),\n parent: this.parent?.navigation ?? null,\n routerId: this.id,\n baseURL: this.baseURL,\n baseURLPattern: this.baseURLPattern,\n getCommitted: () =>{\n return this.committed;\n },\n getTransition: () => {\n return this.state.transition;\n },\n getPathPatterns: () => {\n return this.pathPatterns;\n },\n preload: this.preload.bind(this),\n getNavigatorById: (id: string) =>\n this.getRouterById(id)?.navigation ?? null,\n });\n const {\n gestureAreaWidth = DEFAULT_GESTURE_CONFIG.gestureAreaWidth,\n gestureDirection = DEFAULT_GESTURE_CONFIG.gestureDirection,\n gestureDisabled = DEFAULT_GESTURE_CONFIG.gestureDisabled,\n gestureHysteresis = DEFAULT_GESTURE_CONFIG.gestureHysteresis,\n gestureMinFlingVelocity = DEFAULT_GESTURE_CONFIG.gestureMinFlingVelocity,\n } = props.config?.screenConfig ?? {};\n \n this.state = {\n screenStack: [],\n gestureDirection,\n gestureAreaWidth,\n gestureHysteresis,\n gestureDisabled,\n gestureMinFlingVelocity,\n transition: null,\n documentTitle: document.title,\n fromKey: null,\n destinationKey: null,\n controller: null,\n };\n }\n\n public static getDerivedStateFromProps(_: RouterProps, state: RouterState) {\n const config = state.screenStack.find(\n (screen) => isRefObject(screen.ref) && screen.ref.current?.focused\n )?.props.config;\n document.title = config?.title ?? document.title;\n return {\n gestureDirection:\n config?.gestureDirection ?? DEFAULT_GESTURE_CONFIG.gestureDirection,\n gestureAreaWidth:\n config?.gestureAreaWidth ?? DEFAULT_GESTURE_CONFIG.gestureAreaWidth,\n gestureMinFlingVelocity:\n config?.gestureMinFlingVelocity\n ?? DEFAULT_GESTURE_CONFIG.gestureMinFlingVelocity,\n gestureHysteresis:\n config?.gestureHysteresis ?? DEFAULT_GESTURE_CONFIG.gestureHysteresis,\n gestureDisabled:\n config?.gestureDisabled ?? DEFAULT_GESTURE_CONFIG.gestureDisabled,\n documentTitle: config?.title,\n };\n }\n\n public componentDidMount(): void {\n super.componentDidMount();\n this.ref.current?.addEventListener('swipestart', this.onSwipeStart);\n this.ref.current?.addEventListener('swipeend', this.onSwipeEnd);\n window.navigation.addEventListener(\n 'currententrychange',\n this.onCurrentEntryChange\n );\n window.navigation.addEventListener('navigate', this.onNavigate);\n window.navigation.addEventListener(\n 'navigatesuccess',\n this.onNavigateSuccess\n );\n window.navigation.addEventListener('navigateerror', this.onNavigateError);\n }\n\n // TODO: figure out how to remove this\n public shouldComponentUpdate(\n nextProps: Readonly<RouterProps>,\n nextState: Readonly<RouterState>\n ): boolean {\n return (\n !deepEquals(this.props.config, nextProps.config)\n || !deepEquals(this.state, nextState)\n || this.props.id !== nextProps.id\n );\n }\n\n public componentWillUnmount(): void {\n this.ref.current?.removeEventListener('swipestart', this.onSwipeStart);\n this.ref.current?.removeEventListener('swipeend', this.onSwipeEnd);\n window.navigation.removeEventListener(\n 'currententrychange',\n this.onCurrentEntryChange\n );\n window.navigation.removeEventListener('navigate', this.onNavigate);\n window.navigation.removeEventListener(\n 'navigatesuccess',\n this.onNavigateSuccess\n );\n window.navigation.removeEventListener(\n 'navigateerror',\n this.onNavigateError\n );\n }\n\n private readonly onNavigate = () => {\n this.#committed = new PromiseWrapper();\n };\n\n private readonly onCurrentEntryChange = () => {\n this.#committed?.resolve?.(window.navigation.currentEntry!);\n };\n\n private readonly onNavigateSuccess = () => {\n this.#committed = null;\n };\n\n private readonly onNavigateError = ({ error }: ErrorEvent) => {\n if (this.#committed?.state === 'pending')\n this.#committed.reject?.(error); // TODO: find out what the spec does for cancelled navigations\n this.#committed = null;\n };\n\n private readonly onGestureCancel = () => {\n if (!this.state.transition)\n throw new Error('Rollback failed, transition is null');\n window.navigation.traverseTo(this.state.transition.from.key, {\n info: { rollback: true },\n });\n };\n\n private canGestureNavigate(e: SwipeStartEvent) {\n if (!this.ref.current) return false;\n if (this.state.gestureDisabled) return false;\n const clientRect = this.ref.current.getBoundingClientRect();\n const { direction } = e;\n if (\n (direction === 'down' || direction === 'right')\n && !this.navigation.canGoBack()\n )\n return false;\n if (\n (direction === 'up' || direction === 'left')\n && !this.navigation.canGoForward()\n )\n return false;\n if (isOutOfBounds(direction, e, clientRect, this.state.gestureAreaWidth))\n return false;\n\n return isSupportedDirection(direction, this.state.gestureDirection);\n }\n\n private readonly onSwipeStart = (e: SwipeStartEvent) => {\n if (!this.canGestureNavigate(e)) return;\n if (!this.ref.current || !this.screenTransitionLayer.current) return;\n const { direction } = e;\n\n const axis: 'x' | 'y' = isHorizontalDirection(direction) ? 'x' : 'y';\n let rangeStart;\n let rangeEnd;\n switch (direction) {\n case 'right':\n rangeStart = Number();\n rangeEnd = this.ref.current.clientWidth;\n break;\n case 'left':\n rangeStart = this.ref.current.clientWidth;\n rangeEnd = Number();\n break;\n case 'down':\n rangeStart = Number();\n rangeEnd = this.ref.current.clientHeight;\n break;\n case 'up':\n rangeStart = this.ref.current.clientHeight;\n rangeEnd = Number();\n break;\n }\n this.screenTransitionLayer.current.animation.timeline = new GestureTimeline(\n {\n source: this.ref.current,\n type: 'swipe',\n axis,\n rangeStart,\n rangeEnd,\n }\n );\n const gesture = true;\n if (direction === 'down' || direction === 'right')\n window.navigation.traverseTo(this.navigation.previous!.key, {\n info: { gesture },\n });\n else\n window.navigation.traverseTo(this.navigation.next!.key, {\n info: { gesture },\n });\n\n this.dispatchEvent(new GestureStartEvent(e));\n };\n\n private readonly onSwipeEnd = (e: SwipeEndEvent) => {\n if (!this.screenTransitionLayer.current) return;\n const progress =\n this.screenTransitionLayer.current.animation.effect?.getComputedTiming()\n .progress ?? Number();\n const playbackRate =\n this.screenTransitionLayer.current.animation.playbackRate;\n this.screenTransitionLayer.current.animation.timeline = document.timeline;\n const hysteresisReached =\n playbackRate > Number()\n ? progress > this.state.gestureHysteresis\n : progress < this.state.gestureHysteresis;\n let gestureCancelled = false;\n if (e.velocity < this.state.gestureMinFlingVelocity && !hysteresisReached) {\n gestureCancelled = true;\n this.screenTransitionLayer.current.animation.reverse();\n this.dispatchEvent(new GestureCancelEvent());\n } else {\n this.dispatchEvent(new GestureEndEvent(e));\n }\n if (gestureCancelled) {\n this.screenTransitionLayer.current.animation.finished.then(() => {\n this.state.controller?.abort('gesture-cancel');\n });\n }\n };\n\n public get committed() {\n return this.#committed?.promise ?? null;\n }\n\n private get backNavigating() {\n const fromIndex = this.state.screenStack.findIndex(\n (screen) => screen.key === this.state.fromKey\n );\n const destinationIndex = this.state.screenStack.findIndex(\n (screen) => screen.key === this.state.destinationKey\n );\n\n return destinationIndex >= FIRST_INDEX && destinationIndex < fromIndex;\n }\n\n protected get screens() {\n const screenStack = this.state.screenStack;\n return screenStack.filter((screen, index) => {\n const currentScreenRef = screen.ref ?? null;\n const nextScreenRef = screenStack.at(index + SINGLE_ELEMENT_LENGTH)?.ref;\n return (\n (isRefObject(currentScreenRef)\n && currentScreenRef.current?.config.keepAlive)\n || (isRefObject(nextScreenRef)\n && nextScreenRef.current?.config.presentation === 'modal')\n || (isRefObject(nextScreenRef)\n && nextScreenRef.current?.config.presentation === 'dialog')\n || screen.key === this.navigation.current?.key\n || screen.key === this.state.fromKey\n || screen.key === this.state.destinationKey\n );\n });\n }\n\n public async preload(\n pathname: string,\n props: NavigationProps = {},\n options: NavigationBaseOptions = {}\n ) {\n const { child, matchInfo } = this.screenChildFromPathname(pathname) ?? {};\n if (!child) return Promise.resolve(false);\n const { navigation } = this;\n const { signal } = options;\n const { path } = child.props;\n await Promise.all([\n this.preloadScreen(child),\n child.props.config?.onLoad?.({\n navigation,\n signal,\n preloading: true,\n route: {\n focused: false,\n path,\n resolvedPathname: pathname,\n config: {\n ...this.props.config?.screenConfig,\n ...child.props.config,\n ...props.config,\n },\n params: {\n ...child.props.defaultParams,\n ...matchInfo?.params,\n ...props.params,\n },\n },\n }),\n ]);\n return true;\n }\n\n private cloneScreenChildFromPathname(\n pathname: string,\n key: React.Key | null\n ) {\n const { child } = this.screenChildFromPathname(pathname) ?? {};\n\n if (!child) return null;\n key ??= crypto.randomUUID();\n return cloneAndInject(child, {\n config: {\n title: document.title,\n ...this.props.config?.screenConfig,\n ...child.props.config,\n },\n id: key,\n resolvedPathname: pathname,\n key,\n ref: createRef<Screen>(),\n } as InjectedScreenProps);\n }\n\n private getScreenRefByKey(key: string) {\n const screen = this.state.screenStack.find(\n (screen) => screen.key === key\n )?.ref;\n if (isRefObject(screen)) return screen;\n return null;\n }\n\n protected canIntercept(e: NavigateEvent): boolean {\n const pathname = new URL(e.destination.url).pathname;\n const baseURLPattern = this.baseURLPattern.pathname;\n return (\n this.mounted\n && this.shouldIntercept(e)\n && this.includesRoute(pathname, baseURLPattern)\n );\n }\n\n protected shouldIntercept(e: NavigateEvent): boolean {\n const shouldIntercept =\n e.canIntercept && !e.formData && !e.hashChange && !e.downloadRequest;\n return shouldIntercept || Boolean(this.props.config?.shouldIntercept?.(e));\n }\n\n protected intercept(e: NavigateEvent | LoadEvent): void {\n if (e.navigationType !== 'load') this.props.config?.onIntercept?.(e);\n if (e.defaultPrevented) return;\n\n switch (e.navigationType) {\n case 'load':\n this.handleLoad(e);\n break;\n\n case 'reload':\n case 'replace':\n this.handleReplace(e);\n break;\n\n default:\n this.handleDefault(e);\n break;\n }\n }\n\n private handleLoad(e: LoadEvent) {\n const handler = () => {\n const fromKey = e.transition?.from?.key ?? null;\n const destinationKey = e.destination.key;\n const transition = e.transition;\n const screenStack: RouterState['screenStack'] = [];\n const entries = this.navigation.entries;\n entries.forEach((entry) => {\n if (!entry.url) return null;\n const screen = this.cloneScreenChildFromPathname(\n entry.url.pathname,\n entry.key\n );\n if (!screen) return null;\n screenStack.push(screen);\n });\n\n return new Promise<void>((resolve, reject) =>\n startTransition(() => {\n this.setState(\n { screenStack, fromKey, transition, destinationKey },\n async () => {\n const { initialPathname } = this.props.config ?? {};\n const [firstEntry] = entries;\n if (\n initialPathname\n && entries.length === SINGLE_ELEMENT_LENGTH\n && firstEntry.url\n && !matchRoute(\n initialPathname,\n firstEntry.url.pathname,\n this.baseURLPattern.pathname\n )\n ) {\n const transitionFinished =\n window.navigation.transition?.finished ?? Promise.resolve();\n transitionFinished.then(() => {\n this.navigation.replace(initialPathname).finished.then(() => {\n const state =\n (e.destination.getState() as HistoryEntryState) ?? {};\n this.navigation.push(e.destination.url, state);\n });\n });\n return resolve();\n }\n const signal = e.signal;\n if (this.navigation.current?.key === undefined)\n reject(new Error('Current key is undefined'));\n\n const currentScreen = this.getScreenRefByKey(\n this.navigation.current.key\n );\n await this.dispatchLifecycleHandlers(\n currentScreen,\n null,\n signal\n ).catch(reject);\n this.setState(\n { destinationKey: null, fromKey: null, transition: null },\n resolve\n );\n }\n );\n })\n );\n };\n\n e.intercept({ handler });\n }\n\n private handleReplace(e: NavigateEvent) {\n const screenStack = this.state.screenStack;\n const destination = e.destination;\n const destinationPathname = new URL(destination.url).pathname;\n const destinationKey =\n window.navigation.currentEntry?.key ?? destination.key;\n const destinationScreen = this.cloneScreenChildFromPathname(\n destinationPathname,\n destinationKey\n );\n if (!destinationScreen) return e.preventDefault();\n const handler = () => {\n const transition = this.state.transition ?? window.navigation.transition;\n const fromKey = transition?.from?.key ?? null;\n const currentIndex = screenStack.findIndex(\n (screen) => screen.key === this.navigation.current?.key\n );\n screenStack.splice(\n currentIndex,\n SINGLE_ELEMENT_LENGTH,\n destinationScreen\n );\n\n return new Promise<void>((resolve, reject) =>\n startTransition(() => {\n this.setState(\n { destinationKey, fromKey, transition, screenStack },\n async () => {\n const signal = e.signal;\n const incomingScreen = this.getScreenRefByKey(\n String(destinationKey)\n );\n const pendingLifecycleHandlers = this.dispatchLifecycleHandlers(\n incomingScreen,\n null,\n signal\n ).catch(reject);\n await pendingLifecycleHandlers;\n this.setState(\n { destinationKey: null, fromKey: null, transition: null },\n resolve\n );\n }\n );\n })\n );\n };\n\n e.intercept({ handler });\n }\n\n private handleDefault(e: NavigateEvent) {\n const screenStack = this.state.screenStack;\n const destination = e.destination;\n const destinationPathname = new URL(destination.url).pathname;\n if (!this.screenChildFromPathname(destinationPathname))\n return e.preventDefault();\n const handler = () => {\n if (isRollback(e.info)) return Promise.resolve();\n const transition = window.navigation.transition;\n let fromIndex = screenStack.findIndex(\n (screen) => screen.key === transition?.from.key\n );\n // if navigating from a nested screen the first lookup won't work since entries are scoped\n if (fromIndex === LAST_INDEX && e.navigationType === 'traverse') {\n fromIndex = screenStack.findIndex((screen) => {\n if (!transition?.from.url) return false;\n return matchRoute(\n screen.props.path,\n new URL(transition.from.url).pathname,\n this.baseURLPattern.pathname,\n screen.props.caseSensitive\n );\n });\n }\n const fromKey =\n (screenStack[fromIndex]?.key || transition?.from.key) ?? null;\n const destinationIndex = screenStack.findIndex(\n (screen) => screen.key === e.destination.key\n );\n const destinationKey =\n (screenStack[destinationIndex]?.key\n || window.navigation.currentEntry?.key)\n ?? null;\n if (e.navigationType === 'push') {\n const destinationPathname = new URL(destination.url).pathname;\n const destinationScreen = this.cloneScreenChildFromPathname(\n destinationPathname,\n destinationKey\n );\n if (!destinationScreen) return Promise.resolve();\n screenStack.splice(\n fromIndex + SINGLE_ELEMENT_LENGTH,\n Infinity, // Remove all screens after current\n destinationScreen\n );\n }\n\n const controller = new AbortController();\n return new Promise<void>((resolve, reject) =>\n startTransition(() => {\n this.setState(\n { controller, destinationKey, fromKey, transition, screenStack },\n async () => {\n controller.signal.onabort = reject;\n const signal = e.signal;\n const outgoingScreen = this.getScreenRefByKey(String(fromKey));\n const incomingScreen = this.getScreenRefByKey(\n String(destinationKey)\n );\n const pendingLifecycleHandlers = this.dispatchLifecycleHandlers(\n incomingScreen,\n outgoingScreen,\n signal\n ).catch(reject);\n const animation = this.screenTransition(\n incomingScreen,\n outgoingScreen\n );\n animation?.updatePlaybackRate(DEFAULT_PLAYBACK_RATE);\n animation?.finished.catch(reject);\n await pendingLifecycleHandlers;\n this.setState(\n {\n destinationKey: null,\n fromKey: null,\n transition: null,\n controller: null,\n },\n resolve\n );\n }\n );\n })\n );\n };\n\n let commit;\n if (isGesture(e.info)) {\n commit = 'after-transition';\n this.addEventListener('gesture-end', () => e.commit?.(), { once: true });\n this.addEventListener('gesture-cancel', this.onGestureCancel, {\n once: true,\n });\n } else {\n commit = 'immediate';\n }\n const options = { handler, commit };\n e.intercept(options);\n }\n\n private async dispatchLifecycleHandlers(\n incomingScreen: React.RefObject<Screen> | null,\n outgoingScreen: React.RefObject<Screen> | null,\n signal: AbortSignal\n ) {\n let animationStarted = false;\n this.addEventListener('transition-start', () => (animationStarted = true), {\n once: true,\n });\n\n await Promise.all([\n outgoingScreen?.current?.onExit(signal),\n incomingScreen?.current?.onEnter(signal),\n incomingScreen?.current?.load(signal),\n ]);\n\n if (animationStarted)\n await new Promise((resolve) =>\n this.addEventListener('transition-end', resolve, { once: true })\n );\n\n // if gesture navigation cancelled then exit here\n if (this.state.controller?.signal.aborted) return;\n\n await Promise.all([\n outgoingScreen?.current\n ?.onExited(signal)\n .then(() => outgoingScreen.current?.blur()),\n incomingScreen?.current\n ?.onEntered(signal)\n .then(() => incomingScreen.current?.focus()),\n ]);\n }\n\n private screenTransition(\n incomingScreen: React.RefObject<Screen> | null,\n outgoingScreen: React.RefObject<Screen> | null\n ) {\n const { backNavigating } = this;\n const screenTransitionLayer = this.screenTransitionLayer.current;\n if (\n screenTransitionLayer\n && incomingScreen\n && outgoingScreen\n ) {\n screenTransitionLayer.direction = backNavigating\n ? 'reverse'\n : 'normal';\n if (incomingScreen.current?.transitionProvider.current) {\n incomingScreen.current.transitionProvider.current.exiting = false;\n }\n if (outgoingScreen.current?.transitionProvider.current) {\n outgoingScreen.current.transitionProvider.current.exiting = true;\n }\n const sharedElementTransitionLayer = screenTransitionLayer\n .sharedElementTransitionLayer\n .current;\n if (\n sharedElementTransitionLayer\n ) {\n sharedElementTransitionLayer.outgoingScreen = outgoingScreen;\n sharedElementTransitionLayer.incomingScreen = incomingScreen;\n }\n const topScreenIndex = this.screens.findIndex(\n (screen) =>\n screen.ref === (backNavigating ? outgoingScreen : incomingScreen)\n );\n screenTransitionLayer.screens = this.screens\n .map((screen, index) => {\n // normalise indices making incoming screen index 1 and preceding screens index 0...-n\n index = index - topScreenIndex + SINGLE_ELEMENT_LENGTH;\n if (\n isRefObject(screen.ref)\n && screen.ref.current?.transitionProvider.current\n ) {\n screen.ref.current.transitionProvider.current.index = index;\n return screen.ref;\n }\n return null;\n })\n .filter(isRefObject);\n\n return screenTransitionLayer.transition();\n }\n }\n}\n","import {\n PlainObject,\n useNavigationBase,\n useParamsBase,\n useRouteBase,\n useRouterBase\n} from '@react-motion-router/core';\nimport { Navigation } from '../Navigation';\nimport { Router } from '../Router';\nimport { RouteProp } from './types';\nimport { RefObject, useDebugValue, useEffect } from 'react';\n\nexport function useNavigation() {\n useDebugValue('Stack.Navigation');\n return useNavigationBase<Navigation>();\n}\n\nexport function useRouter() {\n useDebugValue('Stack.Router');\n return useRouterBase<Router>();\n}\n\nexport function useRoute<T extends PlainObject = PlainObject>() {\n useDebugValue('Stack.Route');\n return useRouteBase<RouteProp<T>>();\n}\n\nexport function useParams<K extends string, S>(\n key: K, initialParams: S | (() => S)\n) {\n useDebugValue('Stack.Params');\n return useParamsBase(key, initialParams);\n}\n\ntype EventListenerOptions = boolean | AddEventListenerOptions;\n\nexport function useEventListener<K extends keyof HTMLElementEventMap>(\n ref: RefObject<HTMLElement | null>,\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: EventListenerOptions\n) {\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n element.addEventListener(eventName, handler, options);\n\n return () => {\n element.removeEventListener(eventName, handler, options);\n };\n }, [ref, eventName, handler, options]);\n}","import { PlainObject } from '@react-motion-router/core';\nimport { Navigation } from './Navigation';\nimport { NavigateOptions, XOR } from './common/types';\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport { useEventListener, useNavigation } from './common/hooks';\nimport { searchParamsFromObject } from './common/utils';\nimport { DEFAULT_PRELOAD_FORCE_THRESHOLD } from './common/constants';\n\ninterface BaseAnchorProps\n extends React.DetailedHTMLProps<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n HTMLAnchorElement\n > {\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n navigation?: Navigation | null;\n}\n\ninterface OnSightPreloadBehaviour extends UseIntersectionOptions {\n type: 'onsight';\n}\n\ninterface OnHoverPreloadBehaviour {\n type: 'onhover';\n forceThreshold?: number;\n}\n\ninterface ForwardAnchorProps extends BaseAnchorProps {\n params?: PlainObject<string | boolean | number>;\n href: string;\n type?: NavigateOptions['type'];\n preload?: boolean;\n preloadBehaviour?:\n | OnSightPreloadBehaviour\n | OnHoverPreloadBehaviour\n | { type: 'force' };\n}\n\ninterface BackAnchorProps extends BaseAnchorProps {\n goBack: boolean;\n}\n\ntype AnchorProps = XOR<ForwardAnchorProps, BackAnchorProps>;\n\nfunction useNavigationOrDefault(navigation?: Navigation | null) {\n const defaultNavigation = useNavigation();\n return navigation ?? defaultNavigation;\n}\n\ninterface UseIntersectionOptions {\n root?: Element | null;\n rootMargin?: string;\n threshold?: number | number[];\n}\nfunction useIntersection<T extends HTMLElement>(\n callback: (entry: IntersectionObserverEntry) => void,\n options: UseIntersectionOptions = {}\n) {\n const targetRef = useRef<T>(null);\n\n const observerCallback = useCallback(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n callback(entry);\n }\n });\n },\n [callback]\n );\n\n useEffect(() => {\n const observer = new IntersectionObserver(observerCallback, options);\n const element = targetRef.current;\n\n if (element) {\n observer.observe(element);\n }\n\n return () => {\n if (element) {\n observer.unobserve(element);\n }\n };\n }, [observerCallback, options]);\n\n return targetRef;\n}\n\ntype UseHoverOptions = {\n forceThreshold?: number; // Threshold for touch pressure to count as \"hover\" (0 to 1 range)\n};\n\ntype UseHoverCallback = (isHovered: boolean) => void;\nfunction useHover<T extends HTMLElement>(\n hoverCallback: UseHoverCallback,\n { forceThreshold = DEFAULT_PRELOAD_FORCE_THRESHOLD }: UseHoverOptions = {}\n) {\n const targetRef = useRef<T | null>(null);\n\n const handleMouseEnter = () => hoverCallback(true);\n\n const handleTouchStart = (event: TouchEvent) => {\n const touch = event.touches[0];\n if (touch && touch.force >= forceThreshold) {\n hoverCallback(true);\n }\n };\n\n useEventListener(targetRef, 'mouseenter', handleMouseEnter);\n useEventListener(targetRef, 'touchstart', handleTouchStart);\n\n return targetRef;\n}\n\nexport function Anchor({\n preload,\n goBack,\n params = {},\n type = 'push',\n href: hrefProp,\n navigation: navigationProp,\n onClick: onClickProp,\n preloadBehaviour = {\n type: 'onsight',\n },\n children,\n ...aProps\n}: AnchorProps) {\n const navigation = useNavigationOrDefault(navigationProp);\n const isOnSightPreload = preloadBehaviour?.type === 'onsight';\n const isOnHoverPreload = preloadBehaviour?.type === 'onhover';\n const isForcePreload = preloadBehaviour?.type === 'force';\n\n /// Intersection preload behaviour\n const intersectionRef = useIntersection<HTMLAnchorElement>(\n (entry) => {\n if (!entry.isIntersecting || !preload) return;\n navigation.preload(hrefProp, { params });\n },\n isOnSightPreload ? preloadBehaviour : {}\n );\n /// Intersection preload behaviour\n\n /// Hover preload behaviour\n const hoverRef = useHover<HTMLAnchorElement>(\n (hovered) => {\n if (!hovered || !preload) return;\n navigation.preload(hrefProp, { params });\n },\n isOnHoverPreload ? preloadBehaviour : {}\n );\n /// Hover preload behaviour\n\n /// Force preload behaviour\n useEffect(() => {\n if (!preload || !isForcePreload) return;\n navigation.preload(hrefProp, { params });\n }, [preload, hrefProp, navigation, isForcePreload, params]);\n /// Force preload behaviour\n\n const [href, setHref] = useState<string | undefined>(undefined);\n const routerId = navigation?.routerId;\n const isExternal = !href?.includes(window.location.origin);\n const rel = isExternal ? 'noopener noreferrer' : goBack ? 'prev' : 'next';\n\n useEffect(() => {\n if (goBack && navigation.canGoBack()) {\n setHref(navigation.previous.url?.href);\n } else if (hrefProp) {\n const search = searchParamsFromObject(params);\n const uri = new URL(hrefProp, navigation.baseURL);\n uri.search = search;\n setHref(uri.href);\n }\n }, [hrefProp, params, navigation, goBack]);\n\n const onClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (goBack) {\n e.preventDefault();\n navigation.goBack();\n } else if (type === 'replace' && hrefProp) {\n e.preventDefault();\n navigation.replace(hrefProp);\n }\n onClickProp?.(e);\n };\n\n let ref;\n switch (preloadBehaviour?.type) {\n case 'onhover':\n ref = hoverRef;\n break;\n case 'onsight':\n ref = intersectionRef;\n break;\n default:\n ref = null;\n }\n\n return (\n <a\n href={href}\n data-router-id={routerId}\n onClick={onClick}\n rel={rel}\n ref={ref}\n {...aProps}\n >\n {children}\n </a>\n );\n}\n","/* eslint-disable no-magic-numbers */\n\nexport const SlideInFromRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const iOSSlideInFromRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const SlideOutToLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(-50vw)',\n },\n];\n\nexport const iOSSlideOutToLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(calc(100vw * -0.3))',\n },\n];\n\nexport const SlideInFromLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(-100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const iOSSlideInFromLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(-100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const SlideOutToRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(50vw)',\n },\n];\n\nexport const iOSSlideOutToRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(calc(100vw * 0.3))',\n },\n];\n\nexport const SlideInFromBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const iOSSlideInFromBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const SlideOutToTopKeyframes: Keyframe[] = [\n {\n transform: 'translateY(0vh)',\n },\n {\n transform: 'translateY(-50vh)',\n },\n];\n\nexport const SlideInFromTopKeyframes: Keyframe[] = [\n {\n transform: 'translateY(-100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const SlideOutToBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(0vh)',\n },\n {\n transform: 'translateY(50vh)',\n },\n];\n\nexport const ZoomInKeyframes: Keyframe[] = [\n {\n transform: 'scale(0.85)',\n opacity: 0,\n },\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n];\n\nexport const ZoomOutKeyframes: Keyframe[] = [\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n {\n transform: 'scale(1.15)',\n opacity: 0,\n },\n];\n\nexport const FadeInKeyframes: Keyframe[] = [\n {\n opacity: 0,\n },\n {\n opacity: 1,\n },\n];\n\nexport const FadeOutKeyframes: Keyframe[] = [\n {\n opacity: 1,\n },\n {\n opacity: 0,\n },\n];\n\nexport const androidFadeInFromBottomKeyframes: Keyframe[] = [\n {\n opacity: 0,\n transform: 'translateY(calc(100vh * 0.08))',\n },\n {\n opacity: 0.25,\n offset: 0.5,\n },\n {\n opacity: 0.7,\n offset: 0.9,\n },\n {\n opacity: 1,\n transform: 'translateY(0vh)',\n },\n];\n\nexport const androidFadeInFromRightKeyframes: Keyframe[] = [\n {\n opacity: 0,\n transform: 'translateY(96vw)',\n },\n {\n opacity: 1,\n transform: 'translateY(0vw)',\n },\n];\n\nexport const androidFadeOutToLeftKeyframes: Keyframe[] = [\n {\n opacity: 0,\n transform: 'translateY(0vw)',\n },\n {\n opacity: 1,\n transform: 'translateY(-96vw)',\n },\n];\n\nexport const androidRevealFromBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const androidConcealToBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(0vh)',\n },\n {\n transform: 'translateY(-2vh)',\n },\n];\n\nexport const androidScaleFromCentreKeyframes: Keyframe[] = [\n {\n transform: 'scale(0.85)',\n opacity: 0,\n },\n {\n opacity: 0,\n offset: 0.75,\n },\n {\n opacity: 1,\n offset: 0.875,\n },\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n];\n\nexport const androidScaleToCentreKeyframes: Keyframe[] = [\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n {\n opacity: 1,\n offset: 0.0825,\n },\n {\n opacity: 1,\n offset: 0.2075,\n },\n {\n transform: 'scale(1.075)',\n opacity: 0,\n },\n];\n\nexport const androidFadeInFromBottomSheetKeyframes: Keyframe[] = [\n {\n transform: 'translateY(calc(100vh * 0.8))',\n opacity: 0,\n },\n {\n transform: 'translateY(0vh)',\n opacity: 1,\n },\n];","/* eslint-disable no-magic-numbers */\nimport { easingToLinear, springToLinear } from 'web-animations-extension';\n\nfunction easingOut(easing: (t: number) => number): (t: number) => number {\n return t => 1 - easing(1 - t);\n}\n\nfunction easingPoly(n: number): (t: number) => number {\n return (t: number) => Math.pow(t, n);\n}\n\nexport const iOSKeyframeOptions: KeyframeEffectOptions = {\n ...springToLinear({\n mass: 3,\n stiffness: 1000,\n damping: 500,\n velocity: 0,\n steps: 200,\n }),\n};\n\nexport const androidFadeInFromBottomOptions: KeyframeAnimationOptions = {\n duration: 350,\n easing: easingToLinear(easingOut(easingPoly(5))),\n};\n\nexport const androidFadeOutToBottomOptions: KeyframeAnimationOptions = {\n duration: 150,\n easing: 'linear',\n};\n\nexport const androidRevealFromBottomOptions: KeyframeAnimationOptions = {\n duration: 425,\n easing: 'cubic-bezier(0.35, 0.45, 0, 1)',\n};\n\nexport const androidScaleFromCentreOptions: KeyframeAnimationOptions = {\n duration: 400,\n easing: 'cubic-bezier(0.35, 0.45, 0, 1)',\n};\n\nexport const androidBottomSheetSlideInOptions: KeyframeAnimationOptions = {\n duration: 250,\n easing: easingToLinear(t => Math.cos((t + 1) * Math.PI) / 2.0 + 0.5),\n};\n\nexport const androidBottomSheetSlideOutOptions: KeyframeAnimationOptions = {\n duration: 200,\n easing: easingToLinear(t => (t === 1.0 ? 1 : Math.pow(t, 2))),\n};","import {\n AnimationEffectFactoryProps,\n FIRST_INDEX\n} from '@react-motion-router/core';\nimport {\n androidBottomSheetSlideInOptions,\n androidBottomSheetSlideOutOptions,\n androidFadeInFromBottomOptions,\n androidFadeOutToBottomOptions,\n androidRevealFromBottomOptions,\n androidScaleFromCentreOptions,\n iOSKeyframeOptions\n} from './keyframe-options-presets';\nimport {\n androidConcealToBottomKeyframes,\n androidFadeInFromBottomKeyframes,\n androidFadeInFromBottomSheetKeyframes,\n androidFadeInFromRightKeyframes,\n androidFadeOutToLeftKeyframes,\n androidRevealFromBottomKeyframes,\n androidScaleFromCentreKeyframes,\n androidScaleToCentreKeyframes,\n iOSSlideInFromBottomKeyframes,\n iOSSlideInFromLeftKeyframes,\n iOSSlideInFromRightKeyframes,\n iOSSlideOutToLeftKeyframes,\n iOSSlideOutToRightKeyframes\n} from './keyframe-presets';\n\nexport function iOSSlideInFromRight(\n { ref, direction, playbackRate, index }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n iOSSlideOutToLeftKeyframes,\n iOSSlideInFromRightKeyframes,\n ];\n\n let keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...iOSKeyframeOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function iOSSlideInFromLeft(\n { ref, direction, playbackRate, index }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n iOSSlideOutToRightKeyframes,\n iOSSlideInFromLeftKeyframes,\n ];\n\n let keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...iOSKeyframeOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function iOSSlideInFromBottom(\n { ref, direction, playbackRate }: AnimationEffectFactoryProps\n) {\n let keyframes = iOSSlideInFromBottomKeyframes;\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...iOSKeyframeOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidFadeInFromBottom(\n { ref, direction, playbackRate }: AnimationEffectFactoryProps\n) {\n let keyframes = androidFadeInFromBottomKeyframes;\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...androidFadeInFromBottomOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidFadeInFromBottomSheet(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n let keyframes = androidFadeInFromBottomSheetKeyframes;\n let timing;\n if (index === FIRST_INDEX)\n timing = androidBottomSheetSlideOutOptions;\n else\n timing = androidBottomSheetSlideInOptions;\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...timing,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidRevealFromBottom(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n androidConcealToBottomKeyframes,\n androidRevealFromBottomKeyframes,\n ];\n\n const keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n direction,\n playbackRate,\n fill: 'forwards' as const,\n ...androidRevealFromBottomOptions,\n };\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidFadeInFromRight(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n androidFadeOutToLeftKeyframes,\n androidFadeInFromRightKeyframes,\n ];\n let timing;\n if (index === FIRST_INDEX)\n timing = androidFadeOutToBottomOptions;\n else\n timing = androidFadeInFromBottomOptions;\n\n let keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...timing,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidScaleFromCentre(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n androidScaleToCentreKeyframes,\n androidScaleFromCentreKeyframes,\n ];\n\n const keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n direction,\n playbackRate,\n fill: 'forwards' as const,\n ...androidScaleFromCentreOptions,\n };\n\n return new KeyframeEffect(ref, keyframes, options);\n}","import { useRef, useCallback } from 'react';\nimport { SwipeStartEvent } from 'web-gesture-events';\nimport { useEventListener } from './common/hooks';\n\ninterface GestureRegionProps extends React.HTMLAttributes<HTMLDivElement> {\n disabled?: boolean;\n}\nexport function GestureRegion(\n { disabled, children, ...props }: GestureRegionProps\n) {\n const ref = useRef<HTMLDivElement>(null);\n\n const onSwipeStart = useCallback((e: SwipeStartEvent) => {\n if (disabled) return;\n e.stopPropagation();\n e.preventDefault();\n }, [disabled]);\n\n useEventListener(\n ref,\n 'swipestart',\n onSwipeStart\n );\n\n return (\n <div\n ref={ref}\n className=\"gesture-region\"\n data-disabled={disabled}\n style={{ display: 'contents' }}\n {...props}\n >\n {children}\n </div>\n );\n}"],"names":["GestureEvent_1","GestureEventTypeEnum","GestureEvent","type","touchEvent","__importDefault","this","mod","LongPressEvent_1","require$$0","LongPressEvent","duration","TapEvent_1","TapEvent","DoubleTapEvent_1","DoubleTapEvent","SwipeEvent_1","SwipeLifecycleStateEnum","SwipeEventBase","swipeData","state","eventType","SwipeEvent","SwipeStartEvent","SwipeEndEvent","PanEvent_1","PanLifecycleStateEnum","PanEventBase","panData","PanEvent","PanStartEvent","PanEndEvent","PinchEvent_1","PinchLifecycleStateEnum","PinchEventBase","pinchData","PinchEvent","PinchStartEvent","PinchEndEvent","RotateEvent_1","RotateLifecycleStateEnum","RotateEventBase","rotationData","RotateEvent","RotateStartEvent","RotateEndEvent","utils","assert","condition","message","Vec2","_x","_y","vector","closest","needle","haystack","a","b","a_diff","b_diff","__createBinding","o","m","k","k2","__setModuleDefault","v","__importStar","result","exports","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","utils_1","require$$8","CartesianDirectionEnum","GestureProvider","target","touchEnd","swipeEndEvent","panEndEvent","pinchEndEvent","rotateEndEvent","gestureEvent","touchStart","minPointers","longPressDuration","touchDuration","longPressEvent","originPointerPrimary","originPointerSecondary","touchMove","currentPointerPrimary","currentPointerSecondary","distance","scaleFactor","pinchEvent","pinchStartEvent","rotationAngle","rotateEvent","rotateStartEvent","origin","dxDy","length","normalised","angle","dt","velocity","swipeEvent","swipeStartEvent","panEvent","panStartEvent","numberOfTaps","maxTapDelay","doubleTapEvent","tapEvent","touchCancel","NavigateEvent","routerId","route","props","signal","committed","transition","BackEvent","ForwardEvent","GestureStartEvent","source","GestureEndEvent","GestureCancelEvent","HistoryEntry","#nativeEntry","nativeEntry","index","handler","listener","options","event","Navigation","NavigationBase","config","pathname","key","fromIndex","destinationIndex","entry","controller","history","url","nestedPathPatterns","pattern","nestedScopePathPattern","lastMatchedIndex","LAST_INDEX","terminated","resolvedBaseURL","resolveBaseURLFromPattern","nestedBaseURLPattern","matchRoute","caseSensitive","globalCurrentIndex","firstEntryGlobalIndex","FIRST_INDEX","lastEntryGlobalIndex","SINGLE_ELEMENT_LENGTH","scopedEntries","globalEntry","searchParamsToObject","searchParams","searchParamsFromObject","params","isGesture","info","isRollback","deepEquals","obj1","obj2","keys1","keys2","Screen","ScreenBase","#historyEntry","router","id","historyEntry","newParams","newConfig","unsafe","queryParams","pathParams","setParams","setConfig","path","focused","resolvedPathname","newState","prevState","e","navigation","transitionProviderRef","onClickOutside","isRefObject","value","directions","isSupportedDirection","direction","supported","isOutOfBounds","x","y","clientRect","gestureAreaWidth","isHorizontalDirection","DEFAULT_GESTURE_CONFIG","DEFAULT_PRELOAD_FORCE_THRESHOLD","DEFAULT_PLAYBACK_RATE","PromiseWrapper","#nativeResolve","#nativeReject","resolve","reject","reason","Router","RouterBase","#committed","context","gestureDirection","gestureDisabled","gestureHysteresis","gestureMinFlingVelocity","_","screen","nextProps","nextState","error","axis","rangeStart","rangeEnd","GestureTimeline","gesture","progress","playbackRate","hysteresisReached","gestureCancelled","screenStack","currentScreenRef","nextScreenRef","child","matchInfo","cloneAndInject","createRef","baseURLPattern","fromKey","destinationKey","entries","startTransition","initialPathname","firstEntry","currentScreen","destination","destinationPathname","destinationScreen","currentIndex","incomingScreen","outgoingScreen","pendingLifecycleHandlers","animation","commit","animationStarted","backNavigating","screenTransitionLayer","sharedElementTransitionLayer","topScreenIndex","useNavigation","useDebugValue","useNavigationBase","useRouter","useRouterBase","useRoute","useRouteBase","useParams","initialParams","useParamsBase","useEventListener","ref","eventName","useEffect","element","useNavigationOrDefault","defaultNavigation","useIntersection","callback","targetRef","useRef","observerCallback","useCallback","observer","useHover","hoverCallback","forceThreshold","handleMouseEnter","handleTouchStart","touch","Anchor","preload","goBack","hrefProp","navigationProp","onClickProp","preloadBehaviour","children","aProps","isOnSightPreload","isOnHoverPreload","isForcePreload","intersectionRef","hoverRef","hovered","href","setHref","useState","rel","search","uri","onClick","jsx","SlideInFromRightKeyframes","iOSSlideInFromRightKeyframes","SlideOutToLeftKeyframes","iOSSlideOutToLeftKeyframes","SlideInFromLeftKeyframes","iOSSlideInFromLeftKeyframes","SlideOutToRightKeyframes","iOSSlideOutToRightKeyframes","SlideInFromBottomKeyframes","iOSSlideInFromBottomKeyframes","SlideOutToTopKeyframes","SlideInFromTopKeyframes","SlideOutToBottomKeyframes","ZoomInKeyframes","ZoomOutKeyframes","FadeInKeyframes","FadeOutKeyframes","androidFadeInFromBottomKeyframes","androidFadeInFromRightKeyframes","androidFadeOutToLeftKeyframes","androidRevealFromBottomKeyframes","androidConcealToBottomKeyframes","androidScaleFromCentreKeyframes","androidScaleToCentreKeyframes","androidFadeInFromBottomSheetKeyframes","easingOut","easing","easingPoly","iOSKeyframeOptions","springToLinear","androidFadeInFromBottomOptions","easingToLinear","androidFadeOutToBottomOptions","androidRevealFromBottomOptions","androidScaleFromCentreOptions","androidBottomSheetSlideInOptions","t","androidBottomSheetSlideOutOptions","iOSSlideInFromRight","keyframes","iOSSlideInFromLeft","iOSSlideInFromBottom","androidFadeInFromBottom","androidFadeInFromBottomSheet","timing","androidRevealFromBottom","androidFadeInFromRight","keyframesPresets","androidScaleFromCentre","GestureRegion","disabled","onSwipeStart"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/web-gesture-events/Gestures/GestureEvent.js","../../../node_modules/web-gesture-events/Gestures/LongPressEvent.js","../../../node_modules/web-gesture-events/Gestures/TapEvent.js","../../../node_modules/web-gesture-events/Gestures/DoubleTapEvent.js","../../../node_modules/web-gesture-events/Gestures/SwipeEvent.js","../../../node_modules/web-gesture-events/Gestures/PanEvent.js","../../../node_modules/web-gesture-events/Gestures/PinchEvent.js","../../../node_modules/web-gesture-events/Gestures/RotateEvent.js","../../../node_modules/web-gesture-events/utils.js","../../../node_modules/web-gesture-events/index.js","../src/common/events.ts","../src/HistoryEntry.ts","../src/Navigation.ts","../src/common/utils.ts","../src/Screen.tsx","../src/common/types.ts","../src/common/constants.ts","../src/GestureRegion.tsx","../src/Router.tsx","../src/common/hooks.ts","../src/Anchor.tsx","../src/animation-configs/keyframe-presets.ts","../src/animation-configs/keyframe-options-presets.ts","../src/animation-configs/animation-presets.ts"],"sourcesContent":["\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar GestureEventTypeEnum;\r\n(function (GestureEventTypeEnum) {\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"tap\"] = 0] = \"tap\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"longpress\"] = 1] = \"longpress\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pinchstart\"] = 2] = \"pinchstart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pinch\"] = 3] = \"pinch\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pinchend\"] = 4] = \"pinchend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"rotatestart\"] = 5] = \"rotatestart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"rotate\"] = 6] = \"rotate\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"rotateend\"] = 7] = \"rotateend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"swipestart\"] = 8] = \"swipestart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"swipe\"] = 9] = \"swipe\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"swipeend\"] = 10] = \"swipeend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"panstart\"] = 11] = \"panstart\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"pan\"] = 12] = \"pan\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"panend\"] = 13] = \"panend\";\r\n GestureEventTypeEnum[GestureEventTypeEnum[\"doubletap\"] = 14] = \"doubletap\";\r\n})(GestureEventTypeEnum || (GestureEventTypeEnum = {}));\r\nclass GestureEvent extends TouchEvent {\r\n constructor(type, touchEvent) {\r\n super(type, {\r\n touches: Array.from(touchEvent.touches),\r\n targetTouches: Array.from(touchEvent.targetTouches),\r\n changedTouches: Array.from(touchEvent.changedTouches),\r\n ctrlKey: touchEvent.ctrlKey,\r\n shiftKey: touchEvent.shiftKey,\r\n altKey: touchEvent.altKey,\r\n metaKey: touchEvent.metaKey,\r\n bubbles: true,\r\n cancelable: true\r\n });\r\n if (type.includes(\"end\") || touchEvent.type.includes(\"end\")) {\r\n this.gestureTarget = touchEvent.changedTouches[0].target;\r\n this.x = touchEvent.changedTouches[0].clientX;\r\n this.y = touchEvent.changedTouches[0].clientY;\r\n return;\r\n }\r\n this.gestureTarget = touchEvent.touches[0].target;\r\n this.x = touchEvent.touches[0].clientX;\r\n this.y = touchEvent.touches[0].clientY;\r\n }\r\n}\r\nexports.default = GestureEvent;\r\n//# sourceMappingURL=GestureEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nclass LongPressEvent extends GestureEvent_1.default {\r\n constructor(touchEvent, duration) {\r\n super('longpress', touchEvent);\r\n this.duration = 0;\r\n this.duration = duration;\r\n }\r\n}\r\nexports.default = LongPressEvent;\r\n//# sourceMappingURL=LongPressEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nclass TapEvent extends GestureEvent_1.default {\r\n constructor(touchEvent) {\r\n super('tap', touchEvent);\r\n this.duration = 0;\r\n }\r\n}\r\nexports.default = TapEvent;\r\n//# sourceMappingURL=TapEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nclass DoubleTapEvent extends GestureEvent_1.default {\r\n constructor(touchEvent) {\r\n super('doubletap', touchEvent);\r\n }\r\n}\r\nexports.default = DoubleTapEvent;\r\n//# sourceMappingURL=DoubleTapEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SwipeEndEvent = exports.SwipeStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar SwipeLifecycleStateEnum;\r\n(function (SwipeLifecycleStateEnum) {\r\n SwipeLifecycleStateEnum[SwipeLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n SwipeLifecycleStateEnum[SwipeLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(SwipeLifecycleStateEnum || (SwipeLifecycleStateEnum = {}));\r\nclass SwipeEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, swipeData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"swipestart\";\r\n break;\r\n case \"end\":\r\n eventType = \"swipeend\";\r\n break;\r\n default:\r\n eventType = \"swipe\";\r\n }\r\n super(eventType, touchEvent);\r\n this.velocity = swipeData.velocity;\r\n this.direction = swipeData.direction;\r\n }\r\n}\r\nclass SwipeEvent extends SwipeEventBase {\r\n constructor(touchEvent, swipeData) {\r\n super(touchEvent, swipeData);\r\n }\r\n}\r\nexports.default = SwipeEvent;\r\nclass SwipeStartEvent extends SwipeEventBase {\r\n constructor(touchEvent, swipeData) {\r\n super(touchEvent, swipeData, \"start\");\r\n }\r\n}\r\nexports.SwipeStartEvent = SwipeStartEvent;\r\nclass SwipeEndEvent extends SwipeEventBase {\r\n constructor(touchEvent, swipeData) {\r\n super(touchEvent, swipeData, \"end\");\r\n }\r\n}\r\nexports.SwipeEndEvent = SwipeEndEvent;\r\n//# sourceMappingURL=SwipeEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PanEndEvent = exports.PanStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar PanLifecycleStateEnum;\r\n(function (PanLifecycleStateEnum) {\r\n PanLifecycleStateEnum[PanLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n PanLifecycleStateEnum[PanLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(PanLifecycleStateEnum || (PanLifecycleStateEnum = {}));\r\nclass PanEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, panData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"panstart\";\r\n break;\r\n case \"end\":\r\n eventType = \"panend\";\r\n break;\r\n default:\r\n eventType = \"pan\";\r\n }\r\n super(eventType, touchEvent);\r\n this.velocity = panData.velocity;\r\n this.translation = {\r\n x: panData.translation.x,\r\n y: panData.translation.y,\r\n magnitude: panData.translation.magnitude,\r\n clientX: panData.translation.clientX,\r\n clientY: panData.translation.clientY,\r\n clientMagnitude: panData.translation.clientMagnitude\r\n };\r\n }\r\n}\r\nclass PanEvent extends PanEventBase {\r\n constructor(touchEvent, panData) {\r\n super(touchEvent, panData);\r\n }\r\n}\r\nexports.default = PanEvent;\r\nclass PanStartEvent extends PanEventBase {\r\n constructor(touchEvent, panData) {\r\n super(touchEvent, panData, \"start\");\r\n }\r\n}\r\nexports.PanStartEvent = PanStartEvent;\r\nclass PanEndEvent extends PanEventBase {\r\n constructor(touchEvent, panData) {\r\n super(touchEvent, panData, \"end\");\r\n }\r\n}\r\nexports.PanEndEvent = PanEndEvent;\r\n//# sourceMappingURL=PanEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PinchEndEvent = exports.PinchStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar PinchLifecycleStateEnum;\r\n(function (PinchLifecycleStateEnum) {\r\n PinchLifecycleStateEnum[PinchLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n PinchLifecycleStateEnum[PinchLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(PinchLifecycleStateEnum || (PinchLifecycleStateEnum = {}));\r\nclass PinchEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, pinchData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"pinchstart\";\r\n break;\r\n case \"end\":\r\n eventType = \"pinchend\";\r\n break;\r\n default:\r\n eventType = \"pinch\";\r\n }\r\n super(eventType, touchEvent);\r\n Object.defineProperty(this, 'scale', {\r\n value: pinchData.scale,\r\n writable: false\r\n });\r\n }\r\n}\r\nclass PinchEvent extends PinchEventBase {\r\n constructor(touchEvent, pinchData) {\r\n super(touchEvent, pinchData);\r\n }\r\n}\r\nexports.default = PinchEvent;\r\nclass PinchStartEvent extends PinchEventBase {\r\n constructor(touchEvent, pinchData) {\r\n super(touchEvent, pinchData, \"start\");\r\n }\r\n}\r\nexports.PinchStartEvent = PinchStartEvent;\r\nclass PinchEndEvent extends PinchEventBase {\r\n constructor(touchEvent, pinchData) {\r\n super(touchEvent, pinchData, \"end\");\r\n }\r\n}\r\nexports.PinchEndEvent = PinchEndEvent;\r\n//# sourceMappingURL=PinchEvent.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.RotateEndEvent = exports.RotateStartEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./GestureEvent\"));\r\nvar RotateLifecycleStateEnum;\r\n(function (RotateLifecycleStateEnum) {\r\n RotateLifecycleStateEnum[RotateLifecycleStateEnum[\"start\"] = 0] = \"start\";\r\n RotateLifecycleStateEnum[RotateLifecycleStateEnum[\"end\"] = 1] = \"end\";\r\n})(RotateLifecycleStateEnum || (RotateLifecycleStateEnum = {}));\r\nclass RotateEventBase extends GestureEvent_1.default {\r\n constructor(touchEvent, rotationData, state) {\r\n let eventType;\r\n switch (state) {\r\n case \"start\":\r\n eventType = \"rotatestart\";\r\n break;\r\n case \"end\":\r\n eventType = \"rotateend\";\r\n break;\r\n default:\r\n eventType = \"rotate\";\r\n }\r\n super(eventType, touchEvent);\r\n this.anchor = {\r\n x: rotationData.anchor.x,\r\n y: rotationData.anchor.y,\r\n clientX: rotationData.anchor.clientX,\r\n clientY: rotationData.anchor.clientY\r\n };\r\n Object.defineProperty(this, 'rotation', {\r\n value: rotationData.rotation,\r\n writable: false\r\n });\r\n this.rotationDeg = rotationData.rotationDeg;\r\n }\r\n}\r\nclass RotateEvent extends RotateEventBase {\r\n constructor(touchEvent, rotationData) {\r\n super(touchEvent, rotationData);\r\n }\r\n}\r\nexports.default = RotateEvent;\r\nclass RotateStartEvent extends RotateEventBase {\r\n constructor(touchEvent, rotationData) {\r\n super(touchEvent, rotationData, \"start\");\r\n }\r\n}\r\nexports.RotateStartEvent = RotateStartEvent;\r\nclass RotateEndEvent extends RotateEventBase {\r\n constructor(touchEvent, rotationData) {\r\n super(touchEvent, rotationData, \"end\");\r\n }\r\n}\r\nexports.RotateEndEvent = RotateEndEvent;\r\n//# sourceMappingURL=RotateEvent.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.closest = exports.Vec2 = exports.assert = void 0;\r\nfunction assert(condition, message) {\r\n if (!condition) {\r\n throw new Error(message);\r\n }\r\n}\r\nexports.assert = assert;\r\nclass Vec2 {\r\n constructor(_x, _y) {\r\n this._x = 0;\r\n this._y = 0;\r\n this._clientX = 0;\r\n this._clientY = 0;\r\n this._clientX = _x;\r\n this._clientY = _y;\r\n this._x = this.translateX(_x);\r\n this._y = this.translateY(_y);\r\n }\r\n translateY(_y) {\r\n return -(_y - window.innerHeight / 2);\r\n }\r\n translateX(_x) {\r\n return _x - window.innerWidth / 2;\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n get clientX() {\r\n return this._clientX;\r\n }\r\n get clientY() {\r\n return this._clientY;\r\n }\r\n set x(_x) {\r\n this._clientX = _x;\r\n this._x = this.translateX(_x);\r\n }\r\n set y(_y) {\r\n this._clientY = _y;\r\n this._y = this.translateY(_y);\r\n }\r\n add(vector) {\r\n this._x += vector.x;\r\n this._y += vector.y;\r\n this._clientX += vector.clientX;\r\n this._clientY += vector.clientY;\r\n return this;\r\n }\r\n substract(vector) {\r\n this._x -= vector.x;\r\n this._y -= vector.y;\r\n this._clientX -= vector.clientX;\r\n this._clientY -= vector.clientY;\r\n return this;\r\n }\r\n dot(vector) {\r\n const scalar = (this._x * vector.x) + (this._y * vector.y);\r\n return scalar;\r\n }\r\n get magnitude() {\r\n return Math.sqrt(Math.pow(this._x, 2) + Math.pow(this._y, 2));\r\n }\r\n get clientMagnitude() {\r\n return Math.sqrt(Math.pow(this._clientX, 2) + Math.pow(this._clientY, 2));\r\n }\r\n}\r\nexports.Vec2 = Vec2;\r\nfunction closest(needle, haystack) {\r\n return haystack.reduce((a, b) => {\r\n let a_diff = Math.abs(a - needle);\r\n let b_diff = Math.abs(b - needle);\r\n if (a_diff === b_diff) {\r\n return a > b ? a : b;\r\n }\r\n else {\r\n return b_diff < a_diff ? b : a;\r\n }\r\n });\r\n}\r\nexports.closest = closest;\r\n//# sourceMappingURL=utils.js.map","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.RotateEndEvent = exports.RotateEvent = exports.RotateStartEvent = exports.PinchEndEvent = exports.PinchEvent = exports.PinchStartEvent = exports.PanEndEvent = exports.PanEvent = exports.PanStartEvent = exports.SwipeEndEvent = exports.SwipeEvent = exports.SwipeStartEvent = exports.DoubleTapEvent = exports.LongPressEvent = exports.GestureEvent = exports.TapEvent = void 0;\r\nconst GestureEvent_1 = __importDefault(require(\"./Gestures/GestureEvent\"));\r\nexports.GestureEvent = GestureEvent_1.default;\r\nconst LongPressEvent_1 = __importDefault(require(\"./Gestures/LongPressEvent\"));\r\nexports.LongPressEvent = LongPressEvent_1.default;\r\nconst TapEvent_1 = __importDefault(require(\"./Gestures/TapEvent\"));\r\nexports.TapEvent = TapEvent_1.default;\r\nconst DoubleTapEvent_1 = __importDefault(require(\"./Gestures/DoubleTapEvent\"));\r\nexports.DoubleTapEvent = DoubleTapEvent_1.default;\r\nconst SwipeEvent_1 = __importStar(require(\"./Gestures/SwipeEvent\"));\r\nexports.SwipeEvent = SwipeEvent_1.default;\r\nObject.defineProperty(exports, \"SwipeEndEvent\", { enumerable: true, get: function () { return SwipeEvent_1.SwipeEndEvent; } });\r\nObject.defineProperty(exports, \"SwipeStartEvent\", { enumerable: true, get: function () { return SwipeEvent_1.SwipeStartEvent; } });\r\nconst PanEvent_1 = __importStar(require(\"./Gestures/PanEvent\"));\r\nexports.PanEvent = PanEvent_1.default;\r\nObject.defineProperty(exports, \"PanEndEvent\", { enumerable: true, get: function () { return PanEvent_1.PanEndEvent; } });\r\nObject.defineProperty(exports, \"PanStartEvent\", { enumerable: true, get: function () { return PanEvent_1.PanStartEvent; } });\r\nconst PinchEvent_1 = __importStar(require(\"./Gestures/PinchEvent\"));\r\nexports.PinchEvent = PinchEvent_1.default;\r\nObject.defineProperty(exports, \"PinchEndEvent\", { enumerable: true, get: function () { return PinchEvent_1.PinchEndEvent; } });\r\nObject.defineProperty(exports, \"PinchStartEvent\", { enumerable: true, get: function () { return PinchEvent_1.PinchStartEvent; } });\r\nconst RotateEvent_1 = __importStar(require(\"./Gestures/RotateEvent\"));\r\nexports.RotateEvent = RotateEvent_1.default;\r\nObject.defineProperty(exports, \"RotateEndEvent\", { enumerable: true, get: function () { return RotateEvent_1.RotateEndEvent; } });\r\nObject.defineProperty(exports, \"RotateStartEvent\", { enumerable: true, get: function () { return RotateEvent_1.RotateStartEvent; } });\r\nconst utils_1 = require(\"./utils\");\r\nvar CartesianDirectionEnum;\r\n(function (CartesianDirectionEnum) {\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"right\"] = 0] = \"right\";\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"up\"] = 1] = \"up\";\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"left\"] = 2] = \"left\";\r\n CartesianDirectionEnum[CartesianDirectionEnum[\"down\"] = 3] = \"down\";\r\n})(CartesianDirectionEnum || (CartesianDirectionEnum = {}));\r\nclass GestureProvider {\r\n constructor() {\r\n this.touchStart = new TouchEvent('touchstart') || {};\r\n this.touchMove = new TouchEvent('touchmove') || {};\r\n this.touchEnd = new TouchEvent('touchend') || {};\r\n this.touchCancel = new TouchEvent('touchcancel') || {};\r\n this.velocity = 0;\r\n this.dxDy = new utils_1.Vec2(0, 0);\r\n this.scale = 1;\r\n this.rotation = 0;\r\n this.rotationDeg = 0;\r\n this.anchor = new utils_1.Vec2(0, 0);\r\n this.octant = 0;\r\n this.isPanning = false;\r\n this.isPinching = false;\r\n this.isSwiping = false;\r\n this.isRotating = false;\r\n this.touchStartTime = 0;\r\n this.touchEndTime = 0;\r\n this.lastTouchTime = 0;\r\n this.taps = 0;\r\n this.scaleBase = 0;\r\n this.touchMoved = false;\r\n this.touchDown = false;\r\n this.shouldFire = false;\r\n this.pointers = 0;\r\n this.isLongPress = false;\r\n this.longPressTimeout = 0;\r\n this.touchStartListener = this.onTouchStart.bind(this);\r\n this.touchMoveListener = this.onTouchMove.bind(this);\r\n this.touchEndListener = this.onTouchEnd.bind(this);\r\n this.touchCancelListener = this.onTouchCancel.bind(this);\r\n this.currentTarget = window;\r\n this.config = {\r\n longPressDuration: 500,\r\n tapDelay: 500,\r\n minPointers: 1,\r\n numberOfTaps: 0\r\n };\r\n if (!GestureProvider.listening) {\r\n if (TouchEvent)\r\n window.addEventListener('touchstart', this.touchStartListener, true);\r\n GestureProvider.listening = true;\r\n }\r\n }\r\n bind(target) {\r\n this.unbind(this.currentTarget);\r\n target.addEventListener('touchmove', this.touchMoveListener, true);\r\n target.addEventListener('touchend', this.touchEndListener, true);\r\n target.addEventListener('touchcancel', this.touchCancelListener, true);\r\n this.currentTarget = target;\r\n }\r\n unbind(target) {\r\n target.removeEventListener('touchmove', this.touchMoveListener);\r\n target.removeEventListener('touchend', this.touchEndListener);\r\n target.removeEventListener('touchcancel', this.touchCancelListener);\r\n }\r\n clean() {\r\n this.touchMoved = false;\r\n this.touchStartTime = 0;\r\n this.touchDown = false;\r\n this.scaleBase = 0;\r\n if (this.longPressTimeout && !this.isLongPress) {\r\n clearTimeout(this.longPressTimeout);\r\n this.longPressTimeout = 0;\r\n }\r\n this.isLongPress = false;\r\n }\r\n onPointerLeave(touchEnd) {\r\n if (!touchEnd.touches.length) {\r\n if (this.isSwiping) {\r\n const swipeEndEvent = new SwipeEvent_1.SwipeEndEvent(touchEnd, {\r\n velocity: this.velocity,\r\n direction: CartesianDirectionEnum[(0, utils_1.closest)(this.octant, [0, 1, 2, 3])]\r\n });\r\n this.dispatchEvent(swipeEndEvent);\r\n this.isSwiping = false;\r\n }\r\n if (this.isPanning) {\r\n const panEndEvent = new PanEvent_1.PanEndEvent(touchEnd, {\r\n translation: this.dxDy,\r\n velocity: this.velocity\r\n });\r\n this.dispatchEvent(panEndEvent);\r\n this.isPanning = false;\r\n }\r\n }\r\n if (touchEnd.touches.length === 1) {\r\n this.scaleBase = 0;\r\n if (this.isPinching) {\r\n const pinchEndEvent = new PinchEvent_1.PinchEndEvent(touchEnd, {\r\n scale: this.scale\r\n });\r\n this.dispatchEvent(pinchEndEvent);\r\n this.isPinching = false;\r\n }\r\n if (this.isRotating) {\r\n const rotateEndEvent = new RotateEvent_1.RotateEndEvent(touchEnd, {\r\n rotation: this.rotation,\r\n rotationDeg: this.rotationDeg,\r\n anchor: this.anchor\r\n });\r\n this.dispatchEvent(rotateEndEvent);\r\n this.isRotating = false;\r\n }\r\n }\r\n }\r\n dispatchEvent(gestureEvent) {\r\n queueMicrotask(() => {\r\n this.currentTarget.dispatchEvent(gestureEvent);\r\n });\r\n }\r\n onTouchStart(touchStart) {\r\n if (this.currentTarget !== touchStart.touches[0].target) {\r\n this.clean();\r\n this.unbind(this.currentTarget);\r\n this.pointers = this.touchEnd.touches.length;\r\n this.taps = 0;\r\n }\r\n this.touchStart = touchStart;\r\n const minPointers = parseInt(touchStart.touches[0].target.dataset.minpointers || '0') || this.config.minPointers;\r\n if (this.touchStart.touches.length < minPointers) {\r\n this.shouldFire = false;\r\n return;\r\n }\r\n this.shouldFire = true;\r\n this.touchStartTime = touchStart.timeStamp;\r\n this.touchDown = true;\r\n if (!this.pointers)\r\n this.bind(touchStart.touches[0].target);\r\n this.pointers = this.touchStart.touches.length;\r\n const longPressDuration = parseFloat(this.currentTarget.dataset.longpressduration || '0') || this.config.longPressDuration;\r\n if (!this.longPressTimeout) {\r\n this.longPressTimeout = setTimeout(() => {\r\n if (!this.touchMoved && this.touchDown) {\r\n const touchDuration = Date.now() - this.touchStartTime;\r\n const longPressEvent = new LongPressEvent_1.default(this.touchStart, touchDuration);\r\n this.dispatchEvent(longPressEvent);\r\n this.isLongPress = true;\r\n this.longPressTimeout = 0;\r\n }\r\n }, longPressDuration);\r\n }\r\n if (this.touchStart.touches.length > 1) {\r\n const originPointerPrimary = new utils_1.Vec2(this.touchStart.touches[0].clientX, this.touchStart.touches[0].clientY);\r\n const originPointerSecondary = new utils_1.Vec2(this.touchStart.touches[1].clientX, this.touchStart.touches[1].clientY);\r\n this.scaleBase = originPointerPrimary.substract(originPointerSecondary).magnitude;\r\n }\r\n else\r\n this.scaleBase = 0;\r\n }\r\n onTouchMove(touchMove) {\r\n if (!this.shouldFire)\r\n return;\r\n this.touchMoved = true;\r\n this.touchMove = touchMove;\r\n if (touchMove.touches.length > 1 && this.touchStart.touches.length > 1) {\r\n if (touchMove.touches[1].clientX !== this.touchStart.touches[1].clientX\r\n || touchMove.touches[1].clientY !== this.touchStart.touches[1].clientY) {\r\n const currentPointerPrimary = new utils_1.Vec2(this.touchMove.touches[0].clientX, this.touchMove.touches[0].clientY);\r\n const currentPointerSecondary = new utils_1.Vec2(this.touchMove.touches[1].clientX, this.touchMove.touches[1].clientY);\r\n const originPointerPrimary = new utils_1.Vec2(this.touchStart.touches[0].clientX, this.touchStart.touches[0].clientY);\r\n const distance = currentPointerPrimary.substract(currentPointerSecondary);\r\n if (this.scaleBase && Math.abs(this.scaleBase - distance.magnitude) > 10) {\r\n const scaleFactor = distance.magnitude / this.scaleBase;\r\n this.scale = scaleFactor;\r\n if (this.isPinching) {\r\n const pinchEvent = new PinchEvent_1.default(touchMove, {\r\n scale: scaleFactor\r\n });\r\n this.dispatchEvent(pinchEvent);\r\n }\r\n else {\r\n const pinchStartEvent = new PinchEvent_1.PinchStartEvent(touchMove, {\r\n scale: scaleFactor\r\n });\r\n this.dispatchEvent(pinchStartEvent);\r\n this.isPinching = true;\r\n }\r\n }\r\n this.anchor = currentPointerPrimary;\r\n let rotationAngle = Math.atan2((originPointerPrimary.clientY - currentPointerSecondary.clientY), (originPointerPrimary.clientX - currentPointerSecondary.clientX));\r\n rotationAngle < 0 ? rotationAngle += 1.5708 : rotationAngle -= 1.5708;\r\n this.rotation = rotationAngle;\r\n this.rotationDeg = rotationAngle * 180 / Math.PI;\r\n this.anchor = this.anchor;\r\n if (this.isRotating) {\r\n const rotateEvent = new RotateEvent_1.default(touchMove, {\r\n anchor: this.anchor,\r\n rotation: this.rotation,\r\n rotationDeg: this.rotationDeg\r\n });\r\n this.dispatchEvent(rotateEvent);\r\n }\r\n else {\r\n const rotateStartEvent = new RotateEvent_1.RotateStartEvent(touchMove, {\r\n anchor: this.anchor,\r\n rotation: this.rotation,\r\n rotationDeg: this.rotationDeg\r\n });\r\n this.dispatchEvent(rotateStartEvent);\r\n this.isRotating = true;\r\n }\r\n }\r\n }\r\n const origin = new utils_1.Vec2(this.touchStart.touches[0].clientX, this.touchStart.touches[0].clientY);\r\n const currentPosition = new utils_1.Vec2(this.touchMove.touches[0].clientX, this.touchMove.touches[0].clientY);\r\n const dxDy = currentPosition.substract(origin);\r\n const length = dxDy.magnitude;\r\n const normalised = {\r\n x: dxDy.x / length,\r\n y: dxDy.y / length\r\n };\r\n const angle = Math.atan2(normalised.y, normalised.x);\r\n this.octant = Math.round(4 * angle / (2 * Math.PI) + 4) % 4;\r\n const dt = (touchMove.timeStamp - this.touchStart.timeStamp) / 1000;\r\n const velocity = dxDy.magnitude / dt;\r\n if (this.isSwiping) {\r\n const swipeEvent = new SwipeEvent_1.default(touchMove, {\r\n direction: CartesianDirectionEnum[(0, utils_1.closest)(this.octant, [0, 1, 2, 3])],\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(swipeEvent);\r\n }\r\n else {\r\n const swipeStartEvent = new SwipeEvent_1.SwipeStartEvent(touchMove, {\r\n direction: CartesianDirectionEnum[(0, utils_1.closest)(this.octant, [0, 1, 2, 3])],\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(swipeStartEvent);\r\n this.isSwiping = true;\r\n }\r\n this.dxDy = dxDy;\r\n this.velocity = velocity;\r\n if (this.isPanning) {\r\n const panEvent = new PanEvent_1.default(touchMove, {\r\n translation: dxDy,\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(panEvent);\r\n }\r\n else {\r\n const panStartEvent = new PanEvent_1.PanStartEvent(touchMove, {\r\n translation: dxDy,\r\n velocity: velocity\r\n });\r\n this.dispatchEvent(panStartEvent);\r\n this.isPanning = true;\r\n }\r\n }\r\n onTouchEnd(touchEnd) {\r\n const numberOfTaps = parseInt(this.currentTarget.dataset.numberoftaps || '0') || this.config.numberOfTaps;\r\n this.taps++;\r\n this.shouldFire = Boolean(this.taps > numberOfTaps);\r\n if (this.shouldFire) {\r\n this.touchEnd = touchEnd;\r\n this.touchEndTime = touchEnd.timeStamp;\r\n const maxTapDelay = parseFloat(this.currentTarget.dataset.tapdelay || '0') || this.config.tapDelay;\r\n if (!this.touchMoved && !this.isLongPress) {\r\n if (this.taps === 1 || (this.touchEndTime - this.lastTouchTime) < maxTapDelay) {\r\n if (this.taps % 2 === numberOfTaps) {\r\n const doubleTapEvent = new DoubleTapEvent_1.default(touchEnd);\r\n this.dispatchEvent(doubleTapEvent);\r\n this.taps = 0;\r\n }\r\n const tapEvent = new TapEvent_1.default(touchEnd);\r\n this.dispatchEvent(tapEvent);\r\n }\r\n else {\r\n this.taps = 0;\r\n }\r\n }\r\n }\r\n this.pointers = this.touchEnd.touches.length;\r\n this.lastTouchTime = this.touchEndTime;\r\n this.onPointerLeave(touchEnd);\r\n this.unbind(this.currentTarget);\r\n this.clean();\r\n }\r\n onTouchCancel(touchCancel) {\r\n if (!this.shouldFire)\r\n return;\r\n this.touchCancel = touchCancel;\r\n this.unbind(this.currentTarget);\r\n this.clean();\r\n }\r\n}\r\nexports.default = GestureProvider;\r\nGestureProvider.listening = false;\r\nif (TouchEvent)\r\n window.gestureProvider = new GestureProvider();\r\n//# sourceMappingURL=index.js.map","import { GestureEvent } from 'web-gesture-events';\nimport { NavigateOptions, NavigationProps } from './types';\n\nexport class NavigateEvent extends Event {\n public readonly routerId: string;\n public readonly route: string;\n public readonly props: NavigationProps;\n public readonly navigationType: NonNullable<NavigateOptions['type']>;\n public readonly signal: AbortSignal;\n public readonly committed: Promise<NavigationHistoryEntry>;\n public readonly transition: NavigationTransition;\n\n constructor(\n routerId: string,\n route: string,\n props: NavigationProps,\n type: NavigateOptions['type'],\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n super('navigate');\n this.routerId = routerId;\n this.route = route;\n this.props = props;\n this.navigationType = type ?? 'push';\n this.signal = signal;\n this.committed = committed;\n this.transition = transition;\n }\n}\n\nexport class BackEvent extends Event {\n public readonly routerId: string;\n public readonly signal: AbortSignal;\n public readonly committed: Promise<NavigationHistoryEntry>;\n public readonly transition: NavigationTransition;\n\n constructor(\n routerId: string,\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n super('back');\n this.routerId = routerId;\n this.signal = signal;\n this.committed = committed;\n this.transition = transition;\n }\n}\n\nexport class ForwardEvent extends Event {\n public readonly routerId: string;\n public readonly signal: AbortSignal;\n public readonly committed: Promise<NavigationHistoryEntry>;\n public readonly transition: NavigationTransition;\n\n constructor(\n routerId: string,\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n super('forward');\n this.routerId = routerId;\n this.signal = signal;\n this.committed = committed;\n this.transition = transition;\n }\n}\n\nexport class GestureStartEvent extends Event {\n public readonly source: GestureEvent;\n\n constructor(source: GestureEvent) {\n super('gesture-start');\n this.source = source;\n }\n}\n\nexport class GestureEndEvent extends Event {\n public readonly source: GestureEvent;\n\n constructor(source: GestureEvent) {\n super('gesture-end');\n this.source = source;\n }\n}\n\nexport class GestureCancelEvent extends Event {\n constructor() {\n super('gesture-cancel');\n }\n}","export class HistoryEntry implements Omit<NavigationHistoryEntry, 'url'> {\n public readonly routerId: string;\n readonly #nativeEntry: NavigationHistoryEntry;\n public readonly index: number;\n\n constructor(\n nativeEntry: NavigationHistoryEntry,\n routerId: string,\n index: number\n ) {\n this.#nativeEntry = nativeEntry;\n this.routerId = routerId;\n this.index = index;\n }\n\n public set ondispose(\n handler: ((this: NavigationHistoryEntry, ev: Event) => void) | null\n ) {\n this.#nativeEntry.ondispose = handler;\n }\n\n public get ondispose() {\n return this.#nativeEntry.ondispose;\n }\n\n public get id() {\n return this.#nativeEntry.id;\n }\n\n public get globalIndex() {\n return this.#nativeEntry.index;\n }\n\n public get url() {\n if (!this.#nativeEntry.url) return null;\n return new URL(this.#nativeEntry.url);\n }\n\n public get key() {\n return this.#nativeEntry.key;\n }\n\n public get sameDocument() {\n return this.#nativeEntry.sameDocument;\n }\n\n public addEventListener<K extends keyof NavigationHistoryEntryEventMap>(\n type: K,\n listener: (\n this: NavigationHistoryEntry,\n ev: NavigationHistoryEntryEventMap[K]\n ) => void,\n options?: boolean | AddEventListenerOptions\n ): () => void;\n public addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): () => void;\n public addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): () => void {\n this.#nativeEntry.addEventListener(type, listener, options);\n\n return () => this.#nativeEntry.removeEventListener(type, listener, options);\n }\n\n public removeEventListener<K extends keyof NavigationHistoryEntryEventMap>(\n type: K,\n listener: (\n this: NavigationHistoryEntry,\n ev: NavigationHistoryEntryEventMap[K]\n ) => void,\n options?: boolean | EventListenerOptions\n ): void;\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void;\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n this.#nativeEntry.addEventListener(type, listener, options);\n }\n\n public dispatchEvent(event: Event): boolean {\n return this.#nativeEntry.dispatchEvent(event);\n }\n\n public getState<T>() {\n return this.#nativeEntry.getState() as T;\n }\n}","import {\n FIRST_INDEX,\n LAST_INDEX,\n LoadNavigationTransition,\n NavigationBase,\n NavigationBaseConfig,\n PathPattern,\n SINGLE_ELEMENT_LENGTH,\n matchRoute,\n resolveBaseURLFromPattern\n} from '@react-motion-router/core';\nimport {\n GoBackOptions,\n GoForwardOptions,\n NavigateOptions,\n NavigationBaseOptions,\n NavigationProps\n} from './common/types';\nimport { BackEvent, ForwardEvent, NavigateEvent } from './common/events';\nimport { HistoryEntry } from './HistoryEntry';\n\nexport interface NavigationConfig extends NavigationBaseConfig {\n getCommitted(): Promise<NavigationHistoryEntry> | null;\n getTransition(): NavigationTransition | LoadNavigationTransition | null;\n getPathPatterns(): PathPattern[];\n}\n\nexport class Navigation extends NavigationBase {\n private readonly config;\n\n constructor(config: NavigationConfig) {\n super(config);\n this.config = config;\n }\n\n public preload(route: string, state: NavigationProps = {}) {\n return super.preload(route, state);\n }\n\n public replace(\n route: string,\n props: NavigationProps = {},\n options: NavigationBaseOptions = {}\n ) {\n return this.navigate(route, props, { ...options, type: 'replace' });\n }\n\n public push(\n route: string,\n props: NavigationProps = {},\n options: NavigationBaseOptions = {}\n ) {\n return this.navigate(route, props, { ...options, type: 'push' });\n }\n\n public reload(props: NavigationProps = {}) {\n return window.navigation.reload({ state: props });\n }\n\n public traverseTo(key: string, options: NavigationBaseOptions = {}) {\n const result = window.navigation.traverseTo(key);\n const transition = window.navigation.transition!;\n\n const fromIndex = transition.from.index;\n const destinationIndex = window.navigation\n .entries()\n .findIndex(entry => entry.key === key);\n\n const controller = new AbortController();\n controller.signal\n .addEventListener(\n 'abort',\n () => this.traverseTo(transition.from.key), { once: true }\n );\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n let event;\n if (fromIndex > destinationIndex) {\n event = this.createBackEvent(\n controller.signal,\n result.committed,\n transition\n );\n } else {\n event = this.createForwardEvent(\n controller.signal,\n result.committed,\n transition\n );\n }\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n public navigate(\n route: string,\n props: NavigationProps = {},\n options: NavigateOptions = {}\n ) {\n const { type: history = 'push' } = options;\n\n const url = new URL(route, this.baseURL);\n const result = window.navigation\n .navigate(url.href, { history, state: props });\n const transition = window.navigation.transition!;\n\n const controller = new AbortController();\n controller.signal\n .addEventListener('abort', () => this.goBack(), { once: true });\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n const event = this.createNavigateEvent(\n route,\n props,\n history,\n controller.signal,\n result.committed,\n transition\n );\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n public goBack(options: GoBackOptions = {}) {\n if (!this.canGoBack()) return;\n\n const result = window.navigation.traverseTo(this.previous.key);\n const transition = window.navigation.transition!;\n\n const controller = new AbortController();\n controller.signal\n .addEventListener('abort', () => this.goForward(), { once: true });\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n const event = this.createBackEvent(\n controller.signal,\n result.committed,\n transition\n );\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n public goForward(options: GoForwardOptions = {}) {\n if (!this.canGoForward()) return;\n\n const result = window.navigation.traverseTo(this.next.key);\n const transition = window.navigation.transition!;\n\n const controller = new AbortController();\n controller.signal\n .addEventListener('abort', () => this.goBack(), { once: true });\n options.signal?.addEventListener('abort', controller.abort, { once: true });\n\n const event = this.createForwardEvent(\n controller.signal,\n result.committed,\n transition\n );\n this.dispatchEvent?.(event);\n\n return result;\n }\n\n private createBackEvent(\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n if (!this.routerId) throw new Error('Router ID is not set');\n return new BackEvent(this.routerId, signal, committed, transition);\n }\n\n private createForwardEvent(\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n if (!this.routerId) throw new Error('Router ID is not set');\n return new ForwardEvent(this.routerId, signal, committed, transition);\n }\n\n private createNavigateEvent(\n route: string,\n props: NavigationProps,\n type: NavigateOptions['type'],\n signal: AbortSignal,\n committed: Promise<NavigationHistoryEntry>,\n transition: NavigationTransition\n ) {\n if (!this.routerId) throw new Error('Router ID is not set');\n return new NavigateEvent(\n this.routerId,\n route,\n props,\n type,\n signal,\n committed,\n transition\n );\n }\n\n public get committed() {\n return this.config.getCommitted();\n }\n\n public get transition() {\n return this.config.getTransition();\n }\n\n public get globalEntries() {\n return window.navigation.entries();\n }\n\n /**\n * Returns the list of history entries **owned by this router**, derived from the\n * browser’s global navigation history.\n *\n * ---\n *\n * ### Mental model\n *\n * The Web Navigation API exposes a **single, flat history list**.\n * This router projects a **scoped, ordered view** of that list ensuring the\n * router can only see entries it created.\n *\n * Each global entry is classified as one of:\n *\n * - **Owned by this router**\n * - **Owned by a nested router**\n * - **Owned by a different (foreign) router**\n *\n * The resulting entry list is built by iterating global history **from the\n * beginning**, applying ownership rules, and stopping when ownership is lost.\n *\n * ---\n *\n * ### Ownership & contiguity rules\n *\n * 1. **Entries owned by this router**\n * - Are included\n * - Preserve global ordering\n *\n * 2. **Entries owned by nested routers**\n * - Exactly **one entry is included** (the nested router’s mount point),\n * because it must be rendered by the parent router\n * - All subsequent entries belonging to that same nested scope are excluded\n *\n * 3. **Entries owned by a foreign router**\n * - Are excluded\n * - **Terminate entry collection** once at least one entry has been matched\n *\n * This means contiguity is enforced **only across routers that cannot be\n * matched by this router at all**.\n *\n * ---\n *\n * ### Important invariants\n *\n * - Returned entries are always in **global history order**\n * - Local indices are **stable and monotonic**\n * - Nested router entries never leak into the parent router\n * - Entry collection stops once navigation leaves this router’s ownership\n * after it has begun\n *\n * ---\n *\n * ### Example\n *\n * Global history:\n * ```\n * 0: / (parent)\n * 1: /world (parent)\n * 2: /world/1 (nested mount point)\n * 3: /world/2 (nested)\n * 4: /about (parent)\n * 5: /other-router/page (foreign)\n * 6: / (parent)\n * ```\n *\n * Parent router entries:\n * ```\n * /, /world, /world/1, /about\n * ```\n *\n * Collection stops at index 5 because ownership is transferred to a\n * foreign router.\n *\n *\n * This approach balances correctness, simplicity, and predictable behavior\n * without requiring global history rewriting or fragile index arithmetic.\n */\n public get entries() {\n const nestedPathPatterns = this.config\n .getPathPatterns()\n .filter(({ pattern }) => pattern.endsWith('**'));\n let nestedScopePathPattern: PathPattern | null = null;\n let lastMatchedIndex = LAST_INDEX;\n let terminated = false;\n return this.globalEntries\n .filter((entry, index) => {\n if (!entry.url) return false;\n if (terminated) return false;\n const url = new URL(entry.url);\n const resolvedBaseURL = resolveBaseURLFromPattern(\n this.baseURLPattern.pathname, url.pathname\n );\n if (!resolvedBaseURL) {\n if (lastMatchedIndex !== LAST_INDEX)\n terminated = true;\n return false;\n }\n\n if (nestedScopePathPattern) {\n // we're in a nested scope, check if the current URL is also apart of the same scope and exit.\n const nestedBaseURLPattern = new URLPattern(\n nestedScopePathPattern.pattern,\n resolvedBaseURL.href\n );\n if (\n matchRoute(\n url.pathname,\n url.pathname,\n nestedBaseURLPattern.pathname,\n nestedScopePathPattern.caseSensitive\n )\n ) {\n return false;\n }\n }\n\n nestedScopePathPattern = nestedPathPatterns.find(\n ({ pattern, caseSensitive }) => (\n matchRoute(\n pattern,\n url.pathname,\n this.baseURLPattern.pathname,\n caseSensitive\n )\n )\n ) ?? null;\n\n lastMatchedIndex = index;\n return true;\n })\n .map((entry, index) => {\n return new HistoryEntry(entry, this.routerId, index);\n });\n }\n\n /**\n * Returns the **local history index** for this router, derived from the\n * browser’s global navigation state.\n *\n * ---\n *\n * ### Problem this solves\n *\n * The Web Navigation API exposes a **single, flat history list**.\n * This router exposes a **scoped history view** that:\n *\n * - filters out entries owned by nested routers\n * - preserves global ordering\n * - reindexes entries locally\n *\n * As a result, there is **no arithmetic relationship** between:\n *\n * - `window.navigation.currentEntry.index` (global)\n * - this router’s local `index`\n *\n * This getter computes the local index **by identity**, not position.\n *\n * ---\n *\n * ### High-level behavior\n *\n * The returned index is:\n *\n * > the index of the **most recent local entry** that appears in the\n * > browser’s global history **at or before** the current global entry.\n *\n * ---\n *\n * ### Resolution strategy\n *\n * 1. If the current global index is **before** this router’s first entry,\n * the index resolves to `0`.\n *\n * 2. If the current global index is **after** this router’s last entry,\n * the index resolves to `entries.length - 1`.\n *\n * 3. Otherwise:\n * - A window of global history is sliced from the first local entry\n * up to and including the current global entry.\n * - Local entries are scanned **from newest to oldest**.\n * - The first local entry whose `key` appears in that global slice\n * determines the local index.\n *\n * Entry identity is determined by **history entry keys**, not URLs or\n * global indices.\n *\n * ---\n *\n * ### Why key-based matching is required\n *\n * - Global indices are sparse once nested routers are involved\n * - URLs may repeat or be replaced\n * - History entries can be inserted between parent entries\n *\n * Keys provide the only stable identity that survives these cases.\n *\n * ---\n *\n * ### Invariant\n *\n * The returned index always satisfies:\n *\n * ```\n * 0 ≤ index < entries.length\n * ```\n *\n * and monotonically tracks navigation through global history.\n *\n * ---\n *\n * ### Example\n *\n * Global history:\n * ```\n * 0: /\n * 1: /world\n * 2: /world/1 (nested)\n * 3: /about ← current\n * ```\n *\n * Local router entries:\n * ```\n * / (index 0)\n * /world (index 1)\n * /about (index 2)\n * ```\n *\n * Result:\n * ```\n * index === 2\n * ```\n */\n public get index() {\n const globalCurrentIndex = window.navigation\n .currentEntry\n ?.index ?? LAST_INDEX;\n const firstEntryGlobalIndex = this.entries\n .at(FIRST_INDEX)\n ?.globalIndex ?? LAST_INDEX;\n const lastEntryGlobalIndex = this.entries\n .at(LAST_INDEX)\n ?.globalIndex ?? LAST_INDEX;\n if (globalCurrentIndex <= firstEntryGlobalIndex)\n return FIRST_INDEX;\n else if (globalCurrentIndex >= lastEntryGlobalIndex)\n return this.entries.length - SINGLE_ELEMENT_LENGTH;\n else {\n const scopedEntries = this.globalEntries\n .slice(\n firstEntryGlobalIndex,\n globalCurrentIndex + SINGLE_ELEMENT_LENGTH\n );\n return this.entries.findLastIndex(entry => {\n return scopedEntries\n .findLastIndex(\n globalEntry => entry.key === globalEntry.key\n ) > LAST_INDEX;\n });\n }\n }\n\n public get previous(): HistoryEntry | null {\n return this.entries[this.index - SINGLE_ELEMENT_LENGTH] ?? null;\n }\n\n public get next(): HistoryEntry | null {\n return this.entries[this.index + SINGLE_ELEMENT_LENGTH] ?? null;\n }\n\n public get current() {\n return this.entries[this.index];\n }\n\n public canGoBack(\n this: Navigation\n ): this is Navigation & { previous: HistoryEntry } {\n return Boolean(this.previous?.url?.origin === globalThis.location.origin);\n }\n\n public canGoForward(\n this: Navigation\n ): this is Navigation & { next: HistoryEntry } {\n return Boolean(this.next?.url?.origin === globalThis.location.origin);\n }\n}","import { Direction } from './types';\n\nexport function searchParamsToObject(searchParams: URLSearchParams) {\n return Object.fromEntries(searchParams.entries());\n}\n\nexport function searchParamsFromObject(params: { [key: string]: any }) {\n return new URLSearchParams(params).toString();\n}\n\nexport function isGesture(info?: unknown) {\n if (info && typeof info === 'object' && 'gesture' in info)\n return Boolean(info.gesture);\n return false;\n}\n\nexport function isRollback(info?: unknown) {\n if (info && typeof info === 'object' && 'rollback' in info)\n return Boolean(info.rollback);\n return false;\n}\n\nexport function deepEquals<T>(obj1: T, obj2: T): boolean {\n if (obj1 === obj2) {\n return true;\n }\n\n if (\n obj1 === null\n || obj2 === null\n || typeof obj1 !== 'object'\n || typeof obj2 !== 'object'\n ) {\n return false;\n }\n\n const keys1 = Object.keys(obj1) as (keyof T)[];\n const keys2 = Object.keys(obj2) as (keyof T)[];\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (!keys2.includes(key) || !deepEquals(obj1[key], obj2[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function isWithinGestureInset(\n direction: Direction,\n { x, y }: { x: number, y: number },\n clientRect: DOMRect,\n gestureAreaWidth: number\n) {\n switch (direction) {\n case 'right':\n return Math.abs(x - clientRect.left) < gestureAreaWidth;\n case 'left':\n return Math.abs(x - clientRect.right) < gestureAreaWidth;\n case 'down':\n return Math.abs(y - clientRect.top) < gestureAreaWidth;\n case 'up':\n return Math.abs(y - clientRect.bottom) < gestureAreaWidth;\n }\n}","import { matchRoute, ScreenBase } from '@react-motion-router/core';\nimport type {\n PlainObject,\n ScreenBaseProps,\n ScreenBaseState,\n ScreenBaseComponentProps,\n ScreenBaseConfig,\n MatchedRoute\n} from '@react-motion-router/core';\nimport { Navigation } from './Navigation';\nimport {\n HistoryEntryState,\n RouteProp,\n ScreenInternalProps,\n SwipeDirection\n} from './common/types';\nimport { Router } from './Router';\nimport { searchParamsToObject } from './common/utils';\nimport { HistoryEntry } from './HistoryEntry';\n\nexport type ScreenComponentProps<\n T extends PlainObject = object\n> = ScreenBaseComponentProps<RouteProp<T>, Navigation>;\n\nexport interface ScreenConfig extends ScreenBaseConfig<RouteProp> {\n readonly title?: string;\n readonly presentation?: 'default' | 'dialog' | 'modal';\n readonly keepAlive?: boolean;\n readonly gestureDirection?: SwipeDirection;\n readonly gestureAreaWidth?: number;\n readonly gestureMinFlingVelocity?: number;\n readonly gestureHysteresis?: number;\n readonly gestureDisabled?: boolean;\n}\n\nexport interface ScreenProps extends ScreenBaseProps {\n config?: ScreenConfig;\n}\n\nexport class Screen extends ScreenBase<\n ScreenProps,\n ScreenBaseState,\n RouteProp\n> {\n readonly #historyEntry: HistoryEntry;\n\n constructor(props: ScreenProps, router: Router) {\n super(props, router);\n\n const id = this.internalProps.id;\n const historyEntry = router.navigation\n .entries\n .find(entry => entry.key === id);\n if (!historyEntry)\n throw new Error(`No history entry found for: ${id}`);\n this.#historyEntry = historyEntry;\n }\n\n public static getDerivedStateFromProps(props: ScreenProps) {\n if (\n props.config?.presentation === 'dialog'\n || props.config?.presentation === 'modal'\n )\n return { elementType: 'dialog' };\n else\n return { elementType: 'div' };\n }\n\n public static historyEntryStateFromEntry(\n entry: HistoryEntry,\n matchInfo: MatchedRoute | null\n ) {\n if (entry?.url) {\n const state = entry.getState<HistoryEntryState>() ?? {};\n const queryParams = searchParamsToObject(entry.url.searchParams);\n const { params: pathParams = {} } = matchInfo ?? {};\n state.params = {\n ...state.params,\n ...queryParams,\n ...pathParams,\n };\n\n return state;\n }\n return {};\n }\n\n protected setParams(newParams: PlainObject): void {\n super.setParams(newParams);\n this.setHistoryState(\n ({ params }) => ({ params: { ...params, ...newParams } })\n );\n }\n\n protected setConfig(newConfig: NonNullable<ScreenProps['config']>): void {\n super.setConfig(newConfig);\n this.setHistoryState(({ config }) => {\n // navigation history state can only accept structured cloneable objects.\n // a lot of the config options are function which cannot be structured cloned.\n const unsafe = new Set([\n 'footer', 'header',\n 'onEnter', 'onEntered',\n 'onExit', 'onExited',\n 'onLoad',\n 'animation',\n ]);\n return {\n config: {\n ...config,\n ...Object.fromEntries(\n Object.entries(newConfig).filter(([key]) => !unsafe.has(key))\n ),\n },\n };\n });\n }\n\n protected get router() {\n return this.context as Router;\n }\n\n private get internalProps() {\n return this.props as unknown as ScreenInternalProps;\n }\n\n public get resolvedPathname() {\n return this.internalProps.resolvedPathname;\n }\n\n private get historyEntryState() {\n const entry = this.#historyEntry;\n if (!entry.url) return {};\n const matchInfo = matchRoute(\n this.props.path,\n entry.url.pathname,\n this.context.baseURLPattern.pathname,\n this.props.caseSensitive\n );\n return Screen.historyEntryStateFromEntry(entry, matchInfo);\n }\n\n public get id() {\n return this.internalProps.id.toString();\n }\n\n public get params() {\n return {\n ...this.props.defaultParams,\n ...this.historyEntryState.params,\n ...this.state.params,\n };\n }\n\n public get config() {\n return {\n ...this.props.config,\n ...this.historyEntryState.config,\n ...this.state.config,\n };\n }\n\n protected get routeProp() {\n const setParams = this.setParams.bind(this);\n const setConfig = this.setConfig.bind(this);\n const{ path } = this.props;\n const { focused } = this.state;\n const { params, config, resolvedPathname } = this;\n return {\n setParams,\n setConfig,\n path,\n resolvedPathname,\n focused,\n params,\n config,\n };\n }\n\n protected setHistoryState(\n newState: PlainObject | ((prevState: PlainObject) => PlainObject)\n ) {\n if (!this.state.focused) return;\n const prevState = this.#historyEntry.getState<HistoryEntryState>() ?? {};\n if (newState instanceof Function) {\n newState = newState(prevState);\n }\n const state = {\n ...prevState ?? {},\n ...newState,\n };\n window.navigation.updateCurrentEntry({ state });\n }\n\n private onClickOutside(e: MouseEvent) {\n if (!this.transitionProvider.current?.ref.current) return;\n const navigation = this.context?.navigation as Navigation | undefined;\n if (\n e.composedPath().includes(this.transitionProvider.current.ref.current)\n ) return;\n navigation?.goBack();\n }\n\n public onEnter(signal: AbortSignal) {\n const transitionProviderRef = this.transitionProvider.current?.ref;\n if (\n transitionProviderRef?.current instanceof HTMLDialogElement\n && transitionProviderRef.current.open === false\n ) {\n const navigation = this.context?.navigation as Navigation | undefined;\n if (this.props.config?.presentation === 'modal') {\n transitionProviderRef.current.showModal();\n } else {\n transitionProviderRef.current.show();\n }\n transitionProviderRef.current.style.maxHeight = 'unset';\n transitionProviderRef.current.style.maxWidth = 'unset';\n transitionProviderRef.current.style.width = 'max-content';\n transitionProviderRef.current.style.height = 'max-content';\n\n const onClickOutside = this.onClickOutside.bind(this);\n\n // closed by form submit or ESC key\n transitionProviderRef.current.addEventListener('close', function () {\n if (this.returnValue !== 'screen-exit') {\n this.style.display = 'block';\n navigation?.goBack();\n }\n\n navigation?.removeEventListener('click', onClickOutside);\n }, { once: true });\n\n navigation?.addEventListener('click', onClickOutside);\n }\n\n return super.onEnter(signal);\n };\n\n public onExited(signal: AbortSignal) {\n const transitionProviderRef = this.transitionProvider.current?.ref;\n if (transitionProviderRef?.current instanceof HTMLDialogElement) {\n transitionProviderRef.current.close('screen-exit');\n }\n\n return super.onExited(signal);\n }\n}","import {\n PlainObject,\n RoutePropBase\n} from '@react-motion-router/core';\nimport { ScreenProps } from '../Screen';\nimport { RefObject } from 'react';\nimport {\n BackEvent,\n ForwardEvent,\n GestureCancelEvent,\n GestureEndEvent,\n GestureStartEvent,\n NavigateEvent\n} from './events';\n\nexport interface NavigationBaseOptions {\n\tsignal?: AbortSignal;\n}\n\nexport interface NavigateOptions extends NavigationBaseOptions {\n\ttype?: 'push' | 'replace';\n}\n\nexport interface GoBackOptions extends NavigationBaseOptions { }\nexport interface GoForwardOptions extends NavigationBaseOptions { }\n\nexport interface NavigationProps {\n\tparams?: Record<any, any>;\n\tconfig?: ScreenProps['config']\n}\n\nexport type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };\n\nexport type XOR<T, U> = (T | U) extends object\n ? (Without<T, U> & U) | (Without<U, T> & T)\n : T | U;\n\nexport interface HistoryEntryState {\n\tconfig?: ScreenProps['config'];\n\tparams?: PlainObject;\n}\n\nexport function isRefObject<T>(\n value?: React.LegacyRef<T>\n): value is RefObject<T> {\n if (\n value !== null\n\t\t&& typeof value === 'object'\n\t\t&& Object.hasOwn(value, 'current')\n ) return true;\n return false;\n}\n\n// TODO: remove hyphens\ndeclare global {\n interface HTMLElementEventMap {\n 'navigate': NavigateEvent;\n 'back': BackEvent;\n 'forward': ForwardEvent;\n 'gesture-start': GestureStartEvent;\n 'gesture-end': GestureEndEvent;\n 'gesture-cancel': GestureCancelEvent;\n }\n}\n\nexport interface RouteProp<\n T extends PlainObject = {}\n> extends RoutePropBase<ScreenProps['config'], T> { }\n\nexport type SwipeDirection = 'up'\n | 'down'\n | 'left'\n | 'right'\n | 'horizontal'\n | 'vertical';\nexport type Direction = Exclude<SwipeDirection, 'horizontal' | 'vertical'>;\n\nconst directions: Record<SwipeDirection, Direction[]> = {\n 'horizontal': ['left', 'right'] as const,\n 'vertical': ['up', 'down'] as const,\n 'up': ['up'] as const,\n 'down': ['down'] as const,\n 'left': ['left'] as const,\n 'right': ['right'] as const,\n};\nexport function isSupportedDirection(\n direction: Exclude<SwipeDirection, 'horizontal' | 'vertical'>,\n supported: SwipeDirection\n) {\n return directions[supported].includes(direction);\n}\n\nexport function isHorizontalDirection(\n direction: SwipeDirection\n): direction is 'left' | 'right' | 'horizontal' {\n return direction === 'left'\n || direction === 'right'\n || direction === 'horizontal';\n}\n\nexport interface ScreenInternalProps {\n resolvedPathname: string;\n id: React.Key;\n}","export const DEFAULT_GESTURE_CONFIG = {\n gestureHysteresis: 0.5,\n gestureMinFlingVelocity: 400,\n gestureAreaWidth: 100,\n gestureDirection: 'right',\n gestureDisabled: false,\n} as const;\n\nexport const DEFAULT_PRELOAD_FORCE_THRESHOLD = 0.5;\nexport const DEFAULT_PLAYBACK_RATE = 1;","import React, { useContext } from 'react';\nimport { isWithinGestureInset } from './common/utils';\nimport { PlainObject, RoutePropContext } from '@react-motion-router/core';\nimport { RouteProp } from './common/types';\n\nconst DEFAULT_UA_GESTURE_AREA_WIDTH = 24;\n\nfunction WithActivationDetection(\n { clientX: x, clientY: y }: Touch,\n rect: DOMRect,\n gestureAreaWidth: number\n) {\n return isWithinGestureInset('left', { x, y }, rect, gestureAreaWidth)\n && isWithinGestureInset('right', { x, y }, rect, gestureAreaWidth)\n && isWithinGestureInset('down', { x, y }, rect, gestureAreaWidth)\n && isWithinGestureInset('up', { x, y }, rect, gestureAreaWidth);\n}\n\ntype ElementForTag<T extends keyof JSX.IntrinsicElements> =\n T extends keyof (HTMLElementTagNameMap & SVGElementTagNameMap)\n ? (HTMLElementTagNameMap & SVGElementTagNameMap)[T]\n : HTMLElement;\n\ntype GestureRegion = {\n [T in keyof JSX.IntrinsicElements]: ReturnType<typeof createGestureRegion<T>>;\n}\n\ninterface GestureRegionProps {\n gestureBehaviour?: 'contain' | 'none';\n uaGestureAreaWidth?: number;\n}\n\nexport const createGestureRegion = (\n <T extends keyof JSX.IntrinsicElements>(tag: T) => \n function GestureRegion({\n ref: forwardedRef,\n gestureBehaviour = 'contain',\n uaGestureAreaWidth = DEFAULT_UA_GESTURE_AREA_WIDTH,\n ...props\n }: JSX.IntrinsicElements[T] & GestureRegionProps) {\n const ref = React.useRef<ElementForTag<T>>(null);\n const route = useContext<RouteProp<PlainObject>>(\n RoutePropContext\n ) ?? null;\n const { gestureAreaWidth = Number() } = route?.config ?? {};\n \n React.useImperativeHandle(\n forwardedRef as React.Ref<ElementForTag<T>> | undefined,\n () => ref.current as ElementForTag<T>\n );\n\n React.useEffect(() => {\n if (!ref.current) return;\n const target = ref.current;\n\n const handler = (e: Event) => {\n if (!(e instanceof TouchEvent)) return;\n if (gestureBehaviour === 'none') return;\n const rect = target.getBoundingClientRect();\n const isWithinGestureInset = Array.from(e.touches)\n .map(touch => {\n return WithActivationDetection(touch, rect, gestureAreaWidth);\n })\n .some(Boolean);\n\n if (isWithinGestureInset)\n e.stopPropagation();\n\n const isWithinUAGestureInset = Array.from(e.touches)\n .map(touch => {\n return WithActivationDetection(touch, rect, uaGestureAreaWidth);\n })\n .some(Boolean);\n \n if (isWithinUAGestureInset)\n e.preventDefault();\n };\n\n target.addEventListener('touchstart', handler);\n return () => {\n target.removeEventListener(\n 'touchstart',\n handler\n );\n };\n }, [uaGestureAreaWidth, gestureAreaWidth, gestureBehaviour]);\n\n const Tag = tag as React.JSX.ElementType;\n\n return <Tag ref={ref} {...props} />;\n }\n);\n\nexport const GestureRegion = new Proxy(\n {} as GestureRegion, {\n get(target, key: keyof JSX.IntrinsicElements) {\n target[key] ??= createGestureRegion(key);\n return target[key];\n },\n }\n);","import {\n FIRST_INDEX,\n LAST_INDEX,\n RouterBase,\n SINGLE_ELEMENT_LENGTH,\n cloneAndInject,\n historyEntryFromDestination,\n matchRoute\n} from '@react-motion-router/core';\nimport {\n ClonedElementType,\n LoadEvent,\n NestedRouterContext,\n RouterBaseConfig,\n RouterBaseProps,\n RouterBaseState,\n ScreenChild,\n PromiseWrapper\n} from '@react-motion-router/core';\nimport { Navigation } from './Navigation';\nimport { ScreenProps, Screen, ScreenConfig } from './Screen';\nimport {\n HistoryEntryState,\n isHorizontalDirection,\n isRefObject,\n isSupportedDirection,\n ScreenInternalProps,\n SwipeDirection\n} from './common/types';\nimport { createRef, startTransition } from 'react';\nimport { SwipeStartEvent, SwipeEndEvent } from 'web-gesture-events';\nimport { GestureTimeline } from 'web-animations-extension';\nimport {\n deepEquals,\n isGesture,\n isRollback,\n isWithinGestureInset\n} from './common/utils';\nimport {\n GestureCancelEvent,\n GestureEndEvent,\n GestureStartEvent\n} from './common/events';\nimport {\n DEFAULT_GESTURE_CONFIG,\n DEFAULT_PLAYBACK_RATE\n} from './common/constants';\nimport { GestureRegion } from './GestureRegion';\nimport { HistoryEntry } from './HistoryEntry';\n\nexport interface RouterConfig extends RouterBaseConfig {\n screenConfig?: ScreenConfig;\n disableBrowserRouting?: boolean;\n initialPathname?: string;\n shouldIntercept?(navigateEvent: NavigateEvent): boolean;\n onIntercept?(navigateEvent: NavigateEvent): void;\n}\n\nexport interface RouterProps extends RouterBaseProps<Screen> {\n config?: RouterConfig;\n}\n\ntype InjectedScreenProps = Pick<ScreenProps, 'config' | 'defaultParams'> &\n ScreenInternalProps;\nexport interface RouterState extends RouterBaseState {\n transition: NavigationTransition | LoadEvent['transition'] | null;\n screenStack: ClonedElementType<ScreenChild<Screen>, InjectedScreenProps>[];\n gestureDirection: SwipeDirection;\n gestureAreaWidth: number;\n gestureMinFlingVelocity: number;\n gestureHysteresis: number;\n gestureDisabled: boolean;\n fromKey: React.Key | null;\n destinationKey: React.Key | null;\n documentTitle?: string;\n controller: AbortController | null;\n}\n\nexport class Router extends RouterBase<\n RouterProps,\n RouterState\n> {\n public readonly navigation;\n #committed: PromiseWrapper<NavigationHistoryEntry> | null = null;\n\n constructor(\n props: RouterProps,\n context: React.ContextType<typeof NestedRouterContext>\n ) {\n super(props, context);\n this.navigation = new Navigation({\n addEventListener: this.addEventListener.bind(this),\n removeEventListener: this.removeEventListener.bind(this),\n dispatchEvent: this.dispatchEvent.bind(this),\n parent: this.parent?.navigation ?? null,\n routerId: this.id,\n baseURL: this.baseURL,\n baseURLPattern: this.baseURLPattern,\n getCommitted: () =>{\n return this.committed;\n },\n getTransition: () => {\n return this.state.transition;\n },\n getPathPatterns: () => {\n return this.pathPatterns;\n },\n getNavigatorById: (id: string) =>\n this.getRouterById(id)?.navigation ?? null,\n });\n const {\n gestureAreaWidth = DEFAULT_GESTURE_CONFIG.gestureAreaWidth,\n gestureDirection = DEFAULT_GESTURE_CONFIG.gestureDirection,\n gestureDisabled = DEFAULT_GESTURE_CONFIG.gestureDisabled,\n gestureHysteresis = DEFAULT_GESTURE_CONFIG.gestureHysteresis,\n gestureMinFlingVelocity = DEFAULT_GESTURE_CONFIG.gestureMinFlingVelocity,\n } = props.config?.screenConfig ?? {};\n \n this.state = {\n screenStack: [],\n gestureDirection,\n gestureAreaWidth,\n gestureHysteresis,\n gestureDisabled,\n gestureMinFlingVelocity,\n transition: null,\n documentTitle: document.title,\n fromKey: null,\n destinationKey: null,\n controller: null,\n };\n }\n\n public static getDerivedStateFromProps(_: RouterProps, state: RouterState) {\n const config = state.screenStack.find(\n (screen) => isRefObject(screen.ref) && screen.ref.current?.focused\n )?.props.config;\n document.title = config?.title ?? document.title;\n return {\n gestureDirection:\n config?.gestureDirection ?? DEFAULT_GESTURE_CONFIG.gestureDirection,\n gestureAreaWidth:\n config?.gestureAreaWidth ?? DEFAULT_GESTURE_CONFIG.gestureAreaWidth,\n gestureMinFlingVelocity:\n config?.gestureMinFlingVelocity\n ?? DEFAULT_GESTURE_CONFIG.gestureMinFlingVelocity,\n gestureHysteresis:\n config?.gestureHysteresis ?? DEFAULT_GESTURE_CONFIG.gestureHysteresis,\n gestureDisabled:\n config?.gestureDisabled ?? DEFAULT_GESTURE_CONFIG.gestureDisabled,\n documentTitle: config?.title,\n };\n }\n\n public componentDidMount(): void {\n super.componentDidMount();\n window.navigation.addEventListener('currententrychange', this);\n window.navigation.addEventListener('navigate', this);\n window.navigation.addEventListener('navigatesuccess', this);\n window.navigation.addEventListener('navigateerror', this);\n }\n\n // TODO: figure out how to remove this\n public shouldComponentUpdate(\n nextProps: Readonly<RouterProps>,\n nextState: Readonly<RouterState>\n ): boolean {\n return (\n !deepEquals(this.props.config, nextProps.config)\n || !deepEquals(this.state, nextState)\n || this.props.id !== nextProps.id\n );\n }\n\n public componentWillUnmount(): void {\n window.navigation.removeEventListener('currententrychange', this);\n window.navigation.removeEventListener('navigate', this);\n window.navigation.removeEventListener('navigatesuccess', this);\n window.navigation.removeEventListener('navigateerror', this);\n }\n\n public onnavigate(e: NavigateEvent) {\n super.onnavigate(e);\n this.#committed = new PromiseWrapper();\n };\n\n public oncurrententrychange() {\n this.#committed?.resolve?.(window.navigation.currentEntry!);\n };\n\n public onnavigatesuccess() {\n this.#committed = null;\n };\n\n public onnavigateerror({ error }: ErrorEvent) {\n if (this.#committed?.state === 'pending')\n this.#committed.reject?.(error); // TODO: find out what the spec does for cancelled navigations\n this.#committed = null;\n };\n\n // TODO: change to use handleEvent paradigm\n private readonly onGestureCancel = () => {\n if (!this.state.transition)\n throw new Error('Rollback failed, transition is null');\n window.navigation.traverseTo(this.state.transition.from.key, {\n info: { rollback: true },\n });\n };\n\n private canGestureNavigate(e: SwipeStartEvent) {\n if (!this.ref.current) return false;\n if (this.state.gestureDisabled) return false;\n const clientRect = this.ref.current.getBoundingClientRect();\n const { direction } = e;\n if (\n (direction === 'down' || direction === 'right')\n && !this.navigation.canGoBack()\n )\n return false;\n if (\n (direction === 'up' || direction === 'left')\n && !this.navigation.canGoForward()\n )\n return false;\n if (\n isWithinGestureInset(\n direction,\n e,\n clientRect,\n this.state.gestureAreaWidth\n )\n )\n return false;\n\n return isSupportedDirection(direction, this.state.gestureDirection);\n }\n\n public onswipestart(e: SwipeStartEvent) {\n if (!this.canGestureNavigate(e)) return;\n if (!this.ref.current || !this.screenTransitionLayer.current) return;\n const { direction } = e;\n\n const axis: 'x' | 'y' = isHorizontalDirection(direction) ? 'x' : 'y';\n let rangeStart;\n let rangeEnd;\n switch (direction) {\n case 'right':\n rangeStart = Number();\n rangeEnd = this.ref.current.clientWidth;\n break;\n case 'left':\n rangeStart = this.ref.current.clientWidth;\n rangeEnd = Number();\n break;\n case 'down':\n rangeStart = Number();\n rangeEnd = this.ref.current.clientHeight;\n break;\n case 'up':\n rangeStart = this.ref.current.clientHeight;\n rangeEnd = Number();\n break;\n }\n this.screenTransitionLayer.current.animation.timeline = new GestureTimeline(\n {\n source: this.ref.current,\n type: 'swipe',\n axis,\n rangeStart,\n rangeEnd,\n }\n );\n const gesture = true;\n if (direction === 'down' || direction === 'right')\n window.navigation.traverseTo(this.navigation.previous!.key, {\n info: { gesture },\n });\n else\n window.navigation.traverseTo(this.navigation.next!.key, {\n info: { gesture },\n });\n\n this.dispatchEvent(new GestureStartEvent(e));\n };\n\n public onswipeend(e: SwipeEndEvent) {\n if (!this.screenTransitionLayer.current) return;\n const progress =\n this.screenTransitionLayer.current.animation.effect?.getComputedTiming()\n .progress ?? Number();\n const playbackRate =\n this.screenTransitionLayer.current.animation.playbackRate;\n this.screenTransitionLayer.current.animation.timeline = document.timeline;\n const hysteresisReached =\n playbackRate > Number()\n ? progress > this.state.gestureHysteresis\n : progress < this.state.gestureHysteresis;\n let gestureCancelled = false;\n if (e.velocity < this.state.gestureMinFlingVelocity && !hysteresisReached) {\n gestureCancelled = true;\n this.screenTransitionLayer.current.animation.reverse();\n this.dispatchEvent(new GestureCancelEvent());\n } else {\n this.dispatchEvent(new GestureEndEvent(e));\n }\n if (gestureCancelled) {\n this.screenTransitionLayer.current.animation.finished.then(() => {\n this.state.controller?.abort('gesture-cancel');\n });\n }\n };\n\n public get committed() {\n return this.#committed?.promise ?? null;\n }\n\n private get backNavigating() {\n const fromIndex = this.state.screenStack.findIndex(\n (screen) => screen.key === this.state.fromKey\n );\n const destinationIndex = this.state.screenStack.findIndex(\n (screen) => screen.key === this.state.destinationKey\n );\n\n return destinationIndex >= FIRST_INDEX && destinationIndex < fromIndex;\n }\n\n protected get screens() {\n const screenStack = this.state.screenStack;\n return screenStack.filter((screen, index) => {\n const currentScreenRef = screen.ref ?? null;\n const nextScreenRef = screenStack.at(index + SINGLE_ELEMENT_LENGTH)?.ref;\n return (\n (isRefObject(currentScreenRef)\n && currentScreenRef.current?.config.keepAlive)\n || (isRefObject(nextScreenRef)\n && nextScreenRef.current?.config.presentation === 'modal')\n || (isRefObject(nextScreenRef)\n && nextScreenRef.current?.config.presentation === 'dialog')\n || screen.key === this.navigation.current?.key\n || screen.key === this.state.fromKey\n || screen.key === this.state.destinationKey\n );\n });\n }\n\n private cloneScreenChildFromPathname(\n pathname: string,\n key: React.Key | null\n ) {\n const { child } = this.screenChildFromPathname(pathname) ?? {};\n\n if (!child) return null;\n key ??= crypto.randomUUID();\n return cloneAndInject(child, {\n config: {\n title: document.title,\n ...this.props.config?.screenConfig,\n ...child.props.config,\n },\n id: key,\n resolvedPathname: pathname,\n key,\n ref: createRef<Screen>(),\n } as InjectedScreenProps);\n }\n\n private getScreenRefByKey(key: string) {\n const screen = this.state.screenStack.find(\n (screen) => screen.key === key\n )?.ref;\n if (isRefObject(screen)) return screen;\n return null;\n }\n\n protected canIntercept(e: NavigateEvent): boolean {\n const pathname = new URL(e.destination.url).pathname;\n const baseURLPattern = this.baseURLPattern.pathname;\n return (\n this.mounted\n && this.shouldIntercept(e)\n && this.includesRoute(pathname, baseURLPattern)\n );\n }\n\n protected shouldIntercept(e: NavigateEvent): boolean {\n const shouldIntercept =\n e.canIntercept && !e.formData && !e.hashChange && !e.downloadRequest;\n return shouldIntercept || Boolean(this.props.config?.shouldIntercept?.(e));\n }\n\n protected intercept(e: NavigateEvent | LoadEvent): void {\n if (!(e instanceof LoadEvent)) this.props.config?.onIntercept?.(e);\n if (e.defaultPrevented) return;\n\n switch (e.navigationType) {\n case 'preload':\n this.handlePreload(e);\n break;\n case 'load':\n this.handleLoad(e);\n break;\n\n case 'reload':\n case 'replace':\n this.handleReplace(e);\n break;\n\n default:\n this.handleDefault(e);\n break;\n }\n }\n\n public handlePreload(\n e: LoadEvent\n ) {\n const handler = () => {\n const { pathname } = new URL(e.destination.url);\n const {\n child,\n matchInfo = null,\n } = this.screenChildFromPathname(pathname) ?? {};\n if (!child) return Promise.resolve();\n const { navigation } = this;\n const { signal } = e;\n const { path } = child.props;\n\n const { transition } = e;\n return new Promise<void>(resolve => {\n this.setState({ transition }, async () => {\n const historyEntryState = Screen.historyEntryStateFromEntry(\n new HistoryEntry(\n historyEntryFromDestination(e.destination),\n this.id,\n LAST_INDEX\n ),\n matchInfo\n );\n await Promise.all([\n this.preloadScreen(child),\n child.props.config?.onLoad?.({\n navigation,\n signal,\n preloading: true,\n route: {\n focused: false,\n path,\n resolvedPathname: pathname,\n config: {\n ...this.props.config?.screenConfig,\n ...child.props.config,\n ...historyEntryState.config,\n },\n params: {\n ...child.props.defaultParams,\n ...matchInfo?.params,\n ...historyEntryState.params,\n },\n },\n }),\n ]);\n this.setState({ transition: null }, resolve);\n });\n });\n };\n\n e.intercept({ handler });\n }\n\n private handleLoad(e: LoadEvent) {\n const handler = () => {\n const fromKey = e.transition?.from?.key ?? null;\n const destinationKey = e.destination.key;\n const transition = e.transition;\n const screenStack: RouterState['screenStack'] = [];\n const entries = this.navigation.entries;\n entries.forEach((entry) => {\n if (!entry.url) return null;\n const screen = this.cloneScreenChildFromPathname(\n entry.url.pathname,\n entry.key\n );\n if (!screen) return null;\n screenStack.push(screen);\n });\n\n return new Promise<void>((resolve, reject) =>\n startTransition(() => {\n this.setState(\n { screenStack, fromKey, transition, destinationKey },\n async () => {\n const { initialPathname } = this.props.config ?? {};\n const [firstEntry] = entries;\n if (\n initialPathname\n && entries.length === SINGLE_ELEMENT_LENGTH\n && firstEntry.url\n && !matchRoute(\n initialPathname,\n firstEntry.url.pathname,\n this.baseURLPattern.pathname\n )\n ) {\n const transitionFinished =\n window.navigation.transition?.finished ?? Promise.resolve();\n transitionFinished.then(() => {\n this.navigation.replace(initialPathname).finished.then(() => {\n const state =\n (e.destination.getState() as HistoryEntryState) ?? {};\n this.navigation.push(e.destination.url, state);\n });\n });\n return resolve();\n }\n const signal = e.signal;\n if (this.navigation.current?.key === undefined)\n reject(new Error('Current key is undefined'));\n\n const currentScreen = this.getScreenRefByKey(\n this.navigation.current.key\n );\n await this.dispatchLifecycleHandlers(\n currentScreen,\n null,\n signal\n ).catch(reject);\n this.setState(\n { destinationKey: null, fromKey: null, transition: null },\n resolve\n );\n }\n );\n })\n );\n };\n\n e.intercept({ handler });\n }\n\n private handleReplace(e: NavigateEvent) {\n const screenStack = this.state.screenStack;\n const destination = e.destination;\n const destinationPathname = new URL(destination.url).pathname;\n const destinationKey =\n window.navigation.currentEntry?.key ?? destination.key;\n const destinationScreen = this.cloneScreenChildFromPathname(\n destinationPathname,\n destinationKey\n );\n if (!destinationScreen) return e.preventDefault();\n const handler = () => {\n const transition = this.state.transition ?? window.navigation.transition;\n const fromKey = transition?.from?.key ?? null;\n const currentIndex = screenStack.findIndex(\n (screen) => screen.key === this.navigation.current?.key\n );\n screenStack.splice(\n currentIndex,\n SINGLE_ELEMENT_LENGTH,\n destinationScreen\n );\n\n return new Promise<void>((resolve, reject) =>\n startTransition(() => {\n this.setState(\n { destinationKey, fromKey, transition, screenStack },\n async () => {\n const signal = e.signal;\n const incomingScreen = this.getScreenRefByKey(\n String(destinationKey)\n );\n const pendingLifecycleHandlers = this.dispatchLifecycleHandlers(\n incomingScreen,\n null,\n signal\n ).catch(reject);\n await pendingLifecycleHandlers;\n this.setState(\n { destinationKey: null, fromKey: null, transition: null },\n resolve\n );\n }\n );\n })\n );\n };\n\n e.intercept({ handler });\n }\n\n private handleDefault(e: NavigateEvent) {\n const screenStack = this.state.screenStack;\n const destination = e.destination;\n const destinationPathname = new URL(destination.url).pathname;\n if (!this.screenChildFromPathname(destinationPathname))\n return e.preventDefault();\n const handler = () => {\n if (isRollback(e.info)) return Promise.resolve();\n const transition = window.navigation.transition;\n let fromIndex = screenStack.findIndex(\n (screen) => screen.key === transition?.from.key\n );\n // if navigating from a nested screen the first lookup won't work since entries are scoped\n if (fromIndex === LAST_INDEX && e.navigationType === 'traverse') {\n fromIndex = screenStack.findIndex((screen) => {\n if (!transition?.from.url) return false;\n return matchRoute(\n screen.props.path,\n new URL(transition.from.url).pathname,\n this.baseURLPattern.pathname,\n screen.props.caseSensitive\n );\n });\n }\n const fromKey =\n (screenStack[fromIndex]?.key || transition?.from.key) ?? null;\n const destinationIndex = screenStack.findIndex(\n (screen) => screen.key === e.destination.key\n );\n const destinationKey =\n (screenStack[destinationIndex]?.key\n || window.navigation.currentEntry?.key)\n ?? null;\n if (e.navigationType === 'push') {\n const destinationPathname = new URL(destination.url).pathname;\n const destinationScreen = this.cloneScreenChildFromPathname(\n destinationPathname,\n destinationKey\n );\n if (!destinationScreen) return Promise.resolve();\n screenStack.splice(\n fromIndex + SINGLE_ELEMENT_LENGTH,\n Infinity, // Remove all screens after current\n destinationScreen\n );\n }\n\n const controller = new AbortController();\n return new Promise<void>((resolve, reject) =>\n startTransition(() => {\n this.setState(\n { controller, destinationKey, fromKey, transition, screenStack },\n async () => {\n controller.signal.onabort = reject;\n const signal = e.signal;\n const outgoingScreen = this.getScreenRefByKey(String(fromKey));\n const incomingScreen = this.getScreenRefByKey(\n String(destinationKey)\n );\n const pendingLifecycleHandlers = this.dispatchLifecycleHandlers(\n incomingScreen,\n outgoingScreen,\n signal\n ).catch(reject);\n const animation = this.screenTransition(\n incomingScreen,\n outgoingScreen\n );\n animation?.updatePlaybackRate(DEFAULT_PLAYBACK_RATE);\n animation?.finished.catch(reject);\n await pendingLifecycleHandlers;\n this.setState(\n {\n destinationKey: null,\n fromKey: null,\n transition: null,\n controller: null,\n },\n resolve\n );\n }\n );\n })\n );\n };\n\n let commit;\n if (isGesture(e.info)) {\n commit = 'after-transition';\n this.addEventListener('gesture-end', () => e.commit?.(), { once: true });\n this.addEventListener('gesture-cancel', this.onGestureCancel, {\n once: true,\n });\n } else {\n commit = 'immediate';\n }\n const options = { handler, commit };\n e.intercept(options);\n }\n\n private async dispatchLifecycleHandlers(\n incomingScreen: React.RefObject<Screen> | null,\n outgoingScreen: React.RefObject<Screen> | null,\n signal: AbortSignal\n ) {\n let animationStarted = false;\n this.addEventListener(\n 'routertransitionstart',\n () => (animationStarted = true),\n { once: true }\n );\n\n await Promise.all([\n outgoingScreen?.current?.onExit(signal),\n incomingScreen?.current?.onEnter(signal),\n incomingScreen?.current?.load(signal),\n ]);\n\n if (animationStarted)\n await new Promise((resolve) =>\n this.addEventListener('routertransitionend', resolve, { once: true })\n );\n\n // if gesture navigation cancelled then exit here\n if (this.state.controller?.signal.aborted) return;\n\n await Promise.all([\n outgoingScreen?.current\n ?.onExited(signal)\n .then(() => outgoingScreen.current?.blur()),\n incomingScreen?.current\n ?.onEntered(signal)\n .then(() => incomingScreen.current?.focus()),\n ]);\n }\n\n private screenTransition(\n incomingScreen: React.RefObject<Screen> | null,\n outgoingScreen: React.RefObject<Screen> | null\n ) {\n const { backNavigating } = this;\n const screenTransitionLayer = this.screenTransitionLayer.current;\n if (\n screenTransitionLayer\n && incomingScreen\n && outgoingScreen\n ) {\n screenTransitionLayer.direction = backNavigating\n ? 'reverse'\n : 'normal';\n if (incomingScreen.current?.transitionProvider.current) {\n incomingScreen.current.transitionProvider.current.exiting = false;\n }\n if (outgoingScreen.current?.transitionProvider.current) {\n outgoingScreen.current.transitionProvider.current.exiting = true;\n }\n const sharedElementTransitionLayer = screenTransitionLayer\n .sharedElementTransitionLayer\n .current;\n if (\n sharedElementTransitionLayer\n ) {\n sharedElementTransitionLayer.outgoingScreen = outgoingScreen;\n sharedElementTransitionLayer.incomingScreen = incomingScreen;\n }\n const topScreenIndex = this.screens.findIndex(\n (screen) =>\n screen.ref === (backNavigating ? outgoingScreen : incomingScreen)\n );\n screenTransitionLayer.screens = this.screens\n .map((screen, index) => {\n // normalise indices making incoming screen index 1 and preceding screens index 0...-n\n index = index - topScreenIndex + SINGLE_ELEMENT_LENGTH;\n if (\n isRefObject(screen.ref)\n && screen.ref.current?.transitionProvider.current\n ) {\n screen.ref.current.transitionProvider.current.index = index;\n return screen.ref;\n }\n return null;\n })\n .filter(isRefObject);\n\n return screenTransitionLayer.transition();\n }\n }\n\n public render() {\n return (\n <GestureRegion.div style={{ display: 'contents' }}>\n {super.render()}\n </GestureRegion.div>\n );\n }\n}\n","import {\n PlainObject,\n useNavigationBase,\n useParamsBase,\n useRouteBase,\n useRouterBase\n} from '@react-motion-router/core';\nimport { Navigation } from '../Navigation';\nimport { Router } from '../Router';\nimport { RouteProp } from './types';\nimport { RefObject, useDebugValue, useEffect } from 'react';\n\nexport function useNavigation() {\n useDebugValue('Stack.Navigation');\n return useNavigationBase<Navigation>();\n}\n\nexport function useRouter() {\n useDebugValue('Stack.Router');\n return useRouterBase<Router>();\n}\n\nexport function useRoute<T extends PlainObject = PlainObject>() {\n useDebugValue('Stack.Route');\n return useRouteBase<RouteProp<T>>();\n}\n\nexport function useParams<K extends string, S>(\n key: K, initialParams: S | (() => S)\n) {\n useDebugValue('Stack.Params');\n return useParamsBase(key, initialParams);\n}","import {\n PlainObject,\n Anchor as AnchorBase,\n AnchorProps as AnchorBaseProps\n} from '@react-motion-router/core';\nimport { useEffect, useRef, useCallback, RefObject } from 'react';\nimport { useNavigation } from './common/hooks';\nimport { searchParamsFromObject } from './common/utils';\nimport { DEFAULT_PRELOAD_FORCE_THRESHOLD } from './common/constants';\nimport { ScreenConfig } from './Screen';\n\ninterface OnSightPreloadBehaviour extends UseIntersectionOptions {\n type: 'onsight';\n}\n\ninterface OnHoverPreloadBehaviour {\n type: 'onhover';\n forceThreshold?: number;\n}\n\ninterface AnchorProps extends AnchorBaseProps {\n params?: PlainObject<string | boolean | number>;\n /**\n * Will override params object if supplied.\n * Used to control the search params that get passed to the href attribute.\n */\n searchParams?: PlainObject<string | boolean | number>;\n config?: ScreenConfig;\n preload?: boolean;\n preloadBehaviour?:\n | OnSightPreloadBehaviour\n | OnHoverPreloadBehaviour\n | { type: 'force' };\n}\n\ninterface UseIntersectionOptions {\n root?: Element | null;\n rootMargin?: string;\n threshold?: number | number[];\n}\nfunction useIntersection<T extends HTMLElement>(\n targetRef: RefObject<T | null>,\n callback: (entry: IntersectionObserverEntry) => void,\n options: UseIntersectionOptions = {}\n) {\n const observerCallback = useCallback(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n callback(entry);\n }\n });\n },\n [callback]\n );\n\n useEffect(() => {\n const observer = new IntersectionObserver(observerCallback, options);\n const target = targetRef.current;\n\n if (target) {\n observer.observe(target);\n }\n\n return () => {\n if (target) {\n observer.unobserve(target);\n }\n };\n }, [observerCallback, targetRef, options]);\n\n return targetRef;\n}\n\ntype UseHoverOptions = {\n /** Threshold for touch pressure to count as \"hover\" (0 to 1 range) */\n forceThreshold?: number;\n};\n\ntype UseHoverCallback = () => void;\nfunction useHover<T extends HTMLElement>(\n targetRef: RefObject<T | null>,\n callback: UseHoverCallback,\n { forceThreshold = DEFAULT_PRELOAD_FORCE_THRESHOLD }: UseHoverOptions = {}\n) {\n const handleMouseEnter = useCallback(() => callback(), [callback]);\n\n const handleTouchStart = useCallback((event: TouchEvent) => {\n const touch = event.touches[0];\n if (touch && touch.force >= forceThreshold) {\n callback();\n }\n }, [forceThreshold, callback]);\n\n useEffect(() => {\n const target = targetRef.current;\n target?.addEventListener('mouseenter', handleMouseEnter);\n\n return () => {\n return target?.removeEventListener('mouseenter', handleMouseEnter);\n };\n });\n useEffect(() => {\n const target = targetRef.current;\n target?.addEventListener('touchstart', handleTouchStart);\n\n return () => {\n return target?.removeEventListener('touchstart', handleTouchStart);\n };\n });\n\n return targetRef;\n}\n\nexport function Anchor({\n preload,\n params,\n searchParams = params,\n config,\n preloadBehaviour = {\n type: 'onsight',\n },\n children,\n ...aProps\n}: AnchorProps) {\n const navigation = useNavigation();\n const isOnSightPreload = preloadBehaviour?.type === 'onsight' && preload;\n const isOnHoverPreload = preloadBehaviour?.type === 'onhover' && preload;\n const isForcePreload = preloadBehaviour?.type === 'force' && preload;\n const ref = useRef<HTMLAnchorElement>(null);\n\n /// Intersection preload behaviour\n useIntersection<HTMLAnchorElement>(\n ref,\n (entry) => {\n if (\n !isOnSightPreload\n || !entry.isIntersecting\n || !(entry.target instanceof HTMLAnchorElement)\n ) return;\n navigation.preload(entry.target.href, { params, config });\n },\n isOnSightPreload ? preloadBehaviour : {}\n );\n /// Intersection preload behaviour\n\n /// Hover preload behaviour\n useHover<HTMLAnchorElement>(\n ref,\n () => {\n if (\n !isOnHoverPreload\n || !ref.current\n ) return;\n navigation.preload(ref.current.href, { params, config });\n },\n isOnHoverPreload ? preloadBehaviour : {}\n );\n /// Hover preload behaviour\n\n /// Force preload behaviour\n useEffect(() => {\n if (\n !isForcePreload\n || !ref.current\n ) return;\n navigation.preload(ref.current.href, { params, config });\n }, [preload, navigation, config, isForcePreload, params]);\n /// Force preload behaviour\n\n const routerId = navigation?.routerId;\n const search = searchParams\n ? searchParamsFromObject(searchParams)\n : undefined;\n\n return (\n <AnchorBase\n {...aProps}\n data-router-id={routerId}\n ref={ref}\n search={search}\n navigateState={{\n config,\n params,\n }}\n >\n {children}\n </AnchorBase>\n );\n}\n","/* eslint-disable no-magic-numbers */\n\nexport const SlideInFromRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const iOSSlideInFromRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const SlideOutToLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(-50vw)',\n },\n];\n\nexport const iOSSlideOutToLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(calc(100vw * -0.3))',\n },\n];\n\nexport const SlideInFromLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(-100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const iOSSlideInFromLeftKeyframes: Keyframe[] = [\n {\n transform: 'translateX(-100vw)',\n },\n {\n transform: 'translateX(0vw)',\n },\n];\n\nexport const SlideOutToRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(50vw)',\n },\n];\n\nexport const iOSSlideOutToRightKeyframes: Keyframe[] = [\n {\n transform: 'translateX(0vw)',\n },\n {\n transform: 'translateX(calc(100vw * 0.3))',\n },\n];\n\nexport const SlideInFromBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const iOSSlideInFromBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const SlideOutToTopKeyframes: Keyframe[] = [\n {\n transform: 'translateY(0vh)',\n },\n {\n transform: 'translateY(-50vh)',\n },\n];\n\nexport const SlideInFromTopKeyframes: Keyframe[] = [\n {\n transform: 'translateY(-100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const SlideOutToBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(0vh)',\n },\n {\n transform: 'translateY(50vh)',\n },\n];\n\nexport const ZoomInKeyframes: Keyframe[] = [\n {\n transform: 'scale(0.85)',\n opacity: 0,\n },\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n];\n\nexport const ZoomOutKeyframes: Keyframe[] = [\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n {\n transform: 'scale(1.15)',\n opacity: 0,\n },\n];\n\nexport const FadeInKeyframes: Keyframe[] = [\n {\n opacity: 0,\n },\n {\n opacity: 1,\n },\n];\n\nexport const FadeOutKeyframes: Keyframe[] = [\n {\n opacity: 1,\n },\n {\n opacity: 0,\n },\n];\n\nexport const androidFadeInFromBottomKeyframes: Keyframe[] = [\n {\n opacity: 0,\n transform: 'translateY(calc(100vh * 0.08))',\n },\n {\n opacity: 0.25,\n offset: 0.5,\n },\n {\n opacity: 0.7,\n offset: 0.9,\n },\n {\n opacity: 1,\n transform: 'translateY(0vh)',\n },\n];\n\nexport const androidFadeInFromRightKeyframes: Keyframe[] = [\n {\n opacity: 0,\n transform: 'translateY(96vw)',\n },\n {\n opacity: 1,\n transform: 'translateY(0vw)',\n },\n];\n\nexport const androidFadeOutToLeftKeyframes: Keyframe[] = [\n {\n opacity: 0,\n transform: 'translateY(0vw)',\n },\n {\n opacity: 1,\n transform: 'translateY(-96vw)',\n },\n];\n\nexport const androidRevealFromBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(100vh)',\n },\n {\n transform: 'translateY(0vh)',\n },\n];\n\nexport const androidConcealToBottomKeyframes: Keyframe[] = [\n {\n transform: 'translateY(0vh)',\n },\n {\n transform: 'translateY(-2vh)',\n },\n];\n\nexport const androidScaleFromCentreKeyframes: Keyframe[] = [\n {\n transform: 'scale(0.85)',\n opacity: 0,\n },\n {\n opacity: 0,\n offset: 0.75,\n },\n {\n opacity: 1,\n offset: 0.875,\n },\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n];\n\nexport const androidScaleToCentreKeyframes: Keyframe[] = [\n {\n transform: 'scale(1)',\n opacity: 1,\n },\n {\n opacity: 1,\n offset: 0.0825,\n },\n {\n opacity: 1,\n offset: 0.2075,\n },\n {\n transform: 'scale(1.075)',\n opacity: 0,\n },\n];\n\nexport const androidFadeInFromBottomSheetKeyframes: Keyframe[] = [\n {\n transform: 'translateY(calc(100vh * 0.8))',\n opacity: 0,\n },\n {\n transform: 'translateY(0vh)',\n opacity: 1,\n },\n];","/* eslint-disable no-magic-numbers */\nimport { easingToLinear, springToLinear } from 'web-animations-extension';\n\nfunction easingOut(easing: (t: number) => number): (t: number) => number {\n return t => 1 - easing(1 - t);\n}\n\nfunction easingPoly(n: number): (t: number) => number {\n return (t: number) => Math.pow(t, n);\n}\n\nexport const iOSKeyframeOptions: KeyframeEffectOptions = {\n ...springToLinear({\n mass: 3,\n stiffness: 1000,\n damping: 500,\n velocity: 0,\n steps: 200,\n }),\n};\n\nexport const androidFadeInFromBottomOptions: KeyframeAnimationOptions = {\n duration: 350,\n easing: easingToLinear(easingOut(easingPoly(5))),\n};\n\nexport const androidFadeOutToBottomOptions: KeyframeAnimationOptions = {\n duration: 150,\n easing: 'linear',\n};\n\nexport const androidRevealFromBottomOptions: KeyframeAnimationOptions = {\n duration: 425,\n easing: 'cubic-bezier(0.35, 0.45, 0, 1)',\n};\n\nexport const androidScaleFromCentreOptions: KeyframeAnimationOptions = {\n duration: 400,\n easing: 'cubic-bezier(0.35, 0.45, 0, 1)',\n};\n\nexport const androidBottomSheetSlideInOptions: KeyframeAnimationOptions = {\n duration: 250,\n easing: easingToLinear(t => Math.cos((t + 1) * Math.PI) / 2.0 + 0.5),\n};\n\nexport const androidBottomSheetSlideOutOptions: KeyframeAnimationOptions = {\n duration: 200,\n easing: easingToLinear(t => (t === 1.0 ? 1 : Math.pow(t, 2))),\n};","import {\n AnimationEffectFactoryProps,\n FIRST_INDEX\n} from '@react-motion-router/core';\nimport {\n androidBottomSheetSlideInOptions,\n androidBottomSheetSlideOutOptions,\n androidFadeInFromBottomOptions,\n androidFadeOutToBottomOptions,\n androidRevealFromBottomOptions,\n androidScaleFromCentreOptions,\n iOSKeyframeOptions\n} from './keyframe-options-presets';\nimport {\n androidConcealToBottomKeyframes,\n androidFadeInFromBottomKeyframes,\n androidFadeInFromBottomSheetKeyframes,\n androidFadeInFromRightKeyframes,\n androidFadeOutToLeftKeyframes,\n androidRevealFromBottomKeyframes,\n androidScaleFromCentreKeyframes,\n androidScaleToCentreKeyframes,\n iOSSlideInFromBottomKeyframes,\n iOSSlideInFromLeftKeyframes,\n iOSSlideInFromRightKeyframes,\n iOSSlideOutToLeftKeyframes,\n iOSSlideOutToRightKeyframes\n} from './keyframe-presets';\n\nexport function iOSSlideInFromRight(\n { ref, direction, playbackRate, index }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n iOSSlideOutToLeftKeyframes,\n iOSSlideInFromRightKeyframes,\n ];\n\n let keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...iOSKeyframeOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function iOSSlideInFromLeft(\n { ref, direction, playbackRate, index }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n iOSSlideOutToRightKeyframes,\n iOSSlideInFromLeftKeyframes,\n ];\n\n let keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...iOSKeyframeOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function iOSSlideInFromBottom(\n { ref, direction, playbackRate }: AnimationEffectFactoryProps\n) {\n let keyframes = iOSSlideInFromBottomKeyframes;\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...iOSKeyframeOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidFadeInFromBottom(\n { ref, direction, playbackRate }: AnimationEffectFactoryProps\n) {\n let keyframes = androidFadeInFromBottomKeyframes;\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...androidFadeInFromBottomOptions,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidFadeInFromBottomSheet(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n let keyframes = androidFadeInFromBottomSheetKeyframes;\n let timing;\n if (index === FIRST_INDEX)\n timing = androidBottomSheetSlideOutOptions;\n else\n timing = androidBottomSheetSlideInOptions;\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...timing,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidRevealFromBottom(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n androidConcealToBottomKeyframes,\n androidRevealFromBottomKeyframes,\n ];\n\n const keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n direction,\n playbackRate,\n fill: 'forwards' as const,\n ...androidRevealFromBottomOptions,\n };\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidFadeInFromRight(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n androidFadeOutToLeftKeyframes,\n androidFadeInFromRightKeyframes,\n ];\n let timing;\n if (index === FIRST_INDEX)\n timing = androidFadeOutToBottomOptions;\n else\n timing = androidFadeInFromBottomOptions;\n\n let keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n playbackRate,\n fill: 'forwards' as const,\n ...timing,\n };\n\n if (direction === 'reverse')\n keyframes = keyframes.toReversed();\n\n return new KeyframeEffect(ref, keyframes, options);\n}\n\nexport function androidScaleFromCentre(\n { ref, direction, index, playbackRate }: AnimationEffectFactoryProps\n) {\n const keyframesPresets = [\n androidScaleToCentreKeyframes,\n androidScaleFromCentreKeyframes,\n ];\n\n const keyframes = keyframesPresets[index];\n const options: KeyframeEffectOptions = {\n direction,\n playbackRate,\n fill: 'forwards' as const,\n ...androidScaleFromCentreOptions,\n };\n\n return new KeyframeEffect(ref, keyframes, options);\n}"],"names":["GestureEvent_1","GestureEventTypeEnum","GestureEvent","type","touchEvent","__importDefault","this","mod","LongPressEvent_1","require$$0","LongPressEvent","duration","TapEvent_1","TapEvent","DoubleTapEvent_1","DoubleTapEvent","SwipeEvent_1","SwipeLifecycleStateEnum","SwipeEventBase","swipeData","state","eventType","SwipeEvent","SwipeStartEvent","SwipeEndEvent","PanEvent_1","PanLifecycleStateEnum","PanEventBase","panData","PanEvent","PanStartEvent","PanEndEvent","PinchEvent_1","PinchLifecycleStateEnum","PinchEventBase","pinchData","PinchEvent","PinchStartEvent","PinchEndEvent","RotateEvent_1","RotateLifecycleStateEnum","RotateEventBase","rotationData","RotateEvent","RotateStartEvent","RotateEndEvent","utils","assert","condition","message","Vec2","_x","_y","vector","closest","needle","haystack","a","b","a_diff","b_diff","__createBinding","o","m","k","k2","__setModuleDefault","v","__importStar","result","exports","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","utils_1","require$$8","CartesianDirectionEnum","GestureProvider","target","touchEnd","swipeEndEvent","panEndEvent","pinchEndEvent","rotateEndEvent","gestureEvent","touchStart","minPointers","longPressDuration","touchDuration","longPressEvent","originPointerPrimary","originPointerSecondary","touchMove","currentPointerPrimary","currentPointerSecondary","distance","scaleFactor","pinchEvent","pinchStartEvent","rotationAngle","rotateEvent","rotateStartEvent","origin","dxDy","length","normalised","angle","dt","velocity","swipeEvent","swipeStartEvent","panEvent","panStartEvent","numberOfTaps","maxTapDelay","doubleTapEvent","tapEvent","touchCancel","NavigateEvent","routerId","route","props","signal","committed","transition","BackEvent","ForwardEvent","GestureStartEvent","source","GestureEndEvent","GestureCancelEvent","HistoryEntry","#nativeEntry","nativeEntry","index","handler","listener","options","event","Navigation","NavigationBase","config","key","fromIndex","destinationIndex","entry","controller","history","url","nestedPathPatterns","pattern","nestedScopePathPattern","lastMatchedIndex","LAST_INDEX","terminated","resolvedBaseURL","resolveBaseURLFromPattern","nestedBaseURLPattern","matchRoute","caseSensitive","globalCurrentIndex","firstEntryGlobalIndex","FIRST_INDEX","lastEntryGlobalIndex","SINGLE_ELEMENT_LENGTH","scopedEntries","globalEntry","searchParamsToObject","searchParams","searchParamsFromObject","params","isGesture","info","isRollback","deepEquals","obj1","obj2","keys1","keys2","isWithinGestureInset","direction","x","y","clientRect","gestureAreaWidth","Screen","ScreenBase","#historyEntry","router","id","historyEntry","matchInfo","queryParams","pathParams","newParams","newConfig","unsafe","setParams","setConfig","path","focused","resolvedPathname","newState","prevState","e","navigation","transitionProviderRef","onClickOutside","isRefObject","value","directions","isSupportedDirection","supported","isHorizontalDirection","DEFAULT_GESTURE_CONFIG","DEFAULT_PRELOAD_FORCE_THRESHOLD","DEFAULT_PLAYBACK_RATE","DEFAULT_UA_GESTURE_AREA_WIDTH","WithActivationDetection","rect","createGestureRegion","tag","forwardedRef","gestureBehaviour","uaGestureAreaWidth","ref","React","useContext","RoutePropContext","touch","jsx","GestureRegion","Router","RouterBase","#committed","context","gestureDirection","gestureDisabled","gestureHysteresis","gestureMinFlingVelocity","_","screen","nextProps","nextState","PromiseWrapper","error","axis","rangeStart","rangeEnd","GestureTimeline","gesture","progress","playbackRate","hysteresisReached","gestureCancelled","screenStack","currentScreenRef","nextScreenRef","pathname","child","cloneAndInject","createRef","baseURLPattern","LoadEvent","resolve","historyEntryState","historyEntryFromDestination","fromKey","destinationKey","entries","reject","startTransition","initialPathname","firstEntry","currentScreen","destination","destinationPathname","destinationScreen","currentIndex","incomingScreen","outgoingScreen","pendingLifecycleHandlers","animation","commit","animationStarted","backNavigating","screenTransitionLayer","sharedElementTransitionLayer","topScreenIndex","useNavigation","useDebugValue","useNavigationBase","useRouter","useRouterBase","useRoute","useRouteBase","useParams","initialParams","useParamsBase","useIntersection","targetRef","callback","observerCallback","useCallback","useEffect","observer","useHover","forceThreshold","handleMouseEnter","handleTouchStart","Anchor","preload","preloadBehaviour","children","aProps","isOnSightPreload","isOnHoverPreload","isForcePreload","useRef","search","AnchorBase","SlideInFromRightKeyframes","iOSSlideInFromRightKeyframes","SlideOutToLeftKeyframes","iOSSlideOutToLeftKeyframes","SlideInFromLeftKeyframes","iOSSlideInFromLeftKeyframes","SlideOutToRightKeyframes","iOSSlideOutToRightKeyframes","SlideInFromBottomKeyframes","iOSSlideInFromBottomKeyframes","SlideOutToTopKeyframes","SlideInFromTopKeyframes","SlideOutToBottomKeyframes","ZoomInKeyframes","ZoomOutKeyframes","FadeInKeyframes","FadeOutKeyframes","androidFadeInFromBottomKeyframes","androidFadeInFromRightKeyframes","androidFadeOutToLeftKeyframes","androidRevealFromBottomKeyframes","androidConcealToBottomKeyframes","androidScaleFromCentreKeyframes","androidScaleToCentreKeyframes","androidFadeInFromBottomSheetKeyframes","easingOut","easing","easingPoly","iOSKeyframeOptions","springToLinear","androidFadeInFromBottomOptions","easingToLinear","androidFadeOutToBottomOptions","androidRevealFromBottomOptions","androidScaleFromCentreOptions","androidBottomSheetSlideInOptions","t","androidBottomSheetSlideOutOptions","iOSSlideInFromRight","keyframes","iOSSlideInFromLeft","iOSSlideInFromBottom","androidFadeInFromBottom","androidFadeInFromBottomSheet","timing","androidRevealFromBottom","androidFadeInFromRight","keyframesPresets","androidScaleFromCentre"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}