UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

1 lines 4.01 kB
{"version":3,"file":"column-box.cjs","sources":["../../src/util/column-box.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport { useContext } from \"react\";\nimport { ColumnContext } from \"../context\";\nimport classNames from \"classnames\";\nimport { Box } from \"@macrostrat/ui-components\";\nimport { path } from \"d3-path\";\nimport type { Path } from \"d3-path\";\n\n// This could be merged with ColumnSVG\nexport function ColumnBox(props: any) {\n const { offsetTop, absolutePosition, className, ...rest } = props;\n const { pixelsPerMeter, zoom } = useContext(ColumnContext);\n\n const marginTop = offsetTop * pixelsPerMeter * zoom;\n let pos: any = { marginTop };\n if (absolutePosition) {\n pos = {\n position: \"absolute\",\n top: marginTop,\n };\n }\n\n return h(Box, {\n className: classNames(\"column-box\", className),\n ...pos,\n ...rest,\n });\n}\n\nexport function zigZagBoxPath(\n x,\n y,\n width,\n height,\n top: boolean,\n bottom: boolean,\n) {\n const d = path();\n\n const x1 = x + width;\n // Start path at the top\n d.moveTo(x, y);\n if (top) {\n drawZigZagAtConstantHeight(d, x, x1, y);\n } else {\n d.lineTo(x1, y);\n }\n const yBottom = y + height;\n d.lineTo(x1, yBottom);\n // Draw the bottom\n if (bottom) {\n drawZigZagAtConstantHeight(d, x1, x, yBottom);\n } else {\n d.lineTo(x, yBottom);\n }\n // Draw the left edge\n d.closePath();\n\n // Now render the path;\n return d.toString();\n}\n\nexport function drawZigZagAtConstantHeight(d: Path, x0, x1, y) {\n const zigZagWidth = 10;\n const zigZagHeight = 4;\n\n const deltaX = x1 - x0;\n const width = Math.abs(deltaX);\n\n const nZigZags = Math.floor(width / zigZagWidth - 0.5);\n const _zigZagWidth = width / (nZigZags + 0.5);\n\n let dy = zigZagHeight / 2;\n // Each zig-zag consists of a short outward motion\n let dx = _zigZagWidth / 4;\n\n let cx = x0;\n let cy = y;\n\n if (deltaX < 0) {\n dx = -dx;\n dy = -dy;\n }\n\n const doZigZag = (last = false) => {\n cx += dx;\n cy -= dy;\n d.lineTo(cx, cy);\n let scalar = last ? 1 : 2;\n cx += dx * scalar;\n cy += dy * scalar;\n d.lineTo(cx, cy);\n cx += dx;\n cy -= dy;\n };\n\n d.lineTo(x0, y);\n\n // Move to the offset\n //d.lineTo(cx, y);\n // Draw the zig-zags\n for (let i = 0; i < nZigZags; i++) {\n doZigZag();\n }\n // Draw the last half zig-zag\n doZigZag(true);\n // Draw to the edge\n d.lineTo(x1, y);\n}\n"],"names":["useContext","ColumnContext","h","Box","classNames","path"],"mappings":";;;;;;;;;;;AASO,SAAS,UAAU,OAAY;AACpC,QAAM,EAAE,WAAW,kBAAkB,WAAW,GAAG,SAAS;AAC5D,QAAM,EAAE,gBAAgB,SAASA,MAAAA,WAAWC,OAAAA,aAAa;AAEzD,QAAM,YAAY,YAAY,iBAAiB;AAC/C,MAAI,MAAW,EAAE,UAAA;AACjB,MAAI,kBAAkB;AACpB,UAAM;AAAA,MACJ,UAAU;AAAA,MACV,KAAK;AAAA,IAAA;AAAA,EAET;AAEA,SAAOC,WAAAA,QAAEC,aAAAA,KAAK;AAAA,IACZ,WAAWC,oBAAAA,QAAW,cAAc,SAAS;AAAA,IAC7C,GAAG;AAAA,IACH,GAAG;AAAA,EAAA,CACJ;AACH;AAEO,SAAS,cACd,GACA,GACA,OACA,QACA,KACA,QACA;AACA,QAAM,IAAIC,OAAAA,KAAA;AAEV,QAAM,KAAK,IAAI;AAEf,IAAE,OAAO,GAAG,CAAC;AACb,MAAI,KAAK;AACP,+BAA2B,GAAG,GAAG,IAAI,CAAC;AAAA,EACxC,OAAO;AACL,MAAE,OAAO,IAAI,CAAC;AAAA,EAChB;AACA,QAAM,UAAU,IAAI;AACpB,IAAE,OAAO,IAAI,OAAO;AAEpB,MAAI,QAAQ;AACV,+BAA2B,GAAG,IAAI,GAAG,OAAO;AAAA,EAC9C,OAAO;AACL,MAAE,OAAO,GAAG,OAAO;AAAA,EACrB;AAEA,IAAE,UAAA;AAGF,SAAO,EAAE,SAAA;AACX;AAEO,SAAS,2BAA2B,GAAS,IAAI,IAAI,GAAG;AAC7D,QAAM,cAAc;AACpB,QAAM,eAAe;AAErB,QAAM,SAAS,KAAK;AACpB,QAAM,QAAQ,KAAK,IAAI,MAAM;AAE7B,QAAM,WAAW,KAAK,MAAM,QAAQ,cAAc,GAAG;AACrD,QAAM,eAAe,SAAS,WAAW;AAEzC,MAAI,KAAK,eAAe;AAExB,MAAI,KAAK,eAAe;AAExB,MAAI,KAAK;AACT,MAAI,KAAK;AAET,MAAI,SAAS,GAAG;AACd,SAAK,CAAC;AACN,SAAK,CAAC;AAAA,EACR;AAEA,QAAM,WAAW,CAAC,OAAO,UAAU;AACjC,UAAM;AACN,UAAM;AACN,MAAE,OAAO,IAAI,EAAE;AACf,QAAI,SAAS,OAAO,IAAI;AACxB,UAAM,KAAK;AACX,UAAM,KAAK;AACX,MAAE,OAAO,IAAI,EAAE;AACf,UAAM;AACN,UAAM;AAAA,EACR;AAEA,IAAE,OAAO,IAAI,CAAC;AAKd,WAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,aAAA;AAAA,EACF;AAEA,WAAS,IAAI;AAEb,IAAE,OAAO,IAAI,CAAC;AAChB;;;;"}