@blueprintjs/core
Version:
Core styles & components
60 lines • 2.39 kB
JavaScript
;
/* !
* (c) Copyright 2026 Palantir Technologies Inc. All rights reserved.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertMiddlewareConfigToArray = void 0;
const react_1 = require("@floating-ui/react");
/**
* Converts a middleware configuration object to a properly ordered array of Floating UI middleware.
*
* @param overrides - Configuration object containing middleware options
* @returns Array of Floating UI middleware instances in the correct order
*
* @see https://floating-ui.com/docs/middleware#ordering
*/
function convertMiddlewareConfigToArray(overrides) {
const middlewares = [];
// offset() should always go at the beginning
if (overrides.offset) {
middlewares.push((0, react_1.offset)(overrides.offset));
}
// inline() should be early, before flip
if (overrides.inline) {
middlewares.push((0, react_1.inline)(overrides.inline));
}
// Positioning middleware (autoPlacement and flip are mutually exclusive)
// autoPlacement uses "most space" strategy, flip uses "fallback when no space" strategy
if (overrides.autoPlacement && overrides.flip) {
console.warn("autoPlacement and flip are mutually exclusive. Using autoPlacement and ignoring flip.");
middlewares.push((0, react_1.autoPlacement)(overrides.autoPlacement));
}
else if (overrides.flip) {
middlewares.push((0, react_1.flip)(overrides.flip));
}
else {
middlewares.push((0, react_1.autoPlacement)(overrides.autoPlacement));
}
// shift() after positioning middleware
if (overrides.shift) {
middlewares.push((0, react_1.shift)(overrides.shift));
}
// size() after positioning middleware
if (overrides.size) {
middlewares.push((0, react_1.size)(overrides.size));
}
// arrow() should be near the end, after shift/autoPlacement
if (overrides.arrow && overrides.arrow.element) {
middlewares.push((0, react_1.arrow)({
element: overrides.arrow.element,
padding: overrides.arrow.padding,
}));
}
// hide() should always go at the end
if (overrides.hide) {
middlewares.push((0, react_1.hide)(overrides.hide));
}
return middlewares;
}
exports.convertMiddlewareConfigToArray = convertMiddlewareConfigToArray;
//# sourceMappingURL=floatingUtils.js.map