@milaboratories/miplots4 1.1.0 → 1.2.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/dist/MiPlots.d.ts.map +1 -1
- package/dist/MiPlots.js +16 -14
- package/dist/MiPlots.js.map +1 -1
- package/dist/bubble/BubbleSettingsImpl.d.ts +3 -0
- package/dist/bubble/BubbleSettingsImpl.d.ts.map +1 -1
- package/dist/bubble/BubbleSettingsImpl.js +4 -1
- package/dist/bubble/BubbleSettingsImpl.js.map +1 -1
- package/dist/bubble/ChartRenderer.d.ts +2 -12
- package/dist/bubble/ChartRenderer.d.ts.map +1 -1
- package/dist/bubble/ChartRenderer.js +13 -13
- package/dist/bubble/ChartRenderer.js.map +1 -1
- package/dist/bubble/getGroupedCellsData.d.ts +1 -1
- package/dist/bubble/getGroupedCellsData.d.ts.map +1 -1
- package/dist/bubble/getGroupedCellsData.js +20 -14
- package/dist/bubble/getGroupedCellsData.js.map +1 -1
- package/dist/bubble/index.d.ts.map +1 -1
- package/dist/bubble/index.js +6 -10
- package/dist/bubble/index.js.map +1 -1
- package/dist/common/ContinuousAxis.d.ts +3 -1
- package/dist/common/ContinuousAxis.d.ts.map +1 -1
- package/dist/common/ContinuousAxis.js +8 -8
- package/dist/common/ContinuousAxis.js.map +1 -1
- package/dist/common/Legend.d.ts +12 -1
- package/dist/common/Legend.d.ts.map +1 -1
- package/dist/common/Legend.js +14 -6
- package/dist/common/Legend.js.map +1 -1
- package/dist/heatmap/ChartRenderer.d.ts +2 -12
- package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
- package/dist/heatmap/ChartRenderer.js +26 -26
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.d.ts +3 -0
- package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.js +5 -2
- package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
- package/dist/heatmap/fillCellsData.d.ts +6 -1
- package/dist/heatmap/fillCellsData.d.ts.map +1 -1
- package/dist/heatmap/fillCellsData.js +135 -96
- package/dist/heatmap/fillCellsData.js.map +1 -1
- package/dist/heatmap/getCells.d.ts +4 -1
- package/dist/heatmap/getCells.d.ts.map +1 -1
- package/dist/heatmap/getCells.js +19 -16
- package/dist/heatmap/getCells.js.map +1 -1
- package/dist/heatmap/index.d.ts.map +1 -1
- package/dist/heatmap/index.js +32 -34
- package/dist/heatmap/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/selection/ChartRenderer.d.ts +90 -0
- package/dist/selection/ChartRenderer.d.ts.map +1 -0
- package/dist/selection/ChartRenderer.js +254 -0
- package/dist/selection/ChartRenderer.js.map +1 -0
- package/dist/selection/SelectionSettingsImpl.d.ts +53 -0
- package/dist/selection/SelectionSettingsImpl.d.ts.map +1 -0
- package/dist/selection/SelectionSettingsImpl.js +47 -0
- package/dist/selection/SelectionSettingsImpl.js.map +1 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.d.ts +8 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.js +57 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.js.map +1 -0
- package/dist/selection/components/Chart/Bars/StackedBars.d.ts +12 -0
- package/dist/selection/components/Chart/Bars/StackedBars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars/StackedBars.js +58 -0
- package/dist/selection/components/Chart/Bars/StackedBars.js.map +1 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.d.ts +6 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.js +38 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.js.map +1 -0
- package/dist/selection/components/Chart/Bars.d.ts +10 -0
- package/dist/selection/components/Chart/Bars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars.js +48 -0
- package/dist/selection/components/Chart/Bars.js.map +1 -0
- package/dist/selection/components/Chart/ChartAxes.d.ts +7 -0
- package/dist/selection/components/Chart/ChartAxes.d.ts.map +1 -0
- package/dist/selection/components/Chart/ChartAxes.js +51 -0
- package/dist/selection/components/Chart/ChartAxes.js.map +1 -0
- package/dist/selection/components/Chart/ChartFrame.d.ts +9 -0
- package/dist/selection/components/Chart/ChartFrame.d.ts.map +1 -0
- package/dist/selection/components/Chart/ChartFrame.js +41 -0
- package/dist/selection/components/Chart/ChartFrame.js.map +1 -0
- package/dist/selection/components/Chart/Dividers.d.ts +8 -0
- package/dist/selection/components/Chart/Dividers.d.ts.map +1 -0
- package/dist/selection/components/Chart/Dividers.js +27 -0
- package/dist/selection/components/Chart/Dividers.js.map +1 -0
- package/dist/selection/components/Chart/Gridlines.d.ts +10 -0
- package/dist/selection/components/Chart/Gridlines.d.ts.map +1 -0
- package/dist/selection/components/Chart/Gridlines.js +32 -0
- package/dist/selection/components/Chart/Gridlines.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.d.ts +9 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js +36 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.d.ts +6 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.js +22 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.d.ts +10 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.js +33 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.d.ts +10 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js +65 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.d.ts +10 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.js +13 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons.d.ts +9 -0
- package/dist/selection/components/Chart/Ribbons.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons.js +58 -0
- package/dist/selection/components/Chart/Ribbons.js.map +1 -0
- package/dist/selection/components/Chart/StageCounts.d.ts +7 -0
- package/dist/selection/components/Chart/StageCounts.d.ts.map +1 -0
- package/dist/selection/components/Chart/StageCounts.js +20 -0
- package/dist/selection/components/Chart/StageCounts.js.map +1 -0
- package/dist/selection/components/Chart/types.d.ts +132 -0
- package/dist/selection/components/Chart/types.d.ts.map +1 -0
- package/dist/selection/components/Chart.d.ts +22 -0
- package/dist/selection/components/Chart.d.ts.map +1 -0
- package/dist/selection/components/Chart.js +97 -0
- package/dist/selection/components/Chart.js.map +1 -0
- package/dist/selection/components/ChartsGroup.d.ts +18 -0
- package/dist/selection/components/ChartsGroup.d.ts.map +1 -0
- package/dist/selection/components/ChartsGroup.js +181 -0
- package/dist/selection/components/ChartsGroup.js.map +1 -0
- package/dist/selection/components/FacetCell.d.ts +22 -0
- package/dist/selection/components/FacetCell.d.ts.map +1 -0
- package/dist/selection/components/FacetCell.js +18 -0
- package/dist/selection/components/FacetCell.js.map +1 -0
- package/dist/selection/components/types.d.ts +58 -0
- package/dist/selection/components/types.d.ts.map +1 -0
- package/dist/selection/constants.d.ts +25 -0
- package/dist/selection/constants.d.ts.map +1 -0
- package/dist/selection/constants.js +4 -0
- package/dist/selection/constants.js.map +1 -0
- package/dist/selection/createSelectionData.d.ts +50 -0
- package/dist/selection/createSelectionData.d.ts.map +1 -0
- package/dist/selection/createSelectionData.js +92 -0
- package/dist/selection/createSelectionData.js.map +1 -0
- package/dist/selection/index.d.ts +26 -0
- package/dist/selection/index.d.ts.map +1 -0
- package/dist/selection/index.js +96 -0
- package/dist/selection/index.js.map +1 -0
- package/dist/selection/utils.d.ts +4 -0
- package/dist/selection/utils.d.ts.map +1 -0
- package/dist/selection/utils.js +13 -0
- package/dist/selection/utils.js.map +1 -0
- package/dist/types/bubble.d.ts +131 -0
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/bubble.js +3 -0
- package/dist/types/bubble.js.map +1 -1
- package/dist/types/common.d.ts +38 -0
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +1 -0
- package/dist/types/common.js.map +1 -1
- package/dist/types/dendro.d.ts +103 -0
- package/dist/types/dendro.d.ts.map +1 -1
- package/dist/types/discrete.d.ts +167 -0
- package/dist/types/discrete.d.ts.map +1 -1
- package/dist/types/heatmap.d.ts +248 -0
- package/dist/types/heatmap.d.ts.map +1 -1
- package/dist/types/heatmap.js +3 -0
- package/dist/types/heatmap.js.map +1 -1
- package/dist/types/histogram.d.ts +22 -0
- package/dist/types/histogram.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/scatterplot-umap.d.ts +188 -0
- package/dist/types/scatterplot-umap.d.ts.map +1 -1
- package/dist/types/scatterplot.d.ts +270 -0
- package/dist/types/scatterplot.d.ts.map +1 -1
- package/dist/types/selection.d.ts +452 -0
- package/dist/types/selection.d.ts.map +1 -0
- package/dist/types/selection.js +53 -0
- package/dist/types/selection.js.map +1 -0
- package/dist/utils/intersect.d.ts +2 -0
- package/dist/utils/intersect.d.ts.map +1 -0
- package/dist/utils/intersect.js +8 -0
- package/dist/utils/intersect.js.map +1 -0
- package/package.json +2 -2
package/dist/bubble/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/bubble/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type BubbleEventHandlers, type BubbleSettings, getUnknownErrorInfo, isErrorInfo } from '../types';\nimport { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport ChartRenderer from './ChartRenderer';\nimport { getCellTooltip } from './getCellTooltip';\nimport { type CellBubble, getGroupedCellsData, type GroupedCellsBubble } from './getGroupedCellsData';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartBubble extends AbstractChart {\n settings: BubbleSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n groupedCellsData: GroupedCellsBubble;\n } | null = null;\n\n constructor(data: DataFrame, settings: BubbleSettings, eventHandlers?: BubbleEventHandlers) {\n super(data, settings);\n\n this.settings = new BubbleSettingsImpl(settings);\n this.chartRenderer = new ChartRenderer();\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: BubbleSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new BubbleSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for bubble chart');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: BubbleSettingsImpl, settings: BubbleSettingsImpl) {\n return prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.normalization?.method !== settings.normalization?.method ||\n prevSettings.normalization?.direction !== settings.normalization?.direction ||\n prevSettings.xColumn.value !== settings.xColumn.value ||\n prevSettings.yColumn.value !== settings.yColumn.value ||\n prevSettings.valueColumnColor.value !== settings.valueColumnColor.value ||\n prevSettings.valueColumnSize.value !== settings.valueColumnSize.value ||\n prevSettings.NAValueAs !== settings.NAValueAs ||\n prevSettings.aggregation?.method !== settings.aggregation?.method ||\n prevSettings.aggregation?.x !== settings.aggregation?.x ||\n prevSettings.aggregation?.y !== settings.aggregation?.y ||\n prevSettings.showEmptyRows !== settings.showEmptyRows ||\n prevSettings.showEmptyColumns !== settings.showEmptyColumns;\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {facetBy, facetSettings, xGroupBy, yGroupBy, xColumn, yColumn, valueColumnSize, valueColumnColor, normalization, NAValueAs, aggregation, chartSettings, keysOrder, showEmptyRows, showEmptyColumns} = this.settings;\n\n const groupedCellsData = getGroupedCellsData(\n this.data,\n xColumn,\n yColumn,\n valueColumnSize,\n valueColumnColor,\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n );\n\n this.calculatedData = {\n groupedCellsData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, valueColumnColor, valueColumnSize, normalization, aes, keysOrder, xColumn, yColumn, xGroupBy, yGroupBy} = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.groupedCellsData,\n valueColumnColor,\n valueColumnSize,\n normalization,\n aes,\n this._getTooltip,\n this.onTooltipHintSwitch,\n customOrder\n );\n }\n\n private _getTooltip = (cell: CellBubble): string[] => {\n return this.calculatedData\n ? getCellTooltip(this.data, cell, this.calculatedData.groupedCellsData.meta, this.settings?.chartSettings?.tooltips?.content)\n : ['No data available'];\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/bubble/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type BubbleEventHandlers, type BubbleSettings, getUnknownErrorInfo, isErrorInfo } from '../types';\nimport { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport ChartRenderer from './ChartRenderer';\nimport { getCellTooltip } from './getCellTooltip';\nimport { type CellBubble, getGroupedCellsData, type GroupedCellsBubble } from './getGroupedCellsData';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartBubble extends AbstractChart {\n settings: BubbleSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n groupedCellsData: GroupedCellsBubble;\n } | null = null;\n\n constructor(data: DataFrame, settings: BubbleSettings, eventHandlers?: BubbleEventHandlers) {\n super(data, settings);\n\n this.settings = new BubbleSettingsImpl(settings);\n this.chartRenderer = new ChartRenderer();\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: BubbleSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new BubbleSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for bubble chart');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: BubbleSettingsImpl, settings: BubbleSettingsImpl) {\n const compareColumnGroups = (a: typeof prevSettings.xSortBy, b: typeof settings.xSortBy) =>\n a.length !== b.length || a.some((col, idx) => col.value !== b[idx].value);\n return prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.normalization?.method !== settings.normalization?.method ||\n prevSettings.normalization?.direction !== settings.normalization?.direction ||\n prevSettings.xColumn.value !== settings.xColumn.value ||\n prevSettings.yColumn.value !== settings.yColumn.value ||\n prevSettings.valueColumnColor.value !== settings.valueColumnColor.value ||\n prevSettings.valueColumnSize.value !== settings.valueColumnSize.value ||\n compareColumnGroups(prevSettings.xSortBy, settings.xSortBy) ||\n compareColumnGroups(prevSettings.ySortBy, settings.ySortBy) ||\n prevSettings.chartSettings.xAxis.sorting !== settings.chartSettings.xAxis.sorting ||\n prevSettings.chartSettings.yAxis.sorting !== settings.chartSettings.yAxis.sorting ||\n prevSettings.NAValueAs !== settings.NAValueAs ||\n prevSettings.transform !== settings.transform ||\n prevSettings.aggregation?.method !== settings.aggregation?.method ||\n prevSettings.aggregation?.x !== settings.aggregation?.x ||\n prevSettings.aggregation?.y !== settings.aggregation?.y ||\n prevSettings.showEmptyRows !== settings.showEmptyRows ||\n prevSettings.showEmptyColumns !== settings.showEmptyColumns;\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {facetBy, facetSettings, xGroupBy, yGroupBy, xSortBy, ySortBy, xColumn, yColumn, valueColumnSize, valueColumnColor, normalization, NAValueAs, transform, aggregation, chartSettings, keysOrder, showEmptyRows, showEmptyColumns} = this.settings;\n\n const groupedCellsData = getGroupedCellsData(\n this.data,\n xColumn,\n yColumn,\n valueColumnSize,\n valueColumnColor,\n facetBy,\n xGroupBy,\n yGroupBy,\n xSortBy,\n ySortBy,\n facetSettings,\n normalization,\n NAValueAs,\n transform,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n );\n\n this.calculatedData = {\n groupedCellsData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, valueColumnColor, valueColumnSize, normalization, aes} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.groupedCellsData,\n valueColumnColor,\n valueColumnSize,\n normalization,\n aes,\n this._getTooltip,\n this.onTooltipHintSwitch,\n );\n }\n\n private _getTooltip = (cell: CellBubble): string[] => {\n return this.calculatedData\n ? getCellTooltip(this.data, cell, this.calculatedData.groupedCellsData.meta, this.settings?.chartSettings?.tooltips?.content)\n : ['No data available'];\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ScaleLinear, ScaleLogarithmic, ScaleSymLog } from 'd3-scale';
|
|
2
2
|
type Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number> | ScaleSymLog<number, number>;
|
|
3
3
|
type Orient = 'left' | 'bottom';
|
|
4
|
-
export declare const ContinuousAxis: ({ scale, tickSize, tickPadding, orient, onlyPositive, hiddenLabels, offset, }: {
|
|
4
|
+
export declare const ContinuousAxis: ({ scale, tickSize, tickPadding, orient, onlyPositive, hiddenLabels, offset, tickFormat, }: {
|
|
5
5
|
scale: Scale;
|
|
6
6
|
tickSize?: number;
|
|
7
7
|
tickPadding?: number;
|
|
@@ -9,6 +9,8 @@ export declare const ContinuousAxis: ({ scale, tickSize, tickPadding, orient, on
|
|
|
9
9
|
orient?: Orient;
|
|
10
10
|
hiddenLabels?: boolean;
|
|
11
11
|
onlyPositive?: boolean;
|
|
12
|
+
/** Override the auto-derived label formatter (e.g. percent suffix). */
|
|
13
|
+
tickFormat?: (value: number) => string;
|
|
12
14
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
13
15
|
export {};
|
|
14
16
|
//# sourceMappingURL=ContinuousAxis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContinuousAxis.d.ts","sourceRoot":"","sources":["../../src/common/ContinuousAxis.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AAEzE,KAAK,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1G,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAsBhC,eAAO,MAAM,cAAc,GAAI
|
|
1
|
+
{"version":3,"file":"ContinuousAxis.d.ts","sourceRoot":"","sources":["../../src/common/ContinuousAxis.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AAEzE,KAAK,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1G,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAsBhC,eAAO,MAAM,cAAc,GAAI,2FAS5B;IACC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C,4CA+CA,CAAC"}
|
|
@@ -17,20 +17,20 @@ function s(e) {
|
|
|
17
17
|
function c(e) {
|
|
18
18
|
return e === "bottom" ? "middle" : "end";
|
|
19
19
|
}
|
|
20
|
-
const l = ({ scale: l, tickSize: u = 6, tickPadding: d = 4, orient: f = "bottom", onlyPositive: p = !1, hiddenLabels: m = !1, offset: h = typeof window < "u" && window.devicePixelRatio > 1 ? 0 : .5 }) => {
|
|
21
|
-
function
|
|
20
|
+
const l = ({ scale: l, tickSize: u = 6, tickPadding: d = 4, orient: f = "bottom", onlyPositive: p = !1, hiddenLabels: m = !1, offset: h = typeof window < "u" && window.devicePixelRatio > 1 ? 0 : .5, tickFormat: g }) => {
|
|
21
|
+
function _(e) {
|
|
22
22
|
return (t) => {
|
|
23
23
|
let n = e(t);
|
|
24
24
|
return n === void 0 ? 0 : +n;
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
let { ticks:
|
|
28
|
-
return /* @__PURE__ */ n("g", { children:
|
|
27
|
+
let { ticks: v, format: y } = t(l, p, f === "bottom"), b = g ?? y, x = Math.max(u, 0) + d, S = _(l.copy()), C = f === "bottom" ? i : a, w = f === "left" ? -1 : 1, T = { [(f === "left" ? "x" : "y") + "2"]: w * u }, E = { [f === "left" ? "x" : "y"]: w * x };
|
|
28
|
+
return /* @__PURE__ */ n("g", { children: v.map((t, i) => /* @__PURE__ */ r("g", {
|
|
29
29
|
className: "tick",
|
|
30
|
-
transform:
|
|
30
|
+
transform: C(S(t) + h),
|
|
31
31
|
children: [/* @__PURE__ */ n("line", {
|
|
32
32
|
stroke: e,
|
|
33
|
-
...
|
|
33
|
+
...T
|
|
34
34
|
}), !m && /* @__PURE__ */ n("g", {
|
|
35
35
|
transform: o(f),
|
|
36
36
|
children: /* @__PURE__ */ n("text", {
|
|
@@ -40,8 +40,8 @@ const l = ({ scale: l, tickSize: u = 6, tickPadding: d = 4, orient: f = "bottom"
|
|
|
40
40
|
fontFamily: "Manrope",
|
|
41
41
|
dominantBaseline: s(f),
|
|
42
42
|
textAnchor: c(f),
|
|
43
|
-
...
|
|
44
|
-
children:
|
|
43
|
+
...E,
|
|
44
|
+
children: b(t)
|
|
45
45
|
})
|
|
46
46
|
})]
|
|
47
47
|
}, i)) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContinuousAxis.js","names":[],"sources":["../../src/common/ContinuousAxis.tsx"],"sourcesContent":["import {BLACK} from '../constants';\nimport {TICK_OFFSET} from '../discrete/constants';\nimport {getTicksAndFormat} from '../scatterplot/utils/getTicksAndFormat';\nimport React from 'react';\nimport type {ScaleLinear, ScaleLogarithmic, ScaleSymLog} from 'd3-scale';\n\ntype Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number> | ScaleSymLog<number, number>;\ntype Orient = 'left' | 'bottom';\n\nfunction translateX(x: number) {\n return `translate(${x},0)`;\n}\n\nfunction translateY(y: number) {\n return `translate(0,${y})`;\n}\n\nfunction getRotationTransform(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? `translate(0,${TICK_OFFSET})` : `translate(${-TICK_OFFSET},0)`;\n}\n\nfunction getDominantBaseline(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'hanging' : 'central';\n}\n\nfunction getTextAnchor( orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'middle' : 'end';\n}\n\nexport const ContinuousAxis = ({\n scale,\n tickSize = 6,\n tickPadding = TICK_OFFSET,\n orient = 'bottom',\n onlyPositive = false,\n hiddenLabels = false,\n offset = typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5,\n}: {\n scale: Scale;\n tickSize?: number;\n tickPadding?: number;\n offset?: number;\n orient?: Orient;\n hiddenLabels?: boolean;\n onlyPositive?: boolean;\n}) => {\n function number(scale: Scale) {\n return (d: number) => {\n const value = scale(d);\n return value === undefined ? 0 : +value;\n };\n }\n const {ticks: values, format} = getTicksAndFormat(scale, onlyPositive, orient === 'bottom');\n const spacing = Math.max(tickSize, 0) + tickPadding,\n position = (number)(scale.copy());\n\n const transform = orient === 'bottom' ? translateX : translateY;\n const k = orient === 'left' ? -1 : 1;\n\n const lineProps = {\n [(orient === 'left' ? 'x' : 'y') + '2']: k * tickSize,\n };\n\n const textProps = {\n [orient === 'left' ? 'x' : 'y']: k * spacing,\n };\n\n return (\n <g>\n {values.map((tick: number, i: number) => (\n <g className=\"tick\" key={i} transform={transform(position(tick) + offset)}>\n <line stroke={BLACK} {...lineProps} />\n {!hiddenLabels && (\n <g transform={getRotationTransform(orient)}>\n <text\n fill={BLACK}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fontFamily=\"Manrope\"\n dominantBaseline={getDominantBaseline(orient)}\n textAnchor={getTextAnchor(orient)}\n {...textProps}\n >\n {format(tick)}\n </text>\n </g>\n )}\n </g>\n ))}\n </g>\n );\n};\n"],"mappings":";;;;AASA,SAAS,EAAW,GAAW;AAC3B,QAAO,aAAa,EAAE;;AAG1B,SAAS,EAAW,GAAW;AAC3B,QAAO,eAAe,EAAE;;AAG5B,SAAS,EAAqB,GAA2B;AACrD,QAAO,MAAW,WAAW,mBAAgC;;AAGjE,SAAS,EAAoB,GAA2B;AACpD,QAAO,MAAW,WAAW,YAAY;;AAG7C,SAAS,EAAe,GAA2B;AAC/C,QAAQ,MAAW,WAAW,WAAW;;AAG7C,MAAa,KAAkB,EAC5B,UACA,cAAW,GACX,iBAAA,GACA,YAAS,UACT,kBAAe,IACf,kBAAe,IACf,YAAS,OAAO,SAAW,OAAe,OAAO,mBAAmB,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"ContinuousAxis.js","names":[],"sources":["../../src/common/ContinuousAxis.tsx"],"sourcesContent":["import {BLACK} from '../constants';\nimport {TICK_OFFSET} from '../discrete/constants';\nimport {getTicksAndFormat} from '../scatterplot/utils/getTicksAndFormat';\nimport React from 'react';\nimport type {ScaleLinear, ScaleLogarithmic, ScaleSymLog} from 'd3-scale';\n\ntype Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number> | ScaleSymLog<number, number>;\ntype Orient = 'left' | 'bottom';\n\nfunction translateX(x: number) {\n return `translate(${x},0)`;\n}\n\nfunction translateY(y: number) {\n return `translate(0,${y})`;\n}\n\nfunction getRotationTransform(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? `translate(0,${TICK_OFFSET})` : `translate(${-TICK_OFFSET},0)`;\n}\n\nfunction getDominantBaseline(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'hanging' : 'central';\n}\n\nfunction getTextAnchor( orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'middle' : 'end';\n}\n\nexport const ContinuousAxis = ({\n scale,\n tickSize = 6,\n tickPadding = TICK_OFFSET,\n orient = 'bottom',\n onlyPositive = false,\n hiddenLabels = false,\n offset = typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5,\n tickFormat,\n}: {\n scale: Scale;\n tickSize?: number;\n tickPadding?: number;\n offset?: number;\n orient?: Orient;\n hiddenLabels?: boolean;\n onlyPositive?: boolean;\n /** Override the auto-derived label formatter (e.g. percent suffix). */\n tickFormat?: (value: number) => string;\n}) => {\n function number(scale: Scale) {\n return (d: number) => {\n const value = scale(d);\n return value === undefined ? 0 : +value;\n };\n }\n const {ticks: values, format: defaultFormat} = getTicksAndFormat(scale, onlyPositive, orient === 'bottom');\n const format = tickFormat ?? defaultFormat;\n const spacing = Math.max(tickSize, 0) + tickPadding,\n position = (number)(scale.copy());\n\n const transform = orient === 'bottom' ? translateX : translateY;\n const k = orient === 'left' ? -1 : 1;\n\n const lineProps = {\n [(orient === 'left' ? 'x' : 'y') + '2']: k * tickSize,\n };\n\n const textProps = {\n [orient === 'left' ? 'x' : 'y']: k * spacing,\n };\n\n return (\n <g>\n {values.map((tick: number, i: number) => (\n <g className=\"tick\" key={i} transform={transform(position(tick) + offset)}>\n <line stroke={BLACK} {...lineProps} />\n {!hiddenLabels && (\n <g transform={getRotationTransform(orient)}>\n <text\n fill={BLACK}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fontFamily=\"Manrope\"\n dominantBaseline={getDominantBaseline(orient)}\n textAnchor={getTextAnchor(orient)}\n {...textProps}\n >\n {format(tick)}\n </text>\n </g>\n )}\n </g>\n ))}\n </g>\n );\n};\n"],"mappings":";;;;AASA,SAAS,EAAW,GAAW;AAC3B,QAAO,aAAa,EAAE;;AAG1B,SAAS,EAAW,GAAW;AAC3B,QAAO,eAAe,EAAE;;AAG5B,SAAS,EAAqB,GAA2B;AACrD,QAAO,MAAW,WAAW,mBAAgC;;AAGjE,SAAS,EAAoB,GAA2B;AACpD,QAAO,MAAW,WAAW,YAAY;;AAG7C,SAAS,EAAe,GAA2B;AAC/C,QAAQ,MAAW,WAAW,WAAW;;AAG7C,MAAa,KAAkB,EAC5B,UACA,cAAW,GACX,iBAAA,GACA,YAAS,UACT,kBAAe,IACf,kBAAe,IACf,YAAS,OAAO,SAAW,OAAe,OAAO,mBAAmB,IAAI,IAAI,IAC5E,oBAWG;CACF,SAAS,EAAO,GAAc;AAC1B,UAAQ,MAAc;GAClB,IAAM,IAAQ,EAAM,EAAE;AACtB,UAAO,MAAU,KAAA,IAAY,IAAI,CAAC;;;CAG1C,IAAM,EAAC,OAAO,GAAQ,QAAQ,MAAiB,EAAkB,GAAO,GAAc,MAAW,SAAS,EACpG,IAAS,KAAc,GACvB,IAAU,KAAK,IAAI,GAAU,EAAE,GAAG,GACpC,IAAY,EAAQ,EAAM,MAAM,CAAC,EAE/B,IAAY,MAAW,WAAW,IAAa,GAC/C,IAAI,MAAW,SAAS,KAAK,GAE7B,IAAY,IACZ,MAAW,SAAS,MAAM,OAAO,MAAM,IAAI,GAChD,EAEK,IAAY,GACb,MAAW,SAAS,MAAM,MAAM,IAAI,GACxC;AAED,QACI,kBAAC,KAAD,EAAA,UACK,EAAO,KAAK,GAAc,MACvB,kBAAC,KAAD;EAAG,WAAU;EAAe,WAAW,EAAU,EAAS,EAAK,GAAG,EAAO;YAAzE,CACI,kBAAC,QAAD;GAAM,QAAQ;GAAO,GAAI;GAAa,CAAA,EACrC,CAAC,KACE,kBAAC,KAAD;GAAG,WAAW,EAAqB,EAAO;aACtC,kBAAC,QAAD;IACI,MAAA;IACA,UAAS;IACT,YAAW;IACX,YAAW;IACX,kBAAkB,EAAoB,EAAO;IAC7C,YAAY,EAAc,EAAO;IACjC,GAAI;cAEH,EAAO,EAAK;IACV,CAAA;GACP,CAAA,CAER;IAjBqB,EAiBrB,CACN,EACF,CAAA"}
|
package/dist/common/Legend.d.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { LegendData } from './types';
|
|
2
2
|
interface LegendProps {
|
|
3
3
|
legendData: LegendData;
|
|
4
|
+
/**
|
|
5
|
+
* Fired when the pointer enters a discrete legend item (with the item's
|
|
6
|
+
* `value`) and again with `null` when it leaves. Lets consumers mirror
|
|
7
|
+
* legend hover into the chart (e.g. dim non-hovered groups).
|
|
8
|
+
*/
|
|
9
|
+
onItemHover?: (value: string | null) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Fired when a discrete legend item is clicked. Lets consumers treat
|
|
12
|
+
* legend clicks like clicks on the corresponding chart element.
|
|
13
|
+
*/
|
|
14
|
+
onItemClick?: (value: string) => void;
|
|
4
15
|
}
|
|
5
|
-
export declare function Legend({ legendData }: LegendProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function Legend({ legendData, onItemHover, onItemClick }: LegendProps): import("react/jsx-runtime").JSX.Element;
|
|
6
17
|
export {};
|
|
7
18
|
//# sourceMappingURL=Legend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Legend.d.ts","sourceRoot":"","sources":["../../src/common/Legend.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,UAAU,EAAkD,MAAM,SAAS,CAAC;AAMtG,UAAU,WAAW;IACjB,UAAU,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Legend.d.ts","sourceRoot":"","sources":["../../src/common/Legend.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,UAAU,EAAkD,MAAM,SAAS,CAAC;AAMtG,UAAU,WAAW;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAmGD,wBAAgB,MAAM,CAAC,EAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAC,EAAE,WAAW,2CAqJzE"}
|
package/dist/common/Legend.js
CHANGED
|
@@ -56,7 +56,8 @@ function p({ aes: e, label: i }) {
|
|
|
56
56
|
children: i
|
|
57
57
|
})] });
|
|
58
58
|
}
|
|
59
|
-
function m({ legendData: t }) {
|
|
59
|
+
function m({ legendData: t, onItemHover: i, onItemClick: c }) {
|
|
60
|
+
let l = !!(i || c);
|
|
60
61
|
return /* @__PURE__ */ r("g", { children: [/* @__PURE__ */ n("defs", { children: t.items.filter((e) => e.type === "continuous").map((e) => /* @__PURE__ */ n("linearGradient", {
|
|
61
62
|
id: e.id,
|
|
62
63
|
gradientTransform: "rotate(90)",
|
|
@@ -113,23 +114,27 @@ function m({ legendData: t }) {
|
|
|
113
114
|
y: o,
|
|
114
115
|
children: t.title
|
|
115
116
|
}),
|
|
116
|
-
t.values.map((
|
|
117
|
-
transform: `translate(0, ${
|
|
117
|
+
t.values.map((o, s) => /* @__PURE__ */ r("g", {
|
|
118
|
+
transform: `translate(0, ${s * (a + 4)})`,
|
|
119
|
+
onMouseEnter: i ? () => i(o) : void 0,
|
|
120
|
+
onMouseLeave: i ? () => i(null) : void 0,
|
|
121
|
+
onClick: c ? () => c(o) : void 0,
|
|
122
|
+
style: l ? { cursor: "pointer" } : void 0,
|
|
118
123
|
children: [/* @__PURE__ */ n("rect", {
|
|
119
124
|
x: "0",
|
|
120
125
|
y: "0",
|
|
121
126
|
width: a,
|
|
122
127
|
height: a,
|
|
123
|
-
fill: t.scale(
|
|
128
|
+
fill: t.scale(o),
|
|
124
129
|
rx: "1",
|
|
125
130
|
ry: "1",
|
|
126
131
|
stroke: e
|
|
127
132
|
}), /* @__PURE__ */ n("text", {
|
|
128
133
|
x: a + 8,
|
|
129
134
|
y: 10,
|
|
130
|
-
children: t.labels[
|
|
135
|
+
children: t.labels[o] ?? o
|
|
131
136
|
})]
|
|
132
|
-
},
|
|
137
|
+
}, o)),
|
|
133
138
|
!1
|
|
134
139
|
]
|
|
135
140
|
}, t.id);
|
|
@@ -145,6 +150,9 @@ function m({ legendData: t }) {
|
|
|
145
150
|
}),
|
|
146
151
|
t.values.map((e, r) => /* @__PURE__ */ n("g", {
|
|
147
152
|
transform: `translate(0, ${r * (a + 4)})`,
|
|
153
|
+
onMouseEnter: i ? () => i(e) : void 0,
|
|
154
|
+
onMouseLeave: i ? () => i(null) : void 0,
|
|
155
|
+
style: i ? { cursor: "pointer" } : void 0,
|
|
148
156
|
children: /* @__PURE__ */ n(f, {
|
|
149
157
|
aes: t.scale(e),
|
|
150
158
|
label: t.labels[e],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Legend.js","names":[],"sources":["../../src/common/Legend.tsx"],"sourcesContent":["import { color } from 'd3-color';\nimport { BLACK } from '../constants';\nimport type { AesItem, LineShape } from '../types';\nimport { getPointShape } from '../utils/getPointShape';\nimport type { DotAesItem, LegendData, LegendItemDiscreteMultiAes, LegendItemGradient } from './types';\n\nconst LEGEND_ITEM_SIZE = 12;\nconst TITLE_POSITION = -12;\nconst COLOR_ITEM_WIDTH_C = 14;\n\ninterface LegendProps {\n legendData: LegendData;\n}\n\nfunction getLineShapePath(lineShape:LineShape|null = null):string {\n if (lineShape === 'dashed') {\n return 'M1 11.25H6V12.75H1V11.25ZM9.5 11.25H14.5V12.75H9.5V11.25ZM18 11.25H23V12.75H18V11.25Z';\n }\n if (lineShape === 'dotted') {\n return 'M2.75 11.25H1.25V12.75H2.75V11.25Z M11.25 11.25H12.75V12.75H11.25V11.25Z M22.75 11.25H21.25V12.75H22.75V11.25Z M7.75 11.25H6.25V12.75H7.75V11.25Z M16.25 11.25H17.75V12.75H16.25V11.25Z';\n }\n if (lineShape === 'longdash') {\n return 'M1 11.25H10V12.75H1V11.25ZM14 11.25H23V12.75H14V11.25Z';\n }\n if (lineShape === 'dotdash') {\n return 'M1 11.25H2.5V12.75H1V11.25ZM17 12.75H7V11.25H17V12.75ZM21.5 12.75V11.25H23V12.75H21.5Z';\n }\n if (lineShape === 'twodash') {\n return 'M1 11.25H4V12.75H1V11.25ZM17.0261 12.75H7V11.25H17.0261V12.75ZM20 12.75V11.25H23V12.75H20Z';\n }\n return 'M1 11.25H23V12.75H1V11.25Z';\n}\n\nconst POINT_SIZE = 3;\nconst LINE_WIDTH = 24;\n\nfunction getAesItemStroke(fillColor?:string, lineColor?:string) {\n if (fillColor === 'transparent') {\n return BLACK;\n }\n // black border for white square if fill color is white\n const fill = color(fillColor ?? lineColor ?? '');\n if (fill && fill.formatHex() === '#ffffff') {\n return BLACK;\n }\n return fillColor ?? lineColor;\n}\nfunction AesLegendItem({ aes, label, usedAes }: { aes: AesItem; label: string, usedAes: LegendItemDiscreteMultiAes['usedAes'] }) {\n const needRenderLine = usedAes.lineShape;\n const needRenderDot = usedAes.dotShape;\n const needRenderRect = usedAes.fillColor ||\n (usedAes.lineColor && !usedAes.lineShape) ||\n (usedAes.dotFill && !usedAes.dotShape);\n\n const shape = needRenderDot ? getPointShape(\n aes.dotShape ?? '21',\n POINT_SIZE,\n needRenderRect ? BLACK : aes.dotFill ?? BLACK\n ) : null;\n\n const lineOffset = (needRenderDot && needRenderLine ? 2 * LEGEND_ITEM_SIZE : 0 ) - 6;\n const textOffset = needRenderLine ? lineOffset + LINE_WIDTH + 8 : LEGEND_ITEM_SIZE + 8;\n return (\n <g>\n {needRenderRect && (\n <rect\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n stroke={getAesItemStroke(aes.fillColor, aes.lineColor)}\n fill={aes.fillColor ?? aes.lineColor}\n rx=\"1\"\n ry=\"1\"\n />\n )}\n {needRenderDot && <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>\n {shape}\n </g>}\n {needRenderLine && (\n <path\n transform={`translate(${lineOffset},-5)`}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d={getLineShapePath(aes.lineShape)}\n fill={aes.lineColor}\n />\n )}\n <text\n x={textOffset}\n y={LEGEND_ITEM_SIZE / 2}\n dominantBaseline=\"central\"\n fontWeight={500}\n >\n {label}\n </text>\n </g>\n );\n}\n\nfunction DotAesItemElement({aes, label}: {aes: DotAesItem; label: string}) {\n const shape = getPointShape(aes.shape, aes.size, aes.color);\n\n return (\n <g>\n <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>{shape}</g>\n <text x={LEGEND_ITEM_SIZE + 8} y={LEGEND_ITEM_SIZE / 2} dominantBaseline=\"central\" fontWeight={500}>\n {label}\n </text>\n </g>\n );\n}\n\nexport function Legend({legendData}: LegendProps) {\n const debug = false;\n const continuousItems= legendData.items.filter((item) => item.type === 'continuous') as LegendItemGradient[];\n return (\n <g>\n <defs>\n {continuousItems.map(item => (\n <linearGradient key={item.id} id={item.id} gradientTransform=\"rotate(90)\">\n {item.scale.domain().reverse().map(value => {\n const domain = item.scale.domain();\n const range = domain[domain.length - 1] - domain[0];\n const percent = range > 0 ? 100 - (value - domain[0]) / range * 100 : 0;\n return (\n <stop\n key={value}\n offset={`${percent}%`}\n stopColor={item.scale(value)}\n />\n );\n })}\n </linearGradient>\n ))}\n </defs>\n {legendData.items.map(item => {\n if (item.type === 'continuous') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} fontSize=\"14px\" y={TITLE_POSITION}>{item.title}</text>\n <rect\n x=\"0\"\n y=\"0\"\n width={COLOR_ITEM_WIDTH_C}\n height={item.height}\n stroke={BLACK}\n fill={`url(#${item.id})`}\n />\n <g transform={`translate(${COLOR_ITEM_WIDTH_C},0)`}>\n {item.values.map(value => {\n const y = item.tickPositionScale(value) ?? 0;\n return (\n <g key={value} transform={`translate(0,${y})`}>\n <line x1=\"0\" x2={-4} stroke={BLACK} />\n <text x={8} y={4}>{value}</text>\n </g>\n );\n })}\n </g>\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteColor') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} y={TITLE_POSITION}>{item.title}</text>\n {item.values.map((value, idx) => {\n return <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <rect\n x=\"0\"\n y=\"0\"\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n fill={item.scale(value)}\n rx=\"1\"\n ry=\"1\"\n stroke={BLACK}\n />\n <text x={LEGEND_ITEM_SIZE + 8} y={10}>{item.labels[value] ?? value}</text>\n </g>;\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteMulti') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={600} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <AesLegendItem\n aes={item.scale(value)}\n label={item.labels[value]}\n usedAes={item.usedAes}\n />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'dots') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <DotAesItemElement aes={item.scale(value)} label={item.labels[value]} />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'size') {\n const size = item.height / item.values.length;\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n const r = item.scale(value);\n return (\n <g key={value} transform={`translate(0, ${idx * size})`}>\n <circle r={r} cx={size / 2} cy={size / 2} fill=\"none\" stroke={BLACK} strokeWidth={1} />\n <text x={size + 4} y={size / 2} alignmentBaseline=\"central\">{item.labels[value]}</text>\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n })}\n </g>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Legend.js","names":[],"sources":["../../src/common/Legend.tsx"],"sourcesContent":["import { color } from 'd3-color';\nimport { BLACK } from '../constants';\nimport type { AesItem, LineShape } from '../types';\nimport { getPointShape } from '../utils/getPointShape';\nimport type { DotAesItem, LegendData, LegendItemDiscreteMultiAes, LegendItemGradient } from './types';\n\nconst LEGEND_ITEM_SIZE = 12;\nconst TITLE_POSITION = -12;\nconst COLOR_ITEM_WIDTH_C = 14;\n\ninterface LegendProps {\n legendData: LegendData;\n /**\n * Fired when the pointer enters a discrete legend item (with the item's\n * `value`) and again with `null` when it leaves. Lets consumers mirror\n * legend hover into the chart (e.g. dim non-hovered groups).\n */\n onItemHover?: (value: string | null) => void;\n /**\n * Fired when a discrete legend item is clicked. Lets consumers treat\n * legend clicks like clicks on the corresponding chart element.\n */\n onItemClick?: (value: string) => void;\n}\n\nfunction getLineShapePath(lineShape:LineShape|null = null):string {\n if (lineShape === 'dashed') {\n return 'M1 11.25H6V12.75H1V11.25ZM9.5 11.25H14.5V12.75H9.5V11.25ZM18 11.25H23V12.75H18V11.25Z';\n }\n if (lineShape === 'dotted') {\n return 'M2.75 11.25H1.25V12.75H2.75V11.25Z M11.25 11.25H12.75V12.75H11.25V11.25Z M22.75 11.25H21.25V12.75H22.75V11.25Z M7.75 11.25H6.25V12.75H7.75V11.25Z M16.25 11.25H17.75V12.75H16.25V11.25Z';\n }\n if (lineShape === 'longdash') {\n return 'M1 11.25H10V12.75H1V11.25ZM14 11.25H23V12.75H14V11.25Z';\n }\n if (lineShape === 'dotdash') {\n return 'M1 11.25H2.5V12.75H1V11.25ZM17 12.75H7V11.25H17V12.75ZM21.5 12.75V11.25H23V12.75H21.5Z';\n }\n if (lineShape === 'twodash') {\n return 'M1 11.25H4V12.75H1V11.25ZM17.0261 12.75H7V11.25H17.0261V12.75ZM20 12.75V11.25H23V12.75H20Z';\n }\n return 'M1 11.25H23V12.75H1V11.25Z';\n}\n\nconst POINT_SIZE = 3;\nconst LINE_WIDTH = 24;\n\nfunction getAesItemStroke(fillColor?:string, lineColor?:string) {\n if (fillColor === 'transparent') {\n return BLACK;\n }\n // black border for white square if fill color is white\n const fill = color(fillColor ?? lineColor ?? '');\n if (fill && fill.formatHex() === '#ffffff') {\n return BLACK;\n }\n return fillColor ?? lineColor;\n}\nfunction AesLegendItem({ aes, label, usedAes }: { aes: AesItem; label: string, usedAes: LegendItemDiscreteMultiAes['usedAes'] }) {\n const needRenderLine = usedAes.lineShape;\n const needRenderDot = usedAes.dotShape;\n const needRenderRect = usedAes.fillColor ||\n (usedAes.lineColor && !usedAes.lineShape) ||\n (usedAes.dotFill && !usedAes.dotShape);\n\n const shape = needRenderDot ? getPointShape(\n aes.dotShape ?? '21',\n POINT_SIZE,\n needRenderRect ? BLACK : aes.dotFill ?? BLACK\n ) : null;\n\n const lineOffset = (needRenderDot && needRenderLine ? 2 * LEGEND_ITEM_SIZE : 0 ) - 6;\n const textOffset = needRenderLine ? lineOffset + LINE_WIDTH + 8 : LEGEND_ITEM_SIZE + 8;\n return (\n <g>\n {needRenderRect && (\n <rect\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n stroke={getAesItemStroke(aes.fillColor, aes.lineColor)}\n fill={aes.fillColor ?? aes.lineColor}\n rx=\"1\"\n ry=\"1\"\n />\n )}\n {needRenderDot && <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>\n {shape}\n </g>}\n {needRenderLine && (\n <path\n transform={`translate(${lineOffset},-5)`}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d={getLineShapePath(aes.lineShape)}\n fill={aes.lineColor}\n />\n )}\n <text\n x={textOffset}\n y={LEGEND_ITEM_SIZE / 2}\n dominantBaseline=\"central\"\n fontWeight={500}\n >\n {label}\n </text>\n </g>\n );\n}\n\nfunction DotAesItemElement({aes, label}: {aes: DotAesItem; label: string}) {\n const shape = getPointShape(aes.shape, aes.size, aes.color);\n\n return (\n <g>\n <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>{shape}</g>\n <text x={LEGEND_ITEM_SIZE + 8} y={LEGEND_ITEM_SIZE / 2} dominantBaseline=\"central\" fontWeight={500}>\n {label}\n </text>\n </g>\n );\n}\n\nexport function Legend({legendData, onItemHover, onItemClick}: LegendProps) {\n const interactive = Boolean(onItemHover || onItemClick);\n const debug = false;\n const continuousItems= legendData.items.filter((item) => item.type === 'continuous') as LegendItemGradient[];\n return (\n <g>\n <defs>\n {continuousItems.map(item => (\n <linearGradient key={item.id} id={item.id} gradientTransform=\"rotate(90)\">\n {item.scale.domain().reverse().map(value => {\n const domain = item.scale.domain();\n const range = domain[domain.length - 1] - domain[0];\n const percent = range > 0 ? 100 - (value - domain[0]) / range * 100 : 0;\n return (\n <stop\n key={value}\n offset={`${percent}%`}\n stopColor={item.scale(value)}\n />\n );\n })}\n </linearGradient>\n ))}\n </defs>\n {legendData.items.map(item => {\n if (item.type === 'continuous') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} fontSize=\"14px\" y={TITLE_POSITION}>{item.title}</text>\n <rect\n x=\"0\"\n y=\"0\"\n width={COLOR_ITEM_WIDTH_C}\n height={item.height}\n stroke={BLACK}\n fill={`url(#${item.id})`}\n />\n <g transform={`translate(${COLOR_ITEM_WIDTH_C},0)`}>\n {item.values.map(value => {\n const y = item.tickPositionScale(value) ?? 0;\n return (\n <g key={value} transform={`translate(0,${y})`}>\n <line x1=\"0\" x2={-4} stroke={BLACK} />\n <text x={8} y={4}>{value}</text>\n </g>\n );\n })}\n </g>\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteColor') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} y={TITLE_POSITION}>{item.title}</text>\n {item.values.map((value, idx) => {\n return <g\n key={value}\n transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}\n onMouseEnter={onItemHover ? () => onItemHover(value as string) : undefined}\n onMouseLeave={onItemHover ? () => onItemHover(null) : undefined}\n onClick={onItemClick ? () => onItemClick(value as string) : undefined}\n style={interactive ? { cursor: 'pointer' } : undefined}\n >\n <rect\n x=\"0\"\n y=\"0\"\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n fill={item.scale(value)}\n rx=\"1\"\n ry=\"1\"\n stroke={BLACK}\n />\n <text x={LEGEND_ITEM_SIZE + 8} y={10}>{item.labels[value] ?? value}</text>\n </g>;\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteMulti') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={600} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g\n key={value}\n transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}\n onMouseEnter={onItemHover ? () => onItemHover(value as string) : undefined}\n onMouseLeave={onItemHover ? () => onItemHover(null) : undefined}\n style={onItemHover ? { cursor: 'pointer' } : undefined}\n >\n <AesLegendItem\n aes={item.scale(value)}\n label={item.labels[value]}\n usedAes={item.usedAes}\n />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'dots') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <DotAesItemElement aes={item.scale(value)} label={item.labels[value]} />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'size') {\n const size = item.height / item.values.length;\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n const r = item.scale(value);\n return (\n <g key={value} transform={`translate(0, ${idx * size})`}>\n <circle r={r} cx={size / 2} cy={size / 2} fill=\"none\" stroke={BLACK} strokeWidth={1} />\n <text x={size + 4} y={size / 2} alignmentBaseline=\"central\">{item.labels[value]}</text>\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n })}\n </g>\n );\n}\n"],"mappings":"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"}
|
|
@@ -37,21 +37,11 @@ declare class ChartRenderer {
|
|
|
37
37
|
updateCaptionsSize(groupedCells: GroupedCellsHeatmap, xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'], yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'], facetSettings: HeatmapSettingsImpl['facetSettings']): void;
|
|
38
38
|
updateChartDimensions(size: HeatmapSettingsImpl['chartSettings']['size'], facetKeys: string[], xGroupKeys: string[], yGroupKeys: string[], facetSettings: HeatmapSettingsImpl['facetSettings'], xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'], yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'], annotations: HeatmapSettingsImpl['annotations'], dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY']): void;
|
|
39
39
|
updateChartsSizes(size: HeatmapSettingsImpl['chartSettings']['size'], groupedCells: GroupedCellsHeatmap, groupGap: number): void;
|
|
40
|
-
updateScales(facetKeys: string[], groupedCells: GroupedCellsHeatmap, groupGap: number, facetSettings: HeatmapSettingsImpl['facetSettings'], size: HeatmapSettingsImpl['chartSettings']['size']
|
|
41
|
-
x: boolean;
|
|
42
|
-
y: boolean;
|
|
43
|
-
xGroup: boolean;
|
|
44
|
-
yGroup: boolean;
|
|
45
|
-
}): void;
|
|
40
|
+
updateScales(facetKeys: string[], groupedCells: GroupedCellsHeatmap, groupGap: number, facetSettings: HeatmapSettingsImpl['facetSettings'], size: HeatmapSettingsImpl['chartSettings']['size']): void;
|
|
46
41
|
updateAesScale(valueType: 'discrete' | 'continuous', valueExtent: [number, number], aes: HeatmapSettingsImpl['aes'], annotations: HeatmapSettingsImpl['annotations'], groupedCellsData: GroupedCellsHeatmap, cellUniqValues: DataValue[], normalization: HeatmapSettingsImpl['normalization']): void;
|
|
47
42
|
updateDendrogram(facetKeys: string[], xGroupKeys: string[], yGroupKeys: string[], groups: GroupedCellsHeatmap['facets'], dendrogramsData: DendrogramsData, dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY']): void;
|
|
48
43
|
updateDendrogramAesScales(inheritedAes: HeatmapSettingsImpl['inheritedDendrogramAes']): void;
|
|
49
|
-
render(dataFrame: DataFrame, settingsId: string, chartSettings: HeatmapSettingsImpl['chartSettings'], facetSettings: HeatmapSettingsImpl['facetSettings'], aes: HeatmapSettingsImpl['aes'], groupedCellsData: GroupedCellsHeatmap, annotations: HeatmapSettingsImpl['annotations'], valueColumn: ColumnName, dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY'], dendrogramsData: DendrogramsData, inheritedDendrogramAes: HeatmapSettingsImpl['inheritedDendrogramAes'], cellUniqValues: DataValue[], normalization: HeatmapSettingsImpl['normalization'], onTooltipHintSwitch: (v: boolean) => void,
|
|
50
|
-
x: boolean;
|
|
51
|
-
y: boolean;
|
|
52
|
-
xGroup: boolean;
|
|
53
|
-
yGroup: boolean;
|
|
54
|
-
}, cellsRenderingMode: 'canvas' | 'svg'): void;
|
|
44
|
+
render(dataFrame: DataFrame, settingsId: string, chartSettings: HeatmapSettingsImpl['chartSettings'], facetSettings: HeatmapSettingsImpl['facetSettings'], aes: HeatmapSettingsImpl['aes'], groupedCellsData: GroupedCellsHeatmap, annotations: HeatmapSettingsImpl['annotations'], valueColumn: ColumnName, dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY'], dendrogramsData: DendrogramsData, inheritedDendrogramAes: HeatmapSettingsImpl['inheritedDendrogramAes'], cellUniqValues: DataValue[], normalization: HeatmapSettingsImpl['normalization'], onTooltipHintSwitch: (v: boolean) => void, cellsRenderingMode: 'canvas' | 'svg'): void;
|
|
55
45
|
renderError(message: string): void;
|
|
56
46
|
}
|
|
57
47
|
export default ChartRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/heatmap/ChartRenderer.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/heatmap/ChartRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAC;AAG9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAW,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAM/D,OAAO,KAAK,EACR,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,YAAY,EAEZ,mBAAmB,EACnB,WAAW,EACX,OAAO,EACV,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AA8FjE,cAAM,aAAa;IACf,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC9B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAQ;IACtC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAQ;IACpC,SAAS,EAAE,YAAY,CAAW;IAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAM;IAC3D,UAAU,EAAE,UAAU,CAOpB;IACF,OAAO,EAAE,OAAO,CAKd;IACF,aAAa,EAAE,aAAa,CAO1B;IACF,WAAW,EAAE,WAAW,CAKtB;IACF,YAAY,SAAK;IACjB,SAAS,SAAK;IACd,MAAM,EAAE,YAAY,CAIlB;IACF,IAAI,EAAE;QACF,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7B,CAAoB;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAE/C;IAC/B,qBAAqB,EAAE,qBAAqB,CAAM;IAClD,mBAAmB,EAAE,mBAAmB,CAAM;IAC9C,MAAM,EAAE,UAAU,CAIhB;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAM;IAEnD,KAAK;IAaL,IAAI,CAAC,IAAI,EAAE,WAAW;IAStB,aAAa,CAAC,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;IAYtH,gBAAgB,CACZ,SAAS,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,EAC5D,MAAM,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EACtD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAwEjC,kBAAkB,CACd,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACpD,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACpD,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC;IAiCvD,qBAAqB,CACjB,IAAI,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EAClD,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,EAAE,EACpB,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACpD,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACpD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC;IAsFnD,iBAAiB,CACb,IAAI,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EAClD,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM;IA2BpB,YAAY,CACR,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,IAAI,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;IA6DtD,cAAc,CACV,SAAS,EAAE,UAAU,GAAG,YAAY,EACpC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAC/B,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,gBAAgB,EAAE,mBAAmB,EACrC,cAAc,EAAE,SAAS,EAAE,EAC3B,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC;IAgDvD,gBAAgB,CACZ,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EACrC,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC;IAsDnD,yBAAyB,CAAC,YAAY,EAAE,mBAAmB,CAAC,wBAAwB,CAAC;IAqBrF,MAAM,CACF,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAC/B,gBAAgB,EAAE,mBAAmB,EACrC,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,eAAe,EAAE,eAAe,EAChC,sBAAsB,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,EACrE,cAAc,EAAE,SAAS,EAAE,EAC3B,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,mBAAmB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,EACzC,kBAAkB,EAAE,QAAQ,GAAG,KAAK;IA6DxC,WAAW,CAAC,OAAO,EAAE,MAAM;CAG9B;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -274,25 +274,25 @@ var M = class {
|
|
|
274
274
|
this.chartSizes.chartHeight = e * o + n * (r - 1);
|
|
275
275
|
} else this.chartSizes.chartHeight = i;
|
|
276
276
|
}
|
|
277
|
-
updateScales(e, t, n, r, i
|
|
278
|
-
let { width:
|
|
277
|
+
updateScales(e, t, n, r, i) {
|
|
278
|
+
let { width: a, height: o, cellWidth: s, cellHeight: c } = i, { meta: l, facets: u } = t, { sharedX: d, sharedY: f } = r;
|
|
279
279
|
e.forEach((e) => {
|
|
280
|
-
let t =
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
280
|
+
let t = u[e], r = l.xGroupKeys, i = l.yGroupKeys, { xKeysByGroups: p } = d ? l : t, { yKeysByGroups: m } = f ? l : t, h = r.map((e) => p[e].length), g = i.map((e) => m[e].length), _ = h.reduce((e, t) => e + t, 0), v = g.reduce((e, t) => e + t, 0), b = s || (a - (h.filter((e) => e > 0).length - 1) * n) / _, x = c || (o - (g.filter((e) => e > 0).length - 1) * n) / v, S = [], C = [], w = 0, T = r.map((e) => p[e]);
|
|
281
|
+
T.forEach((e, t) => {
|
|
282
|
+
C = C.concat(e), e.forEach(() => {
|
|
283
|
+
S.push(w), w += b;
|
|
284
284
|
});
|
|
285
|
-
let r =
|
|
286
|
-
e.length > 0 && r && (
|
|
285
|
+
let r = T.slice(t + 1).some((e) => e.length > 0);
|
|
286
|
+
e.length > 0 && r && (w += n);
|
|
287
287
|
});
|
|
288
|
-
let
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
288
|
+
let E = [], D = [], O = 0, k = i.map((e) => m[e]);
|
|
289
|
+
k.forEach((e, t) => {
|
|
290
|
+
D = D.concat(e), e.forEach(() => {
|
|
291
|
+
E.push(O), O += x;
|
|
292
292
|
});
|
|
293
|
-
let r =
|
|
294
|
-
e.length > 0 && r && (
|
|
295
|
-
}), this.scales.x[e] = y().domain(
|
|
293
|
+
let r = k.slice(t + 1).some((e) => e.length > 0);
|
|
294
|
+
e.length > 0 && r && (O += n);
|
|
295
|
+
}), this.scales.x[e] = y().domain(C).range(S), this.scales.y[e] = y().domain(D).range(E), this.step.x[e] = b, this.step.y[e] = x;
|
|
296
296
|
});
|
|
297
297
|
}
|
|
298
298
|
updateAesScale(e, t, n, r, i, a, o) {
|
|
@@ -367,17 +367,17 @@ var M = class {
|
|
|
367
367
|
}))).unknown(s), t;
|
|
368
368
|
}, {}));
|
|
369
369
|
}
|
|
370
|
-
render(e, t, n, i, a, o, s, l, u, d, f, p, m, h, g, _
|
|
371
|
-
let { meta:
|
|
372
|
-
this.updateChartsSizes(
|
|
373
|
-
let
|
|
370
|
+
render(e, t, n, i, a, o, s, l, u, d, f, p, m, h, g, _) {
|
|
371
|
+
let { meta: v, facets: y } = o, { facetKeys: b, xGroupKeys: x, yGroupKeys: C, valueExtent: w } = v, { xAxis: T, yAxis: E, title: D, size: O, valueType: k } = n;
|
|
372
|
+
this.updateChartsSizes(O, o, a.groupGap), this.updateAesScale(k, w.dataSource, a, s, o, m, h), this.updateScales(b, o, a.groupGap, i, O), this.updateCaptionsSize(o, T, E, i), this.updateChartDimensions(O, b, x, C, i, T, E, s, u, d), this.updateLegendSize(k, n.legend, s, l, w.dataSource), this.updateMargins(D, O), this.updateDendrogram(b, x, C, y, f, u, d), this.updateDendrogramAesScales(p);
|
|
373
|
+
let A = /* @__PURE__ */ S(r, {
|
|
374
374
|
dataFrame: e,
|
|
375
375
|
children: /* @__PURE__ */ S(c, {
|
|
376
376
|
aes: a,
|
|
377
377
|
annotations: s,
|
|
378
378
|
annotationColorScales: this.annotationColorScales,
|
|
379
379
|
captionsSizes: this.captionsSizes,
|
|
380
|
-
cellsMeta:
|
|
380
|
+
cellsMeta: v,
|
|
381
381
|
columnsCount: this.columnsCount,
|
|
382
382
|
chartsDimensions: this.chartsDimensions,
|
|
383
383
|
chartSettings: n,
|
|
@@ -385,22 +385,22 @@ var M = class {
|
|
|
385
385
|
colorScale: this.colorScale,
|
|
386
386
|
dendrogramAesScales: this.dendrogramAesScales,
|
|
387
387
|
dendrograms: this.dendrograms,
|
|
388
|
-
facetKeys:
|
|
388
|
+
facetKeys: b,
|
|
389
389
|
facetSettings: i,
|
|
390
|
-
groupedCells:
|
|
390
|
+
groupedCells: y,
|
|
391
391
|
labelAngles: this.labelAngles,
|
|
392
392
|
legend: this.legend,
|
|
393
393
|
margins: this.margins,
|
|
394
394
|
scales: this.scales,
|
|
395
395
|
settingsId: t,
|
|
396
396
|
step: this.step,
|
|
397
|
-
xGroupKeys:
|
|
398
|
-
yGroupKeys:
|
|
397
|
+
xGroupKeys: x,
|
|
398
|
+
yGroupKeys: C,
|
|
399
399
|
onTooltipHintSwitch: g,
|
|
400
|
-
cellsRenderingMode:
|
|
400
|
+
cellsRenderingMode: _
|
|
401
401
|
})
|
|
402
402
|
});
|
|
403
|
-
this.component =
|
|
403
|
+
this.component = A, this.reactRoot?.render(A);
|
|
404
404
|
}
|
|
405
405
|
renderError(t) {
|
|
406
406
|
this.reactRoot?.render(/* @__PURE__ */ S(e, { message: t }));
|