{"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;;;"}