@multiplayer-app/session-recorder-react-native 1.0.1-beta.1 → 1.0.1-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/REACT_NATIVE_SETUP.md +91 -0
- package/android/build.gradle +72 -53
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/android/gradle.properties +4 -4
- package/android/gradlew +249 -0
- package/android/gradlew.bat +92 -0
- package/dist/native/SessionRecorderNative.d.ts +27 -0
- package/dist/native/SessionRecorderNative.js +1 -1
- package/dist/native/SessionRecorderNative.js.map +1 -1
- package/dist/native/index.d.ts +1 -2
- package/dist/native/index.js +1 -1
- package/dist/native/index.js.map +1 -1
- package/dist/recorder/gestureRecorder.js +1 -1
- package/dist/recorder/gestureRecorder.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/ios/GestureTargetFinder.swift +50 -0
- package/ios/SessionRecorderNative.m +16 -1
- package/ios/SessionRecorderNative.swift +256 -1
- package/ios/SessionRecorderNativeSpec.swift +55 -0
- package/package.json +18 -6
- package/react-native.config.js +13 -0
- package/ios/GestureRecorderNative.m +0 -21
- package/ios/GestureRecorderNative.swift +0 -316
- package/turbo.json +0 -41
package/dist/native/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"SessionRecorderNative",{enumerable:true,get:function get(){return _SessionRecorderNative["default"];}});Object.defineProperty(exports,"gestureEventEmitter",{enumerable:true,get:function get(){return _SessionRecorderNative.gestureEventEmitter;}});var _SessionRecorderNative=_interopRequireWildcard(require("./SessionRecorderNative"));function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,"default":e};if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t2 in e)"default"!==_t2&&{}.hasOwnProperty.call(e,_t2)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t2))&&(i.get||i.set)?o(f,_t2,i):f[_t2]=e[_t2]);return f;})(e,t);}
|
package/dist/native/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,mBAAmB,EAA2B,MAAM,yBAAyB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});exports.GestureRecorder=void 0;var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _reactNative=require("react-native");var _api=require("@opentelemetry/api");var _utils=require("../utils");var _types=require("@rrweb/types");var _GestureRecorderNative=_interopRequireWildcard(require("../native/GestureRecorderNative"));function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,"default":e};if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t2 in e)"default"!==_t2&&{}.hasOwnProperty.call(e,_t2)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t2))&&(i.get||i.set)?o(f,_t2,i):f[_t2]=e[_t2]);return f;})(e,t);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var GestureRecorder=exports.GestureRecorder=function(){function GestureRecorder(){(0,_classCallCheck2["default"])(this,GestureRecorder);this.isRecording=false;this.events=[];this.screenDimensions=null;this.lastGestureTime=0;this.gestureThrottleMs=50;this.lastTouchTime=0;this.touchThrottleMs=100;this.imageNodeId=1;this.panMoveCount=0;}return(0,_createClass2["default"])(GestureRecorder,[{key:"init",value:function init(config,eventRecorder,screenRecorder){this.config=config;this.eventRecorder=eventRecorder;this.screenRecorder=screenRecorder;this._getScreenDimensions();}},{key:"start",value:function start(){var _this=this;_utils.logger.info('GestureRecorder','Native gesture recording started');this.isRecording=true;this.events=[];if(_reactNative.Platform.OS==='web'){_utils.logger.warn('GestureRecorder','Native gesture recording not available on web platform');return;}_GestureRecorderNative["default"].startGestureRecording().then(function(){_utils.logger.info('GestureRecorder','Native gesture recording started successfully');_this._setupGestureEventListener();})["catch"](function(error){_utils.logger.error('GestureRecorder','Failed to start native gesture recording',error);});}},{key:"stop",value:function stop(){this.isRecording=false;this._removeGestureEventListener();if(_reactNative.Platform.OS==='web'){_utils.logger.warn('GestureRecorder','Native gesture recording not available on web platform');return;}_GestureRecorderNative["default"].stopGestureRecording().then(function(){_utils.logger.info('GestureRecorder','Native gesture recording stopped successfully');})["catch"](function(error){_utils.logger.error('GestureRecorder','Failed to stop native gesture recording',error);});}},{key:"_getScreenDimensions",value:function _getScreenDimensions(){try{this.screenDimensions=_reactNative.Dimensions.get('window');}catch(error){this.screenDimensions={width:375,height:667};}}},{key:"_setupGestureEventListener",value:function _setupGestureEventListener(){var _this2=this;if(!_GestureRecorderNative.gestureEventEmitter){_utils.logger.warn('GestureRecorder','Gesture event emitter not available');return;}this.gestureEventListener=_GestureRecorderNative.gestureEventEmitter.addListener('onGestureDetected',function(nativeGesture){_this2._handleNativeGesture(nativeGesture);});}},{key:"_removeGestureEventListener",value:function _removeGestureEventListener(){if(this.gestureEventListener){this.gestureEventListener.remove();this.gestureEventListener=undefined;}}},{key:"_handleNativeGesture",value:function _handleNativeGesture(nativeGesture){var _a,_b;if(!this.isRecording)return;var now=Date.now();if(now-this.lastGestureTime<this.gestureThrottleMs){return;}this.lastGestureTime=now;var gesture={type:nativeGesture.type,timestamp:nativeGesture.timestamp,coordinates:{x:nativeGesture.x,y:nativeGesture.y},target:nativeGesture.target,targetInfo:nativeGesture.targetInfo,metadata:_objectSpread(_objectSpread({},nativeGesture.metadata),{},{screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height})};this.events.push(gesture);this._sendEvent(gesture);this._recordOpenTelemetrySpan(gesture);switch(nativeGesture.type){case'tap':this._handleTapGesture(nativeGesture);break;case'pan_start':this._handlePanStartGesture(nativeGesture);break;case'pan_move':this._handlePanMoveGesture(nativeGesture);break;case'pan_end':this._handlePanEndGesture(nativeGesture);break;case'long_press':this._handleLongPressGesture(nativeGesture);break;case'pinch':this._handlePinchGesture(nativeGesture);break;case'swipe':this._handleSwipeGesture(nativeGesture);break;}}},{key:"_handleTapGesture",value:function _handleTapGesture(nativeGesture){this.recordTouchStart(nativeGesture.x,nativeGesture.y,nativeGesture.target);this.recordTouchEnd(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePanStartGesture",value:function _handlePanStartGesture(nativeGesture){this.recordTouchStart(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePanMoveGesture",value:function _handlePanMoveGesture(nativeGesture){this.recordTouchMove(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePanEndGesture",value:function _handlePanEndGesture(nativeGesture){this.recordTouchEnd(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handleLongPressGesture",value:function _handleLongPressGesture(nativeGesture){this.recordTouchStart(nativeGesture.x,nativeGesture.y,nativeGesture.target);this.recordTouchEnd(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePinchGesture",value:function _handlePinchGesture(nativeGesture){var _a,_b;this.recordPinch(((_a=nativeGesture.metadata)===null||_a===void 0?void 0:_a.scale)||1.0,nativeGesture.target,((_b=nativeGesture.metadata)===null||_b===void 0?void 0:_b.velocity)||0);}},{key:"_handleSwipeGesture",value:function _handleSwipeGesture(nativeGesture){var _a,_b;this.recordSwipe(((_a=nativeGesture.metadata)===null||_a===void 0?void 0:_a.direction)||'unknown',nativeGesture.target,((_b=nativeGesture.metadata)===null||_b===void 0?void 0:_b.velocity)||0);}},{key:"_sendEvent",value:function _sendEvent(event){_utils.logger.debug('GestureRecorder','Gesture event recorded',{type:event.type,target:event.target});}},{key:"_recordOpenTelemetrySpan",value:function _recordOpenTelemetrySpan(event){try{_utils.logger.debug('GestureRecorder','Creating OTEL span for native gesture',{type:event.type,target:event.target,targetInfo:event.targetInfo,hasTargetInfo:!!event.targetInfo});if(event.type==='pan_start'){if(this.currentPanSpan){this.currentPanSpan.setStatus({code:_api.SpanStatusCode.OK});this.currentPanSpan.end();}this.panMoveCount=0;var panSpan=_api.trace.getTracer('@opentelemetry/instrumentation-user-interaction').startSpan('NativeGesture.pan',{startTime:event.timestamp});panSpan.setAttribute('gesture.type','pan');panSpan.setAttribute('gesture.timestamp',event.timestamp);panSpan.setAttribute('gesture.platform','react-native');panSpan.setAttribute('gesture.source','native-module');if(event.coordinates){panSpan.setAttribute('gesture.start.x',event.coordinates.x);panSpan.setAttribute('gesture.start.y',event.coordinates.y);}if(event.target){panSpan.setAttribute('gesture.target',this._truncateText(event.target,50));}var _info=event.targetInfo;if(_info){if(_info.label){var truncatedLabel=this._truncateText(String(_info.label),50);panSpan.setAttribute('gesture.target.label',truncatedLabel);}if(_info.role){panSpan.setAttribute('gesture.target.role',String(_info.role));}if(_info.testId){panSpan.setAttribute('gesture.target.test_id',String(_info.testId));}if(_info.text){var truncatedText=this._truncateText(String(_info.text),50);panSpan.setAttribute('gesture.target.text',truncatedText);}}this.currentPanSpan=panSpan;return;}if(event.type==='pan_move'){if(this.currentPanSpan){this.panMoveCount+=1;this.currentPanSpan.setAttribute('gesture.pan.move_count',this.panMoveCount);if(event.coordinates){this.currentPanSpan.setAttribute('gesture.last.x',event.coordinates.x);this.currentPanSpan.setAttribute('gesture.last.y',event.coordinates.y);}return;}}if(event.type==='pan_end'){if(this.currentPanSpan){if(event.coordinates){this.currentPanSpan.setAttribute('gesture.end.x',event.coordinates.x);this.currentPanSpan.setAttribute('gesture.end.y',event.coordinates.y);}this.currentPanSpan.setStatus({code:_api.SpanStatusCode.OK});this.currentPanSpan.end();this.currentPanSpan=undefined;this.panMoveCount=0;return;}}var span=_api.trace.getTracer('@opentelemetry/instrumentation-user-interaction').startSpan("NativeGesture.".concat(event.type),{startTime:event.timestamp,attributes:{'gesture.type':event.type,'gesture.timestamp':event.timestamp,'gesture.platform':'react-native','gesture.source':'native-module'}});if(event.coordinates){span.setAttribute('gesture.coordinates.x',event.coordinates.x);span.setAttribute('gesture.coordinates.y',event.coordinates.y);if(this.screenDimensions){var relativeX=event.coordinates.x/this.screenDimensions.width;var relativeY=event.coordinates.y/this.screenDimensions.height;span.setAttribute('gesture.coordinates.relative_x',relativeX);span.setAttribute('gesture.coordinates.relative_y',relativeY);}}if(event.target){span.setAttribute('gesture.target',this._truncateText(event.target,100));}var info=event.targetInfo;if(info){if(info.label){var _truncatedLabel=this._truncateText(String(info.label),100);span.setAttribute('gesture.target.label',_truncatedLabel);}if(info.role){span.setAttribute('gesture.target.role',String(info.role));}if(info.testId){span.setAttribute('gesture.target.test_id',String(info.testId));}if(info.text){var _truncatedText=this._truncateText(String(info.text),200);span.setAttribute('gesture.target.text',_truncatedText);}}if(event.metadata){Object.entries(event.metadata).forEach(function(_ref){var _ref2=(0,_slicedToArray2["default"])(_ref,2),key=_ref2[0],value=_ref2[1];span.setAttribute("gesture.metadata.".concat(key),String(value));});}span.setStatus({code:_api.SpanStatusCode.OK});span.end();_utils.logger.debug('GestureRecorder','OTEL span created and ended successfully');}catch(error){_utils.logger.error('GestureRecorder','Failed to record OpenTelemetry span for native gesture',error);}}},{key:"recordTap",value:function recordTap(x,y,target,pressure,timestamp){var _a,_b;var event={type:'tap',timestamp:timestamp||Date.now(),coordinates:{x:x,y:y},target:target,metadata:{pressure:pressure||1.0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordSwipe",value:function recordSwipe(direction,target,velocity,distance){var _a,_b;var event={type:'swipe',timestamp:Date.now(),target:target,metadata:{direction:direction,velocity:velocity||0,distance:distance||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordPinch",value:function recordPinch(scale,target,velocity){var _a,_b;var event={type:'pinch',timestamp:Date.now(),target:target,metadata:{scale:scale,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordPan",value:function recordPan(deltaX,deltaY,target,velocity){var _a,_b;var event={type:'pan',timestamp:Date.now(),target:target,metadata:{deltaX:deltaX,deltaY:deltaY,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordLongPress",value:function recordLongPress(duration,target,pressure){var _a,_b;var event={type:'longPress',timestamp:Date.now(),target:target,metadata:{duration:duration,pressure:pressure||1.0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordDoubleTap",value:function recordDoubleTap(x,y,target){var _a,_b;var event={type:'doubleTap',timestamp:Date.now(),coordinates:{x:x,y:y},target:target,metadata:{screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordRotate",value:function recordRotate(rotation,target,velocity){var _a,_b;var event={type:'rotate',timestamp:Date.now(),target:target,metadata:{rotation:rotation,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordFling",value:function recordFling(direction,velocity,target){var _a,_b;var event={type:'fling',timestamp:Date.now(),target:target,metadata:{direction:direction,velocity:velocity,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordMultiTouch",value:function recordMultiTouch(touchCount,target){var _a,_b;var event={type:'multiTouch',timestamp:Date.now(),target:target,metadata:{touchCount:touchCount,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordScroll",value:function recordScroll(direction,distance,velocity,target){var _a,_b;var event={type:'scroll',timestamp:Date.now(),target:target,metadata:{direction:direction,distance:distance,velocity:velocity,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordZoom",value:function recordZoom(scale,target,velocity){var _a,_b;var event={type:'zoom',timestamp:Date.now(),target:target,metadata:{scale:scale,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordTouchStart",value:function recordTouchStart(x,y,target,pressure){var now=Date.now();if(now-this.lastTouchTime<this.touchThrottleMs){_utils.logger.debug('GestureRecorder',"Touch start throttled (".concat(now-this.lastTouchTime,"ms < ").concat(this.touchThrottleMs,"ms)"));return;}this.lastTouchTime=now;_utils.logger.debug('GestureRecorder','Touch start recorded',{x:x,y:y,target:target,pressure:pressure});this._createMouseInteractionEvent(x,y,_types.MouseInteractions.TouchStart,now);}},{key:"recordTouchMove",value:function recordTouchMove(x,y,target,pressure){var now=Date.now();if(now-this.lastTouchTime<this.touchThrottleMs*2){_utils.logger.debug('GestureRecorder',"Touch move throttled (".concat(now-this.lastTouchTime,"ms < ").concat(this.touchThrottleMs*2,"ms)"));return;}this.lastTouchTime=now;_utils.logger.debug('GestureRecorder','Touch move recorded',{x:x,y:y,target:target,pressure:pressure});this._createMouseMoveEvent(x,y,target);}},{key:"recordTouchEnd",value:function recordTouchEnd(x,y,target,pressure){var _a;var timestamp=Date.now();_utils.logger.debug('GestureRecorder','Touch end recorded',{x:x,y:y,target:target,pressure:pressure,timestamp:timestamp});this.recordTap(x,y,target,pressure,timestamp);this._createMouseInteractionEvent(x,y,_types.MouseInteractions.TouchEnd,timestamp);(_a=this.screenRecorder)===null||_a===void 0?void 0:_a.forceCapture(timestamp);}},{key:"recordTouchCancel",value:function recordTouchCancel(x,y,target){this._createMouseInteractionEvent(x,y,_types.MouseInteractions.TouchCancel);}},{key:"setImageNodeId",value:function setImageNodeId(nodeId){this.imageNodeId=nodeId;}},{key:"_recordEvent",value:function _recordEvent(event){if(!this.isRecording)return;var now=Date.now();if(now-this.lastGestureTime<this.gestureThrottleMs){return;}this.lastGestureTime=now;this.events.push(event);this._sendEvent(event);this._recordOpenTelemetrySpan(event);}},{key:"_createMouseInteractionEvent",value:function _createMouseInteractionEvent(x,y,interactionType,timestamp){var incrementalSnapshotEvent={type:_types.EventType.IncrementalSnapshot,data:{source:_types.IncrementalSource.MouseInteraction,type:interactionType,id:this.imageNodeId,x:x,y:y,pointerType:2},timestamp:timestamp||Date.now()};this.recordEvent(incrementalSnapshotEvent);}},{key:"_createMouseMoveEvent",value:function _createMouseMoveEvent(x,y,target){var incrementalSnapshotEvent={type:_types.EventType.IncrementalSnapshot,data:{source:_types.IncrementalSource.TouchMove,positions:[{x:x,y:y,id:this.imageNodeId,timeOffset:0}]},timestamp:Date.now()};this.recordEvent(incrementalSnapshotEvent);}},{key:"recordEvent",value:function recordEvent(event){if(this.eventRecorder){this.eventRecorder.recordEvent(event);}}},{key:"getEvents",value:function getEvents(){return(0,_toConsumableArray2["default"])(this.events);}},{key:"clearEvents",value:function clearEvents(){this.events=[];}},{key:"getEventStats",value:function getEventStats(){var stats={};this.events.forEach(function(event){stats[event.type]=(stats[event.type]||0)+1;});return stats;}},{key:"setGestureThrottle",value:function setGestureThrottle(throttleMs){this.gestureThrottleMs=throttleMs;}},{key:"isRecordingEnabled",value:function isRecordingEnabled(){return this.isRecording;}},{key:"_truncateText",value:function _truncateText(text){var maxLength=arguments.length>1&&arguments[1]!==undefined?arguments[1]:100;if(!text||text.length<=maxLength){return text;}return text.substring(0,maxLength-3)+'...';}}]);}();
|
|
1
|
+
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.GestureRecorder=void 0;var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _reactNative=require("react-native");var _api=require("@opentelemetry/api");var _utils=require("../utils");var _types=require("@rrweb/types");var _native=require("../native");function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var GestureRecorder=exports.GestureRecorder=function(){function GestureRecorder(){(0,_classCallCheck2["default"])(this,GestureRecorder);this.isRecording=false;this.events=[];this.screenDimensions=null;this.lastGestureTime=0;this.gestureThrottleMs=50;this.lastTouchTime=0;this.touchThrottleMs=100;this.imageNodeId=1;this.panMoveCount=0;}return(0,_createClass2["default"])(GestureRecorder,[{key:"init",value:function init(config,eventRecorder,screenRecorder){this.config=config;this.eventRecorder=eventRecorder;this.screenRecorder=screenRecorder;this._getScreenDimensions();}},{key:"start",value:function start(){var _this=this;_utils.logger.info('GestureRecorder','Native gesture recording started');this.isRecording=true;this.events=[];if(_reactNative.Platform.OS==='web'){_utils.logger.warn('GestureRecorder','Native gesture recording not available on web platform');return;}_native.SessionRecorderNative.startGestureRecording().then(function(){_utils.logger.info('GestureRecorder','Native gesture recording started successfully');_this._setupGestureEventListener();})["catch"](function(error){_utils.logger.error('GestureRecorder','Failed to start native gesture recording',error);});}},{key:"stop",value:function stop(){this.isRecording=false;this._removeGestureEventListener();if(_reactNative.Platform.OS==='web'){_utils.logger.warn('GestureRecorder','Native gesture recording not available on web platform');return;}_native.SessionRecorderNative.stopGestureRecording().then(function(){_utils.logger.info('GestureRecorder','Native gesture recording stopped successfully');})["catch"](function(error){_utils.logger.error('GestureRecorder','Failed to stop native gesture recording',error);});}},{key:"_getScreenDimensions",value:function _getScreenDimensions(){try{this.screenDimensions=_reactNative.Dimensions.get('window');}catch(error){this.screenDimensions={width:375,height:667};}}},{key:"_setupGestureEventListener",value:function _setupGestureEventListener(){var _this2=this;if(!_native.gestureEventEmitter){_utils.logger.warn('GestureRecorder','Gesture event emitter not available');return;}this.gestureEventListener=_native.gestureEventEmitter.addListener('onGestureDetected',function(nativeGesture){_this2._handleNativeGesture(nativeGesture);});}},{key:"_removeGestureEventListener",value:function _removeGestureEventListener(){if(this.gestureEventListener){this.gestureEventListener.remove();this.gestureEventListener=undefined;}}},{key:"_handleNativeGesture",value:function _handleNativeGesture(nativeGesture){var _a,_b;if(!this.isRecording)return;var now=Date.now();if(now-this.lastGestureTime<this.gestureThrottleMs){return;}this.lastGestureTime=now;var gesture={type:nativeGesture.type,timestamp:nativeGesture.timestamp,coordinates:{x:nativeGesture.x,y:nativeGesture.y},target:nativeGesture.target,targetInfo:nativeGesture.targetInfo,metadata:_objectSpread(_objectSpread({},nativeGesture.metadata),{},{screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height})};this.events.push(gesture);this._sendEvent(gesture);this._recordOpenTelemetrySpan(gesture);switch(nativeGesture.type){case'tap':this._handleTapGesture(nativeGesture);break;case'pan_start':this._handlePanStartGesture(nativeGesture);break;case'pan_move':this._handlePanMoveGesture(nativeGesture);break;case'pan_end':this._handlePanEndGesture(nativeGesture);break;case'long_press':this._handleLongPressGesture(nativeGesture);break;case'pinch':this._handlePinchGesture(nativeGesture);break;case'swipe':this._handleSwipeGesture(nativeGesture);break;}}},{key:"_handleTapGesture",value:function _handleTapGesture(nativeGesture){this.recordTouchStart(nativeGesture.x,nativeGesture.y,nativeGesture.target);this.recordTouchEnd(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePanStartGesture",value:function _handlePanStartGesture(nativeGesture){this.recordTouchStart(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePanMoveGesture",value:function _handlePanMoveGesture(nativeGesture){this.recordTouchMove(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePanEndGesture",value:function _handlePanEndGesture(nativeGesture){this.recordTouchEnd(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handleLongPressGesture",value:function _handleLongPressGesture(nativeGesture){this.recordTouchStart(nativeGesture.x,nativeGesture.y,nativeGesture.target);this.recordTouchEnd(nativeGesture.x,nativeGesture.y,nativeGesture.target);}},{key:"_handlePinchGesture",value:function _handlePinchGesture(nativeGesture){var _a,_b;this.recordPinch(((_a=nativeGesture.metadata)===null||_a===void 0?void 0:_a.scale)||1.0,nativeGesture.target,((_b=nativeGesture.metadata)===null||_b===void 0?void 0:_b.velocity)||0);}},{key:"_handleSwipeGesture",value:function _handleSwipeGesture(nativeGesture){var _a,_b;this.recordSwipe(((_a=nativeGesture.metadata)===null||_a===void 0?void 0:_a.direction)||'unknown',nativeGesture.target,((_b=nativeGesture.metadata)===null||_b===void 0?void 0:_b.velocity)||0);}},{key:"_sendEvent",value:function _sendEvent(event){_utils.logger.debug('GestureRecorder','Gesture event recorded',{type:event.type,target:event.target});}},{key:"_recordOpenTelemetrySpan",value:function _recordOpenTelemetrySpan(event){try{_utils.logger.debug('GestureRecorder','Creating OTEL span for native gesture',{type:event.type,target:event.target,targetInfo:event.targetInfo,hasTargetInfo:!!event.targetInfo});if(event.type==='pan_start'){if(this.currentPanSpan){this.currentPanSpan.setStatus({code:_api.SpanStatusCode.OK});this.currentPanSpan.end();}this.panMoveCount=0;var panSpan=_api.trace.getTracer('@opentelemetry/instrumentation-user-interaction').startSpan('NativeGesture.pan',{startTime:event.timestamp});panSpan.setAttribute('gesture.type','pan');panSpan.setAttribute('gesture.timestamp',event.timestamp);panSpan.setAttribute('gesture.platform','react-native');panSpan.setAttribute('gesture.source','native-module');if(event.coordinates){panSpan.setAttribute('gesture.start.x',event.coordinates.x);panSpan.setAttribute('gesture.start.y',event.coordinates.y);}if(event.target){panSpan.setAttribute('gesture.target',this._truncateText(event.target,50));}var _info=event.targetInfo;if(_info){if(_info.label){var truncatedLabel=this._truncateText(String(_info.label),50);panSpan.setAttribute('gesture.target.label',truncatedLabel);}if(_info.role){panSpan.setAttribute('gesture.target.role',String(_info.role));}if(_info.testId){panSpan.setAttribute('gesture.target.test_id',String(_info.testId));}if(_info.text){var truncatedText=this._truncateText(String(_info.text),50);panSpan.setAttribute('gesture.target.text',truncatedText);}}this.currentPanSpan=panSpan;return;}if(event.type==='pan_move'){if(this.currentPanSpan){this.panMoveCount+=1;this.currentPanSpan.setAttribute('gesture.pan.move_count',this.panMoveCount);if(event.coordinates){this.currentPanSpan.setAttribute('gesture.last.x',event.coordinates.x);this.currentPanSpan.setAttribute('gesture.last.y',event.coordinates.y);}return;}}if(event.type==='pan_end'){if(this.currentPanSpan){if(event.coordinates){this.currentPanSpan.setAttribute('gesture.end.x',event.coordinates.x);this.currentPanSpan.setAttribute('gesture.end.y',event.coordinates.y);}this.currentPanSpan.setStatus({code:_api.SpanStatusCode.OK});this.currentPanSpan.end();this.currentPanSpan=undefined;this.panMoveCount=0;return;}}var span=_api.trace.getTracer('@opentelemetry/instrumentation-user-interaction').startSpan("NativeGesture.".concat(event.type),{startTime:event.timestamp,attributes:{'gesture.type':event.type,'gesture.timestamp':event.timestamp,'gesture.platform':'react-native','gesture.source':'native-module'}});if(event.coordinates){span.setAttribute('gesture.coordinates.x',event.coordinates.x);span.setAttribute('gesture.coordinates.y',event.coordinates.y);if(this.screenDimensions){var relativeX=event.coordinates.x/this.screenDimensions.width;var relativeY=event.coordinates.y/this.screenDimensions.height;span.setAttribute('gesture.coordinates.relative_x',relativeX);span.setAttribute('gesture.coordinates.relative_y',relativeY);}}if(event.target){span.setAttribute('gesture.target',this._truncateText(event.target,100));}var info=event.targetInfo;if(info){if(info.label){var _truncatedLabel=this._truncateText(String(info.label),100);span.setAttribute('gesture.target.label',_truncatedLabel);}if(info.role){span.setAttribute('gesture.target.role',String(info.role));}if(info.testId){span.setAttribute('gesture.target.test_id',String(info.testId));}if(info.text){var _truncatedText=this._truncateText(String(info.text),200);span.setAttribute('gesture.target.text',_truncatedText);}}if(event.metadata){Object.entries(event.metadata).forEach(function(_ref){var _ref2=(0,_slicedToArray2["default"])(_ref,2),key=_ref2[0],value=_ref2[1];span.setAttribute("gesture.metadata.".concat(key),String(value));});}span.setStatus({code:_api.SpanStatusCode.OK});span.end();_utils.logger.debug('GestureRecorder','OTEL span created and ended successfully');}catch(error){_utils.logger.error('GestureRecorder','Failed to record OpenTelemetry span for native gesture',error);}}},{key:"recordTap",value:function recordTap(x,y,target,pressure,timestamp){var _a,_b;var event={type:'tap',timestamp:timestamp||Date.now(),coordinates:{x:x,y:y},target:target,metadata:{pressure:pressure||1.0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordSwipe",value:function recordSwipe(direction,target,velocity,distance){var _a,_b;var event={type:'swipe',timestamp:Date.now(),target:target,metadata:{direction:direction,velocity:velocity||0,distance:distance||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordPinch",value:function recordPinch(scale,target,velocity){var _a,_b;var event={type:'pinch',timestamp:Date.now(),target:target,metadata:{scale:scale,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordPan",value:function recordPan(deltaX,deltaY,target,velocity){var _a,_b;var event={type:'pan',timestamp:Date.now(),target:target,metadata:{deltaX:deltaX,deltaY:deltaY,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordLongPress",value:function recordLongPress(duration,target,pressure){var _a,_b;var event={type:'longPress',timestamp:Date.now(),target:target,metadata:{duration:duration,pressure:pressure||1.0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordDoubleTap",value:function recordDoubleTap(x,y,target){var _a,_b;var event={type:'doubleTap',timestamp:Date.now(),coordinates:{x:x,y:y},target:target,metadata:{screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordRotate",value:function recordRotate(rotation,target,velocity){var _a,_b;var event={type:'rotate',timestamp:Date.now(),target:target,metadata:{rotation:rotation,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordFling",value:function recordFling(direction,velocity,target){var _a,_b;var event={type:'fling',timestamp:Date.now(),target:target,metadata:{direction:direction,velocity:velocity,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordMultiTouch",value:function recordMultiTouch(touchCount,target){var _a,_b;var event={type:'multiTouch',timestamp:Date.now(),target:target,metadata:{touchCount:touchCount,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordScroll",value:function recordScroll(direction,distance,velocity,target){var _a,_b;var event={type:'scroll',timestamp:Date.now(),target:target,metadata:{direction:direction,distance:distance,velocity:velocity,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordZoom",value:function recordZoom(scale,target,velocity){var _a,_b;var event={type:'zoom',timestamp:Date.now(),target:target,metadata:{scale:scale,velocity:velocity||0,screenWidth:(_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width,screenHeight:(_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height}};this._recordEvent(event);}},{key:"recordTouchStart",value:function recordTouchStart(x,y,target,pressure){var now=Date.now();if(now-this.lastTouchTime<this.touchThrottleMs){_utils.logger.debug('GestureRecorder',"Touch start throttled (".concat(now-this.lastTouchTime,"ms < ").concat(this.touchThrottleMs,"ms)"));return;}this.lastTouchTime=now;_utils.logger.debug('GestureRecorder','Touch start recorded',{x:x,y:y,target:target,pressure:pressure});this._createMouseInteractionEvent(x,y,_types.MouseInteractions.TouchStart,now);}},{key:"recordTouchMove",value:function recordTouchMove(x,y,target,pressure){var now=Date.now();if(now-this.lastTouchTime<this.touchThrottleMs*2){_utils.logger.debug('GestureRecorder',"Touch move throttled (".concat(now-this.lastTouchTime,"ms < ").concat(this.touchThrottleMs*2,"ms)"));return;}this.lastTouchTime=now;_utils.logger.debug('GestureRecorder','Touch move recorded',{x:x,y:y,target:target,pressure:pressure});this._createMouseMoveEvent(x,y,target);}},{key:"recordTouchEnd",value:function recordTouchEnd(x,y,target,pressure){var _a;var timestamp=Date.now();_utils.logger.debug('GestureRecorder','Touch end recorded',{x:x,y:y,target:target,pressure:pressure,timestamp:timestamp});this.recordTap(x,y,target,pressure,timestamp);this._createMouseInteractionEvent(x,y,_types.MouseInteractions.TouchEnd,timestamp);(_a=this.screenRecorder)===null||_a===void 0?void 0:_a.forceCapture(timestamp);}},{key:"recordTouchCancel",value:function recordTouchCancel(x,y,target){this._createMouseInteractionEvent(x,y,_types.MouseInteractions.TouchCancel);}},{key:"setImageNodeId",value:function setImageNodeId(nodeId){this.imageNodeId=nodeId;}},{key:"_recordEvent",value:function _recordEvent(event){if(!this.isRecording)return;var now=Date.now();if(now-this.lastGestureTime<this.gestureThrottleMs){return;}this.lastGestureTime=now;this.events.push(event);this._sendEvent(event);this._recordOpenTelemetrySpan(event);}},{key:"_createMouseInteractionEvent",value:function _createMouseInteractionEvent(x,y,interactionType,timestamp){var incrementalSnapshotEvent={type:_types.EventType.IncrementalSnapshot,data:{source:_types.IncrementalSource.MouseInteraction,type:interactionType,id:this.imageNodeId,x:x,y:y,pointerType:2},timestamp:timestamp||Date.now()};this.recordEvent(incrementalSnapshotEvent);}},{key:"_createMouseMoveEvent",value:function _createMouseMoveEvent(x,y,target){var incrementalSnapshotEvent={type:_types.EventType.IncrementalSnapshot,data:{source:_types.IncrementalSource.TouchMove,positions:[{x:x,y:y,id:this.imageNodeId,timeOffset:0}]},timestamp:Date.now()};this.recordEvent(incrementalSnapshotEvent);}},{key:"recordEvent",value:function recordEvent(event){if(this.eventRecorder){this.eventRecorder.recordEvent(event);}}},{key:"getEvents",value:function getEvents(){return(0,_toConsumableArray2["default"])(this.events);}},{key:"clearEvents",value:function clearEvents(){this.events=[];}},{key:"getEventStats",value:function getEventStats(){var stats={};this.events.forEach(function(event){stats[event.type]=(stats[event.type]||0)+1;});return stats;}},{key:"setGestureThrottle",value:function setGestureThrottle(throttleMs){this.gestureThrottleMs=throttleMs;}},{key:"isRecordingEnabled",value:function isRecordingEnabled(){return this.isRecording;}},{key:"_truncateText",value:function _truncateText(text){var maxLength=arguments.length>1&&arguments[1]!==undefined?arguments[1]:100;if(!text||text.length<=maxLength){return text;}return text.substring(0,maxLength-3)+'...';}}]);}();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gestureRecorder.js","sourceRoot":"","sources":["../../src/recorder/gestureRecorder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gestureRecorder.js","sourceRoot":"","sources":["../../src/recorder/gestureRecorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAQ,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAiB,SAAS,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAsB,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC1F,iCAAiC;AAGjC,MAAM,OAAO,eAAe;IAA5B;QAEU,gBAAW,GAAG,KAAK,CAAA;QACnB,WAAM,GAAmB,EAAE,CAAA;QAC3B,qBAAgB,GAA6C,IAAI,CAAA;QACjE,oBAAe,GAAW,CAAC,CAAA;QAC3B,sBAAiB,GAAW,EAAE,CAAA,CAAC,kCAAkC;QACjE,kBAAa,GAAW,CAAC,CAAA;QACzB,oBAAe,GAAW,GAAG,CAAA,CAAC,6CAA6C;QAE3E,gBAAW,GAAW,CAAC,CAAA,CAAC,8CAA8C;QAItE,iBAAY,GAAW,CAAC,CAAA;IAgpBlC,CAAC;IA9oBC,IAAI,CAAC,MAAsB,EAAE,aAA6B,EAAE,cAAoB;QAC9E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,oBAAoB,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK;QACH,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAA;QAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAEhB,iCAAiC;QACjC,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,wDAAwD,CAAC,CAAA;YACxF,OAAM;QACR,CAAC;QAED,iCAAiC;QACjC,qBAAqB,CAAC,qBAAqB,EAAE;aAC1C,IAAI,CAAC,GAAG,EAAE;YACT,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAA;YAC/E,IAAI,CAAC,0BAA0B,EAAE,CAAA;QACnC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,0CAA0C,EAAE,KAAK,CAAC,CAAA;QACpF,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI;QACF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,2BAA2B,EAAE,CAAA;QAElC,iCAAiC;QACjC,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,wDAAwD,CAAC,CAAA;YACxF,OAAM;QACR,CAAC;QAED,gCAAgC;QAChC,qBAAqB,CAAC,oBAAoB,EAAE;aACzC,IAAI,CAAC,GAAG,EAAE;YACT,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAA;QACjF,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,yCAAyC,EAAE,KAAK,CAAC,CAAA;QACnF,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sDAAsD;YACtD,IAAI,CAAC,gBAAgB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA,CAAC,mBAAmB;QACzE,CAAC;IACH,CAAC;IAEO,0BAA0B;QAChC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,qCAAqC,CAAC,CAAA;YACrE,OAAM;QACR,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC,WAAW,CACzD,mBAAmB,EACnB,CAAC,aAAiC,EAAE,EAAE;YACpC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;QAC1C,CAAC,CACF,CAAA;IACH,CAAC;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAA;YAClC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;QACvC,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,aAAiC;;QAC5D,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAM;QAE7B,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,GAAG,CAAA;QAE1B,uCAAuC;QACvC,MAAM,OAAO,GAAiB;YAC5B,IAAI,EAAE,aAAa,CAAC,IAAW;YAC/B,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,WAAW,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE;YACvD,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,sCAAsC;YAC5E,QAAQ,EAAE;gBACR,GAAG,aAAa,CAAC,QAAQ;gBACzB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxB,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAA;QAEtC,gCAAgC;QAChC,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,KAAK;gBACR,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAA;gBACrC,MAAK;YACP,KAAK,WAAW;gBACd,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAA;gBAC1C,MAAK;YACP,KAAK,UAAU;gBACb,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAA;gBACzC,MAAK;YACP,KAAK,SAAS;gBACZ,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;gBACxC,MAAK;YACP,KAAK,YAAY;gBACf,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAA;gBAC3C,MAAK;YACP,KAAK,OAAO;gBACV,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAA;gBACvC,MAAK;YACP,KAAK,OAAO;gBACV,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAA;gBACvC,MAAK;QACT,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,aAAiC;QACzD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;QAC7E,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC7E,CAAC;IAEO,sBAAsB,CAAC,aAAiC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC/E,CAAC;IAEO,qBAAqB,CAAC,aAAiC;QAC7D,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9E,CAAC;IAEO,oBAAoB,CAAC,aAAiC;QAC5D,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC7E,CAAC;IAEO,uBAAuB,CAAC,aAAiC;QAC/D,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;QAC7E,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC7E,CAAC;IAEO,mBAAmB,CAAC,aAAiC;;QAC3D,IAAI,CAAC,WAAW,CACd,CAAA,MAAA,aAAa,CAAC,QAAQ,0CAAE,KAAK,KAAI,GAAG,EACpC,aAAa,CAAC,MAAM,EACpB,CAAA,MAAA,aAAa,CAAC,QAAQ,0CAAE,QAAQ,KAAI,CAAC,CACtC,CAAA;IACH,CAAC;IAEO,mBAAmB,CAAC,aAAiC;;QAC3D,IAAI,CAAC,WAAW,CACd,CAAA,MAAA,aAAa,CAAC,QAAQ,0CAAE,SAAS,KAAI,SAAS,EAC9C,aAAa,CAAC,MAAM,EACpB,CAAA,MAAA,aAAa,CAAC,QAAQ,0CAAE,QAAQ,KAAI,CAAC,CACtC,CAAA;IACH,CAAC;IAEO,UAAU,CAAC,KAAmB;QACpC,yCAAyC;QACzC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACvG,CAAC;IAEO,wBAAwB,CAAC,KAAmB;QAClD,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,uCAAuC,EAAE;gBACvE,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU;aAClC,CAAC,CAAA;YACF,gEAAgE;YAChE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,mDAAmD;gBACnD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACxB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAA;oBAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAA;gBAC3B,CAAC;gBACD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;gBACrB,MAAM,OAAO,GAAG,KAAK;qBAClB,SAAS,CAAC,iDAAiD,CAAC;qBAC5D,SAAS,CAAC,mBAAmB,EAAE;oBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAA;gBAEJ,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;gBAC3C,OAAO,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;gBAC1D,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAA;gBACxD,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAA;gBAEvD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtB,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;oBAC5D,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAC9D,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC9E,CAAC;gBACD,sCAAsC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAA;gBAC7B,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;wBACjE,OAAO,CAAC,YAAY,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAA;oBAC9D,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,OAAO,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;oBAChE,CAAC;oBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAChB,OAAO,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;oBACrE,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;wBAC/D,OAAO,CAAC,YAAY,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAA;oBAC5D,CAAC;gBACH,CAAC;gBACD,+CAA+C;gBAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;gBAC7B,OAAM;YACR,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACxB,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA;oBACtB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,wBAAwB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;oBAC7E,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;wBACtB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;wBACvE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;oBACzE,CAAC;oBACD,0CAA0C;oBAC1C,OAAM;gBACR,CAAC;gBACD,gFAAgF;YAClF,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACxB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;wBACtB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;wBACtE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;oBACxE,CAAC;oBACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAA;oBAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAA;oBACzB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;oBAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;oBACrB,OAAM;gBACR,CAAC;gBACD,mFAAmF;YACrF,CAAC;YAED,gEAAgE;YAChE,MAAM,IAAI,GAAG,KAAK;iBACf,SAAS,CAAC,iDAAiD,CAAC;iBAC5D,SAAS,CAAC,iBAAiB,KAAK,CAAC,IAAI,EAAE,EAAE;gBACxC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE;oBACV,cAAc,EAAE,KAAK,CAAC,IAAI;oBAC1B,mBAAmB,EAAE,KAAK,CAAC,SAAS;oBACpC,kBAAkB,EAAE,cAAc;oBAClC,gBAAgB,EAAE,eAAe;iBAClC;aACF,CAAC,CAAA;YAEJ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAC/D,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAE/D,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAA;oBACnE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAA;oBACpE,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,SAAS,CAAC,CAAA;oBAC9D,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,SAAS,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;YAC5E,CAAC;YAED,sCAAsC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAA;YAC7B,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAA;oBAClE,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAA;gBAC3D,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC7D,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;gBAClE,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;oBAChE,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACtD,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC7D,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAA;YAC3C,IAAI,CAAC,GAAG,EAAE,CAAA;YACV,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,0CAA0C,CAAC,CAAA;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,wDAAwD,EAAE,KAAK,CAAC,CAAA;QAClG,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe,EAAE,QAAiB,EAAE,SAAkB;;QACpF,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YAClC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,QAAQ,EAAE,QAAQ,IAAI,GAAG;gBACzB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,MAAe,EAAE,QAAiB,EAAE,QAAiB;;QAClF,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,SAAS;gBACT,QAAQ,EAAE,QAAQ,IAAI,CAAC;gBACvB,QAAQ,EAAE,QAAQ,IAAI,CAAC;gBACvB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,MAAe,EAAE,QAAiB;;QAC3D,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,KAAK;gBACL,QAAQ,EAAE,QAAQ,IAAI,CAAC;gBACvB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,MAAe,EAAE,QAAiB;;QAC1E,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,QAAQ,IAAI,CAAC;gBACvB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,eAAe,CAAC,QAAgB,EAAE,MAAe,EAAE,QAAiB;;QAClE,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,QAAQ;gBACR,QAAQ,EAAE,QAAQ,IAAI,GAAG;gBACzB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe;;QACnD,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,MAAe,EAAE,QAAiB;;QAC/D,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,QAAQ;gBACR,QAAQ,EAAE,QAAQ,IAAI,CAAC;gBACvB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,QAAgB,EAAE,MAAe;;QAC9D,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,SAAS;gBACT,QAAQ;gBACR,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,gBAAgB,CAAC,UAAkB,EAAE,MAAe;;QAClD,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,UAAU;gBACV,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,QAAgB,EAAE,QAAgB,EAAE,MAAe;;QACjF,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,SAAS;gBACT,QAAQ;gBACR,QAAQ;gBACR,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,MAAe,EAAE,QAAiB;;QAC1D,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;YACN,QAAQ,EAAE;gBACR,KAAK;gBACL,QAAQ,EAAE,QAAQ,IAAI,CAAC;gBACvB,WAAW,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK;gBACzC,YAAY,EAAE,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM;aAC5C;SACF,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,uCAAuC;IACvC,gBAAgB,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe,EAAE,QAAiB;QACvE,wCAAwC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,0BAA0B,GAAG,GAAG,IAAI,CAAC,aAAa,QAAQ,IAAI,CAAC,eAAe,KAAK,CAAC,CAAA;YACpH,OAAM;QACR,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;QAExB,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnF,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAC5E,CAAC;IAED,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe,EAAE,QAAiB;QACtE,+CAA+C;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC,iCAAiC;YAC1F,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,GAAG,IAAI,CAAC,aAAa,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAA;YACvH,OAAM;QACR,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;QAExB,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC;IAED,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe,EAAE,QAAiB;;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;QAE5F,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAE9E,oEAAoE;QACpE,MAAA,IAAI,CAAC,cAAc,0CAAE,YAAY,CAAC,SAAS,CAAC,CAAA;IAC9C,CAAC;IAED,iBAAiB,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe;QACrD,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACxE,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;IAC3B,CAAC;IAEO,YAAY,CAAC,KAAmB;QACtC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAM;QAE7B,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,GAAG,CAAA;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACtB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAEO,4BAA4B,CAClC,CAAS,EACT,CAAS,EACT,eAAkC,EAClC,SAAkB;QAElB,MAAM,wBAAwB,GAAkB;YAC9C,IAAI,EAAE,SAAS,CAAC,mBAAmB;YACnC,IAAI,EAAE;gBACJ,MAAM,EAAE,iBAAiB,CAAC,gBAAgB;gBAC1C,IAAI,EAAE,eAAe;gBACrB,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,8BAA8B;gBACpD,CAAC,EAAE,CAAC,EAAE,4CAA4C;gBAClD,CAAC,EAAE,CAAC,EAAE,4CAA4C;gBAClD,WAAW,EAAE,CAAC,EAAE,uDAAuD;aACxE;YACD,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;SACnC,CAAA;QAED,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAA;IAC5C,CAAC;IAEO,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAE,MAAe;QACjE,MAAM,wBAAwB,GAAkB;YAC9C,IAAI,EAAE,SAAS,CAAC,mBAAmB;YACnC,IAAI,EAAE;gBACJ,MAAM,EAAE,iBAAiB,CAAC,SAAS,EAAE,4CAA4C;gBACjF,SAAS,EAAE;oBACT;wBACE,CAAC,EAAE,CAAC,EAAE,4CAA4C;wBAClD,CAAC,EAAE,CAAC,EAAE,4CAA4C;wBAClD,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,8BAA8B;wBACpD,UAAU,EAAE,CAAC,EAAE,qCAAqC;qBACrD;iBACF;aACF;YACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAA;QAED,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAA;IAC5C,CAAC;IAED,WAAW,CAAC,KAAU;QACpB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IACzB,CAAC;IAED,eAAe;IACf,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,uBAAuB;IACvB,aAAa;QACX,MAAM,KAAK,GAA2B,EAAE,CAAA;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,uBAAuB;IACvB,kBAAkB,CAAC,UAAkB;QACnC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAA;IACrC,CAAC;IAED,uBAAuB;IACvB,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,IAAY,EAAE,YAAoB,GAAG;QACzD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;IACjD,CAAC;CACF"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "1.0.1-beta.
|
|
1
|
+
export declare const version = "1.0.1-beta.3";
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.version=void 0;var version=exports.version="1.0.1-beta.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.version=void 0;var version=exports.version="1.0.1-beta.3";
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import UIKit
|
|
2
|
+
|
|
3
|
+
struct GestureTargetInfo {
|
|
4
|
+
let identifier: String
|
|
5
|
+
let label: String?
|
|
6
|
+
let role: String?
|
|
7
|
+
let testId: String?
|
|
8
|
+
let text: String?
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
enum GestureTargetFinder {
|
|
12
|
+
static func findTargetView(at point: CGPoint, in view: UIView) -> GestureTargetInfo {
|
|
13
|
+
let targetView = view.hitTest(point, with: nil)
|
|
14
|
+
|
|
15
|
+
guard let target = targetView else {
|
|
16
|
+
return GestureTargetInfo(identifier: "unknown", label: nil, role: nil, testId: nil, text: nil)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let identifier = target.accessibilityIdentifier ?? target.accessibilityLabel ?? "view-\(target.hash)"
|
|
20
|
+
let label = target.accessibilityLabel
|
|
21
|
+
let role = roleFromAccessibilityTraits(target.accessibilityTraits)
|
|
22
|
+
let testId = target.accessibilityIdentifier
|
|
23
|
+
|
|
24
|
+
var text: String?
|
|
25
|
+
if let labelView = target as? UILabel {
|
|
26
|
+
text = labelView.text
|
|
27
|
+
} else if let button = target as? UIButton {
|
|
28
|
+
text = button.titleLabel?.text
|
|
29
|
+
} else if let textField = target as? UITextField {
|
|
30
|
+
text = textField.text ?? textField.placeholder
|
|
31
|
+
} else if let textView = target as? UITextView {
|
|
32
|
+
text = textView.text
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return GestureTargetInfo(identifier: identifier, label: label, role: role, testId: testId, text: text)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static func roleFromAccessibilityTraits(_ traits: UIAccessibilityTraits) -> String? {
|
|
39
|
+
if traits.contains(.button) { return "button" }
|
|
40
|
+
if traits.contains(.link) { return "link" }
|
|
41
|
+
if traits.contains(.image) { return "image" }
|
|
42
|
+
if traits.contains(.staticText) { return "text" }
|
|
43
|
+
if traits.contains(.header) { return "header" }
|
|
44
|
+
if traits.contains(.searchField) { return "search" }
|
|
45
|
+
if traits.contains(.keyboardKey) { return "key" }
|
|
46
|
+
if traits.contains(.adjustable) { return "adjustable" }
|
|
47
|
+
if traits.contains(.tabBar) { return "tabbar" }
|
|
48
|
+
return nil
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
2
3
|
|
|
3
|
-
@interface RCT_EXTERN_MODULE(SessionRecorderNative,
|
|
4
|
+
@interface RCT_EXTERN_MODULE(SessionRecorderNative, RCTEventEmitter)
|
|
4
5
|
|
|
5
6
|
RCT_EXTERN_METHOD(captureAndMask:(RCTPromiseResolveBlock)resolve
|
|
6
7
|
reject:(RCTPromiseRejectBlock)reject)
|
|
@@ -9,6 +10,20 @@ RCT_EXTERN_METHOD(captureAndMaskWithOptions:(NSDictionary *)options
|
|
|
9
10
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
10
11
|
reject:(RCTPromiseRejectBlock)reject)
|
|
11
12
|
|
|
13
|
+
// Gesture recording APIs
|
|
14
|
+
RCT_EXTERN_METHOD(startGestureRecording:(RCTPromiseResolveBlock)resolve
|
|
15
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
16
|
+
RCT_EXTERN_METHOD(stopGestureRecording:(RCTPromiseResolveBlock)resolve
|
|
17
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
18
|
+
RCT_EXTERN_METHOD(isGestureRecordingActive:(RCTPromiseResolveBlock)resolve
|
|
19
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
20
|
+
RCT_EXTERN_METHOD(setGestureCallback:(RCTResponseSenderBlock)callback)
|
|
21
|
+
RCT_EXTERN_METHOD(recordGesture:(NSString *)gestureType
|
|
22
|
+
x:(nonnull NSNumber *)x
|
|
23
|
+
y:(nonnull NSNumber *)y
|
|
24
|
+
target:(NSString *)target
|
|
25
|
+
metadata:(NSDictionary *)metadata)
|
|
26
|
+
|
|
12
27
|
+ (BOOL)requiresMainQueueSetup
|
|
13
28
|
{
|
|
14
29
|
return YES;
|
|
@@ -3,7 +3,7 @@ import React
|
|
|
3
3
|
import WebKit
|
|
4
4
|
|
|
5
5
|
@objc(SessionRecorderNative)
|
|
6
|
-
class SessionRecorderNative:
|
|
6
|
+
class SessionRecorderNative: RCTEventEmitter, UIGestureRecognizerDelegate {
|
|
7
7
|
|
|
8
8
|
// Configuration options
|
|
9
9
|
private var maskTextInputs: Bool = true
|
|
@@ -44,6 +44,7 @@ class SessionRecorderNative: NSObject {
|
|
|
44
44
|
"SwiftUI.GradientLayer", // Views like LinearGradient, RadialGradient, or AngularGradient
|
|
45
45
|
].compactMap(NSClassFromString)
|
|
46
46
|
|
|
47
|
+
// MARK: - Screen capture APIs
|
|
47
48
|
@objc func captureAndMask(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
48
49
|
DispatchQueue.main.async {
|
|
49
50
|
guard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else {
|
|
@@ -117,6 +118,74 @@ class SessionRecorderNative: NSObject {
|
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
|
|
121
|
+
// MARK: - Gesture recording state
|
|
122
|
+
private var isRecording = false
|
|
123
|
+
private var gestureCallback: RCTResponseSenderBlock?
|
|
124
|
+
private var rootViewController: UIViewController?
|
|
125
|
+
|
|
126
|
+
private var tapGestureRecognizer: UITapGestureRecognizer?
|
|
127
|
+
private var panGestureRecognizer: UIPanGestureRecognizer?
|
|
128
|
+
private var longPressGestureRecognizer: UILongPressGestureRecognizer?
|
|
129
|
+
private var pinchGestureRecognizer: UIPinchGestureRecognizer?
|
|
130
|
+
|
|
131
|
+
// MARK: - Event Emitter overrides
|
|
132
|
+
override func supportedEvents() -> [String]! {
|
|
133
|
+
return ["onGestureDetected"]
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@objc override static func requiresMainQueueSetup() -> Bool {
|
|
137
|
+
return true
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// MARK: - Gesture recording APIs
|
|
141
|
+
@objc func startGestureRecording(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
142
|
+
DispatchQueue.main.async {
|
|
143
|
+
guard !self.isRecording else {
|
|
144
|
+
resolve(nil)
|
|
145
|
+
return
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
self.setupGestureRecognizers()
|
|
149
|
+
self.isRecording = true
|
|
150
|
+
resolve(nil)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@objc func stopGestureRecording(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
155
|
+
DispatchQueue.main.async {
|
|
156
|
+
guard self.isRecording else {
|
|
157
|
+
resolve(nil)
|
|
158
|
+
return
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
self.removeGestureRecognizers()
|
|
162
|
+
self.isRecording = false
|
|
163
|
+
resolve(nil)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@objc func isGestureRecordingActive(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
168
|
+
resolve(self.isRecording)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@objc func setGestureCallback(_ callback: @escaping RCTResponseSenderBlock) {
|
|
172
|
+
self.gestureCallback = callback
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@objc func recordGesture(_ gestureType: String, x: NSNumber, y: NSNumber, target: String?, metadata: NSDictionary?) {
|
|
176
|
+
let gestureEvent: [String: Any] = [
|
|
177
|
+
"type": gestureType,
|
|
178
|
+
"timestamp": Date().timeIntervalSince1970 * 1000,
|
|
179
|
+
"x": x.doubleValue,
|
|
180
|
+
"y": y.doubleValue,
|
|
181
|
+
"target": target ?? "",
|
|
182
|
+
"metadata": metadata ?? [:]
|
|
183
|
+
]
|
|
184
|
+
|
|
185
|
+
self.sendEvent(withName: "onGestureDetected", body: gestureEvent)
|
|
186
|
+
if let cb = gestureCallback { cb([gestureEvent]) }
|
|
187
|
+
}
|
|
188
|
+
|
|
120
189
|
private func updateConfiguration(from options: NSDictionary) {
|
|
121
190
|
print("SessionRecorder: updateConfiguration called with options: \(options)")
|
|
122
191
|
|
|
@@ -509,6 +578,192 @@ class SessionRecorderNative: NSObject {
|
|
|
509
578
|
UIGraphicsEndImageContext()
|
|
510
579
|
return newImage ?? image
|
|
511
580
|
}
|
|
581
|
+
|
|
582
|
+
// MARK: - Gesture setup and handlers
|
|
583
|
+
private func setupGestureRecognizers() {
|
|
584
|
+
guard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }),
|
|
585
|
+
let rootViewController = window.rootViewController else {
|
|
586
|
+
return
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
self.rootViewController = rootViewController
|
|
590
|
+
|
|
591
|
+
// Tap
|
|
592
|
+
tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
|
|
593
|
+
tapGestureRecognizer?.numberOfTapsRequired = 1
|
|
594
|
+
tapGestureRecognizer?.numberOfTouchesRequired = 1
|
|
595
|
+
rootViewController.view.addGestureRecognizer(tapGestureRecognizer!)
|
|
596
|
+
|
|
597
|
+
// Pan
|
|
598
|
+
panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
|
|
599
|
+
rootViewController.view.addGestureRecognizer(panGestureRecognizer!)
|
|
600
|
+
|
|
601
|
+
// Long press
|
|
602
|
+
longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
|
|
603
|
+
longPressGestureRecognizer?.minimumPressDuration = 0.5
|
|
604
|
+
rootViewController.view.addGestureRecognizer(longPressGestureRecognizer!)
|
|
605
|
+
|
|
606
|
+
// Pinch
|
|
607
|
+
pinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(_:)))
|
|
608
|
+
rootViewController.view.addGestureRecognizer(pinchGestureRecognizer!)
|
|
609
|
+
|
|
610
|
+
// Allow simultaneous recognition
|
|
611
|
+
tapGestureRecognizer?.delegate = self
|
|
612
|
+
panGestureRecognizer?.delegate = self
|
|
613
|
+
longPressGestureRecognizer?.delegate = self
|
|
614
|
+
pinchGestureRecognizer?.delegate = self
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
private func removeGestureRecognizers() {
|
|
618
|
+
guard let rootViewController = rootViewController else { return }
|
|
619
|
+
|
|
620
|
+
if let tapGesture = tapGestureRecognizer { rootViewController.view.removeGestureRecognizer(tapGesture) }
|
|
621
|
+
if let panGesture = panGestureRecognizer { rootViewController.view.removeGestureRecognizer(panGesture) }
|
|
622
|
+
if let longPressGesture = longPressGestureRecognizer { rootViewController.view.removeGestureRecognizer(longPressGesture) }
|
|
623
|
+
if let pinchGesture = pinchGestureRecognizer { rootViewController.view.removeGestureRecognizer(pinchGesture) }
|
|
624
|
+
|
|
625
|
+
tapGestureRecognizer = nil
|
|
626
|
+
panGestureRecognizer = nil
|
|
627
|
+
longPressGestureRecognizer = nil
|
|
628
|
+
pinchGestureRecognizer = nil
|
|
629
|
+
self.rootViewController = nil
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
@objc private func handleTap(_ gesture: UITapGestureRecognizer) {
|
|
633
|
+
guard let view = gesture.view else { return }
|
|
634
|
+
let location = gesture.location(in: view)
|
|
635
|
+
let target = GestureTargetFinder.findTargetView(at: location, in: view)
|
|
636
|
+
|
|
637
|
+
let gestureEvent: [String: Any] = [
|
|
638
|
+
"type": "tap",
|
|
639
|
+
"timestamp": Date().timeIntervalSince1970 * 1000,
|
|
640
|
+
"x": location.x,
|
|
641
|
+
"y": location.y,
|
|
642
|
+
"target": target.identifier,
|
|
643
|
+
"targetInfo": [
|
|
644
|
+
"identifier": target.identifier,
|
|
645
|
+
"label": target.label as Any,
|
|
646
|
+
"role": target.role as Any,
|
|
647
|
+
"testId": target.testId as Any,
|
|
648
|
+
"text": target.text as Any
|
|
649
|
+
],
|
|
650
|
+
"metadata": [
|
|
651
|
+
"pressure": 1.0
|
|
652
|
+
]
|
|
653
|
+
]
|
|
654
|
+
|
|
655
|
+
self.sendEvent(withName: "onGestureDetected", body: gestureEvent)
|
|
656
|
+
if let cb = gestureCallback { cb([gestureEvent]) }
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
@objc private func handlePan(_ gesture: UIPanGestureRecognizer) {
|
|
660
|
+
guard let view = gesture.view else { return }
|
|
661
|
+
let location = gesture.location(in: view)
|
|
662
|
+
let velocity = gesture.velocity(in: view)
|
|
663
|
+
let translation = gesture.translation(in: view)
|
|
664
|
+
|
|
665
|
+
let target = GestureTargetFinder.findTargetView(at: location, in: view)
|
|
666
|
+
|
|
667
|
+
let gestureType: String
|
|
668
|
+
switch gesture.state {
|
|
669
|
+
case .began: gestureType = "pan_start"
|
|
670
|
+
case .changed: gestureType = "pan_move"
|
|
671
|
+
case .ended, .cancelled: gestureType = "pan_end"
|
|
672
|
+
default: return
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
let gestureEvent: [String: Any] = [
|
|
676
|
+
"type": gestureType,
|
|
677
|
+
"timestamp": Date().timeIntervalSince1970 * 1000,
|
|
678
|
+
"x": location.x,
|
|
679
|
+
"y": location.y,
|
|
680
|
+
"target": target.identifier,
|
|
681
|
+
"targetInfo": [
|
|
682
|
+
"identifier": target.identifier,
|
|
683
|
+
"label": target.label as Any,
|
|
684
|
+
"role": target.role as Any,
|
|
685
|
+
"testId": target.testId as Any,
|
|
686
|
+
"text": target.text as Any
|
|
687
|
+
],
|
|
688
|
+
"metadata": [
|
|
689
|
+
"velocity": sqrt(velocity.x * velocity.x + velocity.y * velocity.y),
|
|
690
|
+
"deltaX": translation.x,
|
|
691
|
+
"deltaY": translation.y
|
|
692
|
+
]
|
|
693
|
+
]
|
|
694
|
+
|
|
695
|
+
self.sendEvent(withName: "onGestureDetected", body: gestureEvent)
|
|
696
|
+
if let cb = gestureCallback { cb([gestureEvent]) }
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
@objc private func handleLongPress(_ gesture: UILongPressGestureRecognizer) {
|
|
700
|
+
guard gesture.state == .began else { return }
|
|
701
|
+
guard let view = gesture.view else { return }
|
|
702
|
+
let location = gesture.location(in: view)
|
|
703
|
+
let target = GestureTargetFinder.findTargetView(at: location, in: view)
|
|
704
|
+
|
|
705
|
+
let gestureEvent: [String: Any] = [
|
|
706
|
+
"type": "long_press",
|
|
707
|
+
"timestamp": Date().timeIntervalSince1970 * 1000,
|
|
708
|
+
"x": location.x,
|
|
709
|
+
"y": location.y,
|
|
710
|
+
"target": target.identifier,
|
|
711
|
+
"targetInfo": [
|
|
712
|
+
"identifier": target.identifier,
|
|
713
|
+
"label": target.label as Any,
|
|
714
|
+
"role": target.role as Any,
|
|
715
|
+
"testId": target.testId as Any,
|
|
716
|
+
"text": target.text as Any
|
|
717
|
+
],
|
|
718
|
+
"metadata": [
|
|
719
|
+
"duration": 0.5,
|
|
720
|
+
"pressure": 1.0
|
|
721
|
+
]
|
|
722
|
+
]
|
|
723
|
+
|
|
724
|
+
self.sendEvent(withName: "onGestureDetected", body: gestureEvent)
|
|
725
|
+
if let cb = gestureCallback { cb([gestureEvent]) }
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
@objc private func handlePinch(_ gesture: UIPinchGestureRecognizer) {
|
|
729
|
+
guard let view = gesture.view else { return }
|
|
730
|
+
let location = gesture.location(in: view)
|
|
731
|
+
let scale = gesture.scale
|
|
732
|
+
let velocity = gesture.velocity
|
|
733
|
+
|
|
734
|
+
let target = GestureTargetFinder.findTargetView(at: location, in: view)
|
|
735
|
+
|
|
736
|
+
let gestureEvent: [String: Any] = [
|
|
737
|
+
"type": "pinch",
|
|
738
|
+
"timestamp": Date().timeIntervalSince1970 * 1000,
|
|
739
|
+
"x": location.x,
|
|
740
|
+
"y": location.y,
|
|
741
|
+
"target": target.identifier,
|
|
742
|
+
"targetInfo": [
|
|
743
|
+
"identifier": target.identifier,
|
|
744
|
+
"label": target.label as Any,
|
|
745
|
+
"role": target.role as Any,
|
|
746
|
+
"testId": target.testId as Any,
|
|
747
|
+
"text": target.text as Any
|
|
748
|
+
],
|
|
749
|
+
"metadata": [
|
|
750
|
+
"scale": scale,
|
|
751
|
+
"velocity": velocity
|
|
752
|
+
]
|
|
753
|
+
]
|
|
754
|
+
|
|
755
|
+
self.sendEvent(withName: "onGestureDetected", body: gestureEvent)
|
|
756
|
+
if let cb = gestureCallback { cb([gestureEvent]) }
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
// MARK: - UIGestureRecognizerDelegate
|
|
760
|
+
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
|
|
761
|
+
return true
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
|
|
765
|
+
return true
|
|
766
|
+
}
|
|
512
767
|
}
|
|
513
768
|
|
|
514
769
|
private enum MaskingType {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import React
|
|
3
|
+
|
|
4
|
+
@objc(SessionRecorderNativeSpec)
|
|
5
|
+
class SessionRecorderNativeSpec: NSObject, RCTBridgeModule {
|
|
6
|
+
|
|
7
|
+
static func moduleName() -> String! {
|
|
8
|
+
return "SessionRecorderNative"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
12
|
+
return true
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@objc func captureAndMask(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
16
|
+
// Implementation will be provided by the actual module
|
|
17
|
+
reject("NOT_IMPLEMENTED", "Method not implemented", nil)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@objc func captureAndMaskWithOptions(_ options: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
21
|
+
// Implementation will be provided by the actual module
|
|
22
|
+
reject("NOT_IMPLEMENTED", "Method not implemented", nil)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@objc func startGestureRecording(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
26
|
+
// Implementation will be provided by the actual module
|
|
27
|
+
reject("NOT_IMPLEMENTED", "Method not implemented", nil)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@objc func stopGestureRecording(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
31
|
+
// Implementation will be provided by the actual module
|
|
32
|
+
reject("NOT_IMPLEMENTED", "Method not implemented", nil)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@objc func isGestureRecordingActive(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
36
|
+
// Implementation will be provided by the actual module
|
|
37
|
+
reject("NOT_IMPLEMENTED", "Method not implemented", nil)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@objc func setGestureCallback(_ callback: @escaping RCTResponseSenderBlock) {
|
|
41
|
+
// Implementation will be provided by the actual module
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@objc func recordGesture(_ gestureType: String, x: NSNumber, y: NSNumber, target: String?, metadata: NSDictionary?) {
|
|
45
|
+
// Implementation will be provided by the actual module
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@objc func addListener(_ eventName: String) {
|
|
49
|
+
// Required for RN event emitter contracts
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@objc func removeListeners(_ count: Int) {
|
|
53
|
+
// Required for RN event emitter contracts
|
|
54
|
+
}
|
|
55
|
+
}
|