geometry
Minified8.00 KBMinzipped2.00 KBFunctional geometry utilities.
Example
ts
import { Rect } from "@monstermann/geometry";
const anchorElement = document.querySelector(".anchor");
const popoverElement = document.querySelector(".popover");
const boundaryRect = pipe(Rect.fromWindow(), Rect.shrink(20));
const anchorRect = Rect.fromElement(anchorElement);
const popoverRect = pipe(
Rect.fromElement(popoverElement),
Rect.alignTop(anchorRect),
Rect.placeRightOf(anchorRect, 10),
Rect.clamp(boundaryRect),
);
Object.assign(popoverElement.style, {
position: "absolute",
translate: `transform(${popoverRect.left}px, ${popoverRect.top}px)`,
maxHeight: `${boundaryRect.height}px`,
maxWidth: `${boundaryRect.width}px`,
});Installation
sh
npm install @monstermann/geometrysh
pnpm add @monstermann/geometrysh
yarn add @monstermann/geometrysh
bun add @monstermann/geometryTree-shaking
Installation
sh
npm install -D @monstermann/unplugin-geometrysh
pnpm -D add @monstermann/unplugin-geometrysh
yarn -D add @monstermann/unplugin-geometrysh
bun -D add @monstermann/unplugin-geometryUsage
ts
// vite.config.ts
import geometry from "@monstermann/unplugin-geometry/vite";
export default defineConfig({
plugins: [geometry()],
});ts
// rollup.config.js
import geometry from "@monstermann/unplugin-geometry/rollup";
export default {
plugins: [geometry()],
};ts
// rolldown.config.js
import geometry from "@monstermann/unplugin-geometry/rolldown";
export default {
plugins: [geometry()],
};ts
// webpack.config.js
const geometry = require("@monstermann/unplugin-geometry/webpack");
module.exports = {
plugins: [geometry()],
};ts
// rspack.config.js
const geometry = require("@monstermann/unplugin-geometry/rspack");
module.exports = {
plugins: [geometry()],
};ts
// esbuild.config.js
import { build } from "esbuild";
import geometry from "@monstermann/unplugin-geometry/esbuild";
build({
plugins: [geometry()],
});