🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

use-popper

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

use-popper - npm Package Compare versions

Comparing version
0.0.0
to
0.0.1
+5
README.md
# Use Popper
![npm](https://img.shields.io/npm/dt/use-popper.svg)
![npm](https://img.shields.io/npm/v/use-popper.svg)
![NpmLicense](https://img.shields.io/npm/l/use-popper.svg)
{
"extends": ["config:base"],
"automerge": true,
"major": {
"automerge": false
}
}
import Popper from 'popper.js';
import React from 'react';
import usePopperState from './usePopperState';
export interface Options {
placement?: Popper.Placement;
positionFixed?: boolean;
eventsEnabled?: boolean;
modifiers?: Popper.Modifiers;
}
function usePopper({
placement = 'bottom',
positionFixed = false,
eventsEnabled = true,
modifiers = {},
}: Options) {
const popperInstance = React.useRef<Popper>(null);
const [popperStyles, updatePopperState] = usePopperState(placement);
const [referrenceNode, referrenceRef] = React.useState<Element | null>(null);
const [popperNode, popperRef] = React.useState<Element | null>(null);
const [arrowNode, arrowRef] = React.useState<Element | null>(null);
React.useEffect(() => {
if (popperInstance.current !== null) {
popperInstance.current.destroy();
}
if (referrenceNode === null || popperNode === null) return;
// @ts-ignore
popperInstance.current = new Popper(referrenceNode, popperNode, {
placement,
positionFixed,
modifiers: {
...modifiers,
arrow: {
...(modifiers && modifiers.arrow),
enabled: Boolean(arrowNode),
element: arrowNode as Element,
},
applyStyle: { enabled: false },
updateStateModifier: {
enabled: true,
order: 900,
fn: updatePopperState,
},
},
});
return () => {
if (popperInstance.current !== null) {
popperInstance.current.destroy();
}
};
}, [
arrowNode,
referrenceNode,
popperNode,
placement,
positionFixed,
modifiers,
]);
React.useEffect(() => {
if (!popperInstance.current) return;
if (eventsEnabled) {
popperInstance.current.enableEventListeners();
} else {
popperInstance.current.disableEventListeners();
}
}, [eventsEnabled, popperInstance.current]);
React.useEffect(() => {
if (popperInstance.current) {
popperInstance.current.scheduleUpdate();
}
});
return {
placement: popperStyles.placement,
referrence: {
ref: referrenceRef,
},
popper: {
ref: popperRef,
styles: popperStyles.popperStyles as React.CSSProperties,
},
arrow: {
ref: arrowRef,
styles: popperStyles.arrowStyles as React.CSSProperties,
},
};
}
export default usePopper;
import Popper from 'popper.js';
import React from 'react';
// @ts-ignore
const popperStyles: Popper.Data['styles'] = {
position: 'absolute',
top: '0',
left: '0',
opacity: '0',
pointerEvents: 'none',
};
function usePopperState(
placement: Popper.Placement
): [
{
placement: Popper.Placement;
popperStyles: CSSStyleDeclaration;
arrowStyles?: CSSStyleDeclaration;
},
(data: Popper.Data) => Popper.Data
] {
const [currentPopperStyles, setPopperStyles] = React.useState(popperStyles);
const [currentArrowStyles, setArrowStyles] = React.useState<
Popper.Data['arrowStyles']
>();
const [currentPlacement, setPlacement] = React.useState<Popper.Placement>(
placement
);
const setState = React.useCallback((data: Popper.Data) => {
const { styles, arrowStyles, placement: p } = data;
setPopperStyles(styles);
setArrowStyles(arrowStyles);
setPlacement(p);
return data;
}, []);
const state = {
placement: currentPlacement,
popperStyles: currentPopperStyles,
arrowStyles: currentArrowStyles,
};
return [state, setState];
}
export default usePopperState;
{
"compilerOptions": {
"target": "es2018",
"module": "esnext",
"moduleResolution": "node",
"strict": true,
"allowSyntheticDefaultImports": true
},
"include": ["src"]
}

Sorry, the diff of this file is too big to display

+42
-13
{
"name": "use-popper",
"version": "0.0.0",
"description": "",
"main": "index.js",
"version": "0.0.1",
"license": "MIT",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"tsc": "tsc --noEmit"
},
"repository": {
"type": "git",
"url": "git+https://github.com/sandiiarov/use-popper.git"
"babel": {
"presets": [
"@babel/preset-typescript",
"@babel/preset-react"
]
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/sandiiarov/use-popper/issues"
"@pika/pack": {
"pipeline": [
[
"@pika/plugin-standard-pkg"
],
[
"@pika/plugin-build-node"
],
[
"@pika/plugin-build-web"
],
[
"@pika/plugin-build-types"
]
]
},
"homepage": "https://github.com/sandiiarov/use-popper#readme"
"peerDependencies": {
"react": ">=16.8.0"
},
"dependencies": {
"popper.js": "1.14.7"
},
"devDependencies": {
"@babel/preset-react": "7.0.0",
"@babel/preset-typescript": "7.3.3",
"@pika/pack": "0.3.5",
"@pika/plugin-build-node": "0.3.14",
"@pika/plugin-build-types": "0.3.14",
"@pika/plugin-build-web": "0.3.14",
"@pika/plugin-standard-pkg": "0.3.14",
"@types/react": "16.8.8",
"react": "16.8.5",
"react-dom": "16.8.5",
"typescript": "3.3.3333"
}
}