Socket
Socket
Sign inDemoInstall

@daybrush/drag

Package Overview
Dependencies
Maintainers
1
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@daybrush/drag - npm Package Compare versions

Comparing version 0.15.0 to 0.16.0-rc

2

declaration/Dragger.d.ts

@@ -18,2 +18,4 @@ import { DragOptions, Client, OnDrag } from "./types";

private targets;
private prevTime;
private isDouble;
constructor(targets: Array<Element | Window> | Element | Window, options?: DragOptions);

@@ -20,0 +22,0 @@ isDragging(): boolean;

@@ -33,2 +33,3 @@ import { IObject } from "@daybrush/utils";

isDrag: boolean;
isDouble: boolean;
datas: IObject<any>;

@@ -35,0 +36,0 @@ inputEvent: any;

14

dist/drag.cjs.js

@@ -7,3 +7,3 @@ /*

repository: git+https://github.com/daybrush/drag.git
version: 0.15.0
version: 0.16.0-rc
*/

@@ -159,2 +159,4 @@ 'use strict';

this.targets = [];
this.prevTime = 0;
this.isDouble = false;
/**

@@ -173,3 +175,4 @@ * @method

dragstart = _a.dragstart,
preventRightClick = _a.preventRightClick;
preventRightClick = _a.preventRightClick,
preventDefault = _a.preventDefault;
var isTouch = _this.isTouch;

@@ -221,3 +224,4 @@

_this.flag && e.preventDefault();
_this.isDouble = utils.now() - _this.prevTime < 200;
_this.flag && preventDefault && e.preventDefault();
};

@@ -271,2 +275,5 @@

var position = _this.pinchFlag ? getPinchDragPosition(prevClients, prevClients, startClients, _this.startPinchClients) : getPosition(prevClients[0], prevClients[0], startClients[0]);
var currentTime = utils.now();
var isDouble = !_this.isDrag && _this.isDouble;
_this.prevTime = !_this.isDrag && isDouble ? 0 : currentTime;
_this.startClients = [];

@@ -277,2 +284,3 @@ _this.prevClients = [];

datas: _this.datas,
isDouble: isDouble,
isDrag: _this.isDrag,

@@ -279,0 +287,0 @@ inputEvent: e

@@ -7,5 +7,5 @@ /*

repository: git+https://github.com/daybrush/drag.git
version: 0.15.0
version: 0.16.0-rc
*/
import { removeEvent, addEvent } from '@daybrush/utils';
import { removeEvent, addEvent, now } from '@daybrush/utils';

@@ -157,2 +157,4 @@ /*! *****************************************************************************

this.targets = [];
this.prevTime = 0;
this.isDouble = false;
/**

@@ -171,3 +173,4 @@ * @method

dragstart = _a.dragstart,
preventRightClick = _a.preventRightClick;
preventRightClick = _a.preventRightClick,
preventDefault = _a.preventDefault;
var isTouch = _this.isTouch;

@@ -219,3 +222,4 @@

_this.flag && e.preventDefault();
_this.isDouble = now() - _this.prevTime < 200;
_this.flag && preventDefault && e.preventDefault();
};

@@ -269,2 +273,5 @@

var position = _this.pinchFlag ? getPinchDragPosition(prevClients, prevClients, startClients, _this.startPinchClients) : getPosition(prevClients[0], prevClients[0], startClients[0]);
var currentTime = now();
var isDouble = !_this.isDrag && _this.isDouble;
_this.prevTime = !_this.isDrag && isDouble ? 0 : currentTime;
_this.startClients = [];

@@ -275,2 +282,3 @@ _this.prevClients = [];

datas: _this.datas,
isDouble: isDouble,
isDrag: _this.isDrag,

@@ -277,0 +285,0 @@ inputEvent: e

@@ -7,3 +7,3 @@ /*

repository: git+https://github.com/daybrush/drag.git
version: 0.15.0
version: 0.16.0-rc
*/

