Socket
Socket
Sign inDemoInstall

@interactjs/inertia

Package Overview
Dependencies
Maintainers
2
Versions
137
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@interactjs/inertia - npm Package Compare versions

Comparing version 1.10.25 to 1.10.26

27

index.js

@@ -1,9 +0,22 @@

"use strict";
/**
* interact.js 1.10.26
*
* Copyright (c) 2012-present Taye Adeyemi <dev@taye.me>
* Released under the MIT License.
* https://raw.github.com/taye/interact.js/main/LICENSE
*/
var _plugin = _interopRequireDefault(require("./plugin.js"));
var _index = _interopRequireDefault(require("../interact/index.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
import inertia from './plugin.js';
import interact from "../interact/index.js";
import "../modifiers/base.js";
import "../offset/plugin.js";
import "../modifiers/Modification.js";
import "../utils/domUtils.js";
import "../utils/hypot.js";
import "../utils/is.js";
import "../utils/pointerUtils.js";
import "../utils/raf.js";
/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */
_index.default.use(_plugin.default);
//# sourceMappingURL=index.js.map
interact.use(inertia);
//# sourceMappingURL=index.js.map

@@ -1,2 +0,4 @@

var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default);
//# sourceMappingURL=index.prod.js.map
/* interact.js 1.10.26 | https://raw.github.com/taye/interact.js/main/LICENSE */
import inertia from"./plugin.prod.js";import interact from"../interact/index.prod.js";import"../modifiers/base.prod.js";import"../offset/plugin.prod.js";import"../modifiers/Modification.prod.js";import"../utils/domUtils.prod.js";import"../utils/hypot.prod.js";import"../utils/is.prod.js";import"../utils/pointerUtils.prod.js";import"../utils/raf.prod.js";interact.use(inertia);
//# sourceMappingURL=index.prod.js.map
{
"name": "@interactjs/inertia",
"version": "1.10.25",
"version": "1.10.26",
"main": "index",

@@ -13,11 +13,11 @@ "module": "index",

"dependencies": {
"@interactjs/offset": "1.10.25"
"@interactjs/offset": "1.10.26"
},
"peerDependencies": {
"@interactjs/core": "1.10.25",
"@interactjs/modifiers": "1.10.25",
"@interactjs/utils": "1.10.25"
"@interactjs/core": "1.10.26",
"@interactjs/modifiers": "1.10.26",
"@interactjs/utils": "1.10.26"
},
"optionalDependencies": {
"@interactjs/interact": "1.10.25"
"@interactjs/interact": "1.10.26"
},

@@ -32,3 +32,3 @@ "publishConfig": {

"license": "MIT",
"gitHead": "ee3c52c4"
"gitHead": "6e7a136f"
}

@@ -1,22 +0,19 @@

"use strict";
/**
* interact.js 1.10.26
*
* Copyright (c) 2012-present Taye Adeyemi <dev@taye.me>
* Released under the MIT License.
* https://raw.github.com/taye/interact.js/main/LICENSE
*/
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.InertiaState = void 0;
var modifiers = _interopRequireWildcard(require("../modifiers/base.js"));
var _plugin = _interopRequireDefault(require("../offset/plugin.js"));
var _Modification = require("../modifiers/Modification.js");
var dom = _interopRequireWildcard(require("../utils/domUtils.js"));
var _hypot = _interopRequireDefault(require("../utils/hypot.js"));
var _is = _interopRequireDefault(require("../utils/is.js"));
var _pointerUtils = require("../utils/pointerUtils.js");
var _raf = _interopRequireDefault(require("../utils/raf.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
import * as modifiers from "../modifiers/base.js";
import offset from "../offset/plugin.js";
import { Modification } from "../modifiers/Modification.js";
import * as dom from "../utils/domUtils.js";
import hypot from "../utils/hypot.js";
import is from "../utils/is.js";
import { copyCoords } from "../utils/pointerUtils.js";
import raf from "../utils/raf.js";
/* eslint-disable import/no-duplicates -- for typescript module augmentations */
/* eslint-enable import/no-duplicates */
function install(scope) {

@@ -26,3 +23,3 @@ const {

} = scope;
scope.usePlugin(_plugin.default);
scope.usePlugin(offset);
scope.usePlugin(modifiers.default);

@@ -45,21 +42,23 @@ scope.actions.phases.inertiastart = true;

class InertiaState {
active = false;
isModified = false;
smoothEnd = false;
allowResume = false;
modification;
modifierCount = 0;
modifierArg;
startCoords;
t0 = 0;
v0 = 0;
te = 0;
targetOffset;
modifiedOffset;
currentOffset;
lambda_v0 = 0; // eslint-disable-line camelcase
one_ve_v0 = 0; // eslint-disable-line camelcase
timeout;
interaction;
constructor(interaction) {
this.active = false;
this.isModified = false;
this.smoothEnd = false;
this.allowResume = false;
this.modification = void 0;
this.modifierCount = 0;
this.modifierArg = void 0;
this.startCoords = void 0;
this.t0 = 0;
this.v0 = 0;
this.te = 0;
this.targetOffset = void 0;
this.modifiedOffset = void 0;
this.currentOffset = void 0;
this.lambda_v0 = 0;
// eslint-disable-line camelcase
this.one_ve_v0 = 0;
// eslint-disable-line camelcase
this.timeout = void 0;
this.interaction = void 0;
this.interaction = interaction;

@@ -78,4 +77,4 @@ }

} = interaction.coords.velocity;
const pointerSpeed = (0, _hypot.default)(velocityClient.x, velocityClient.y);
const modification = this.modification || (this.modification = new _Modification.Modification(interaction));
const pointerSpeed = hypot(velocityClient.x, velocityClient.y);
const modification = this.modification || (this.modification = new Modification(interaction));
modification.copyFrom(interaction.modification);

@@ -166,3 +165,3 @@ this.t0 = interaction._now();

onNextFrame(tickFn) {
this.timeout = _raf.default.request(() => {
this.timeout = raf.request(() => {
if (this.active) {

@@ -240,7 +239,8 @@ tickFn();

}
resume({
pointer,
event,
eventTarget
}) {
resume(_ref) {
let {
pointer,
event,
eventTarget
} = _ref;
const {

@@ -265,3 +265,3 @@ interaction

});
(0, _pointerUtils.copyCoords)(interaction.coords.prev, interaction.coords.cur);
copyCoords(interaction.coords.prev, interaction.coords.cur);
this.stop();

@@ -277,10 +277,10 @@ }

this.interaction.simulation = null;
_raf.default.cancel(this.timeout);
raf.cancel(this.timeout);
}
}
exports.InertiaState = InertiaState;
function start({
interaction,
event
}) {
function start(_ref2) {
let {
interaction,
event
} = _ref2;
if (!interaction._interacting || interaction.simulation) {

@@ -307,3 +307,3 @@ return null;

// climb up the DOM tree from the event target
while (_is.default.element(element)) {
while (is.element(element)) {
// if interaction element is the current inertia target element

@@ -317,5 +317,6 @@ if (element === interaction.element) {

}
function stop({
interaction
}) {
function stop(_ref3) {
let {
interaction
} = _ref3;
const state = interaction.inertia;

@@ -326,6 +327,7 @@ if (state.active) {

}
function getOptions({
interactable,
prepared
}) {
function getOptions(_ref4) {
let {
interactable,
prepared
} = _ref4;
return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia;

@@ -338,5 +340,6 @@ }

listeners: {
'interactions:new': ({
interaction
}) => {
'interactions:new': _ref5 => {
let {
interaction
} = _ref5;
interaction.inertia = new InertiaState(interaction);

@@ -380,3 +383,3 @@ },

}
var _default = exports.default = inertia;
//# sourceMappingURL=plugin.js.map
export { InertiaState, inertia as default };
//# sourceMappingURL=plugin.js.map

@@ -1,2 +0,4 @@

Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.InertiaState=void 0;var t=d(require("../modifiers/base.prod.js")),e=f(require("../offset/plugin.prod.js")),i=require("../modifiers/Modification.prod.js"),s=d(require("../utils/domUtils.prod.js")),r=f(require("../utils/hypot.prod.js")),o=f(require("../utils/is.prod.js")),n=require("../utils/pointerUtils.prod.js"),a=f(require("../utils/raf.prod.js"));function f(t){return t&&t.__esModule?t:{default:t}}function c(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,i=new WeakMap;return(c=t=>t?i:e)(t)}function d(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var i=c(e);if(i&&i.has(t))return i.get(t);var s={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var n=r?Object.getOwnPropertyDescriptor(t,o):null;n&&(n.get||n.set)?Object.defineProperty(s,o,n):s[o]=t[o]}return s.default=t,i&&i.set(t,s),s}class h{active=!1;isModified=!1;smoothEnd=!1;allowResume=!1;modification;modifierCount=0;modifierArg;startCoords;t0=0;v0=0;te=0;targetOffset;modifiedOffset;currentOffset;lambda_v0=0;one_ve_v0=0;timeout;interaction;constructor(t){this.interaction=t}start(t){const{interaction:e}=this,s=u(e);if(!s||!s.enabled)return!1;const{client:o}=e.coords.velocity,n=(0,r.default)(o.x,o.y),a=this.modification||(this.modification=new i.Modification(e));if(a.copyFrom(e.modification),this.t0=e._now(),this.allowResume=s.allowResume,this.v0=n,this.currentOffset={x:0,y:0},this.startCoords=e.coords.cur.page,this.modifierArg=a.fillArg({pageCoords:this.startCoords,preEnd:!0,phase:"inertiastart"}),this.t0-e.coords.cur.timeStamp<50&&n>s.minSpeed&&n>s.endSpeed)this.startInertia();else{if(a.result=a.setAll(this.modifierArg),!a.result.changed)return!1;this.startSmoothEnd()}return e.modification.result.rect=null,e.offsetBy(this.targetOffset),e._doPhase({interaction:e,event:t,phase:"inertiastart"}),e.offsetBy({x:-this.targetOffset.x,y:-this.targetOffset.y}),e.modification.result.rect=null,this.active=!0,e.simulation=this,!0}startInertia(){const t=this.interaction.coords.velocity.client,e=u(this.interaction),i=e.resistance,s=-Math.log(e.endSpeed/this.v0)/i;this.targetOffset={x:(t.x-s)/i,y:(t.y-s)/i},this.te=s,this.lambda_v0=i/this.v0,this.one_ve_v0=1-e.endSpeed/this.v0;const{modification:r,modifierArg:o}=this;o.pageCoords={x:this.startCoords.x+this.targetOffset.x,y:this.startCoords.y+this.targetOffset.y},r.result=r.setAll(o),r.result.changed&&(this.isModified=!0,this.modifiedOffset={x:this.targetOffset.x+r.result.delta.x,y:this.targetOffset.y+r.result.delta.y}),this.onNextFrame((()=>this.inertiaTick()))}startSmoothEnd(){this.smoothEnd=!0,this.isModified=!0,this.targetOffset={x:this.modification.result.delta.x,y:this.modification.result.delta.y},this.onNextFrame((()=>this.smoothEndTick()))}onNextFrame(t){this.timeout=a.default.request((()=>{this.active&&t()}))}inertiaTick(){const{interaction:t}=this,e=u(t).resistance,i=(t._now()-this.t0)/1e3;if(i<this.te){const f=1-(Math.exp(-e*i)-this.lambda_v0)/this.one_ve_v0;let c;this.isModified?(0,0,s=this.targetOffset.x,r=this.targetOffset.y,o=this.modifiedOffset.x,n=this.modifiedOffset.y,c={x:m(a=f,0,s,o),y:m(a,0,r,n)}):c={x:this.targetOffset.x*f,y:this.targetOffset.y*f};const d={x:c.x-this.currentOffset.x,y:c.y-this.currentOffset.y};this.currentOffset.x+=d.x,this.currentOffset.y+=d.y,t.offsetBy(d),t.move(),this.onNextFrame((()=>this.inertiaTick()))}else t.offsetBy({x:this.modifiedOffset.x-this.currentOffset.x,y:this.modifiedOffset.y-this.currentOffset.y}),this.end();var s,r,o,n,a}smoothEndTick(){const{interaction:t}=this,e=t._now()-this.t0,{smoothEndDuration:i}=u(t);if(e<i){const s={x:p(e,0,this.targetOffset.x,i),y:p(e,0,this.targetOffset.y,i)},r={x:s.x-this.currentOffset.x,y:s.y-this.currentOffset.y};this.currentOffset.x+=r.x,this.currentOffset.y+=r.y,t.offsetBy(r),t.move({skipModifiers:this.modifierCount}),this.onNextFrame((()=>this.smoothEndTick()))}else t.offsetBy({x:this.targetOffset.x-this.currentOffset.x,y:this.targetOffset.y-this.currentOffset.y}),this.end()}resume({pointer:t,event:e,eventTarget:i}){const{interaction:s}=this;s.offsetBy({x:-this.currentOffset.x,y:-this.currentOffset.y}),s.updatePointer(t,e,i,!0),s._doPhase({interaction:s,event:e,phase:"resume"}),(0,n.copyCoords)(s.coords.prev,s.coords.cur),this.stop()}end(){this.interaction.move(),this.interaction.end(),this.stop()}stop(){this.active=this.smoothEnd=!1,this.interaction.simulation=null,a.default.cancel(this.timeout)}}function u({interactable:t,prepared:e}){return t&&t.options&&e.name&&t.options[e.name].inertia}exports.InertiaState=h;const l={id:"inertia",before:["modifiers","actions"],install(i){const{defaults:s}=i;i.usePlugin(e.default),i.usePlugin(t.default),i.actions.phases.inertiastart=!0,i.actions.phases.resume=!0,s.perAction.inertia={enabled:!1,resistance:10,minSpeed:100,endSpeed:10,allowResume:!0,smoothEndDuration:300}},listeners:{"interactions:new"({interaction:t}){t.inertia=new h(t)},"interactions:before-action-end":({interaction:t,event:e})=>(!t._interacting||t.simulation||!t.inertia.start(e))&&null,"interactions:down"(t){const{interaction:e,eventTarget:i}=t,r=e.inertia;if(!r.active)return;let n=i;for(;o.default.element(n);){if(n===e.element){r.resume(t);break}n=s.parentNode(n)}},"interactions:stop"({interaction:t}){const e=t.inertia;e.active&&e.stop()},"interactions:before-action-resume"(t){const{modification:e}=t.interaction;e.stop(t),e.start(t,t.interaction.coords.cur.page),e.applyToInteraction(t)},"interactions:before-action-inertiastart":t=>t.interaction.modification.setAndApply(t),"interactions:action-resume":t.addEventModifiers,"interactions:action-inertiastart":t.addEventModifiers,"interactions:after-action-inertiastart":t=>t.interaction.modification.restoreInteractionCoords(t),"interactions:after-action-resume":t=>t.interaction.modification.restoreInteractionCoords(t)}};function m(t,e,i,s){const r=1-t;return r*r*e+2*r*t*i+t*t*s}function p(t,e,i,s){return-i*(t/=s)*(t-2)+e}exports.default=l;
//# sourceMappingURL=plugin.prod.js.map
/* interact.js 1.10.26 | https://raw.github.com/taye/interact.js/main/LICENSE */
import*as modifiers from"../modifiers/base.prod.js";import offset from"../offset/plugin.prod.js";import{Modification}from"../modifiers/Modification.prod.js";import*as dom from"../utils/domUtils.prod.js";import hypot from"../utils/hypot.prod.js";import is from"../utils/is.prod.js";import{copyCoords}from"../utils/pointerUtils.prod.js";import raf from"../utils/raf.prod.js";function install(t){const{defaults:i}=t;t.usePlugin(offset),t.usePlugin(modifiers.default),t.actions.phases.inertiastart=!0,t.actions.phases.resume=!0,i.perAction.inertia={enabled:!1,resistance:10,minSpeed:100,endSpeed:10,allowResume:!0,smoothEndDuration:300}}class InertiaState{constructor(t){this.active=!1,this.isModified=!1,this.smoothEnd=!1,this.allowResume=!1,this.modification=void 0,this.modifierCount=0,this.modifierArg=void 0,this.startCoords=void 0,this.t0=0,this.v0=0,this.te=0,this.targetOffset=void 0,this.modifiedOffset=void 0,this.currentOffset=void 0,this.lambda_v0=0,this.one_ve_v0=0,this.timeout=void 0,this.interaction=void 0,this.interaction=t}start(t){const{interaction:i}=this,e=getOptions(i);if(!e||!e.enabled)return!1;const{client:s}=i.coords.velocity,o=hypot(s.x,s.y),r=this.modification||(this.modification=new Modification(i));r.copyFrom(i.modification),this.t0=i._now(),this.allowResume=e.allowResume,this.v0=o,this.currentOffset={x:0,y:0},this.startCoords=i.coords.cur.page,this.modifierArg=r.fillArg({pageCoords:this.startCoords,preEnd:!0,phase:"inertiastart"});if(this.t0-i.coords.cur.timeStamp<50&&o>e.minSpeed&&o>e.endSpeed)this.startInertia();else{if(r.result=r.setAll(this.modifierArg),!r.result.changed)return!1;this.startSmoothEnd()}return i.modification.result.rect=null,i.offsetBy(this.targetOffset),i._doPhase({interaction:i,event:t,phase:"inertiastart"}),i.offsetBy({x:-this.targetOffset.x,y:-this.targetOffset.y}),i.modification.result.rect=null,this.active=!0,i.simulation=this,!0}startInertia(){const t=this.interaction.coords.velocity.client,i=getOptions(this.interaction),e=i.resistance,s=-Math.log(i.endSpeed/this.v0)/e;this.targetOffset={x:(t.x-s)/e,y:(t.y-s)/e},this.te=s,this.lambda_v0=e/this.v0,this.one_ve_v0=1-i.endSpeed/this.v0;const{modification:o,modifierArg:r}=this;r.pageCoords={x:this.startCoords.x+this.targetOffset.x,y:this.startCoords.y+this.targetOffset.y},o.result=o.setAll(r),o.result.changed&&(this.isModified=!0,this.modifiedOffset={x:this.targetOffset.x+o.result.delta.x,y:this.targetOffset.y+o.result.delta.y}),this.onNextFrame((()=>this.inertiaTick()))}startSmoothEnd(){this.smoothEnd=!0,this.isModified=!0,this.targetOffset={x:this.modification.result.delta.x,y:this.modification.result.delta.y},this.onNextFrame((()=>this.smoothEndTick()))}onNextFrame(t){this.timeout=raf.request((()=>{this.active&&t()}))}inertiaTick(){const{interaction:t}=this,i=getOptions(t).resistance,e=(t._now()-this.t0)/1e3;if(e<this.te){const s=1-(Math.exp(-i*e)-this.lambda_v0)/this.one_ve_v0;let o;o=this.isModified?getQuadraticCurvePoint(0,0,this.targetOffset.x,this.targetOffset.y,this.modifiedOffset.x,this.modifiedOffset.y,s):{x:this.targetOffset.x*s,y:this.targetOffset.y*s};const r={x:o.x-this.currentOffset.x,y:o.y-this.currentOffset.y};this.currentOffset.x+=r.x,this.currentOffset.y+=r.y,t.offsetBy(r),t.move(),this.onNextFrame((()=>this.inertiaTick()))}else t.offsetBy({x:this.modifiedOffset.x-this.currentOffset.x,y:this.modifiedOffset.y-this.currentOffset.y}),this.end()}smoothEndTick(){const{interaction:t}=this,i=t._now()-this.t0,{smoothEndDuration:e}=getOptions(t);if(i<e){const s={x:easeOutQuad(i,0,this.targetOffset.x,e),y:easeOutQuad(i,0,this.targetOffset.y,e)},o={x:s.x-this.currentOffset.x,y:s.y-this.currentOffset.y};this.currentOffset.x+=o.x,this.currentOffset.y+=o.y,t.offsetBy(o),t.move({skipModifiers:this.modifierCount}),this.onNextFrame((()=>this.smoothEndTick()))}else t.offsetBy({x:this.targetOffset.x-this.currentOffset.x,y:this.targetOffset.y-this.currentOffset.y}),this.end()}resume(t){let{pointer:i,event:e,eventTarget:s}=t;const{interaction:o}=this;o.offsetBy({x:-this.currentOffset.x,y:-this.currentOffset.y}),o.updatePointer(i,e,s,!0),o._doPhase({interaction:o,event:e,phase:"resume"}),copyCoords(o.coords.prev,o.coords.cur),this.stop()}end(){this.interaction.move(),this.interaction.end(),this.stop()}stop(){this.active=this.smoothEnd=!1,this.interaction.simulation=null,raf.cancel(this.timeout)}}function start(t){let{interaction:i,event:e}=t;if(!i._interacting||i.simulation)return null;return!i.inertia.start(e)&&null}function resume(t){const{interaction:i,eventTarget:e}=t,s=i.inertia;if(!s.active)return;let o=e;for(;is.element(o);){if(o===i.element){s.resume(t);break}o=dom.parentNode(o)}}function stop(t){let{interaction:i}=t;const e=i.inertia;e.active&&e.stop()}function getOptions(t){let{interactable:i,prepared:e}=t;return i&&i.options&&e.name&&i.options[e.name].inertia}const inertia={id:"inertia",before:["modifiers","actions"],install:install,listeners:{"interactions:new"(t){let{interaction:i}=t;i.inertia=new InertiaState(i)},"interactions:before-action-end":start,"interactions:down":resume,"interactions:stop":stop,"interactions:before-action-resume"(t){const{modification:i}=t.interaction;i.stop(t),i.start(t,t.interaction.coords.cur.page),i.applyToInteraction(t)},"interactions:before-action-inertiastart"(t){return t.interaction.modification.setAndApply(t)},"interactions:action-resume":modifiers.addEventModifiers,"interactions:action-inertiastart":modifiers.addEventModifiers,"interactions:after-action-inertiastart"(t){return t.interaction.modification.restoreInteractionCoords(t)},"interactions:after-action-resume"(t){return t.interaction.modification.restoreInteractionCoords(t)}}};function _getQBezierValue(t,i,e,s){const o=1-t;return o*o*i+2*o*t*e+t*t*s}function getQuadraticCurvePoint(t,i,e,s,o,r,n){return{x:_getQBezierValue(n,t,e,o),y:_getQBezierValue(n,i,s,r)}}function easeOutQuad(t,i,e,s){return-e*(t/=s)*(t-2)+i}export{InertiaState,inertia as default};
//# sourceMappingURL=plugin.prod.js.map

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