@carbon/charts 0.32.10 → 0.33.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +333 -147
- package/README.md +18 -8
- package/axis-chart.js +20 -20
- package/axis-chart.js.map +1 -1
- package/build/demo/data/area.d.ts +17 -0
- package/build/demo/data/bar.d.ts +32 -48
- package/build/demo/data/line.d.ts +29 -0
- package/build/src/interfaces/charts.d.ts +5 -0
- package/build/src/model.d.ts +1 -0
- package/build/src/services/scales-cartesian.d.ts +1 -1
- package/build/src/tools.d.ts +7 -7
- package/bundle.js +1 -1
- package/charts/area-stacked.js +3 -3
- package/charts/area-stacked.js.map +1 -1
- package/charts/area.js +3 -3
- package/charts/area.js.map +1 -1
- package/charts/bar-grouped.js +3 -3
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.js +3 -3
- package/charts/bar-simple.js.map +1 -1
- package/charts/bar-stacked.js +3 -3
- package/charts/bar-stacked.js.map +1 -1
- package/charts/bubble.js +3 -3
- package/charts/bubble.js.map +1 -1
- package/charts/donut.js +3 -3
- package/charts/donut.js.map +1 -1
- package/charts/gauge.js +2 -1
- package/charts/gauge.js.map +1 -1
- package/charts/line.js +3 -3
- package/charts/line.js.map +1 -1
- package/charts/pie.js +3 -3
- package/charts/pie.js.map +1 -1
- package/charts/radar.js +1 -1
- package/charts/radar.js.map +1 -1
- package/charts/scatter.js +3 -3
- package/charts/scatter.js.map +1 -1
- package/components/axes/axis.js +25 -23
- package/components/axes/axis.js.map +1 -1
- package/components/axes/grid.js +1 -1
- package/components/axes/grid.js.map +1 -1
- package/components/axes/ruler.js +2 -2
- package/components/axes/ruler.js.map +1 -1
- package/components/axes/two-dimensional-axes.js +3 -3
- package/components/axes/two-dimensional-axes.js.map +1 -1
- package/components/axes/zero-line.js +1 -1
- package/components/axes/zero-line.js.map +1 -1
- package/components/essentials/legend.js +20 -11
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/threshold.js +9 -9
- package/components/essentials/threshold.js.map +1 -1
- package/components/essentials/title.js +2 -2
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip-bar.js +9 -7
- package/components/essentials/tooltip-bar.js.map +1 -1
- package/components/essentials/tooltip.js +7 -7
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/area-stacked.js +8 -7
- package/components/graphs/area-stacked.js.map +1 -1
- package/components/graphs/bar-grouped.js +7 -7
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.js +6 -6
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.js +6 -6
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/gauge.js +4 -3
- package/components/graphs/gauge.js.map +1 -1
- package/components/graphs/line.js +14 -10
- package/components/graphs/line.js.map +1 -1
- package/components/graphs/pie.js +12 -12
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.js +11 -11
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/scatter-stacked.js +2 -4
- package/components/graphs/scatter-stacked.js.map +1 -1
- package/components/graphs/scatter.js +6 -8
- package/components/graphs/scatter.js.map +1 -1
- package/components/graphs/skeleton.js +3 -3
- package/components/graphs/skeleton.js.map +1 -1
- package/components/layout/layout.js +10 -4
- package/components/layout/layout.js.map +1 -1
- package/configuration.js +14 -9
- package/configuration.js.map +1 -1
- package/demo/create-codesandbox.js +19 -19
- package/demo/create-codesandbox.js.map +1 -1
- package/demo/data/area.d.ts +17 -0
- package/demo/data/area.js +26 -0
- package/demo/data/area.js.map +1 -1
- package/demo/data/bar.d.ts +32 -48
- package/demo/data/bar.js +134 -141
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bubble.js +29 -29
- package/demo/data/bubble.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/index.js +21 -5
- package/demo/data/index.js.map +1 -1
- package/demo/data/line.d.ts +29 -0
- package/demo/data/line.js +122 -60
- package/demo/data/line.js.map +1 -1
- package/demo/data/pie.js +5 -5
- package/demo/data/pie.js.map +1 -1
- package/demo/data/radar.js +12 -12
- package/demo/data/radar.js.map +1 -1
- package/demo/data/scatter.js +48 -32
- package/demo/data/scatter.js.map +1 -1
- package/demo/data/step.js +6 -6
- package/demo/data/step.js.map +1 -1
- package/demo/data/time-series-axis.js +107 -107
- package/demo/data/time-series-axis.js.map +1 -1
- package/demo/tsconfig.tsbuildinfo +20 -20
- package/interfaces/a11y.js.map +1 -1
- package/interfaces/charts.d.ts +5 -0
- package/interfaces/charts.js.map +1 -1
- package/interfaces/enums.js.map +1 -1
- package/interfaces/events.js.map +1 -1
- package/model.d.ts +1 -0
- package/model.js +61 -5
- package/model.js.map +1 -1
- package/package.json +1 -1
- package/polyfills.js +1 -1
- package/polyfills.js.map +1 -1
- package/services/angle-utils.js +8 -8
- package/services/angle-utils.js.map +1 -1
- package/services/colorPalettes.js +2 -2
- package/services/colorPalettes.js.map +1 -1
- package/services/colors.js +1 -1
- package/services/colors.js.map +1 -1
- package/services/curves.js +2 -2
- package/services/curves.js.map +1 -1
- package/services/essentials/dom-utils.js +6 -6
- package/services/essentials/dom-utils.js.map +1 -1
- package/services/essentials/events.js +1 -1
- package/services/essentials/events.js.map +1 -1
- package/services/scales-cartesian.d.ts +1 -1
- package/services/scales-cartesian.js +18 -18
- package/services/scales-cartesian.js.map +1 -1
- package/services/time-series.js +2 -2
- package/services/time-series.js.map +1 -1
- package/tools.d.ts +7 -7
- package/tools.js +16 -14
- package/tools.js.map +1 -1
- package/tsconfig.tsbuildinfo +55 -55
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, Events, ScaleTypes, Roles, TooltipTypes, TruncationTypes } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport { ChartModel } from \"../../model\";\nimport { DOMUtils } from \"../../services\";\nimport * as Configuration from \"../../configuration\";\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary,\n} from \"../../services/time-series\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { axisBottom, axisLeft, axisRight, axisTop } from \"d3-axis\";\n\nexport class Axis extends Component {\n\ttype = \"axes\";\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"number\"\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"type\"\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"numCharacter\"\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\t\tconst timeScaleOptions = Tools.getProperty(options, \"timeScale\");\n\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (this.scaleType === ScaleTypes.LABELS) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr(\"role\", `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style(\"opacity\", \"0\")\n\t\t\t.style(\"pointer-events\", \"none\")\n\t\t\t.attr(\"aria-hidden\", true);\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t\"0\"\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true,\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.tickSpaceRatioVertical\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst tickValues = scale\n\t\t\t\t\t\t.nice(numberOfTicks)\n\t\t\t\t\t\t.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (\n\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\"timeScale\",\n\t\t\t\t\t\t\t\"addSpaceOnEdges\"\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\ttickValues.length > 2\n\t\t\t\t\t) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"formatter\"\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(t, i, timeInterval, timeScaleOptions);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr(\"transform\", `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr(\"transform\", `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(this.model.isDataEmpty() ? \"\" : axisOptions.title);\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(-90)\")\n\t\t\t\t\t\t.attr(\"y\", 0)\n\t\t\t\t\t\t.attr(\"x\", -(scale.range()[0] / 2))\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(90)\")\n\t\t\t\t\t\t.attr(\"y\", -width)\n\t\t\t\t\t\t.attr(\"x\", scale.range()[0] / 2)\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition(\n\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\"axis-update\",\n\t\t\t\t\t\tanimate\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll(\".tick\")\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select(\"text\");\n\t\t\tticks.style(\"font-weight\", (tickValue: number, i: number) => {\n\t\t\t\treturn isTickPrimary(tickValue, i, timeInterval, showDayName)\n\t\t\t\t\t? \"bold\"\n\t\t\t\t\t: \"normal\";\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tthis.services.transitions.getTransition(\"axis-update\")\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet rotateTicks = false;\n\n\t\t\t// If we're dealing with a discrete scale type\n\t\t\t// We're able to grab the spacing between the ticks\n\t\t\tif (scale.step) {\n\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.nodes();\n\n\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\trotateTicks = textNodes.some(\n\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, { useBBox: true })\n\t\t\t\t\t\t\t.width >= scale.step()\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// When dealing with a continuous scale\n\t\t\t\t// We need to calculate an estimated size of the ticks\n\t\t\t\tconst minTickSize =\n\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\taxisOptions,\n\t\t\t\t\t\t\"ticks\",\n\t\t\t\t\t\t\"rotateIfSmallerThan\"\n\t\t\t\t\t) || Configuration.axis.ticks.rotateIfSmallerThan;\n\t\t\t\tconst ticksNumber = isTimeScaleType\n\t\t\t\t\t? axis.tickValues().length\n\t\t\t\t\t: scale.ticks().length;\n\t\t\t\tconst estimatedTickSize = width / ticksNumber / 2;\n\n\t\t\t\trotateTicks = estimatedTickSize < minTickSize;\n\t\t\t}\n\n\t\t\tif (rotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.tickSpaceRatioHorizontal\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t\"text-anchor\",\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? \"start\" : \"end\"\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", null)\n\t\t\t\t\t.style(\"text-anchor\", null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (this.model.isDataEmpty()) {\n\t\t\tcontainer.attr(\"opacity\", 0);\n\t\t}\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (truncationType !== TruncationTypes.NONE && axisScaleType === ScaleTypes.LABELS) {\n\t\t\tconst dataGroups = this.model.getDataValuesGroupedByKeys();\n\t\t\tif (dataGroups.length > 0) {\n\t\t\t\tconst activeDataGroups = dataGroups.map(d => d.sharedStackKey);\n\t\t\t\tconst tick_html = svg.select(\n\t\t\t\t\t`g.axis.${axisPosition} g.ticks g.tick`\n\t\t\t\t).html();\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick\")\n\t\t\t\t\t.html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function(d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(d, truncationType, truncationNumCharacter);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function(d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(d, truncationType, truncationNumCharacter);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks\")\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS && datum.length > truncationThreshold) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\ttype: TooltipTypes.AXISLABEL,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACN,aAAa,EACb,MAAM,EACN,UAAU,EACV,KAAK,EACL,YAAY,EACZ,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACN,uBAAuB,EACvB,UAAU,EACV,aAAa,EACb,MAAM,4BAA4B,CAAC;AAEpC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEnE;IAA0B,wBAAS;IAQlC,cAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QAA3D,YACC,kBAAM,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,SAO/B;QAfD,UAAI,GAAG,MAAM,CAAC;QAUb,IAAI,OAAO,EAAE;YACZ,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QAED,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC;;IACrC,CAAC;IAED,qBAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACZ,IAAA,oCAAsB,CAAkB;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACrE,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClE,IAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAC9C,WAAW,EACX,OAAO,EACP,QAAQ,CACR,CAAC;QAEF,iDAAiD;QACjD,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACvC,WAAW,EACX,YAAY,EACZ,MAAM,CACN,CAAC;QACF,IAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC5C,WAAW,EACX,YAAY,EACZ,WAAW,CACX,CAAC;QACF,IAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAC/C,WAAW,EACX,YAAY,EACZ,cAAc,CACd,CAAC;QAEF,IAAM,uBAAuB,GAAG,qBAAqB,KAAK,IAAI,CAAC;QAC/D,IAAM,cAAc,GACnB,YAAY,KAAK,aAAa,CAAC,IAAI;YACnC,YAAY,KAAK,aAAa,CAAC,KAAK,CAAC;QACtC,IAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEjE,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,IAAA;;UAEJ,EAFM,gBAAK,EAAE,kBAEb,CAAC;QAEH,IAAI,aAAa,EAAE,WAAW,CAAC;QAC/B,IACC,YAAY,KAAK,aAAa,CAAC,MAAM;YACrC,YAAY,KAAK,aAAa,CAAC,GAAG,EACjC;YACD,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;gBACnB,CAAC,CAAC,CAAC,CAAC;YACL,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBACnD,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;gBAC5B,CAAC,CAAC,KAAK,CAAC;SACT;aAAM;YACN,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7C,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;SAC/B;QAED,2CAA2C;QAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAC7D,YAAY,CACZ,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE;YACzC,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;SAC/C;aAAM;YACN,KAAK,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;SAC1C;QAED,8CAA8C;QAC9C,IAAI,YAAY,CAAC;QACjB,QAAQ,YAAY,EAAE;YACrB,KAAK,aAAa,CAAC,IAAI;gBACtB,YAAY,GAAG,QAAQ,CAAC;gBACxB,MAAM;YACP,KAAK,aAAa,CAAC,MAAM;gBACxB,YAAY,GAAG,UAAU,CAAC;gBAC1B,MAAM;YACP,KAAK,aAAa,CAAC,KAAK;gBACvB,YAAY,GAAG,SAAS,CAAC;gBACzB,MAAM;YACP,KAAK,aAAa,CAAC,GAAG;gBACrB,YAAY,GAAG,OAAO,CAAC;gBACvB,MAAM;SACP;QAED,2BAA2B;QAC3B,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CACxC,GAAG,EACH,YAAU,YAAc,CACxB,CAAC;QACF,IAAM,aAAa,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3D,IAAI,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAK,KAAK,CAAC,eAAe,SAAI,KAAK,CAAC,KAAO,CAAC,CAAC;SAChE;QAED,2EAA2E;QAC3E,wFAAwF;QACxF,mEAAmE;QACnE,IAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAC/C,SAAS,EACT,mBAAmB,CACnB;aACC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;aACrB,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;aAC/B,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAE5B,kEAAkE;QAClE,IAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAClE,GAAG,CACH,CAAC;QACF,IAAM,UAAU,GAAG,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE;YAClE,OAAO,EAAE,IAAI;SACb,CAAC,CAAC,MAAM,CAAC;QACV,QAAQ,CAAC,MAAM,EAAE,CAAC;QAElB,IAAM,eAAe,GACpB,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI;YAClC,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC;QAC3C,IAAM,SAAS,GACd,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC;QAE9D,yBAAyB;QACzB,IAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,KAAK,EAAE;YAChB,IAAI,aAAa,SAAA,CAAC;YAElB,IAAI,uBAAuB,EAAE;gBAC5B,aAAa,GAAG,qBAAqB,CAAC;aACtC;iBAAM;gBACN,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAChD,IAAI,cAAc,EAAE;oBACnB,qCAAqC;oBACrC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAC3C,MAAM,EACN,UAAU,EACV,aAAa,CAAC,sBAAsB,CACpC,CAAC;iBACF;aACD;YAED,mBAAmB;YACnB,8BAA8B;YAC9B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;gBACzD,aAAa,GAAG,CAAC,CAAC;aAClB;YAED,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE1B,IAAI,eAAe,EAAE;gBACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE;oBACvC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;iBACpB;qBAAM;oBACN,IAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACxC,OAAO,EACP,WAAW,EACX,iBAAiB,CACjB,CAAC;oBAEF,IAAI,UAAU,SAAA,CAAC;oBACf,IAAI,eAAe,EAAE;wBACpB,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;qBACvC;oBACD,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAExC,6BAA6B;oBAC7B,0CAA0C;oBAC1C,IAAI,eAAe,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7C,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC5C,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACxB;oBAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBAC5B;aACD;SACD;QAED,mCAAmC;QACnC,IAAI,SAAS,CAAC;QACd,IAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAC9C,WAAW,EACX,OAAO,EACP,WAAW,CACX,CAAC;QACF,IAAI,eAAe,EAAE;YACpB,IAAM,cAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAChE,IAAI,qBAAqB,KAAK,IAAI,EAAE;gBACnC,SAAS,GAAG,UAAC,CAAS,EAAE,CAAS;oBAChC,OAAA,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,cAAY,EAAE,gBAAgB,CAAC;gBAAhD,CAAgD,CAAC;aAClD;iBAAM;gBACN,SAAS,GAAG,UAAC,CAAS,EAAE,CAAS;oBAChC,IAAM,qBAAqB,GAAG,UAAU,CACvC,CAAC,EACD,CAAC,EACD,cAAY,EACZ,gBAAgB,CAChB,CAAC;oBACF,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;gBAC3D,CAAC,CAAC;aACF;SACD;aAAM;YACN,IAAI,qBAAqB,KAAK,IAAI,EAAE;gBACnC,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE;oBACpC,SAAS,GAAG,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,cAAc,EAAE,EAAlB,CAAkB,CAAC;iBACtC;aACD;iBAAM;gBACN,SAAS,GAAG,qBAAqB,CAAC;aAClC;SACD;QAED,sBAAsB;QACtB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE3B,mCAAmC;QACnC,QAAQ,YAAY,EAAE;YACrB,KAAK,aAAa,CAAC,IAAI;gBACtB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,eAAa,IAAI,CAAC,OAAO,CAAC,IAAI,SAAM,CAAC,CAAC;gBAChE,MAAM;YACP,KAAK,aAAa,CAAC,MAAM;gBACxB,OAAO,CAAC,IAAI,CACX,WAAW,EACX,mBAAgB,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,OAAG,CAC/C,CAAC;gBACF,MAAM;YACP,KAAK,aAAa,CAAC,KAAK;gBACvB,OAAO,CAAC,IAAI,CACX,WAAW,EACX,gBAAa,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,UAAM,CAC7C,CAAC;gBACF,MAAM;YACP,KAAK,aAAa,CAAC,GAAG;gBACrB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,MAAG,CAAC,CAAC;gBAC/D,MAAM;SACP;QAED,0BAA0B;QAC1B,qEAAqE;QACrE,IAAI,WAAW,CAAC,KAAK,EAAE;YACtB,IAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAC3C,SAAS,EACT,iBAAiB,CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE1D,QAAQ,YAAY,EAAE;gBACrB,KAAK,aAAa,CAAC,IAAI;oBACtB,YAAY;yBACV,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;yBAChC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;yBACZ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;yBAClC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;yBACjB,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACP,KAAK,aAAa,CAAC,MAAM;oBACxB,YAAY;yBACV,IAAI,CACJ,WAAW,EACX,gBACC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WACxC,MAAM,MAAG,CACd;yBACA,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACP,KAAK,aAAa,CAAC,KAAK;oBACvB,YAAY;yBACV,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;yBAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;yBACjB,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;yBAC/B,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;yBACjB,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACP,KAAK,aAAa,CAAC,GAAG;oBACb,IAAA;;6BAAmB,CAKzB;oBACF,YAAY;yBACV,IAAI,CACJ,WAAW,EACX,gBACC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WACxC,WAAW,GAAG,CAAC,MAAG,CACvB;yBACA,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;aACP;SACD;QAED,qCAAqC;QACrC,IAAI,eAAe,EAAE;YACpB,IAAM,cAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAChE,IAAM,aAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;YACjD,IAAM,gBAAgB,GAAG,OAAO,CAAC;YAEjC,IAAI,OAAO,EAAE;gBACZ,OAAO,GAAG,OAAO,CAAC,UAAU,CAC3B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACtC,aAAa,EACb,OAAO,CACP,CACD,CAAC;aACF;YACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,oEAAoE;YACpE,IAAM,KAAK,GAAG,gBAAgB;iBAC5B,SAAS,CAAC,OAAO,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC;iBAC9B,KAAK,EAAE;iBACP,MAAM,CAAC,MAAM,CAAC,CAAC;YACjB,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,UAAC,SAAiB,EAAE,CAAS;gBACvD,OAAO,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,cAAY,EAAE,aAAW,CAAC;oBAC5D,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,QAAQ,CAAC;YACb,CAAC,CAAC,CAAC;SACH;aAAM;YACN,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;gBAC/B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7B;iBAAM;gBACN,OAAO,GAAG,OAAO;qBACf,UAAU,CACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,CACtD;qBACA,IAAI,CAAC,IAAI,CAAC,CAAC;aACb;SACD;QAED,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,IACC,YAAY,KAAK,aAAa,CAAC,MAAM;YACrC,YAAY,KAAK,aAAa,CAAC,GAAG,EACjC;YACD,IAAI,WAAW,GAAG,KAAK,CAAC;YAExB,8CAA8C;YAC9C,mDAAmD;YACnD,IAAI,KAAK,CAAC,IAAI,EAAE;gBACf,IAAM,SAAS,GAAG,gBAAgB;qBAChC,SAAS,CAAC,aAAa,CAAC;qBACxB,KAAK,EAAE,CAAC;gBAEV,uDAAuD;gBACvD,WAAW,GAAG,SAAS,CAAC,IAAI,CAC3B,UAAC,QAAQ;oBACR,OAAA,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yBACrD,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;gBADvB,CACuB,CACxB,CAAC;aACF;iBAAM;gBACN,uCAAuC;gBACvC,sDAAsD;gBACtD,IAAM,WAAW,GAChB,KAAK,CAAC,WAAW,CAChB,WAAW,EACX,OAAO,EACP,qBAAqB,CACrB,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBACnD,IAAM,WAAW,GAAG,eAAe;oBAClC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM;oBAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;gBACxB,IAAM,iBAAiB,GAAG,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC;gBAElD,WAAW,GAAG,iBAAiB,GAAG,WAAW,CAAC;aAC9C;YAED,IAAI,WAAW,EAAE;gBAChB,IAAI,CAAC,uBAAuB,EAAE;oBAC7B,IAAI,CAAC,KAAK,CACT,IAAI,CAAC,uBAAuB,CAC3B,KAAK,EACL,UAAU,EACV,aAAa,CAAC,wBAAwB,CACtC,CACD,CAAC;oBAEF,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnB;gBAED,SAAS;qBACP,SAAS,CAAC,qBAAqB,CAAC;qBAChC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;qBAChC,KAAK,CACL,aAAa,EACb,YAAY,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CACpD,CAAC;aACH;iBAAM;gBACN,SAAS;qBACP,SAAS,CAAC,qBAAqB,CAAC;qBAChC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;qBACvB,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;aAC7B;SACD;QAED,kEAAkE;QAClE,4CAA4C;QAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE;YAC7B,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SAC7B;QAED,sCAAsC;QACtC,gCAAgC;QAChC,IACC,cAAc,KAAK,eAAe,CAAC,IAAI;YACvC,aAAa,KAAK,UAAU,CAAC,MAAM,EAClC;YACD,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC;YAC3D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,IAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CACtC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,cAAc,EAAhB,CAAgB,CACvB,CAAC;gBACF,IAAM,SAAS,GAAG,GAAG;qBACnB,MAAM,CAAC,YAAU,YAAY,oBAAiB,CAAC;qBAC/C,IAAI,EAAE,CAAC;gBAET,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEtD,SAAS;qBACP,SAAS,CAAC,aAAa,CAAC;qBACxB,IAAI,CAAC,gBAAgB,CAAC;qBACtB,IAAI,CAAC,UAAU,CAAC;oBAChB,IAAI,CAAC,CAAC,MAAM,GAAG,mBAAmB,EAAE;wBACnC,OAAO,KAAK,CAAC,aAAa,CACzB,CAAC,EACD,cAAc,EACd,sBAAsB,CACtB,CAAC;qBACF;yBAAM;wBACN,OAAO,CAAC,CAAC;qBACT;gBACF,CAAC,CAAC,CAAC;gBAEJ,IAAI,CAAC,mBAAmB,EAAE;qBACxB,SAAS,CAAC,aAAa,CAAC;qBACxB,IAAI,CAAC,gBAAgB,CAAC;qBACtB,IAAI,CAAC,UAAU,CAAC;oBAChB,IAAI,CAAC,CAAC,MAAM,GAAG,mBAAmB,EAAE;wBACnC,OAAO,KAAK,CAAC,aAAa,CACzB,CAAC,EACD,cAAc,EACd,sBAAsB,CACtB,CAAC;qBACF;yBAAM;wBACN,OAAO,CAAC,CAAC;qBACT;gBACF,CAAC,CAAC,CAAC;gBAEJ,SAAS;qBACP,SAAS,CAAC,SAAS,CAAC;qBACpB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBAE1C,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC1D;SACD;QACD,wCAAwC;QACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,gCAAiB,GAAjB;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,IAAA,oCAAsB,CAAkB;QAChD,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CACxC,GAAG,EACH,YAAU,YAAc,CACxB,CAAC;QACF,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACrE,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClE,IAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC5C,WAAW,EACX,YAAY,EACZ,WAAW,CACX,CAAC;QAEF,IAAM,eAAe,GACpB,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI;YAClC,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC;QAE3C,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,SAAS;aACP,SAAS,CAAC,aAAa,CAAC;aACxB,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK;YAC/B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CACjC,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B;gBACC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CACD,CAAC;QACH,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK;YAC/B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CACjC,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B;gBACC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CACD,CAAC;YACF,IACC,aAAa,KAAK,UAAU,CAAC,MAAM;gBACnC,KAAK,CAAC,MAAM,GAAG,mBAAmB,EACjC;gBACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;oBACvD,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC;oBAC5B,IAAI,EAAE,YAAY,CAAC,SAAS;iBAC5B,CAAC,CAAC;aACH;QACF,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK;YAC3B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC3D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK;YAC9B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC9D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;YACH,IAAI,aAAa,KAAK,UAAU,CAAC,MAAM,EAAE;gBACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACxD;QACF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kCAAmB,GAAnB;QACS,IAAA,oCAAsB,CAAkB;QAEhD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CACnC,YAAU,YAAY,uBAAoB,CAC1C,CAAC;IACH,CAAC;IAED,0BAAW,GAAX;QACS,IAAA,oCAAsB,CAAkB;QAEhD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CACnC,YAAU,YAAY,qBAAkB,CACxC,CAAC;IACH,CAAC;IAED,sCAAuB,GAAvB,UAAwB,IAAI,EAAE,QAAQ,EAAE,UAAU;QACjD,IAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,KAAK,CACjB,gBAAgB,EAChB,CAAC,EACD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAC/B,CAAC;IACH,CAAC;IAED,sBAAO,GAAP;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,IAAA,oCAAsB,CAAkB;QAChD,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CACxC,GAAG,EACH,YAAU,YAAc,CACxB,CAAC;QAEF,yBAAyB;QACzB,SAAS;aACP,SAAS,CAAC,aAAa,CAAC;aACxB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IACF,WAAC;AAAD,CAAC,AA5kBD,CAA0B,SAAS,GA4kBlC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport {\n\tAxisPositions,\n\tEvents,\n\tScaleTypes,\n\tRoles,\n\tTooltipTypes,\n\tTruncationTypes\n} from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport { ChartModel } from \"../../model\";\nimport { DOMUtils } from \"../../services\";\nimport * as Configuration from \"../../configuration\";\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary\n} from \"../../services/time-series\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { axisBottom, axisLeft, axisRight, axisTop } from \"d3-axis\";\n\nexport class Axis extends Component {\n\ttype = \"axes\";\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"number\"\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"type\"\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"numCharacter\"\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\t\tconst timeScaleOptions = Tools.getProperty(options, \"timeScale\");\n\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (this.scaleType === ScaleTypes.LABELS) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr(\"role\", `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style(\"opacity\", \"0\")\n\t\t\t.style(\"pointer-events\", \"none\")\n\t\t\t.attr(\"aria-hidden\", true);\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t\"0\"\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.tickSpaceRatioVertical\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addSpaceOnEdges = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\"timeScale\",\n\t\t\t\t\t\t\"addSpaceOnEdges\"\n\t\t\t\t\t);\n\n\t\t\t\t\tlet tickValues;\n\t\t\t\t\tif (addSpaceOnEdges) {\n\t\t\t\t\t\ttickValues = scale.nice(numberOfTicks);\n\t\t\t\t\t}\n\t\t\t\t\ttickValues = scale.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (addSpaceOnEdges && tickValues.length > 2) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"formatter\"\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(t, i, timeInterval, timeScaleOptions);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr(\"transform\", `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr(\"transform\", `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(this.model.isDataEmpty() ? \"\" : axisOptions.title);\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(-90)\")\n\t\t\t\t\t\t.attr(\"y\", 0)\n\t\t\t\t\t\t.attr(\"x\", -(scale.range()[0] / 2))\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(90)\")\n\t\t\t\t\t\t.attr(\"y\", -width)\n\t\t\t\t\t\t.attr(\"x\", scale.range()[0] / 2)\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition(\n\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\"axis-update\",\n\t\t\t\t\t\tanimate\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll(\".tick\")\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select(\"text\");\n\t\t\tticks.style(\"font-weight\", (tickValue: number, i: number) => {\n\t\t\t\treturn isTickPrimary(tickValue, i, timeInterval, showDayName)\n\t\t\t\t\t? \"bold\"\n\t\t\t\t\t: \"normal\";\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tthis.services.transitions.getTransition(\"axis-update\")\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet rotateTicks = false;\n\n\t\t\t// If we're dealing with a discrete scale type\n\t\t\t// We're able to grab the spacing between the ticks\n\t\t\tif (scale.step) {\n\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.nodes();\n\n\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\trotateTicks = textNodes.some(\n\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, { useBBox: true })\n\t\t\t\t\t\t\t.width >= scale.step()\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// When dealing with a continuous scale\n\t\t\t\t// We need to calculate an estimated size of the ticks\n\t\t\t\tconst minTickSize =\n\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\taxisOptions,\n\t\t\t\t\t\t\"ticks\",\n\t\t\t\t\t\t\"rotateIfSmallerThan\"\n\t\t\t\t\t) || Configuration.axis.ticks.rotateIfSmallerThan;\n\t\t\t\tconst ticksNumber = isTimeScaleType\n\t\t\t\t\t? axis.tickValues().length\n\t\t\t\t\t: scale.ticks().length;\n\t\t\t\tconst estimatedTickSize = width / ticksNumber / 2;\n\n\t\t\t\trotateTicks = estimatedTickSize < minTickSize;\n\t\t\t}\n\n\t\t\tif (rotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.tickSpaceRatioHorizontal\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t\"text-anchor\",\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? \"start\" : \"end\"\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", null)\n\t\t\t\t\t.style(\"text-anchor\", null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (this.model.isDataEmpty()) {\n\t\t\tcontainer.attr(\"opacity\", 0);\n\t\t}\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (\n\t\t\ttruncationType !== TruncationTypes.NONE &&\n\t\t\taxisScaleType === ScaleTypes.LABELS\n\t\t) {\n\t\t\tconst dataGroups = this.model.getDataValuesGroupedByKeys();\n\t\t\tif (dataGroups.length > 0) {\n\t\t\t\tconst activeDataGroups = dataGroups.map(\n\t\t\t\t\t(d) => d.sharedStackKey\n\t\t\t\t);\n\t\t\t\tconst tick_html = svg\n\t\t\t\t\t.select(`g.axis.${axisPosition} g.ticks g.tick`)\n\t\t\t\t\t.html();\n\n\t\t\t\tcontainer.selectAll(\"g.ticks g.tick\").html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks\")\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer.selectAll(\"g.tick text\").data(activeDataGroups);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\ttype: TooltipTypes.AXISLABEL\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\t}\n}\n"]}
|
package/components/axes/grid.js
CHANGED
|
@@ -145,7 +145,7 @@ var Grid = /** @class */ (function (_super) {
|
|
|
145
145
|
// threshold for when to display a gridline tooltip
|
|
146
146
|
var bounds = {
|
|
147
147
|
min: Number(translations.tx) - threshold,
|
|
148
|
-
max: Number(translations.tx) + threshold
|
|
148
|
+
max: Number(translations.tx) + threshold
|
|
149
149
|
};
|
|
150
150
|
return bounds.min <= position[0] && position[0] <= bounds.max;
|
|
151
151
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sourceRoot":"","sources":["grid.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { axisBottom, axisLeft } from \"d3-axis\";\nimport { mouse, select } from \"d3-selection\";\nimport { TooltipTypes, Events } from \"../../interfaces\";\n\nexport class Grid extends Component {\n\ttype = \"grid\";\n\n\tbackdrop: any;\n\n\trender(animate = true) {\n\t\t// Draw the backdrop\n\t\tthis.drawBackdrop();\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.x.grid\");\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.y.grid\");\n\n\t\tthis.drawXGrid(animate);\n\t\tthis.drawYGrid(animate);\n\t}\n\n\tdrawXGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\n\t\tconst height = this.backdrop.attr(\"height\");\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst xGrid = axisBottom(mainXScale)\n\t\t\t.tickSizeInner(-height)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\txGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".x.grid\")\n\t\t\t.attr(\n\t\t\t\t\"transform\",\n\t\t\t\t`translate(${-this.backdrop.attr(\"x\")}, ${height})`\n\t\t\t);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(xGrid);\n\t\t} else {\n\t\t\tg.call(xGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\tdrawYGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\t\tconst width = this.backdrop.attr(\"width\");\n\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\t\tconst yGrid = axisLeft(mainYScale)\n\t\t\t.tickSizeInner(-width)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\tyGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".y.grid\")\n\t\t\t.attr(\"transform\", `translate(0, ${-this.backdrop.attr(\"y\")})`);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(yGrid);\n\t\t} else {\n\t\t\tg.call(yGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\t/**\n\t * Returns the threshold for the gridline tooltips based on the mouse location.\n\t * Calculated based on the mouse position between the two closest gridlines or edges of chart.\n\t */\n\tgetGridlineThreshold(mousePos) {\n\t\t// use the space between axis grid ticks to adjust the threshold for the tooltips\n\t\tconst svg = this.parent;\n\n\t\t// sort in ascending x translation value order\n\t\tconst gridlinesX = svg\n\t\t\t.selectAll(\".x.grid .tick\")\n\t\t\t.nodes()\n\t\t\t.sort((a, b) => {\n\t\t\t\treturn (\n\t\t\t\t\tNumber(Tools.getTranslationValues(a).tx) -\n\t\t\t\t\tNumber(Tools.getTranslationValues(b).tx)\n\t\t\t\t);\n\t\t\t});\n\n\t\t// find the 2 gridlines on either side of the mouse\n\t\tlet floor = -1;\n\t\tlet ceiling;\n\t\tif (!gridlinesX.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tgridlinesX.forEach((line: HTMLElement, i: any) => {\n\t\t\tif (mousePos[0] >= +Tools.getTranslationValues(line).tx) {\n\t\t\t\tfloor++;\n\t\t\t}\n\t\t});\n\t\tceiling = floor + 1 < gridlinesX.length ? floor + 1 : gridlinesX.length;\n\n\t\t// get the 'step' between chart gridlines\n\t\tconst line1 = gridlinesX[floor];\n\t\tconst line2 = gridlinesX[ceiling];\n\t\tlet lineSpacing;\n\n\t\t// if the mouse is on edge of charts (mouseX < first gridline || mouseX > last gridline)\n\t\t// we can use the chart edge to determind the threshold for the gridlines\n\t\tif (!line1) {\n\t\t\t// we are between the first gridline and the chart edge\n\t\t\tlineSpacing = +Tools.getTranslationValues(line2).tx;\n\t\t} else if (!line2) {\n\t\t\t// we need to use the chart right bounds in case there isnt a domain axis\n\t\t\tconst gridElement = svg.select(\"rect.chart-grid-backdrop\").node();\n\t\t\tconst width = DOMUtils.getSVGElementSize(gridElement).width;\n\n\t\t\tlineSpacing = width - +Tools.getTranslationValues(line1).tx;\n\t\t} else {\n\t\t\t// there are two gridlines to use\n\t\t\tlineSpacing =\n\t\t\t\t+Tools.getTranslationValues(line2).tx -\n\t\t\t\t+Tools.getTranslationValues(line1).tx;\n\t\t}\n\t\tconst { threshold } = this.model.getOptions().tooltip.gridline;\n\t\t// return the threshold\n\t\treturn lineSpacing * threshold;\n\t}\n\n\t/**\n\t * Returns the active gridlines based on the gridline threshold and mouse position.\n\t * @param position mouse positon\n\t */\n\tgetActiveGridline(position) {\n\t\tconst userSpecifiedThreshold = Tools.getProperty(\n\t\t\tthis.model.getOptions,\n\t\t\t\"tooltip\",\n\t\t\t\"gridline\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst threshold = userSpecifiedThreshold\n\t\t\t? userSpecifiedThreshold\n\t\t\t: this.getGridlineThreshold(position);\n\t\tconst svg = this.parent;\n\n\t\tconst xGridlines = svg.selectAll(\".x.grid .tick\").filter(function () {\n\t\t\tconst translations = Tools.getTranslationValues(this);\n\n\t\t\t// threshold for when to display a gridline tooltip\n\t\t\tconst bounds = {\n\t\t\t\tmin: Number(translations.tx) - threshold,\n\t\t\t\tmax: Number(translations.tx) + threshold,\n\t\t\t};\n\n\t\t\treturn bounds.min <= position[0] && position[0] <= bounds.max;\n\t\t});\n\n\t\treturn xGridlines;\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n\n\tcleanGrid(g) {\n\t\tconst options = this.model.getOptions();\n\t\tg.selectAll(\"line\").attr(\"stroke\", options.grid.strokeColor);\n\n\t\t// Remove extra elements\n\t\tg.selectAll(\"text\").remove();\n\t\tg.select(\".domain\").remove();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"grid.js","sourceRoot":"","sources":["grid.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { axisBottom, axisLeft } from \"d3-axis\";\nimport { mouse, select } from \"d3-selection\";\nimport { TooltipTypes, Events } from \"../../interfaces\";\n\nexport class Grid extends Component {\n\ttype = \"grid\";\n\n\tbackdrop: any;\n\n\trender(animate = true) {\n\t\t// Draw the backdrop\n\t\tthis.drawBackdrop();\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.x.grid\");\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.y.grid\");\n\n\t\tthis.drawXGrid(animate);\n\t\tthis.drawYGrid(animate);\n\t}\n\n\tdrawXGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\n\t\tconst height = this.backdrop.attr(\"height\");\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst xGrid = axisBottom(mainXScale)\n\t\t\t.tickSizeInner(-height)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\txGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".x.grid\")\n\t\t\t.attr(\n\t\t\t\t\"transform\",\n\t\t\t\t`translate(${-this.backdrop.attr(\"x\")}, ${height})`\n\t\t\t);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(xGrid);\n\t\t} else {\n\t\t\tg.call(xGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\tdrawYGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\t\tconst width = this.backdrop.attr(\"width\");\n\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\t\tconst yGrid = axisLeft(mainYScale)\n\t\t\t.tickSizeInner(-width)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\tyGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".y.grid\")\n\t\t\t.attr(\"transform\", `translate(0, ${-this.backdrop.attr(\"y\")})`);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(yGrid);\n\t\t} else {\n\t\t\tg.call(yGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\t/**\n\t * Returns the threshold for the gridline tooltips based on the mouse location.\n\t * Calculated based on the mouse position between the two closest gridlines or edges of chart.\n\t */\n\tgetGridlineThreshold(mousePos) {\n\t\t// use the space between axis grid ticks to adjust the threshold for the tooltips\n\t\tconst svg = this.parent;\n\n\t\t// sort in ascending x translation value order\n\t\tconst gridlinesX = svg\n\t\t\t.selectAll(\".x.grid .tick\")\n\t\t\t.nodes()\n\t\t\t.sort((a, b) => {\n\t\t\t\treturn (\n\t\t\t\t\tNumber(Tools.getTranslationValues(a).tx) -\n\t\t\t\t\tNumber(Tools.getTranslationValues(b).tx)\n\t\t\t\t);\n\t\t\t});\n\n\t\t// find the 2 gridlines on either side of the mouse\n\t\tlet floor = -1;\n\t\tlet ceiling;\n\t\tif (!gridlinesX.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tgridlinesX.forEach((line: HTMLElement, i: any) => {\n\t\t\tif (mousePos[0] >= +Tools.getTranslationValues(line).tx) {\n\t\t\t\tfloor++;\n\t\t\t}\n\t\t});\n\t\tceiling = floor + 1 < gridlinesX.length ? floor + 1 : gridlinesX.length;\n\n\t\t// get the 'step' between chart gridlines\n\t\tconst line1 = gridlinesX[floor];\n\t\tconst line2 = gridlinesX[ceiling];\n\t\tlet lineSpacing;\n\n\t\t// if the mouse is on edge of charts (mouseX < first gridline || mouseX > last gridline)\n\t\t// we can use the chart edge to determind the threshold for the gridlines\n\t\tif (!line1) {\n\t\t\t// we are between the first gridline and the chart edge\n\t\t\tlineSpacing = +Tools.getTranslationValues(line2).tx;\n\t\t} else if (!line2) {\n\t\t\t// we need to use the chart right bounds in case there isnt a domain axis\n\t\t\tconst gridElement = svg.select(\"rect.chart-grid-backdrop\").node();\n\t\t\tconst width = DOMUtils.getSVGElementSize(gridElement).width;\n\n\t\t\tlineSpacing = width - +Tools.getTranslationValues(line1).tx;\n\t\t} else {\n\t\t\t// there are two gridlines to use\n\t\t\tlineSpacing =\n\t\t\t\t+Tools.getTranslationValues(line2).tx -\n\t\t\t\t+Tools.getTranslationValues(line1).tx;\n\t\t}\n\t\tconst { threshold } = this.model.getOptions().tooltip.gridline;\n\t\t// return the threshold\n\t\treturn lineSpacing * threshold;\n\t}\n\n\t/**\n\t * Returns the active gridlines based on the gridline threshold and mouse position.\n\t * @param position mouse positon\n\t */\n\tgetActiveGridline(position) {\n\t\tconst userSpecifiedThreshold = Tools.getProperty(\n\t\t\tthis.model.getOptions,\n\t\t\t\"tooltip\",\n\t\t\t\"gridline\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst threshold = userSpecifiedThreshold\n\t\t\t? userSpecifiedThreshold\n\t\t\t: this.getGridlineThreshold(position);\n\t\tconst svg = this.parent;\n\n\t\tconst xGridlines = svg.selectAll(\".x.grid .tick\").filter(function () {\n\t\t\tconst translations = Tools.getTranslationValues(this);\n\n\t\t\t// threshold for when to display a gridline tooltip\n\t\t\tconst bounds = {\n\t\t\t\tmin: Number(translations.tx) - threshold,\n\t\t\t\tmax: Number(translations.tx) + threshold\n\t\t\t};\n\n\t\t\treturn bounds.min <= position[0] && position[0] <= bounds.max;\n\t\t});\n\n\t\treturn xGridlines;\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n\n\tcleanGrid(g) {\n\t\tconst options = this.model.getOptions();\n\t\tg.selectAll(\"line\").attr(\"stroke\", options.grid.strokeColor);\n\n\t\t// Remove extra elements\n\t\tg.selectAll(\"text\").remove();\n\t\tg.select(\".domain\").remove();\n\t}\n}\n"]}
|
package/components/axes/ruler.js
CHANGED
|
@@ -48,7 +48,7 @@ var Ruler = /** @class */ (function (_super) {
|
|
|
48
48
|
var _b = rangeScale.range(), yScaleEnd = _b[0], yScaleStart = _b[1];
|
|
49
49
|
var scaledData = displayData.map(function (d) { return ({
|
|
50
50
|
domainValue: _this.services.cartesianScales.getDomainValue(d),
|
|
51
|
-
originalData: d
|
|
51
|
+
originalData: d
|
|
52
52
|
}); });
|
|
53
53
|
/**
|
|
54
54
|
* Find matches, reduce is used instead of filter
|
|
@@ -111,7 +111,7 @@ var Ruler = /** @class */ (function (_super) {
|
|
|
111
111
|
this.services.events.dispatchEvent("show-tooltip", {
|
|
112
112
|
hoveredElement: rulerLine,
|
|
113
113
|
multidata: tooltipData,
|
|
114
|
-
type: TooltipTypes.GRIDLINE
|
|
114
|
+
type: TooltipTypes.GRIDLINE
|
|
115
115
|
});
|
|
116
116
|
ruler.attr("opacity", 1);
|
|
117
117
|
// line snaps to matching point
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { TooltipTypes, CartesianOrientations } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { mouse, Selection } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\n\trender() {\n\t\tthis.drawBackdrop();\n\t\tthis.addBackdropEventListeners();\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\t\tconst scaledData: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = displayData.map((d) => ({\n\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\toriginalData: d,\n\t\t}));\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = scaledData\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t)\n\t\t\t.reduce((accum, currentValue) => {\n\t\t\t\tif (accum.length === 0) {\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t\treturn accum;\n\t\t\t\t}\n\n\t\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t\t);\n\t\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t\t);\n\n\t\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\t\treturn accum;\n\t\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\t\taccum = [currentValue];\n\t\t\t\t} else {\n\t\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t}\n\n\t\t\t\treturn accum;\n\t\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tmultidata: tooltipData,\n\t\t\t\ttype: TooltipTypes.GRIDLINE,\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(\"hide-tooltip\");\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", function () {\n\t\t\t\tconst pos = mouse(self.parent.node());\n\n\t\t\t\tself.showRuler(pos);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tself.hideRuler();\n\t\t\t});\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,aAAa;AACb,OAAO,EAAE,KAAK,EAAa,MAAM,cAAc,CAAC;AAIhD,IAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,mDAAmD;AACnD,SAAS,sBAAsB,CAAC,EAAU,EAAE,CAAS;IACpD,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,IAAI,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AACjD,CAAC;AAED;IAA2B,yBAAS;IAApC;QAAA,qEA+LC;QA9LA,UAAI,GAAG,OAAO,CAAC;;IA8LhB,CAAC;IA1LA,sBAAM,GAAN;QACC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAClC,CAAC;IAED,yBAAS,GAAT,UAAU,EAAwB;QAAlC,iBA8HC;YA9HU,SAAC,EAAE,SAAC;QACd,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAM,WAAW,GAA0B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QAC1F,IAAM,eAAe,GACpB,WAAW,KAAK,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtD,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACpE,IAAM,iBAAiB,GAAwB,GAAG,CAAC,SAAS,CAC3D,wBAAwB,CACxB,CAAC;QACF,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAChD,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAC3D,IAAA,uBAA6C,EAA5C,iBAAS,EAAE,mBAAiC,CAAC;QACpD,IAAM,UAAU,GAGV,WAAW,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC;YAC7B,WAAW,EAAE,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,YAAY,EAAE,CAAC;SACf,CAAC,EAH2B,CAG3B,CAAC,CAAC;QAEJ;;;WAGG;QACH,IAAM,2BAA2B,GAG3B,UAAU;aACd,MAAM,CAAC,UAAC,CAAC;YACT,OAAA,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC;QAAtD,CAAsD,CACtD;aACA,MAAM,CAAC,UAAC,KAAK,EAAE,YAAY;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzB,OAAO,KAAK,CAAC;aACb;YAED,sGAAsG;YACtG,IAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAE9C,IAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CACtC,eAAe,GAAG,YAAY,CAAC,WAAW,CAC1C,CAAC;YACF,IAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CACpC,eAAe,GAAG,gBAAgB,CAClC,CAAC;YAEF,IAAI,sBAAsB,GAAG,oBAAoB,EAAE;gBAClD,kHAAkH;gBAClH,OAAO,KAAK,CAAC;aACb;iBAAM,IAAI,sBAAsB,GAAG,oBAAoB,EAAE;gBACzD,+FAA+F;gBAC/F,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC;aACvB;iBAAM;gBACN,2GAA2G;gBAC3G,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACzB;YAED,OAAO,KAAK,CAAC;QACd,CAAC,EAAE,EAAE,CAAC,CAAC;QAER,wBAAwB;QACxB,IAAI,2BAA2B,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,IAAM,iBAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;YAC3E,IAAM,WAAW,GAAG,2BAA2B;iBAC7C,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,YAAY,EAAd,CAAc,CAAC;iBAC1B,MAAM,CAAC,UAAC,CAAC;gBACT,IAAM,KAAK,GAAG,CAAC,CAAC,iBAAe,CAAC,CAAC;gBACjC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;YAC9C,CAAC,CAAC,CAAC;YAEJ,uDAAuD;YACvD,IAAM,+BAA6B,GAAG,2BAA2B,CAAC,GAAG,CACpE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAb,CAAa,CACpB,CAAC;YACF,IAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAC,CAAC;gBACtD,IAAM,WAAW,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAC/D,CAAC,CACD,CAAC;gBACF,OAAO,+BAA6B,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH;;;eAGG;YACH,IACC,IAAI,CAAC,mBAAmB;gBACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC;gBACnC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,EAC5D;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;aACjB;YAED,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE1C,+BAA+B;YAC/B,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;YAE/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE;gBAClD,cAAc,EAAE,SAAS;gBACzB,SAAS,EAAE,WAAW;gBACtB,IAAI,EAAE,YAAY,CAAC,QAAQ;aAC3B,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAEzB,+BAA+B;YAC/B,IAAM,WAAW,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,WAAW,KAAK,YAAY,EAAE;gBACjC,SAAS;qBACP,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;qBACvB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;qBACrB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;qBACnC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;aACtC;iBAAM;gBACN,SAAS;qBACP,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;qBACvB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;qBACrB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;qBACnC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;aACtC;SACD;aAAM;YACN,IAAI,CAAC,SAAS,EAAE,CAAC;SACjB;IACF,CAAC;IAED,yBAAS,GAAT;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtD,IAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAElE,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,yCAAyB,GAAzB;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,QAAQ;aACX,EAAE,CAAC,qBAAqB,EAAE;YAC1B,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAEtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAAY,GAAZ;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACjE,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAE3D,IAAA,uBAA6C,EAA5C,mBAAW,EAAE,iBAA+B,CAAC;QAC9C,IAAA,uBAA6C,EAA5C,iBAAS,EAAE,mBAAiC,CAAC;QAEpD,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QACxE,IAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAC3C,IAAI,CAAC,QAAQ,EACb,0BAA0B,CAC1B,CAAC;QAEF,IAAI,CAAC,QAAQ;aACX,KAAK,CAAC,YAAY,CAAC;aACnB,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;aACtC,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC;aACvC,KAAK,EAAE,CAAC;QAEV,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IACF,YAAC;AAAD,CAAC,AA/LD,CAA2B,SAAS,GA+LnC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { TooltipTypes, CartesianOrientations } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { mouse, Selection } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\n\trender() {\n\t\tthis.drawBackdrop();\n\t\tthis.addBackdropEventListeners();\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\t\tconst scaledData: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = displayData.map((d) => ({\n\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\toriginalData: d\n\t\t}));\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = scaledData\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t)\n\t\t\t.reduce((accum, currentValue) => {\n\t\t\t\tif (accum.length === 0) {\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t\treturn accum;\n\t\t\t\t}\n\n\t\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t\t);\n\t\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t\t);\n\n\t\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\t\treturn accum;\n\t\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\t\taccum = [currentValue];\n\t\t\t\t} else {\n\t\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t}\n\n\t\t\t\treturn accum;\n\t\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tmultidata: tooltipData,\n\t\t\t\ttype: TooltipTypes.GRIDLINE\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(\"hide-tooltip\");\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", function () {\n\t\t\t\tconst pos = mouse(self.parent.node());\n\n\t\t\t\tself.showRuler(pos);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tself.hideRuler();\n\t\t\t});\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n}\n"]}
|
|
@@ -40,7 +40,7 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
|
40
40
|
top: 0,
|
|
41
41
|
right: 0,
|
|
42
42
|
bottom: 0,
|
|
43
|
-
left: 0
|
|
43
|
+
left: 0
|
|
44
44
|
};
|
|
45
45
|
return _this;
|
|
46
46
|
}
|
|
@@ -65,7 +65,7 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
|
65
65
|
var axisComponent = new Axis(_this.model, _this.services, {
|
|
66
66
|
position: axisPosition,
|
|
67
67
|
axes: _this.configs.axes,
|
|
68
|
-
margins: _this.margins
|
|
68
|
+
margins: _this.margins
|
|
69
69
|
});
|
|
70
70
|
// Set model, services & parent for the new axis component
|
|
71
71
|
axisComponent.setModel(_this.model);
|
|
@@ -95,7 +95,7 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
|
95
95
|
}
|
|
96
96
|
else {
|
|
97
97
|
offset = DOMUtils.getSVGElementSize(child.getTitleRef(), {
|
|
98
|
-
useBBox: true
|
|
98
|
+
useBBox: true
|
|
99
99
|
}).height;
|
|
100
100
|
}
|
|
101
101
|
switch (axisPosition) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, ScaleTypes, AxesOptions } from \"../../interfaces\";\nimport { Axis } from \"./axis\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport { Threshold } from \"../essentials/threshold\";\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = \"2D-axes\";\n\n\tchildren: any = {};\n\n\tthresholds: Threshold[] = [];\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0
|
|
1
|
+
{"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, ScaleTypes, AxesOptions } from \"../../interfaces\";\nimport { Axis } from \"./axis\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport { Threshold } from \"../essentials/threshold\";\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = \"2D-axes\";\n\n\tchildren: any = {};\n\n\tthresholds: Threshold[] = [];\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n\n\trender(animate = false) {\n\t\tconst axes = {};\n\t\tconst axisPositions = Object.keys(AxisPositions);\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\n\t\taxisPositions.forEach((axisPosition) => {\n\t\t\tconst axisOptions = axesOptions[AxisPositions[axisPosition]];\n\t\t\tif (axisOptions) {\n\t\t\t\taxes[AxisPositions[axisPosition]] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.configs.axes = axes;\n\n\t\t// Check the configs to know which axes need to be rendered\n\t\taxisPositions.forEach((axisPositionKey) => {\n\t\t\tconst axisPosition = AxisPositions[axisPositionKey];\n\t\t\tif (\n\t\t\t\tthis.configs.axes[axisPosition] &&\n\t\t\t\t!this.children[axisPosition]\n\t\t\t) {\n\t\t\t\tconst axisComponent = new Axis(this.model, this.services, {\n\t\t\t\t\tposition: axisPosition,\n\t\t\t\t\taxes: this.configs.axes,\n\t\t\t\t\tmargins: this.margins\n\t\t\t\t});\n\n\t\t\t\t// Set model, services & parent for the new axis component\n\t\t\t\taxisComponent.setModel(this.model);\n\t\t\t\taxisComponent.setServices(this.services);\n\t\t\t\taxisComponent.setParent(this.parent);\n\n\t\t\t\tthis.children[axisPosition] = axisComponent;\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tchild.render(animate);\n\t\t});\n\n\t\tconst margins = {} as any;\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tconst axisPosition = child.configs.position;\n\n\t\t\t// Grab the invisibly rendered axis' width & height, and set margins\n\t\t\t// Based off of that\n\t\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t\t// The invisible axis is updated instantly and without a transition\n\t\t\tconst invisibleAxisRef = child.getInvisibleAxisRef();\n\t\t\tconst {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t} = DOMUtils.getSVGElementSize(invisibleAxisRef, { useBBox: true });\n\n\t\t\tlet offset;\n\t\t\tif (child.getTitleRef().empty()) {\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\toffset = DOMUtils.getSVGElementSize(child.getTitleRef(), {\n\t\t\t\t\tuseBBox: true\n\t\t\t\t}).height;\n\t\t\t}\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tmargins.top = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tmargins.bottom = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tmargins.left = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tmargins.right = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Add thresholds\n\t\t\tthis.addAxisThresholds(animate, axisPosition);\n\t\t});\n\n\t\t// If the new margins are different than the existing ones\n\t\tconst isNotEqual = Object.keys(margins).some((marginKey) => {\n\t\t\treturn this.margins[marginKey] !== margins[marginKey];\n\t\t});\n\n\t\tif (isNotEqual) {\n\t\t\tthis.margins = Object.assign(this.margins, margins);\n\n\t\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\t\tconst child = this.children[childKey];\n\t\t\t\tchild.margins = this.margins;\n\t\t\t});\n\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\taddAxisThresholds(animate, axisPosition) {\n\t\tconst axesOptions = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"axes\",\n\t\t\taxisPosition\n\t\t);\n\t\tconst { thresholds } = axesOptions;\n\n\t\tif (thresholds) {\n\t\t\tthresholds.forEach((thresholdConfig, i) => {\n\t\t\t\tconst thresholdComponent = new Threshold(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t{ ...thresholdConfig, axisPosition, index: i }\n\t\t\t\t);\n\t\t\t\tthis.thresholds.push(thresholdComponent);\n\t\t\t});\n\n\t\t\tthis.thresholds.forEach((threshold) => {\n\t\t\t\tthreshold.setParent(this.parent);\n\t\t\t\tthreshold.render(animate);\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
|
|
@@ -47,7 +47,7 @@ var ZeroLine = /** @class */ (function (_super) {
|
|
|
47
47
|
x0: x0,
|
|
48
48
|
x1: x1,
|
|
49
49
|
y0: yPosition,
|
|
50
|
-
y1: yPosition
|
|
50
|
+
y1: yPosition
|
|
51
51
|
}, this.services.cartesianScales.getOrientation());
|
|
52
52
|
var line = DOMUtils.appendOrSelect(svg, "line.domain");
|
|
53
53
|
line.transition(this.services.transitions.getTransition("zero-line-update", animate))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,qEAsDC;QArDA,UAAI,GAAG,WAAW,CAAC;;IAqDpB,CAAC;IAnDA,yBAAM,GAAN,UAAO,OAAgB;QAChB,IAAA,2DAGoD,EAFzD,sBAAc,EACd,sBACyD,CAAC;QAC3D,IAAM,YAAY,GACjB,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;YAC1C,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,sCAAsC;QACtC,IAAI,CAAC,YAAY,EAAE;YAClB,OAAO;SACP;QAED,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEtE,oEAAoE;QACpE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,CAAC,SAAS,EAAE;YACf,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;YAC1E,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAC7D,YAAY,CACZ,CAAC;YACF,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAC7B;QAED,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CACjE;YACC,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QAEF,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CACd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACpE;aACC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAtDD,CAA8B,SAAS,GAsDtC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\nexport class ZeroLine extends Component {\n\ttype = \"zero-line\";\n\n\trender(animate: boolean) {\n\t\tconst [\n\t\t\tminDomainValue,\n\t\t\tmaxDomainValue
|
|
1
|
+
{"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,qEAsDC;QArDA,UAAI,GAAG,WAAW,CAAC;;IAqDpB,CAAC;IAnDA,yBAAM,GAAN,UAAO,OAAgB;QAChB,IAAA,2DAGoD,EAFzD,sBAAc,EACd,sBACyD,CAAC;QAC3D,IAAM,YAAY,GACjB,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;YAC1C,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,sCAAsC;QACtC,IAAI,CAAC,YAAY,EAAE;YAClB,OAAO;SACP;QAED,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEtE,oEAAoE;QACpE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,CAAC,SAAS,EAAE;YACf,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;YAC1E,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAC7D,YAAY,CACZ,CAAC;YACF,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAC7B;QAED,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CACjE;YACC,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QAEF,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CACd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACpE;aACC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAtDD,CAA8B,SAAS,GAsDtC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\nexport class ZeroLine extends Component {\n\ttype = \"zero-line\";\n\n\trender(animate: boolean) {\n\t\tconst [\n\t\t\tminDomainValue,\n\t\t\tmaxDomainValue\n\t\t] = this.services.cartesianScales.getRangeScale().domain();\n\t\tconst drawZeroLine =\n\t\t\t(minDomainValue > 0 && maxDomainValue < 0) ||\n\t\t\t(minDomainValue < 0 && maxDomainValue > 0);\n\n\t\t// show zero line only if is necessary\n\t\tif (!drawZeroLine) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Get x & y position of the line\n\t\tconst [x0, x1] = this.services.cartesianScales.getDomainScale().range();\n\t\tlet yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;\n\n\t\t// if scale domain contains NaN, return the first value of the range\n\t\t// this is necessary for the zero line y position that otherwise is NaN\n\t\t// so on the top of the chart while we want it on the bottom\n\t\tif (!yPosition) {\n\t\t\tconst axisPosition = this.services.cartesianScales.getRangeAxisPosition();\n\t\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tyPosition = scale.range()[0];\n\t\t}\n\n\t\tconst lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation(\n\t\t\t{\n\t\t\t\tx0,\n\t\t\t\tx1,\n\t\t\t\ty0: yPosition,\n\t\t\t\ty1: yPosition\n\t\t\t},\n\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t);\n\n\t\tconst line = DOMUtils.appendOrSelect(svg, \"line.domain\");\n\t\tline.transition(\n\t\t\tthis.services.transitions.getTransition(\"zero-line-update\", animate)\n\t\t)\n\t\t\t.attr(\"y1\", lineCoordinates.y0)\n\t\t\t.attr(\"y2\", lineCoordinates.y1)\n\t\t\t.attr(\"x1\", lineCoordinates.x0)\n\t\t\t.attr(\"x2\", lineCoordinates.x1);\n\t}\n}\n"]}
|
|
@@ -36,7 +36,10 @@ var Legend = /** @class */ (function (_super) {
|
|
|
36
36
|
var addedLegendItems = legendItems
|
|
37
37
|
.enter()
|
|
38
38
|
.append("g")
|
|
39
|
-
.classed("legend-item", true)
|
|
39
|
+
.classed("legend-item", true)
|
|
40
|
+
.classed("active", function (d, i) {
|
|
41
|
+
return d.status === options.legend.items.status.ACTIVE;
|
|
42
|
+
});
|
|
40
43
|
// Configs
|
|
41
44
|
var checkboxRadius = options.legend.checkbox.radius;
|
|
42
45
|
// Truncation
|
|
@@ -65,8 +68,7 @@ var Legend = /** @class */ (function (_super) {
|
|
|
65
68
|
.merge(legendItems.select("text"));
|
|
66
69
|
// truncate the legend label if it's too long
|
|
67
70
|
if (truncationType !== TruncationTypes.NONE) {
|
|
68
|
-
addedLegendItemsText
|
|
69
|
-
.html(function (d) {
|
|
71
|
+
addedLegendItemsText.html(function (d) {
|
|
70
72
|
if (d.name.length > truncationThreshold) {
|
|
71
73
|
return Tools.truncateLabel(d.name, truncationType, truncationNumCharacter);
|
|
72
74
|
}
|
|
@@ -76,8 +78,7 @@ var Legend = /** @class */ (function (_super) {
|
|
|
76
78
|
});
|
|
77
79
|
}
|
|
78
80
|
else {
|
|
79
|
-
addedLegendItemsText
|
|
80
|
-
.html(function (d) { return d.name; });
|
|
81
|
+
addedLegendItemsText.html(function (d) { return d.name; });
|
|
81
82
|
}
|
|
82
83
|
this.breakItemsIntoLines(addedLegendItems);
|
|
83
84
|
// Remove old elements as needed.
|
|
@@ -157,11 +158,19 @@ var Legend = /** @class */ (function (_super) {
|
|
|
157
158
|
legendItem
|
|
158
159
|
.select("text")
|
|
159
160
|
.attr("x", startingPoint + spaceNeededForCheckbox)
|
|
160
|
-
.attr("y", yOffset + yPosition +
|
|
161
|
+
.attr("y", yOffset + yPosition + 3);
|
|
161
162
|
lastYPosition = yPosition;
|
|
163
|
+
// Test if legendItems are placed in the correct direction
|
|
164
|
+
var testHorizontal = (!legendOrientation ||
|
|
165
|
+
legendOrientation === LegendOrientations.HORIZONTAL) &&
|
|
166
|
+
legendItem.select("rect.checkbox").attr("y") === '0';
|
|
167
|
+
var testVertical = legendOrientation === LegendOrientations.VERTICAL &&
|
|
168
|
+
legendItem.select("rect.checkbox").attr("x") === '0';
|
|
169
|
+
var hasCorrectLegendDirection = testHorizontal || testVertical;
|
|
162
170
|
// Render checkbox check icon
|
|
163
171
|
if (hasDeactivatedItems &&
|
|
164
|
-
legendItem.select("g.check").empty()
|
|
172
|
+
legendItem.select("g.check").empty() &&
|
|
173
|
+
hasCorrectLegendDirection) {
|
|
165
174
|
legendItem.append("g").classed("check", true).html("\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t");
|
|
166
175
|
legendItem
|
|
167
176
|
.select("g.check svg")
|
|
@@ -186,7 +195,7 @@ var Legend = /** @class */ (function (_super) {
|
|
|
186
195
|
svg.selectAll("g.legend-item")
|
|
187
196
|
.on("mouseover", function () {
|
|
188
197
|
self.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {
|
|
189
|
-
hoveredElement: select(this)
|
|
198
|
+
hoveredElement: select(this)
|
|
190
199
|
});
|
|
191
200
|
// Configs
|
|
192
201
|
var checkboxRadius = options.legend.checkbox.radius;
|
|
@@ -204,7 +213,7 @@ var Legend = /** @class */ (function (_super) {
|
|
|
204
213
|
})
|
|
205
214
|
.on("click", function () {
|
|
206
215
|
self.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {
|
|
207
|
-
clickedElement: select(this)
|
|
216
|
+
clickedElement: select(this)
|
|
208
217
|
});
|
|
209
218
|
var clickedItem = select(this);
|
|
210
219
|
var clickedItemData = clickedItem.datum();
|
|
@@ -216,7 +225,7 @@ var Legend = /** @class */ (function (_super) {
|
|
|
216
225
|
if (hoveredItemData.name.length > truncationThreshold) {
|
|
217
226
|
self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
|
|
218
227
|
hoveredElement: hoveredItem,
|
|
219
|
-
type: TooltipTypes.LEGEND
|
|
228
|
+
type: TooltipTypes.LEGEND
|
|
220
229
|
});
|
|
221
230
|
}
|
|
222
231
|
})
|
|
@@ -225,7 +234,7 @@ var Legend = /** @class */ (function (_super) {
|
|
|
225
234
|
hoveredItem.select("rect.hover-stroke").remove();
|
|
226
235
|
self.services.events.dispatchEvent(Events.Tooltip.HIDE);
|
|
227
236
|
self.services.events.dispatchEvent(Events.Legend.ITEM_MOUSEOUT, {
|
|
228
|
-
hoveredElement: hoveredItem
|
|
237
|
+
hoveredElement: hoveredItem
|
|
229
238
|
});
|
|
230
239
|
});
|
|
231
240
|
};
|