Jesus sucks
This commit is contained in:
163
backend/frontend/node_modules/@restart/ui/cjs/usePopper.js
generated
vendored
Normal file
163
backend/frontend/node_modules/@restart/ui/cjs/usePopper.js
generated
vendored
Normal file
@@ -0,0 +1,163 @@
|
||||
"use strict";
|
||||
|
||||
exports.__esModule = true;
|
||||
exports.default = void 0;
|
||||
var _react = require("react");
|
||||
var _dequal = require("dequal");
|
||||
var _useSafeState = _interopRequireDefault(require("@restart/hooks/useSafeState"));
|
||||
var _popper = require("./popper");
|
||||
const _excluded = ["enabled", "placement", "strategy", "modifiers"];
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
||||
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
|
||||
const disabledApplyStylesModifier = {
|
||||
name: 'applyStyles',
|
||||
enabled: false,
|
||||
phase: 'afterWrite',
|
||||
fn: () => undefined
|
||||
};
|
||||
|
||||
// until docjs supports type exports...
|
||||
|
||||
const ariaDescribedByModifier = {
|
||||
name: 'ariaDescribedBy',
|
||||
enabled: true,
|
||||
phase: 'afterWrite',
|
||||
effect: ({
|
||||
state
|
||||
}) => () => {
|
||||
const {
|
||||
reference,
|
||||
popper
|
||||
} = state.elements;
|
||||
if ('removeAttribute' in reference) {
|
||||
const ids = (reference.getAttribute('aria-describedby') || '').split(',').filter(id => id.trim() !== popper.id);
|
||||
if (!ids.length) reference.removeAttribute('aria-describedby');else reference.setAttribute('aria-describedby', ids.join(','));
|
||||
}
|
||||
},
|
||||
fn: ({
|
||||
state
|
||||
}) => {
|
||||
var _popper$getAttribute;
|
||||
const {
|
||||
popper,
|
||||
reference
|
||||
} = state.elements;
|
||||
const role = (_popper$getAttribute = popper.getAttribute('role')) == null ? void 0 : _popper$getAttribute.toLowerCase();
|
||||
if (popper.id && role === 'tooltip' && 'setAttribute' in reference) {
|
||||
const ids = reference.getAttribute('aria-describedby');
|
||||
if (ids && ids.split(',').indexOf(popper.id) !== -1) {
|
||||
return;
|
||||
}
|
||||
reference.setAttribute('aria-describedby', ids ? `${ids},${popper.id}` : popper.id);
|
||||
}
|
||||
}
|
||||
};
|
||||
const EMPTY_MODIFIERS = [];
|
||||
/**
|
||||
* Position an element relative some reference element using Popper.js
|
||||
*
|
||||
* @param referenceElement
|
||||
* @param popperElement
|
||||
* @param {object} options
|
||||
* @param {object=} options.modifiers Popper.js modifiers
|
||||
* @param {boolean=} options.enabled toggle the popper functionality on/off
|
||||
* @param {string=} options.placement The popper element placement relative to the reference element
|
||||
* @param {string=} options.strategy the positioning strategy
|
||||
* @param {function=} options.onCreate called when the popper is created
|
||||
* @param {function=} options.onUpdate called when the popper is updated
|
||||
*
|
||||
* @returns {UsePopperState} The popper state
|
||||
*/
|
||||
function usePopper(referenceElement, popperElement, _ref = {}) {
|
||||
let {
|
||||
enabled = true,
|
||||
placement = 'bottom',
|
||||
strategy = 'absolute',
|
||||
modifiers = EMPTY_MODIFIERS
|
||||
} = _ref,
|
||||
config = _objectWithoutPropertiesLoose(_ref, _excluded);
|
||||
const prevModifiers = (0, _react.useRef)(modifiers);
|
||||
const popperInstanceRef = (0, _react.useRef)();
|
||||
const update = (0, _react.useCallback)(() => {
|
||||
var _popperInstanceRef$cu;
|
||||
(_popperInstanceRef$cu = popperInstanceRef.current) == null ? void 0 : _popperInstanceRef$cu.update();
|
||||
}, []);
|
||||
const forceUpdate = (0, _react.useCallback)(() => {
|
||||
var _popperInstanceRef$cu2;
|
||||
(_popperInstanceRef$cu2 = popperInstanceRef.current) == null ? void 0 : _popperInstanceRef$cu2.forceUpdate();
|
||||
}, []);
|
||||
const [popperState, setState] = (0, _useSafeState.default)((0, _react.useState)({
|
||||
placement,
|
||||
update,
|
||||
forceUpdate,
|
||||
attributes: {},
|
||||
styles: {
|
||||
popper: {},
|
||||
arrow: {}
|
||||
}
|
||||
}));
|
||||
const updateModifier = (0, _react.useMemo)(() => ({
|
||||
name: 'updateStateModifier',
|
||||
enabled: true,
|
||||
phase: 'write',
|
||||
requires: ['computeStyles'],
|
||||
fn: ({
|
||||
state
|
||||
}) => {
|
||||
const styles = {};
|
||||
const attributes = {};
|
||||
Object.keys(state.elements).forEach(element => {
|
||||
styles[element] = state.styles[element];
|
||||
attributes[element] = state.attributes[element];
|
||||
});
|
||||
setState({
|
||||
state,
|
||||
styles,
|
||||
attributes,
|
||||
update,
|
||||
forceUpdate,
|
||||
placement: state.placement
|
||||
});
|
||||
}
|
||||
}), [update, forceUpdate, setState]);
|
||||
const nextModifiers = (0, _react.useMemo)(() => {
|
||||
if (!(0, _dequal.dequal)(prevModifiers.current, modifiers)) {
|
||||
prevModifiers.current = modifiers;
|
||||
}
|
||||
return prevModifiers.current;
|
||||
}, [modifiers]);
|
||||
(0, _react.useEffect)(() => {
|
||||
if (!popperInstanceRef.current || !enabled) return;
|
||||
popperInstanceRef.current.setOptions({
|
||||
placement,
|
||||
strategy,
|
||||
modifiers: [...nextModifiers, updateModifier, disabledApplyStylesModifier]
|
||||
});
|
||||
}, [strategy, placement, updateModifier, enabled, nextModifiers]);
|
||||
(0, _react.useEffect)(() => {
|
||||
if (!enabled || referenceElement == null || popperElement == null) {
|
||||
return undefined;
|
||||
}
|
||||
popperInstanceRef.current = (0, _popper.createPopper)(referenceElement, popperElement, Object.assign({}, config, {
|
||||
placement,
|
||||
strategy,
|
||||
modifiers: [...nextModifiers, ariaDescribedByModifier, updateModifier]
|
||||
}));
|
||||
return () => {
|
||||
if (popperInstanceRef.current != null) {
|
||||
popperInstanceRef.current.destroy();
|
||||
popperInstanceRef.current = undefined;
|
||||
setState(s => Object.assign({}, s, {
|
||||
attributes: {},
|
||||
styles: {
|
||||
popper: {}
|
||||
}
|
||||
}));
|
||||
}
|
||||
};
|
||||
// This is only run once to _create_ the popper
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [enabled, referenceElement, popperElement]);
|
||||
return popperState;
|
||||
}
|
||||
var _default = exports.default = usePopper;
|
||||
Reference in New Issue
Block a user