@multiplayer-app/session-recorder-react-native 1.0.0 → 1.0.1-beta.2

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
- "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":"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,iCAAiC;AACjC,OAAO,qBAAqB,EAAE,EAAE,mBAAmB,EAAsC,MAAM,iCAAiC,CAAA;AAEhI,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"}
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.0";
1
+ export declare const version = "1.0.1-beta.2";
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.0";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.version=void 0;var version=exports.version="1.0.1-beta.2";
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAA"}
@@ -1,6 +1,7 @@
1
1
  #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
2
3
 
3
- @interface RCT_EXTERN_MODULE(SessionRecorderNative, NSObject)
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: NSObject {
6
+ class SessionRecorderNative: RCTEventEmitter {
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,183 @@ 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
+ }
512
758
  }
513
759
 
514
760
  private enum MaskingType {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplayer-app/session-recorder-react-native",
3
- "version": "1.0.0",
3
+ "version": "1.0.1-beta.2",
4
4
  "description": "Multiplayer Fullstack Session Recorder for React Native",
5
5
  "author": {
6
6
  "name": "Multiplayer Software, Inc.",
@@ -41,7 +41,8 @@
41
41
  "clean": "rimraf dist",
42
42
  "prebuild": "node -p \"'export const version = ' + JSON.stringify(require('./package.json').version)\" > src/version.ts",
43
43
  "prepublishOnly": "npm run build",
44
- "build": "tsc && babel ./dist --out-dir dist --extensions '.js' && ./copy-react-native-dist.sh"
44
+ "build": "tsc && babel ./dist --out-dir dist --extensions '.js'",
45
+ "copy:dist": "./copy-react-native-dist.sh"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@babel/cli": "^7.19.3",
@@ -1,21 +0,0 @@
1
- #import <React/RCTBridgeModule.h>
2
- #import <React/RCTEventEmitter.h>
3
-
4
- @interface RCT_EXTERN_MODULE(GestureRecorderNative, RCTEventEmitter)
5
-
6
- RCT_EXTERN_METHOD(startGestureRecording:(RCTPromiseResolveBlock)resolve
7
- reject:(RCTPromiseRejectBlock)reject)
8
-
9
- RCT_EXTERN_METHOD(stopGestureRecording:(RCTPromiseResolveBlock)resolve
10
- reject:(RCTPromiseRejectBlock)reject)
11
-
12
- RCT_EXTERN_METHOD(isGestureRecordingActive:(RCTPromiseResolveBlock)resolve
13
- reject:(RCTPromiseRejectBlock)reject)
14
-
15
- RCT_EXTERN_METHOD(recordGesture:(NSString *)gestureType
16
- x:(NSNumber *)x
17
- y:(NSNumber *)y
18
- target:(NSString *)target
19
- metadata:(NSDictionary *)metadata)
20
-
21
- @end