Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

@floating-ui/react-dom

Package Overview
Dependencies
Maintainers
2
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@floating-ui/react-dom - npm Package Compare versions

Comparing version 1.2.2 to 1.3.0

25

dist/floating-ui.react-dom.esm.js

@@ -8,4 +8,5 @@ import { arrow as arrow$1, computePosition } from '@floating-ui/dom';

/**
* Positions an inner element of the floating element such that it is centered
* to the reference element.
* A data provider that provides data to position an inner element of the
* floating element (usually a triangle or caret) so that it is centered to the
* reference element.
* This wraps the core `arrow` middleware to allow React refs as the element.

@@ -103,2 +104,6 @@ * @see https://floating-ui.com/docs/arrow

/**
* Provides data to position a floating element.
* @see https://floating-ui.com/docs/react
*/
function useFloating(options) {

@@ -112,2 +117,3 @@ if (options === void 0) {

middleware = [],
platform,
whileElementsMounted,

@@ -132,2 +138,3 @@ open

const whileElementsMountedRef = useLatestRef(whileElementsMounted);
const platformRef = useLatestRef(platform);
const [reference, _setReference] = React.useState(null);

@@ -151,7 +158,11 @@ const [floating, _setFloating] = React.useState(null);

}
computePosition(referenceRef.current, floatingRef.current, {
middleware: latestMiddleware,
const config = {
placement,
strategy
}).then(data => {
strategy,
middleware: latestMiddleware
};
if (platformRef.current) {
config.platform = platformRef.current;
}
computePosition(referenceRef.current, floatingRef.current, config).then(data => {
const fullData = {

@@ -168,3 +179,3 @@ ...data,

});
}, [latestMiddleware, placement, strategy]);
}, [latestMiddleware, placement, strategy, platformRef]);
index(() => {

@@ -171,0 +182,0 @@ if (open === false && dataRef.current.isPositioned) {

@@ -1,1 +0,1 @@

import{arrow as e,computePosition as t}from"@floating-ui/dom";export{autoPlacement,autoUpdate,computePosition,detectOverflow,flip,getOverflowAncestors,hide,inline,limitShift,offset,platform,shift,size}from"@floating-ui/dom";import*as r from"react";import{useLayoutEffect as n,useEffect as o}from"react";import*as u from"react-dom";const i=t=>{const{element:r,padding:n}=t;return{name:"arrow",options:t,fn(t){return o=r,Object.prototype.hasOwnProperty.call(o,"current")?null!=r.current?e({element:r.current,padding:n}).fn(t):{}:r?e({element:r,padding:n}).fn(t):{};var o}}};var c="undefined"!=typeof document?n:o;function s(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;let r,n,o;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;0!=n--;)if(!s(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;0!=n--;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=r;0!=n--;){const r=o[n];if(("_owner"!==r||!e.$$typeof)&&!s(e[r],t[r]))return!1}return!0}return e!=e&&t!=t}function f(e){void 0===e&&(e={});const{placement:n="bottom",strategy:o="absolute",middleware:i=[],whileElementsMounted:f,open:l}=e,[a,m]=r.useState({x:null,y:null,strategy:o,placement:n,middlewareData:{},isPositioned:!1}),[p,d]=r.useState(i);s(p,i)||d(i);const g=r.useRef(null),y=r.useRef(null),h=r.useRef(a),w=function(e){const t=r.useRef(e);return c((()=>{t.current=e})),t}(f),[b,P]=r.useState(null),[O,S]=r.useState(null),R=r.useCallback((e=>{g.current!==e&&(g.current=e,P(e))}),[]),j=r.useCallback((e=>{y.current!==e&&(y.current=e,S(e))}),[]),k=r.useCallback((()=>{g.current&&y.current&&t(g.current,y.current,{middleware:p,placement:n,strategy:o}).then((e=>{const t={...e,isPositioned:!0};v.current&&!s(h.current,t)&&(h.current=t,u.flushSync((()=>{m(t)})))}))}),[p,n,o]);c((()=>{!1===l&&h.current.isPositioned&&(h.current.isPositioned=!1,m((e=>({...e,isPositioned:!1}))))}),[l]);const v=r.useRef(!1);c((()=>(v.current=!0,()=>{v.current=!1})),[]),c((()=>{if(b&&O){if(w.current)return w.current(b,O,k);k()}}),[b,O,k,w]);const M=r.useMemo((()=>({reference:g,floating:y,setReference:R,setFloating:j})),[R,j]),x=r.useMemo((()=>({reference:b,floating:O})),[b,O]);return r.useMemo((()=>({...a,update:k,refs:M,elements:x,reference:R,floating:j})),[a,k,M,x,R,j])}export{i as arrow,f as useFloating};
import{arrow as e,computePosition as t}from"@floating-ui/dom";export{autoPlacement,autoUpdate,computePosition,detectOverflow,flip,getOverflowAncestors,hide,inline,limitShift,offset,platform,shift,size}from"@floating-ui/dom";import*as r from"react";import{useLayoutEffect as n,useEffect as o}from"react";import*as u from"react-dom";const i=t=>{const{element:r,padding:n}=t;return{name:"arrow",options:t,fn(t){return o=r,Object.prototype.hasOwnProperty.call(o,"current")?null!=r.current?e({element:r.current,padding:n}).fn(t):{}:r?e({element:r,padding:n}).fn(t):{};var o}}};var c="undefined"!=typeof document?n:o;function f(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;let r,n,o;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;0!=n--;)if(!f(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;0!=n--;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=r;0!=n--;){const r=o[n];if(("_owner"!==r||!e.$$typeof)&&!f(e[r],t[r]))return!1}return!0}return e!=e&&t!=t}function s(e){const t=r.useRef(e);return c((()=>{t.current=e})),t}function l(e){void 0===e&&(e={});const{placement:n="bottom",strategy:o="absolute",middleware:i=[],platform:l,whileElementsMounted:a,open:m}=e,[p,d]=r.useState({x:null,y:null,strategy:o,placement:n,middlewareData:{},isPositioned:!1}),[g,y]=r.useState(i);f(g,i)||y(i);const h=r.useRef(null),w=r.useRef(null),b=r.useRef(p),P=s(a),O=s(l),[S,R]=r.useState(null),[j,k]=r.useState(null),v=r.useCallback((e=>{h.current!==e&&(h.current=e,R(e))}),[]),M=r.useCallback((e=>{w.current!==e&&(w.current=e,k(e))}),[]),x=r.useCallback((()=>{if(!h.current||!w.current)return;const e={placement:n,strategy:o,middleware:g};O.current&&(e.platform=O.current),t(h.current,w.current,e).then((e=>{const t={...e,isPositioned:!0};A.current&&!f(b.current,t)&&(b.current=t,u.flushSync((()=>{d(t)})))}))}),[g,n,o,O]);c((()=>{!1===m&&b.current.isPositioned&&(b.current.isPositioned=!1,d((e=>({...e,isPositioned:!1}))))}),[m]);const A=r.useRef(!1);c((()=>(A.current=!0,()=>{A.current=!1})),[]),c((()=>{if(S&&j){if(P.current)return P.current(S,j,x);x()}}),[S,j,x,P]);const C=r.useMemo((()=>({reference:h,floating:w,setReference:v,setFloating:M})),[v,M]),$=r.useMemo((()=>({reference:S,floating:j})),[S,j]);return r.useMemo((()=>({...p,update:x,refs:C,elements:$,reference:v,floating:M})),[p,x,C,$,v,M])}export{i as arrow,l as useFloating};

@@ -29,4 +29,5 @@ (function (global, factory) {

/**
* Positions an inner element of the floating element such that it is centered
* to the reference element.
* A data provider that provides data to position an inner element of the
* floating element (usually a triangle or caret) so that it is centered to the
* reference element.
* This wraps the core `arrow` middleware to allow React refs as the element.

@@ -124,2 +125,6 @@ * @see https://floating-ui.com/docs/arrow

/**
* Provides data to position a floating element.
* @see https://floating-ui.com/docs/react
*/
function useFloating(options) {

@@ -133,2 +138,3 @@ if (options === void 0) {

middleware = [],
platform,
whileElementsMounted,

@@ -153,2 +159,3 @@ open

const whileElementsMountedRef = useLatestRef(whileElementsMounted);
const platformRef = useLatestRef(platform);
const [reference, _setReference] = React__namespace.useState(null);

@@ -172,7 +179,11 @@ const [floating, _setFloating] = React__namespace.useState(null);

}
dom.computePosition(referenceRef.current, floatingRef.current, {
middleware: latestMiddleware,
const config = {
placement,
strategy
}).then(data => {
strategy,
middleware: latestMiddleware
};
if (platformRef.current) {
config.platform = platformRef.current;
}
dom.computePosition(referenceRef.current, floatingRef.current, config).then(data => {
const fullData = {

@@ -189,3 +200,3 @@ ...data,

});
}, [latestMiddleware, placement, strategy]);
}, [latestMiddleware, placement, strategy, platformRef]);
index(() => {

@@ -192,0 +203,0 @@ if (open === false && dataRef.current.isPositioned) {

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@floating-ui/dom"),require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["exports","@floating-ui/dom","react","react-dom"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).FloatingUIReactDOM={},e.FloatingUIDOM,e.React,e.ReactDOM)}(this,(function(e,t,r,n){"use strict";function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=o(r),i=o(n);var f="undefined"!=typeof document?r.useLayoutEffect:r.useEffect;function c(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;let r,n,o;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;0!=n--;)if(!c(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;0!=n--;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=r;0!=n--;){const r=o[n];if(("_owner"!==r||!e.$$typeof)&&!c(e[r],t[r]))return!1}return!0}return e!=e&&t!=t}Object.defineProperty(e,"autoPlacement",{enumerable:!0,get:function(){return t.autoPlacement}}),Object.defineProperty(e,"autoUpdate",{enumerable:!0,get:function(){return t.autoUpdate}}),Object.defineProperty(e,"computePosition",{enumerable:!0,get:function(){return t.computePosition}}),Object.defineProperty(e,"detectOverflow",{enumerable:!0,get:function(){return t.detectOverflow}}),Object.defineProperty(e,"flip",{enumerable:!0,get:function(){return t.flip}}),Object.defineProperty(e,"getOverflowAncestors",{enumerable:!0,get:function(){return t.getOverflowAncestors}}),Object.defineProperty(e,"hide",{enumerable:!0,get:function(){return t.hide}}),Object.defineProperty(e,"inline",{enumerable:!0,get:function(){return t.inline}}),Object.defineProperty(e,"limitShift",{enumerable:!0,get:function(){return t.limitShift}}),Object.defineProperty(e,"offset",{enumerable:!0,get:function(){return t.offset}}),Object.defineProperty(e,"platform",{enumerable:!0,get:function(){return t.platform}}),Object.defineProperty(e,"shift",{enumerable:!0,get:function(){return t.shift}}),Object.defineProperty(e,"size",{enumerable:!0,get:function(){return t.size}}),e.arrow=e=>{const{element:r,padding:n}=e;return{name:"arrow",options:e,fn(e){return o=r,Object.prototype.hasOwnProperty.call(o,"current")?null!=r.current?t.arrow({element:r.current,padding:n}).fn(e):{}:r?t.arrow({element:r,padding:n}).fn(e):{};var o}}},e.useFloating=function(e){void 0===e&&(e={});const{placement:r="bottom",strategy:n="absolute",middleware:o=[],whileElementsMounted:l,open:a}=e,[s,d]=u.useState({x:null,y:null,strategy:n,placement:r,middlewareData:{},isPositioned:!1}),[p,b]=u.useState(o);c(p,o)||b(o);const m=u.useRef(null),g=u.useRef(null),y=u.useRef(s),O=function(e){const t=u.useRef(e);return f((()=>{t.current=e})),t}(l),[P,j]=u.useState(null),[h,w]=u.useState(null),v=u.useCallback((e=>{m.current!==e&&(m.current=e,j(e))}),[]),M=u.useCallback((e=>{g.current!==e&&(g.current=e,w(e))}),[]),R=u.useCallback((()=>{m.current&&g.current&&t.computePosition(m.current,g.current,{middleware:p,placement:r,strategy:n}).then((e=>{const t={...e,isPositioned:!0};S.current&&!c(y.current,t)&&(y.current=t,i.flushSync((()=>{d(t)})))}))}),[p,r,n]);f((()=>{!1===a&&y.current.isPositioned&&(y.current.isPositioned=!1,d((e=>({...e,isPositioned:!1}))))}),[a]);const S=u.useRef(!1);f((()=>(S.current=!0,()=>{S.current=!1})),[]),f((()=>{if(P&&h){if(O.current)return O.current(P,h,R);R()}}),[P,h,R,O]);const k=u.useMemo((()=>({reference:m,floating:g,setReference:v,setFloating:M})),[v,M]),D=u.useMemo((()=>({reference:P,floating:h})),[P,h]);return u.useMemo((()=>({...s,update:R,refs:k,elements:D,reference:v,floating:M})),[s,R,k,D,v,M])},Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@floating-ui/dom"),require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["exports","@floating-ui/dom","react","react-dom"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).FloatingUIReactDOM={},e.FloatingUIDOM,e.React,e.ReactDOM)}(this,(function(e,t,r,n){"use strict";function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=o(r),i=o(n);var f="undefined"!=typeof document?r.useLayoutEffect:r.useEffect;function c(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;let r,n,o;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;0!=n--;)if(!c(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;0!=n--;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=r;0!=n--;){const r=o[n];if(("_owner"!==r||!e.$$typeof)&&!c(e[r],t[r]))return!1}return!0}return e!=e&&t!=t}function l(e){const t=u.useRef(e);return f((()=>{t.current=e})),t}Object.defineProperty(e,"autoPlacement",{enumerable:!0,get:function(){return t.autoPlacement}}),Object.defineProperty(e,"autoUpdate",{enumerable:!0,get:function(){return t.autoUpdate}}),Object.defineProperty(e,"computePosition",{enumerable:!0,get:function(){return t.computePosition}}),Object.defineProperty(e,"detectOverflow",{enumerable:!0,get:function(){return t.detectOverflow}}),Object.defineProperty(e,"flip",{enumerable:!0,get:function(){return t.flip}}),Object.defineProperty(e,"getOverflowAncestors",{enumerable:!0,get:function(){return t.getOverflowAncestors}}),Object.defineProperty(e,"hide",{enumerable:!0,get:function(){return t.hide}}),Object.defineProperty(e,"inline",{enumerable:!0,get:function(){return t.inline}}),Object.defineProperty(e,"limitShift",{enumerable:!0,get:function(){return t.limitShift}}),Object.defineProperty(e,"offset",{enumerable:!0,get:function(){return t.offset}}),Object.defineProperty(e,"platform",{enumerable:!0,get:function(){return t.platform}}),Object.defineProperty(e,"shift",{enumerable:!0,get:function(){return t.shift}}),Object.defineProperty(e,"size",{enumerable:!0,get:function(){return t.size}}),e.arrow=e=>{const{element:r,padding:n}=e;return{name:"arrow",options:e,fn(e){return o=r,Object.prototype.hasOwnProperty.call(o,"current")?null!=r.current?t.arrow({element:r.current,padding:n}).fn(e):{}:r?t.arrow({element:r,padding:n}).fn(e):{};var o}}},e.useFloating=function(e){void 0===e&&(e={});const{placement:r="bottom",strategy:n="absolute",middleware:o=[],platform:a,whileElementsMounted:s,open:d}=e,[p,m]=u.useState({x:null,y:null,strategy:n,placement:r,middlewareData:{},isPositioned:!1}),[b,g]=u.useState(o);c(b,o)||g(o);const y=u.useRef(null),O=u.useRef(null),P=u.useRef(p),j=l(s),h=l(a),[w,v]=u.useState(null),[M,R]=u.useState(null),S=u.useCallback((e=>{y.current!==e&&(y.current=e,v(e))}),[]),k=u.useCallback((e=>{O.current!==e&&(O.current=e,R(e))}),[]),D=u.useCallback((()=>{if(!y.current||!O.current)return;const e={placement:r,strategy:n,middleware:b};h.current&&(e.platform=h.current),t.computePosition(y.current,O.current,e).then((e=>{const t={...e,isPositioned:!0};_.current&&!c(P.current,t)&&(P.current=t,i.flushSync((()=>{m(t)})))}))}),[b,r,n,h]);f((()=>{!1===d&&P.current.isPositioned&&(P.current.isPositioned=!1,m((e=>({...e,isPositioned:!1}))))}),[d]);const _=u.useRef(!1);f((()=>(_.current=!0,()=>{_.current=!1})),[]),f((()=>{if(w&&M){if(j.current)return j.current(w,M,D);D()}}),[w,M,D,j]);const x=u.useMemo((()=>({reference:y,floating:O,setReference:S,setFloating:k})),[S,k]),A=u.useMemo((()=>({reference:w,floating:M})),[w,M]);return u.useMemo((()=>({...p,update:D,refs:x,elements:A,reference:S,floating:k})),[p,D,x,A,S,k])},Object.defineProperty(e,"__esModule",{value:!0})}));
{
"name": "@floating-ui/react-dom",
"version": "1.2.2",
"version": "1.3.0",
"@rollingversions": {

@@ -62,3 +62,3 @@ "baseVersion": [

"dependencies": {
"@floating-ui/dom": "^1.1.1"
"@floating-ui/dom": "^1.2.1"
},

@@ -65,0 +65,0 @@ "devDependencies": {

import type { Middleware, SideObject } from '@floating-ui/core';
import * as React from 'react';
export interface Options {
element: React.MutableRefObject<Element | null> | Element;
padding?: number | SideObject;
}
/**
* Positions an inner element of the floating element such that it is centered
* to the reference element.
* A data provider that provides data to position an inner element of the
* floating element (usually a triangle or caret) so that it is centered to the
* reference element.
* This wraps the core `arrow` middleware to allow React refs as the element.
* @see https://floating-ui.com/docs/arrow
*/
export declare const arrow: (options: {
element: React.MutableRefObject<Element | null> | Element;
padding?: number | SideObject;
}) => Middleware;
export declare const arrow: (options: Options) => Middleware;
import type { ComputePositionConfig, ComputePositionReturn, VirtualElement } from '@floating-ui/dom';
import * as React from 'react';
export { arrow } from './arrow';
export { arrow, Options as ArrowOptions } from './arrow';
export { useFloating } from './useFloating';
export type { AlignedPlacement, Alignment, AutoUpdateOptions, Axis, Boundary, ClientRectObject, ComputePositionConfig, ComputePositionReturn, Coords, DetectOverflowOptions, Dimensions, ElementContext, ElementRects, Elements, FloatingElement, Length, Middleware, MiddlewareArguments, MiddlewareData, MiddlewareReturn, NodeScroll, Padding, Placement, Platform, Rect, ReferenceElement, RootBoundary, Side, SideObject, SizeOptions, Strategy, VirtualElement, } from '@floating-ui/dom';
export type { AlignedPlacement, Alignment, AutoPlacementOptions, AutoUpdateOptions, Axis, Boundary, ClientRectObject, ComputePositionConfig, ComputePositionReturn, Coords, DetectOverflowOptions, Dimensions, ElementContext, ElementRects, Elements, FlipOptions, FloatingElement, HideOptions, InlineOptions, Length, Middleware, MiddlewareArguments, MiddlewareData, MiddlewareReturn, MiddlewareState, NodeScroll, OffsetOptions, Padding, Placement, Platform, Rect, ReferenceElement, RootBoundary, ShiftOptions, Side, SideObject, SizeOptions, Strategy, VirtualElement, } from '@floating-ui/dom';
export { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size, } from '@floating-ui/dom';
export type UseFloatingData = Omit<ComputePositionReturn, 'x' | 'y'> & {
type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
export type UseFloatingData = Prettify<Omit<ComputePositionReturn, 'x' | 'y'> & {
x: number | null;
y: number | null;
isPositioned: boolean;
};
}>;
export type ReferenceType = Element | VirtualElement;
export type UseFloatingReturn<RT extends ReferenceType = ReferenceType> = UseFloatingData & {
export type UseFloatingReturn<RT extends ReferenceType = ReferenceType> = Prettify<UseFloatingData & {
/**
* Update the position of the floating element, re-rendering the component
* if required.
*/
update: () => void;
/**
* @deprecated use `refs.setReference` instead.
*/
reference: (node: RT | null) => void;
/**
* @deprecated use `refs.setFloating` instead.
*/
floating: (node: HTMLElement | null) => void;

@@ -27,6 +40,6 @@ refs: {

};
};
export type UseFloatingProps<RT extends ReferenceType = ReferenceType> = Omit<Partial<ComputePositionConfig>, 'platform'> & {
}>;
export type UseFloatingProps<RT extends ReferenceType = ReferenceType> = Prettify<Partial<ComputePositionConfig> & {
whileElementsMounted?: (reference: RT, floating: HTMLElement, update: () => void) => void | (() => void);
open?: boolean;
};
}>;
import type { ReferenceType, UseFloatingProps, UseFloatingReturn } from './types';
/**
* Provides data to position a floating element.
* @see https://floating-ui.com/docs/react
*/
export declare function useFloating<RT extends ReferenceType = ReferenceType>(options?: UseFloatingProps): UseFloatingReturn<RT>;

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