@@ -138,2 +138,15 @@ (function (global, factory) {

/**
* Date.now() method
* @memberof CrossBrowser
* @return {number} milliseconds
* @example
import {now} from "@daybrush/utils";
console.log(now()); // 12121324241(milliseconds)
*/
function now() {
return Date.now ? Date.now() : new Date().getTime();
}
/**
* Sets up a function that will be called whenever the specified event is delivered to the target

@@ -207,2 +220,4 @@ * @memberof DOM

this.targets = [];
this.prevTime = 0;
this.isDouble = false;
/**

@@ -221,3 +236,4 @@ * @method

dragstart = _a.dragstart,
preventRightClick = _a.preventRightClick;
preventRightClick = _a.preventRightClick,
preventDefault = _a.preventDefault;
var isTouch = _this.isTouch;

@@ -269,3 +285,4 @@

_this.flag && e.preventDefault();
_this.isDouble = now() - _this.prevTime < 200;
_this.flag && preventDefault && e.preventDefault();
};

@@ -319,2 +336,5 @@

var position = _this.pinchFlag ? getPinchDragPosition(prevClients, prevClients, startClients, _this.startPinchClients) : getPosition(prevClients[0], prevClients[0], startClients[0]);
var currentTime = now();
var isDouble = !_this.isDrag && _this.isDouble;
_this.prevTime = !_this.isDrag && isDouble ? 0 : currentTime;
_this.startClients = [];

@@ -325,2 +345,3 @@ _this.prevClients = [];

datas: _this.datas,
isDouble: isDouble,
isDrag: _this.isDrag,

@@ -327,0 +348,0 @@ inputEvent: e

@@ -7,5 +7,5 @@ /*

repository: git+https://github.com/daybrush/drag.git
version: 0.15.0
version: 0.16.0-rc
*/
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t=t||self).Dragger=i()}(this,function(){"use strict";var u=function(){return(u=Object.assign||function(t){for(var i,n=1,s=arguments.length;n<s;n++)for(var e in i=arguments[n])Object.prototype.hasOwnProperty.call(i,e)&&(t[e]=i[e]);return t}).apply(this,arguments)};function f(t,i,n,s){var e=D(t),a=D(i),r=D(s);return g(h(s[0],c(e,r)),h(s[0],c(a,r)),n[0])}function l(t){return t.touches?d(t.touches):[e(t)]}function g(t,i,n){var s=t.clientX,e=t.clientY;return{clientX:s,clientY:e,deltaX:s-i.clientX,deltaY:e-i.clientY,distX:s-n.clientX,distY:e-n.clientY}}function p(t){return Math.sqrt(Math.pow(t[0].clientX-t[1].clientX,2)+Math.pow(t[0].clientY-t[1].clientY,2))}function v(t,n,s){return t.map(function(t,i){return g(t,n[i],s[i])})}function d(t){for(var i=Math.min(t.length,2),n=[],s=0;s<i;++s)n.push(e(t[s]));return n}function e(t){return{clientX:t.clientX,clientY:t.clientY}}function D(t){return 1===t.length?t[0]:{clientX:(t[0].clientX+t[1].clientX)/2,clientY:(t[0].clientY+t[1].clientY)/2}}function h(t,i){return{clientX:t.clientX+i.clientX,clientY:t.clientY+i.clientY}}function c(t,i){return{clientX:t.clientX-i.clientX,clientY:t.clientY-i.clientY}}function m(t,i,n,s){t.addEventListener(i,n,s)}function C(t,i,n){t.removeEventListener(i,n)}var n=function(){function t(t,i){var o=this;void 0===i&&(i={}),this.options={},this.flag=!1,this.pinchFlag=!1,this.datas={},this.isDrag=!1,this.isPinch=!1,this.isMouse=!1,this.isTouch=!1,this.prevClients=[],this.startClients=[],this.movement=0,this.startPinchClients=[],this.startDistance=0,this.customDist=[0,0],this.targets=[],this.onDragStart=function(t){if(o.flag||!1!==t.cancelable){var i=o.options,n=i.container,s=i.pinchOutside,e=i.dragstart,a=i.preventRightClick,r=o.isTouch;if(!o.flag&&r&&s&&setTimeout(function(){m(n,"touchstart",o.onDragStart)}),o.flag&&r&&s&&C(n,"touchstart",o.onDragStart),function(t){return t.touches&&2<=t.touches.length}(t)){if(!o.flag&&t.touches.length!==t.changedTouches.length)return;o.pinchFlag||o.onPinchStart(t)}if(!o.flag){var h=o.startClients[0]?o.startClients:l(t);o.customDist=[0,0],o.flag=!0,o.isDrag=!1,o.startClients=h,o.prevClients=h,o.datas={};var c=g(h[o.movement=0],o.prevClients[0],o.startClients[0]);(a&&3===t.which||!1===(e&&e(u({type:"dragstart",datas:o.datas,inputEvent:t},c))))&&(o.startClients=[],o.prevClients=[],o.flag=!1),o.flag&&t.preventDefault()}}},this.onDrag=function(t,i){if(o.flag){var n=l(t);o.pinchFlag&&o.onPinch(t,n);var s=o.move([0,0],t,n);if(s&&(s.deltaX||s.deltaY)){var e=o.options.drag;e&&e(u({},s,{isScroll:!!i,inputEvent:t}))}}},this.onDragEnd=function(t){if(o.flag){var i=o.options,n=i.dragend,s=i.pinchOutside,e=i.container;o.isTouch&&s&&C(e,"touchstart",o.onDragStart),o.pinchFlag&&o.onPinchEnd(t),o.flag=!1;var a=o.prevClients,r=o.startClients,h=o.pinchFlag?f(a,a,r,o.startPinchClients):g(a[0],a[0],r[0]);o.startClients=[],o.prevClients=[],n&&n(u({type:"dragend",datas:o.datas,isDrag:o.isDrag,inputEvent:t},h))}};var n=[].concat(t);this.options=u({container:1<n.length?window:n[0],preventRightClick:!0,preventDefault:!0,pinchThreshold:0,events:["touch","mouse"]},i);var s=this.options,e=s.container,a=s.events;if(this.isTouch=-1<a.indexOf("touch"),this.isMouse=-1<a.indexOf("mouse"),this.customDist=[0,0],this.targets=n,this.isMouse&&(n.forEach(function(t){m(t,"mousedown",o.onDragStart)}),m(e,"mousemove",this.onDrag),m(e,"mouseup",this.onDragEnd)),this.isTouch){var r={passive:!1};n.forEach(function(t){m(t,"touchstart",o.onDragStart,r)}),m(e,"touchmove",this.onDrag,r),m(e,"touchend",this.onDragEnd,r),m(e,"touchcancel",this.onDragEnd,r)}}var i=t.prototype;return i.isDragging=function(){return this.isDrag},i.isFlag=function(){return this.flag},i.isPinchFlag=function(){return this.pinchFlag},i.isPinching=function(){return this.isPinch},i.scrollBy=function(i,n,t,s){void 0===s&&(s=!0),this.flag&&(this.startClients.forEach(function(t){t.clientX-=i,t.clientY-=n}),this.prevClients.forEach(function(t){t.clientX-=i,t.clientY-=n}),s&&this.onDrag(t,!0))},i.move=function(t,i,n){var s=t[0],e=t[1];void 0===n&&(n=this.prevClients);var a=this.customDist,r=this.prevClients,h=this.startClients,c=this.pinchFlag?f(n,r,h,this.startPinchClients):g(n[0],r[0],h[0]);a[0]+=s,a[1]+=e,c.deltaX+=s,c.deltaY+=e;var o=c.deltaX,l=c.deltaY;return c.distX+=a[0],c.distY+=a[1],this.movement+=Math.sqrt(o*o+l*l),this.prevClients=n,this.isDrag=!0,u({type:"drag",datas:this.datas},c,{movement:this.movement,isDrag:this.isDrag,isPinch:this.isPinch,isScroll:!1,inputEvent:i})},i.onPinchStart=function(t){var i,n,s=this.options,e=s.pinchstart,a=s.pinchThreshold;if(!(this.isDrag&&this.movement>a)){var r=d(t.changedTouches);if(this.pinchFlag=!0,(i=this.startClients).push.apply(i,r),(n=this.prevClients).push.apply(n,r),this.startDistance=p(this.prevClients),this.startPinchClients=this.prevClients.slice(),e){var h=this.prevClients,c=D(h),o=g(c,c,c);e(u({type:"pinchstart",datas:this.datas,touches:v(h,h,h)},o,{inputEvent:t}))}}},i.onPinch=function(t,i){if(this.flag&&this.pinchFlag&&!(i.length<2)){this.isPinch=!0;var n=this.options.pinch;if(n){var s=this.prevClients,e=this.startClients,a=g(D(i),D(s),D(e)),r=p(i);n(u({type:"pinch",datas:this.datas,movement:this.movement,touches:v(i,s,e),scale:r/this.startDistance,distance:r},a,{inputEvent:t}))}}},i.onPinchEnd=function(t){if(this.flag&&this.pinchFlag){var i=this.isPinch;this.isPinch=!1,this.pinchFlag=!1;var n=this.options.pinchend;if(n){var s=this.prevClients,e=this.startClients,a=g(D(s),D(s),D(e));n(u({type:"pinchend",datas:this.datas,isPinch:i,touches:v(s,s,e)},a,{inputEvent:t})),this.isPinch=!1,this.pinchFlag=!1}}},i.unset=function(){var i=this,t=this.targets,n=this.options.container;this.isMouse&&(t.forEach(function(t){C(t,"mousedown",i.onDragStart)}),C(n,"mousemove",this.onDrag),C(n,"mouseup",this.onDragEnd)),this.isTouch&&(t.forEach(function(t){C(t,"touchstart",i.onDragStart)}),C(n,"touchstart",this.onDragStart),C(n,"touchmove",this.onDrag),C(n,"touchend",this.onDragEnd),C(n,"touchcancel",this.onDragEnd))},t}();var t={default:n,drag:function(t,i){return new n(t,i)}};for(var i in t)n[i]=t[i];return n});
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t=t||self).Dragger=i()}(this,function(){"use strict";var u=function(){return(u=Object.assign||function(t){for(var i,n=1,s=arguments.length;n<s;n++)for(var e in i=arguments[n])Object.prototype.hasOwnProperty.call(i,e)&&(t[e]=i[e]);return t}).apply(this,arguments)};function f(t,i,n,s){var e=D(t),a=D(i),r=D(s);return g(h(s[0],o(e,r)),h(s[0],o(a,r)),n[0])}function p(t){return t.touches?d(t.touches):[e(t)]}function g(t,i,n){var s=t.clientX,e=t.clientY;return{clientX:s,clientY:e,deltaX:s-i.clientX,deltaY:e-i.clientY,distX:s-n.clientX,distY:e-n.clientY}}function l(t){return Math.sqrt(Math.pow(t[0].clientX-t[1].clientX,2)+Math.pow(t[0].clientY-t[1].clientY,2))}function v(t,n,s){return t.map(function(t,i){return g(t,n[i],s[i])})}function d(t){for(var i=Math.min(t.length,2),n=[],s=0;s<i;++s)n.push(e(t[s]));return n}function e(t){return{clientX:t.clientX,clientY:t.clientY}}function D(t){return 1===t.length?t[0]:{clientX:(t[0].clientX+t[1].clientX)/2,clientY:(t[0].clientY+t[1].clientY)/2}}function h(t,i){return{clientX:t.clientX+i.clientX,clientY:t.clientY+i.clientY}}function o(t,i){return{clientX:t.clientX-i.clientX,clientY:t.clientY-i.clientY}}function m(){return Date.now?Date.now():(new Date).getTime()}function C(t,i,n,s){t.addEventListener(i,n,s)}function X(t,i,n){t.removeEventListener(i,n)}var n=function(){function t(t,i){var l=this;void 0===i&&(i={}),this.options={},this.flag=!1,this.pinchFlag=!1,this.datas={},this.isDrag=!1,this.isPinch=!1,this.isMouse=!1,this.isTouch=!1,this.prevClients=[],this.startClients=[],this.movement=0,this.startPinchClients=[],this.startDistance=0,this.customDist=[0,0],this.targets=[],this.prevTime=0,this.isDouble=!1,this.onDragStart=function(t){if(l.flag||!1!==t.cancelable){var i=l.options,n=i.container,s=i.pinchOutside,e=i.dragstart,a=i.preventRightClick,r=i.preventDefault,h=l.isTouch;if(!l.flag&&h&&s&&setTimeout(function(){C(n,"touchstart",l.onDragStart)}),l.flag&&h&&s&&X(n,"touchstart",l.onDragStart),function(t){return t.touches&&2<=t.touches.length}(t)){if(!l.flag&&t.touches.length!==t.changedTouches.length)return;l.pinchFlag||l.onPinchStart(t)}if(!l.flag){var o=l.startClients[0]?l.startClients:p(t);l.customDist=[0,0],l.flag=!0,l.isDrag=!1,l.startClients=o,l.prevClients=o,l.datas={};var c=g(o[l.movement=0],l.prevClients[0],l.startClients[0]);(a&&3===t.which||!1===(e&&e(u({type:"dragstart",datas:l.datas,inputEvent:t},c))))&&(l.startClients=[],l.prevClients=[],l.flag=!1),l.isDouble=m()-l.prevTime<200,l.flag&&r&&t.preventDefault()}}},this.onDrag=function(t,i){if(l.flag){var n=p(t);l.pinchFlag&&l.onPinch(t,n);var s=l.move([0,0],t,n);if(s&&(s.deltaX||s.deltaY)){var e=l.options.drag;e&&e(u({},s,{isScroll:!!i,inputEvent:t}))}}},this.onDragEnd=function(t){if(l.flag){var i=l.options,n=i.dragend,s=i.pinchOutside,e=i.container;l.isTouch&&s&&X(e,"touchstart",l.onDragStart),l.pinchFlag&&l.onPinchEnd(t),l.flag=!1;var a=l.prevClients,r=l.startClients,h=l.pinchFlag?f(a,a,r,l.startPinchClients):g(a[0],a[0],r[0]),o=m(),c=!l.isDrag&&l.isDouble;l.prevTime=!l.isDrag&&c?0:o,l.startClients=[],l.prevClients=[],n&&n(u({type:"dragend",datas:l.datas,isDouble:c,isDrag:l.isDrag,inputEvent:t},h))}};var n=[].concat(t);this.options=u({container:1<n.length?window:n[0],preventRightClick:!0,preventDefault:!0,pinchThreshold:0,events:["touch","mouse"]},i);var s=this.options,e=s.container,a=s.events;if(this.isTouch=-1<a.indexOf("touch"),this.isMouse=-1<a.indexOf("mouse"),this.customDist=[0,0],this.targets=n,this.isMouse&&(n.forEach(function(t){C(t,"mousedown",l.onDragStart)}),C(e,"mousemove",this.onDrag),C(e,"mouseup",this.onDragEnd)),this.isTouch){var r={passive:!1};n.forEach(function(t){C(t,"touchstart",l.onDragStart,r)}),C(e,"touchmove",this.onDrag,r),C(e,"touchend",this.onDragEnd,r),C(e,"touchcancel",this.onDragEnd,r)}}var i=t.prototype;return i.isDragging=function(){return this.isDrag},i.isFlag=function(){return this.flag},i.isPinchFlag=function(){return this.pinchFlag},i.isPinching=function(){return this.isPinch},i.scrollBy=function(i,n,t,s){void 0===s&&(s=!0),this.flag&&(this.startClients.forEach(function(t){t.clientX-=i,t.clientY-=n}),this.prevClients.forEach(function(t){t.clientX-=i,t.clientY-=n}),s&&this.onDrag(t,!0))},i.move=function(t,i,n){var s=t[0],e=t[1];void 0===n&&(n=this.prevClients);var a=this.customDist,r=this.prevClients,h=this.startClients,o=this.pinchFlag?f(n,r,h,this.startPinchClients):g(n[0],r[0],h[0]);a[0]+=s,a[1]+=e,o.deltaX+=s,o.deltaY+=e;var c=o.deltaX,l=o.deltaY;return o.distX+=a[0],o.distY+=a[1],this.movement+=Math.sqrt(c*c+l*l),this.prevClients=n,this.isDrag=!0,u({type:"drag",datas:this.datas},o,{movement:this.movement,isDrag:this.isDrag,isPinch:this.isPinch,isScroll:!1,inputEvent:i})},i.onPinchStart=function(t){var i,n,s=this.options,e=s.pinchstart,a=s.pinchThreshold;if(!(this.isDrag&&this.movement>a)){var r=d(t.changedTouches);if(this.pinchFlag=!0,(i=this.startClients).push.apply(i,r),(n=this.prevClients).push.apply(n,r),this.startDistance=l(this.prevClients),this.startPinchClients=this.prevClients.slice(),e){var h=this.prevClients,o=D(h),c=g(o,o,o);e(u({type:"pinchstart",datas:this.datas,touches:v(h,h,h)},c,{inputEvent:t}))}}},i.onPinch=function(t,i){if(this.flag&&this.pinchFlag&&!(i.length<2)){this.isPinch=!0;var n=this.options.pinch;if(n){var s=this.prevClients,e=this.startClients,a=g(D(i),D(s),D(e)),r=l(i);n(u({type:"pinch",datas:this.datas,movement:this.movement,touches:v(i,s,e),scale:r/this.startDistance,distance:r},a,{inputEvent:t}))}}},i.onPinchEnd=function(t){if(this.flag&&this.pinchFlag){var i=this.isPinch;this.isPinch=!1,this.pinchFlag=!1;var n=this.options.pinchend;if(n){var s=this.prevClients,e=this.startClients,a=g(D(s),D(s),D(e));n(u({type:"pinchend",datas:this.datas,isPinch:i,touches:v(s,s,e)},a,{inputEvent:t})),this.isPinch=!1,this.pinchFlag=!1}}},i.unset=function(){var i=this,t=this.targets,n=this.options.container;this.isMouse&&(t.forEach(function(t){X(t,"mousedown",i.onDragStart)}),X(n,"mousemove",this.onDrag),X(n,"mouseup",this.onDragEnd)),this.isTouch&&(t.forEach(function(t){X(t,"touchstart",i.onDragStart)}),X(n,"touchstart",this.onDragStart),X(n,"touchmove",this.onDrag),X(n,"touchend",this.onDragEnd),X(n,"touchcancel",this.onDragEnd))},t}();var t={default:n,drag:function(t,i){return new n(t,i)}};for(var i in t)n[i]=t[i];return n});
//# sourceMappingURL=drag.min.js.map
{
"name": "@daybrush/drag",
"version": "0.15.0",
"version": "0.16.0-rc",
"description": "You can set up drag events in any browser.",

@@ -5,0 +5,0 @@ "main": "./dist/drag.cjs.js",

@@ -6,3 +6,3 @@ import { DragOptions, Client, Position, OnDrag } from "./types";

} from "./utils";
import { addEvent, removeEvent } from "@daybrush/utils";
import { addEvent, removeEvent, now } from "@daybrush/utils";

