@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
1 lines • 4.85 kB
Source Map (JSON)
{"version":3,"file":"axis.cjs","sources":["../src/axis.ts"],"sourcesContent":["import { useContext, useEffect, useRef } from \"react\";\nimport h from \"./hyper\";\nimport { select } from \"d3-selection\";\nimport { axisLeft } from \"d3-axis\";\nimport { ScaleContinuousNumeric, scaleLinear, ScaleLinear } from \"d3-scale\";\nimport { useColumn } from \"./context\";\n\ninterface ColumnAxisProps {\n ticks?: number;\n tickArguments?: any;\n tickValues?: any;\n tickFormat?: any;\n tickSize?: any;\n tickSizeInner?: any;\n tickSizeOuter?: any;\n tickPadding?: any;\n tickSpacing?: number;\n showLabel?: (d: any) => boolean;\n showDomain?: boolean;\n className?: string;\n}\n\ninterface AgeAxisProps extends ColumnAxisProps {\n scale: ScaleContinuousNumeric<number, number>;\n minTickSpacing?: number;\n}\n\nconst __d3axisKeys = [\n \"ticks\",\n \"tickArguments\",\n \"tickValues\",\n \"tickFormat\",\n \"tickSize\",\n \"tickSizeInner\",\n \"tickSizeOuter\",\n \"tickPadding\",\n];\n\nexport function ColumnAxis(props: ColumnAxisProps) {\n const { scale } = useColumn();\n return h(AgeAxis, { scale, ...props });\n}\n\nexport function AgeAxis(props: AgeAxisProps) {\n const {\n showLabel,\n className,\n showDomain = true,\n tickSpacing = 60,\n minTickSpacing = 20,\n scale,\n } = props;\n\n const range = scale.range();\n\n const pixelHeight = Math.abs(range[0] - range[range.length - 1]);\n\n let tickValues: number[] | undefined = undefined;\n\n let ticks = Math.round(pixelHeight / tickSpacing);\n if (pixelHeight < 3 * tickSpacing) {\n // Push ticks towards extrema (we need more than 2 to be resolved)\n\n let t0: number[] = [];\n while (t0.length <= 2) {\n ticks += 1;\n t0 = scale.ticks(ticks);\n }\n\n tickValues = t0;\n if (pixelHeight < 2 * tickSpacing) {\n // Only show first and last ticks\n tickValues = [t0[0], t0[t0.length - 1]];\n }\n }\n\n if (pixelHeight < minTickSpacing) {\n ticks = 1;\n tickValues = scale.ticks(1);\n // Get the last tick value only\n tickValues = [tickValues[0]];\n }\n\n const defaultProps = {\n ticks,\n // Suppress domain endpoints\n tickSizeOuter: 0,\n tickValues,\n };\n\n const ref = useRef(null);\n const axisRef = useRef(axisLeft());\n\n const deps = __d3axisKeys.map((k) => props[k]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n axisRef.current.scale(scale);\n for (let k of __d3axisKeys) {\n const val = props[k] ?? defaultProps[k];\n if (val == null) continue;\n axisRef.current[k](val);\n }\n\n const ax = select(el).call(axisRef.current);\n\n if (!showDomain) {\n ax.select(\".domain\").remove();\n }\n\n ax.selectAll(\".tick text\").each(function (d) {\n if (!(showLabel?.(d) ?? true)) {\n select(this).attr(\"visibility\", \"hidden\");\n }\n });\n\n return () => {\n select(el).selectAll(\"*\").remove();\n };\n }, [scale, ref.current, showDomain, showLabel, ...deps]);\n\n return h(\"g.y.axis.column-axis\", { className, ref });\n}\n"],"names":["useColumn","h","useRef","axisLeft","useEffect","select"],"mappings":";;;;;;;AA2BA,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,WAAW,OAAwB;AACjD,QAAM,EAAE,MAAA,IAAUA,iBAAA;AAClB,SAAOC,MAAE,SAAS,EAAE,OAAO,GAAG,OAAO;AACvC;AAEO,SAAS,QAAQ,OAAqB;AAC3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB;AAAA,EAAA,IACE;AAEJ,QAAM,QAAQ,MAAM,MAAA;AAEpB,QAAM,cAAc,KAAK,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,SAAS,CAAC,CAAC;AAE/D,MAAI,aAAmC;AAEvC,MAAI,QAAQ,KAAK,MAAM,cAAc,WAAW;AAChD,MAAI,cAAc,IAAI,aAAa;AAGjC,QAAI,KAAe,CAAA;AACnB,WAAO,GAAG,UAAU,GAAG;AACrB,eAAS;AACT,WAAK,MAAM,MAAM,KAAK;AAAA,IACxB;AAEA,iBAAa;AACb,QAAI,cAAc,IAAI,aAAa;AAEjC,mBAAa,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC;AAAA,IACxC;AAAA,EACF;AAEA,MAAI,cAAc,gBAAgB;AAChC,YAAQ;AACR,iBAAa,MAAM,MAAM,CAAC;AAE1B,iBAAa,CAAC,WAAW,CAAC,CAAC;AAAA,EAC7B;AAEA,QAAM,eAAe;AAAA,IACnB;AAAA;AAAA,IAEA,eAAe;AAAA,IACf;AAAA,EAAA;AAGF,QAAM,MAAMC,MAAAA,OAAO,IAAI;AACvB,QAAM,UAAUA,aAAOC,OAAAA,UAAU;AAEjC,QAAM,OAAO,aAAa,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;AAE7CC,QAAAA,UAAU,MAAM;AACd,UAAM,KAAK,IAAI;AACf,QAAI,CAAC,GAAI;AAET,YAAQ,QAAQ,MAAM,KAAK;AAC3B,aAAS,KAAK,cAAc;AAC1B,YAAM,MAAM,MAAM,CAAC,KAAK,aAAa,CAAC;AACtC,UAAI,OAAO,KAAM;AACjB,cAAQ,QAAQ,CAAC,EAAE,GAAG;AAAA,IACxB;AAEA,UAAM,KAAKC,YAAAA,OAAO,EAAE,EAAE,KAAK,QAAQ,OAAO;AAE1C,QAAI,CAAC,YAAY;AACf,SAAG,OAAO,SAAS,EAAE,OAAA;AAAA,IACvB;AAEA,OAAG,UAAU,YAAY,EAAE,KAAK,SAAU,GAAG;AAC3C,UAAI,EAAE,YAAY,CAAC,KAAK,OAAO;AAC7BA,oBAAAA,OAAO,IAAI,EAAE,KAAK,cAAc,QAAQ;AAAA,MAC1C;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACXA,kBAAAA,OAAO,EAAE,EAAE,UAAU,GAAG,EAAE,OAAA;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,OAAO,IAAI,SAAS,YAAY,WAAW,GAAG,IAAI,CAAC;AAEvD,SAAOJ,MAAE,wBAAwB,EAAE,WAAW,KAAK;AACrD;;;"}