@graphique/geom-hline
Version:
For drawing horizontal lines (usually used as markers)
1 lines • 22.7 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/geomHLine.tsx","../src/tooltip/Tooltip.tsx","../src/tooltip/DefaultTooltip.tsx"],"sourcesContent":["export { GeomHLine, GeomProps, GeomAes } from './geomHLine'\n","import React, {\n useEffect,\n useMemo,\n SVGAttributes,\n useRef,\n useState,\n} from 'react'\nimport {\n useGG,\n themeState,\n EventArea,\n Aes,\n usePageVisibility,\n} from '@graphique/graphique'\nimport { NodeGroup } from 'react-move'\nimport { useAtom } from 'jotai'\nimport { easeCubic } from 'd3-ease'\nimport { interpolate } from 'd3-interpolate'\nimport { Tooltip } from './tooltip'\n\nexport type GeomAes<Datum> = Omit<Aes<Datum>, 'x' | 'fill' | 'size'>\n\nconst DEFAULT_TICK_SIZE = 6\n\nexport interface GeomProps<Datum> {\n /**\n * **data used by this Geom**\n *\n * This will overwrite top-level `data` passed to `GG` as it relates to mappings defined in `aes`.\n */\n data?: Datum[]\n /**\n * **functional mapping applied to `data` for this Geom**\n *\n * This extends the top-level `aes` passed to `GG`. Any repeated mappings defined here will take precedence within the Geom.\n */\n aes?: GeomAes<Datum>\n /** attributes passed to the underlying SVG elements */\n attr?: SVGAttributes<SVGLineElement>\n /** should this Geom have a tooltip associated with it (_default_: `true`) */\n showTooltip?: boolean\n /** callback called for mousemove events on the drawing area when focusing data */\n onDatumFocus?: (data: Datum[], index: number[]) => void\n /** callback called for click events on the drawing area when selecting focused data */\n onDatumSelection?: (data: Datum[], index: number[]) => void\n /** callback called for mouseleave events on the drawing area */\n onExit?: () => void\n /** should elements enter/update/exit with animated transitions (_default_: `true`) */\n isAnimated?: boolean\n}\n\nconst GeomHLine = <Datum,>({\n data: localData,\n aes: localAes,\n attr,\n onDatumFocus,\n onDatumSelection,\n onExit,\n showTooltip = true,\n isAnimated = true,\n}: GeomProps<Datum>) => {\n const { ggState } = useGG<Datum>() || {}\n const { data, aes, scales, copiedScales, width, margin } = ggState || {}\n\n const geomData = localData || data\n const geomAes = useMemo(() => {\n if (localAes) {\n return {\n ...aes,\n ...localAes,\n }\n }\n return aes\n }, [aes, localAes])\n\n const [theme, setTheme] = useAtom(themeState)\n\n const { defaultStroke, animationDuration: duration } = theme\n\n const isVisible = usePageVisibility()\n\n const baseAttr: SVGAttributes<SVGLineElement> = {\n strokeOpacity: 1,\n strokeWidth: 1.5,\n }\n\n const geomAttr: SVGAttributes<SVGLineElement> = {\n ...baseAttr,\n ...attr,\n }\n\n const [firstRender, setFirstRender] = useState(true)\n useEffect(() => {\n const timeout = setTimeout(() => setFirstRender(false), 0)\n return () => clearTimeout(timeout)\n }, [])\n\n useEffect(() => {\n setTheme((prev) => ({\n ...prev,\n geoms: {\n ...prev.geoms,\n hline: {\n strokeWidth: geomAttr?.style?.strokeWidth || geomAttr?.strokeWidth,\n strokeOpacity:\n geomAttr?.style?.strokeOpacity || geomAttr?.strokeOpacity,\n strokeDasharray: geomAttr?.strokeDasharray,\n stroke: geomAttr?.stroke,\n },\n },\n }))\n }, [setTheme, attr])\n\n const stroke = useMemo(\n () => (d: Datum) =>\n geomAttr?.stroke ||\n (geomAes?.stroke && copiedScales?.strokeScale\n ? (copiedScales.strokeScale(geomAes.stroke(d) as any) as\n | string\n | undefined)\n : defaultStroke),\n [geomAes, copiedScales, geomAttr, defaultStroke],\n )\n\n const y = useMemo(\n () => (d: Datum) =>\n (scales?.yScale && geomAes?.y && scales.yScale(geomAes.y(d))) ?? 0,\n [scales, geomAes],\n )\n\n const yAdj = useMemo(\n () =>\n scales?.yScale?.bandwidth\n ? (scales.yScale.bandwidth() / 2) * scales.yScale.paddingInner()\n : 0,\n [scales],\n )\n\n const checkIsOutisdeDomain = useMemo(\n () => (d: Datum) => {\n const domain = scales?.yScale && scales.yScale.domain()\n\n if (\n scales.yScale?.bandwidth?.() &&\n geomAes.y &&\n (domain as unknown as string[]).includes(String(geomAes.y(d)))\n ) {\n return false\n }\n\n return (\n domain &&\n ((y(d) as number) > scales.yScale(domain[0]) ||\n (y(d) as number) < scales.yScale(domain[1]))\n )\n },\n [scales, y, geomAes],\n )\n\n const keyAccessor = useMemo(\n () => (d: Datum, i: number) =>\n geomAes?.key\n ? geomAes.key(d)\n : (`${geomAes?.y && geomAes.y(d)}-${\n scales?.groupAccessor && scales.groupAccessor(d)\n }-${i}` as string),\n [geomAes, scales],\n )\n\n const groupRef = useRef<SVGGElement>(null)\n\n return (\n <>\n <g ref={groupRef}>\n {!firstRender && width && isVisible && (\n <NodeGroup\n data={[...(geomData as [])]}\n keyAccessor={keyAccessor}\n start={(d) => ({\n x1: margin?.left || 0,\n x2: margin?.left || 0,\n y1: y(d) - yAdj,\n y2: y(d) - yAdj,\n stroke: stroke(d),\n strokeOpacity: 0,\n })}\n enter={(d) => {\n const isOutsideDomain = checkIsOutisdeDomain(d)\n const thisStrokeOpacity = isOutsideDomain\n ? 0\n : geomAttr?.strokeOpacity\n\n return {\n x1: isAnimated\n ? [(margin?.left || 0) - DEFAULT_TICK_SIZE]\n : (margin?.left || 0) - DEFAULT_TICK_SIZE,\n x2: isAnimated\n ? [width - (margin?.right || 0)]\n : width - (margin?.right || 0),\n y1: isAnimated ? [y(d) - yAdj] : y(d) - yAdj,\n y2: isAnimated ? [y(d) - yAdj] : y(d) - yAdj,\n stroke: isAnimated ? [stroke(d)] : stroke(d),\n strokeOpacity: isAnimated\n ? [thisStrokeOpacity]\n : thisStrokeOpacity,\n timing: { duration, ease: easeCubic },\n }\n }}\n update={(d) => {\n const isOutsideDomain = checkIsOutisdeDomain(d)\n const thisStrokeOpacity = isOutsideDomain\n ? 0\n : geomAttr?.strokeOpacity\n\n return {\n x1: isAnimated\n ? [(margin?.left || 0) - DEFAULT_TICK_SIZE]\n : (margin?.left || 0) - DEFAULT_TICK_SIZE,\n x2: isAnimated\n ? [width - (margin?.right || 0)]\n : width - (margin?.right || 0),\n y1: isAnimated ? [y(d) - yAdj] : y(d) - yAdj,\n y2: isAnimated ? [y(d) - yAdj] : y(d) - yAdj,\n stroke: isAnimated ? [stroke(d)] : stroke(d),\n strokeOpacity: isAnimated\n ? [thisStrokeOpacity]\n : thisStrokeOpacity,\n timing: { duration, ease: easeCubic },\n }\n }}\n leave={() => ({\n stroke: isAnimated ? ['transparent'] : 'transparent',\n x1: isAnimated ? [margin?.left || 0] : margin?.left || 0,\n x2: isAnimated ? [margin?.left || 0] : margin?.left || 0,\n timing: { duration, ease: easeCubic },\n })}\n interpolation={(begVal, endVal) => interpolate(begVal, endVal)}\n >\n {(nodes) => (\n <>\n {nodes.map(({ state, key }) => (\n <line\n key={key}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...attr}\n x1={state.x1}\n x2={state.x2}\n y1={state.y1}\n y2={state.y2}\n stroke={state.stroke}\n strokeWidth={geomAttr?.strokeWidth}\n strokeOpacity={state.strokeOpacity}\n style={{ pointerEvents: 'none' }}\n data-testid=\"__gg_geom_hline\"\n />\n ))}\n </>\n )}\n </NodeGroup>\n )}\n </g>\n {showTooltip && (\n <>\n <EventArea\n data={geomData?.filter((d) => !checkIsOutisdeDomain(d))}\n aes={geomAes as Aes<Datum>}\n x={() => 0}\n y={y}\n group=\"y\"\n onDatumFocus={onDatumFocus}\n onClick={\n onDatumSelection\n ? ({ d, i }: { d: Datum[]; i: number[] }) => {\n onDatumSelection(d, i)\n }\n : undefined\n }\n onMouseLeave={() => {\n if (onExit) onExit()\n }}\n />\n <Tooltip aes={geomAes as Aes<Datum>} />\n </>\n )}\n </>\n )\n}\n\nGeomHLine.displayName = 'GeomHLine'\nexport { GeomHLine }\n","import React, { useMemo } from 'react'\nimport { useAtom } from 'jotai'\nimport {\n useGG,\n tooltipState,\n TooltipContent,\n YTooltip,\n Aes,\n DataValue,\n TooltipProps,\n} from '@graphique/graphique'\nimport { DefaultTooltip } from './DefaultTooltip'\n\ninterface Props<Datum> {\n aes: Aes<Datum>\n group?: DataValue<Datum>\n}\n\nexport const Tooltip = <Datum,>({ aes, group }: Props<Datum>) => {\n const { ggState } = useGG<Datum>() || {}\n const { id, scales, width, height, margin } = ggState || {\n width: 0,\n height: 0,\n }\n\n const [{ datum: tooltipDatum, xFormat, yFormat, measureFormat, content }] =\n useAtom<TooltipProps<Datum>>(tooltipState)\n\n const datum = useMemo(() => tooltipDatum && tooltipDatum[0], [tooltipDatum])\n\n const label = useMemo(() => {\n const labelResolution = {\n given: datum && aes?.label && aes.label(datum),\n keyed: datum && aes?.key && aes.key(datum),\n }\n\n return labelResolution?.given ?? labelResolution?.keyed\n }, [aes, datum])\n\n const xScale: any = scales?.xScale\n const yScale: any = scales?.yScale\n\n const yAdj = useMemo(\n () => (scales?.yScale.bandwidth ? scales?.yScale.bandwidth() / 2 : 0),\n [scales]\n )\n\n const thisGroup = useMemo(\n () => datum && group && group(datum),\n [datum, group]\n )\n\n const tooltipContents: TooltipContent<Datum>[] = [\n {\n x: datum && aes?.x && xScale && xScale(aes.x(datum)),\n y: datum && aes?.y && yScale && yScale(aes.y(datum)),\n formattedX:\n datum &&\n aes?.x &&\n ((xFormat ? xFormat(aes.x(datum)) : aes.x(datum)) as string),\n formattedY:\n datum &&\n aes?.y &&\n ((yFormat ? yFormat(aes.y(datum)) : aes.y(datum)) as string),\n group: thisGroup,\n label,\n formattedMeasure:\n measureFormat ? measureFormat(label ?? thisGroup) : undefined,\n datum: tooltipDatum,\n containerWidth: width,\n },\n ]\n\n const tooltipValue = content\n ? tooltipDatum && <div>{content(tooltipContents)}</div>\n : tooltipDatum && <DefaultTooltip data={tooltipContents} />\n\n const shouldShow = tooltipDatum && tooltipContents[0].y !== undefined\n\n return shouldShow ? (\n <div>\n <YTooltip\n id={id as string}\n left={width - (margin?.right || 0)}\n top={(tooltipContents[0].y || 0) -height + yAdj}\n value={tooltipValue}\n />\n </div>\n ) : null\n}\n","import React, { useState, useEffect } from 'react'\nimport { useAtom } from 'jotai'\nimport {\n labelsState,\n TooltipContent,\n TooltipContainer,\n themeState,\n nodeToString,\n} from '@graphique/graphique'\n\ninterface Props<Datum> {\n data: TooltipContent<Datum>[]\n}\n\nexport const DefaultTooltip = <Datum,>({ data }: Props<Datum>) => {\n const [{ y: yLab }] = useAtom(labelsState)\n const [{ tooltip }] = useAtom(themeState)\n\n const [yLabel, setYLabel] = useState('')\n useEffect(() => {\n const timeout = setTimeout(() => setYLabel(nodeToString(yLab)))\n\n return () => clearTimeout(timeout)\n }, [yLab])\n\n return data ? (\n <TooltipContainer>\n {data.map((d) => (\n <div key={`group-tooltip-${d.label ?? ''}`}>\n <div\n style={{\n marginTop: 4,\n marginBottom: 4,\n }}\n >\n {d.label && (\n <>\n {d.mark}\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n fontWeight: 500,\n }}\n >\n <div style={{ marginBottom: 4 }}>\n <span\n style={{\n fontSize:\n tooltip?.groupLabel?.fontSize || tooltip?.font?.size,\n }}\n >\n {d.formattedMeasure}\n </span>\n </div>\n </div>\n </>\n )}\n <div\n style={{\n display: 'flex',\n marginBottom: 2,\n alignItems: 'flex-end',\n }}\n >\n {d.label ? (\n <div\n style={{\n fontSize:\n tooltip?.groupLabel?.fontSize || tooltip?.font?.size,\n marginRight: 2,\n }}\n >\n {`${d.label}:`}\n </div>\n ) : (\n yLabel && (\n <div\n style={{\n fontSize:\n tooltip?.groupLabel?.fontSize || tooltip?.font?.size,\n marginRight: 2,\n }}\n >\n {`${yLabel}:`}\n </div>\n )\n )}\n <div\n style={{\n marginLeft: 1,\n fontWeight: 500,\n fontSize:\n tooltip?.yLabel?.fontSize ||\n (tooltip?.font?.size || 12) + 1,\n }}\n >\n {d.formattedY}\n </div>\n </div>\n </div>\n </div>\n ))}\n </TooltipContainer>\n ) : null\n}\n"],"mappings":"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","names":["src_exports","__export","GeomHLine","__toCommonJS","import_react","import_graphique","import_react_move","import_jotai","import_d3_ease","import_d3_interpolate","import_react","import_jotai","import_graphique","import_react","import_jotai","import_graphique","DefaultTooltip","data","yLab","tooltip","yLabel","setYLabel","timeout","React","d","Tooltip","aes","group","ggState","id","scales","width","height","margin","tooltipDatum","xFormat","yFormat","measureFormat","content","datum","label","labelResolution","xScale","yScale","yAdj","thisGroup","tooltipContents","tooltipValue","React","DefaultTooltip","DEFAULT_TICK_SIZE","GeomHLine","localData","localAes","attr","onDatumFocus","onDatumSelection","onExit","showTooltip","isAnimated","ggState","data","aes","scales","copiedScales","width","margin","geomData","geomAes","theme","setTheme","defaultStroke","duration","isVisible","geomAttr","firstRender","setFirstRender","timeout","prev","stroke","d","y","yAdj","checkIsOutisdeDomain","domain","keyAccessor","i","groupRef","React","thisStrokeOpacity","begVal","endVal","nodes","state","key","Tooltip"]}