@@ -28,2 +28,4 @@ /**

private targets: Array<Element | Window> = [];
private prevTime: number = 0;
private isDouble: boolean = false;
/**

@@ -117,3 +119,3 @@ *

}
const { container, pinchOutside, dragstart, preventRightClick } = this.options;
const { container, pinchOutside, dragstart, preventRightClick, preventDefault } = this.options;
const isTouch = this.isTouch;

@@ -164,3 +166,4 @@

}
this.flag && e.preventDefault();
this.isDouble = now() - this.prevTime < 200;
this.flag && preventDefault && e.preventDefault();
}

@@ -245,7 +248,13 @@ public onDrag = (e: any, isScroll?: boolean) => {

const currentTime = now();
const isDouble = !this.isDrag && this.isDouble;
this.prevTime = !this.isDrag && isDouble ? 0 : currentTime;
this.startClients = [];
this.prevClients = [];
dragend && dragend({
type: "dragend",
datas: this.datas,
isDouble,
isDrag: this.isDrag,

@@ -252,0 +261,0 @@ inputEvent: e,

@@ -75,2 +75,3 @@ import { IObject } from "@daybrush/utils";

isDrag: boolean;
isDouble: boolean;
datas: IObject<any>;

@@ -77,0 +78,0 @@ inputEvent: any;

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc