Grabbed dndbeyond's source code
``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
This commit is contained in:
+190
@@ -0,0 +1,190 @@
|
||||
// Mask.tsx
|
||||
import React from "react";
|
||||
|
||||
// styles.tsx
|
||||
var defaultStyles = {
|
||||
maskWrapper: () => ({
|
||||
opacity: 0.7,
|
||||
left: 0,
|
||||
top: 0,
|
||||
position: "fixed",
|
||||
zIndex: 99999,
|
||||
pointerEvents: "none",
|
||||
color: "#000"
|
||||
}),
|
||||
svgWrapper: ({ windowWidth, windowHeight, wpt, wpl }) => ({
|
||||
width: windowWidth,
|
||||
height: windowHeight,
|
||||
left: Number(wpl),
|
||||
top: Number(wpt),
|
||||
position: "fixed"
|
||||
}),
|
||||
maskArea: ({ x, y, width, height }) => ({
|
||||
x,
|
||||
y,
|
||||
width,
|
||||
height,
|
||||
fill: "black",
|
||||
rx: 0
|
||||
}),
|
||||
maskRect: ({ windowWidth, windowHeight, maskID }) => ({
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: windowWidth,
|
||||
height: windowHeight,
|
||||
fill: "currentColor",
|
||||
mask: `url(#${maskID})`
|
||||
}),
|
||||
clickArea: ({ windowWidth, windowHeight, clipID }) => ({
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: windowWidth,
|
||||
height: windowHeight,
|
||||
fill: "currentcolor",
|
||||
pointerEvents: "auto",
|
||||
clipPath: `url(#${clipID})`
|
||||
}),
|
||||
highlightedArea: ({ x, y, width, height }) => ({
|
||||
x,
|
||||
y,
|
||||
width,
|
||||
height,
|
||||
pointerEvents: "auto",
|
||||
fill: "transparent",
|
||||
display: "none"
|
||||
})
|
||||
};
|
||||
function stylesMatcher(styles) {
|
||||
return (key, state) => {
|
||||
const base = defaultStyles[key](state);
|
||||
const custom = styles[key];
|
||||
return custom ? custom(base, state) : base;
|
||||
};
|
||||
}
|
||||
|
||||
// Mask.tsx
|
||||
import { safe, getWindow, getPadding } from "@reactour/utils";
|
||||
var Mask = ({
|
||||
padding = 10,
|
||||
wrapperPadding = 0,
|
||||
onClick,
|
||||
onClickHighlighted,
|
||||
styles = {},
|
||||
sizes,
|
||||
className,
|
||||
highlightedAreaClassName,
|
||||
maskId,
|
||||
clipId
|
||||
}) => {
|
||||
const maskID = maskId || uniqueId("mask__");
|
||||
const clipID = clipId || uniqueId("clip__");
|
||||
const getStyles = stylesMatcher(styles);
|
||||
const [pt, pr, pb, pl] = getPadding(padding);
|
||||
const [wpt, wpr, wpb, wpl] = getPadding(wrapperPadding);
|
||||
const { w, h } = getWindow();
|
||||
const width = safe((sizes == null ? void 0 : sizes.width) + pl + pr);
|
||||
const height = safe((sizes == null ? void 0 : sizes.height) + pt + pb);
|
||||
const top = safe((sizes == null ? void 0 : sizes.top) - pt - wpt);
|
||||
const left = safe((sizes == null ? void 0 : sizes.left) - pl - wpl);
|
||||
const windowWidth = w - wpl - wpr;
|
||||
const windowHeight = h - wpt - wpb;
|
||||
const maskAreaStyles = getStyles("maskArea", {
|
||||
x: left,
|
||||
y: top,
|
||||
width,
|
||||
height
|
||||
});
|
||||
const highlightedAreaStyles = getStyles("highlightedArea", {
|
||||
x: left,
|
||||
y: top,
|
||||
width,
|
||||
height
|
||||
});
|
||||
return /* @__PURE__ */ React.createElement(
|
||||
"div",
|
||||
{
|
||||
style: getStyles("maskWrapper", {}),
|
||||
onClick,
|
||||
className
|
||||
},
|
||||
/* @__PURE__ */ React.createElement(
|
||||
"svg",
|
||||
{
|
||||
width: windowWidth,
|
||||
height: windowHeight,
|
||||
xmlns: "http://www.w3.org/2000/svg",
|
||||
style: getStyles("svgWrapper", {
|
||||
windowWidth,
|
||||
windowHeight,
|
||||
wpt,
|
||||
wpl
|
||||
})
|
||||
},
|
||||
/* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("mask", { id: maskID }, /* @__PURE__ */ React.createElement(
|
||||
"rect",
|
||||
{
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: windowWidth,
|
||||
height: windowHeight,
|
||||
fill: "white"
|
||||
}
|
||||
), /* @__PURE__ */ React.createElement(
|
||||
"rect",
|
||||
{
|
||||
style: maskAreaStyles,
|
||||
rx: maskAreaStyles.rx ? 1 : void 0
|
||||
}
|
||||
)), /* @__PURE__ */ React.createElement("clipPath", { id: clipID }, /* @__PURE__ */ React.createElement(
|
||||
"polygon",
|
||||
{
|
||||
points: `0 0, 0 ${windowHeight}, ${left} ${windowHeight}, ${left} ${top}, ${left + width} ${top}, ${left + width} ${top + height}, ${left} ${top + height}, ${left} ${windowHeight}, ${windowWidth} ${windowHeight}, ${windowWidth} 0`
|
||||
}
|
||||
))),
|
||||
/* @__PURE__ */ React.createElement(
|
||||
"rect",
|
||||
{
|
||||
style: getStyles("maskRect", {
|
||||
windowWidth,
|
||||
windowHeight,
|
||||
maskID
|
||||
})
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ React.createElement(
|
||||
"rect",
|
||||
{
|
||||
style: getStyles("clickArea", {
|
||||
windowWidth,
|
||||
windowHeight,
|
||||
top,
|
||||
left,
|
||||
width,
|
||||
height,
|
||||
clipID
|
||||
})
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ React.createElement(
|
||||
"rect",
|
||||
{
|
||||
style: highlightedAreaStyles,
|
||||
className: highlightedAreaClassName,
|
||||
onClick: onClickHighlighted,
|
||||
rx: highlightedAreaStyles.rx ? 1 : void 0
|
||||
}
|
||||
)
|
||||
)
|
||||
);
|
||||
};
|
||||
var Mask_default = Mask;
|
||||
function uniqueId(prefix) {
|
||||
return prefix + Math.random().toString(36).substring(2, 16);
|
||||
}
|
||||
|
||||
// index.tsx
|
||||
var mask_default = Mask_default;
|
||||
export {
|
||||
Mask_default as Mask,
|
||||
mask_default as default
|
||||
};
|
||||
Reference in New Issue
Block a user