Mission Control Dashboard - Initial implementation
This commit is contained in:
32
node_modules/motion-dom/dist/es/render/svg/utils/path.mjs
generated
vendored
Normal file
32
node_modules/motion-dom/dist/es/render/svg/utils/path.mjs
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
const dashKeys = {
|
||||
offset: "stroke-dashoffset",
|
||||
array: "stroke-dasharray",
|
||||
};
|
||||
const camelKeys = {
|
||||
offset: "strokeDashoffset",
|
||||
array: "strokeDasharray",
|
||||
};
|
||||
/**
|
||||
* Build SVG path properties. Uses the path's measured length to convert
|
||||
* our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset
|
||||
* and stroke-dasharray attributes.
|
||||
*
|
||||
* This function is mutative to reduce per-frame GC.
|
||||
*
|
||||
* Note: We use unitless values for stroke-dasharray and stroke-dashoffset
|
||||
* because Safari incorrectly scales px values when the page is zoomed.
|
||||
*/
|
||||
function buildSVGPath(attrs, length, spacing = 1, offset = 0, useDashCase = true) {
|
||||
// Normalise path length by setting SVG attribute pathLength to 1
|
||||
attrs.pathLength = 1;
|
||||
// We use dash case when setting attributes directly to the DOM node and camel case
|
||||
// when defining props on a React component.
|
||||
const keys = useDashCase ? dashKeys : camelKeys;
|
||||
// Build the dash offset (unitless to avoid Safari zoom bug)
|
||||
attrs[keys.offset] = `${-offset}`;
|
||||
// Build the dash array (unitless to avoid Safari zoom bug)
|
||||
attrs[keys.array] = `${length} ${spacing}`;
|
||||
}
|
||||
|
||||
export { buildSVGPath };
|
||||
//# sourceMappingURL=path.mjs.map
|
||||
Reference in New Issue
Block a user