@milaboratories/miplots4 1.0.170 → 1.0.171
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/README.md +11 -6
- package/dist/_virtual/client.js +1 -1
- package/dist/_virtual/client2.js +2 -2
- package/dist/_virtual/index.js +1 -1
- package/dist/_virtual/index2.js +1 -1
- package/dist/_virtual/jsx-runtime.js +1 -1
- package/dist/_virtual/react-dom-client.development.js +5 -0
- package/dist/_virtual/react-dom-client.development.js.map +1 -0
- package/dist/_virtual/react-dom-client.production.js +5 -0
- package/dist/_virtual/react-dom-client.production.js.map +1 -0
- package/dist/_virtual/{react-dom-server-legacy.browser.production.min.js → react-dom-server-legacy.browser.production.js} +1 -1
- package/dist/_virtual/react-dom-server-legacy.browser.production.js.map +1 -0
- package/dist/_virtual/react-dom-server.browser.production.js +5 -0
- package/dist/_virtual/react-dom-server.browser.production.js.map +1 -0
- package/dist/_virtual/react-dom.production.js +5 -0
- package/dist/_virtual/react-dom.production.js.map +1 -0
- package/dist/_virtual/react-jsx-runtime.production.js +5 -0
- package/dist/_virtual/react-jsx-runtime.production.js.map +1 -0
- package/dist/_virtual/react.production.js +5 -0
- package/dist/_virtual/react.production.js.map +1 -0
- package/dist/_virtual/scheduler.production.js +5 -0
- package/dist/_virtual/scheduler.production.js.map +1 -0
- package/dist/_virtual/server.browser.js +1 -1
- package/dist/bubble/index.js.map +1 -1
- package/dist/common/ErrorBoundary.d.ts +1 -1
- package/dist/dendro/index.js.map +1 -1
- package/dist/discrete/index.js.map +1 -1
- package/dist/heatmap/index.js.map +1 -1
- package/dist/histogram/index.js.map +1 -1
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-client.development.js +17062 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-client.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-client.production.js +9790 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-client.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js +6245 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +4106 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server.browser.development.js +6763 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server.browser.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server.browser.production.js +4655 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server.browser.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom.development.js +228 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom.production.js +148 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/client.js +24 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/client.js.map +1 -0
- package/dist/node_modules/.pnpm/{react-dom@18.3.1_react@18.3.1 → react-dom@19.2.4_react@19.2.4}/node_modules/react-dom/index.js +1 -1
- package/dist/node_modules/.pnpm/{react-dom@18.3.1_react@18.3.1 → react-dom@19.2.4_react@19.2.4}/node_modules/react-dom/index.js.map +1 -1
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/server.browser.js +16 -0
- package/dist/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/server.browser.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.development.js +246 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.production.js +36 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.development.js +865 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.production.js +373 -0
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.production.js.map +1 -0
- package/dist/node_modules/.pnpm/{react@18.3.1 → react@19.2.4}/node_modules/react/index.js +1 -1
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{react@18.3.1 → react@19.2.4}/node_modules/react/jsx-runtime.js +3 -3
- package/dist/node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js.map +1 -0
- package/dist/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.development.js +237 -0
- package/dist/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.development.js.map +1 -0
- package/dist/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.production.js +234 -0
- package/dist/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.production.js.map +1 -0
- package/dist/node_modules/.pnpm/{scheduler@0.23.2 → scheduler@0.27.0}/node_modules/scheduler/index.js +1 -1
- package/dist/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/index.js.map +1 -0
- package/dist/scatterplot/index.js.map +1 -1
- package/package.json +7 -5
- package/dist/_virtual/react-dom-server-legacy.browser.production.min.js.map +0 -1
- package/dist/_virtual/react-dom-server.browser.production.min.js +0 -5
- package/dist/_virtual/react-dom-server.browser.production.min.js.map +0 -1
- package/dist/_virtual/react-dom.production.min.js +0 -5
- package/dist/_virtual/react-dom.production.min.js.map +0 -1
- package/dist/_virtual/react-jsx-runtime.production.min.js +0 -5
- package/dist/_virtual/react-jsx-runtime.production.min.js.map +0 -1
- package/dist/_virtual/react.production.min.js +0 -5
- package/dist/_virtual/react.production.min.js.map +0 -1
- package/dist/_virtual/scheduler.production.min.js +0 -5
- package/dist/_virtual/scheduler.production.min.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js +0 -3622
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +0 -1235
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server.browser.development.js +0 -3601
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server.browser.development.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js +0 -1256
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js +0 -13457
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js +0 -5177
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js +0 -33
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js.map +0 -1
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/server.browser.js +0 -16
- package/dist/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/server.browser.js.map +0 -1
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js +0 -605
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js.map +0 -1
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js +0 -29
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +0 -1
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.development.js +0 -1274
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.development.js.map +0 -1
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js +0 -209
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js.map +0 -1
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/index.js.map +0 -1
- package/dist/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js.map +0 -1
- package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.development.js +0 -278
- package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.development.js.map +0 -1
- package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js +0 -214
- package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js.map +0 -1
- package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/histogram/index.ts"],"sourcesContent":["import {\n intersection\n} from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ErrorInfoHistogramGroups} from '../types';\nimport { type Category, type ColumnName, type ErrorInfoFacets, getUnknownErrorInfo, type HistogramEventHandlers, type HistogramSettings, isErrorInfo } from '../types';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { HistogramLegendInfo } from './components/types';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport { createHistogramDataByFacets } from './getHistogramData';\nimport { HistogramSettingsImpl } from './HistogramSettingsImpl';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\n\nfunction getLegendInfo(\n data: DataFrame,\n grouping: ColumnName[],\n inheritedAes: HistogramSettingsImpl['inheritedAes']\n): HistogramLegendInfo {\n return grouping.reduce((res: HistogramLegendInfo, column) => {\n const categories = data.getColumnCategories(column.value, false);\n const getValueLabel = (category: Category) => (column.valueLabels\n ? String(data.getColumnValue(\n column.valueLabels,\n data.getColumnCategoryRowIndex(column.value, category)\n ))\n : category\n );\n const labels = categories.reduce((res: Record<string, string>, category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {});\n res[column.value] = {\n values: categories.sort((a, b) => labels[a].localeCompare(labels[b], 'en', {numeric: true})),\n aesMap: inheritedAes[column.value],\n labels,\n };\n return res;\n }, {});\n}\n\nexport class ChartHistogram extends AbstractChart {\n settings: HistogramSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n facetKeys: string[];\n facetKeysCombinations: string[][];\n histogramDataByFacets: Record<string, GroupedHistogramData>\n legendInfo: HistogramLegendInfo;\n facetLabels: Record<string, string[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: HistogramSettings, eventHandlers?: HistogramEventHandlers) {\n super(data, settings);\n\n this.settings = new HistogramSettingsImpl(settings);\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: HistogramSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HistogramSettingsImpl(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 histogram');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HistogramSettingsImpl, settings: HistogramSettingsImpl) {\n return (\n prevSettings.valueColumn.value !== settings.valueColumn.value ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping?.value !== settings.grouping?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n prevSettings.binsCount !== settings.binsCount ||\n prevSettings.chartSettings.xAxis.scale !== settings.chartSettings.xAxis.scale ||\n prevSettings.groupingOrder?.some((key, idx) => key !== settings.groupingOrder?.[idx]) ||\n settings.groupingOrder?.some((key, idx) => key !== prevSettings.groupingOrder?.[idx])\n );\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 {valueColumn, facetBy, grouping, binsCount, chartSettings, inheritedAes, groupingOrder} = this.settings;\n\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value));\n const facetKeysCombinations = facetKeysLists.length ? getKeysCombinations([...facetKeysLists]) : [['null']];\n\n if (facetKeysCombinations.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeysCombinations.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n const groupingValues = grouping ? [grouping.value] : [];\n let groupingKeys = grouping ? this.data.getColumnCategories(grouping.value) : ['null'];\n if (groupingKeys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoHistogramGroups = {\n type: 'tooManyHistogramGroups',\n info: {count: groupingKeys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (groupingOrder) {\n groupingKeys = intersection(groupingOrder, groupingKeys);\n }\n\n this.data.setGrouping([...facetGroupingValues, ...groupingValues]);\n const histogramDataByFacets = createHistogramDataByFacets(this.data, facetKeysCombinations, groupingKeys, valueColumn, binsCount, chartSettings.xAxis.scale);\n\n const facetKeys = facetKeysCombinations.map(v => v.join(', '));\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeysCombinations);\n this.calculatedData = {\n facetKeys,\n facetKeysCombinations,\n facetLabels,\n histogramDataByFacets,\n legendInfo: getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes)\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 {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, inheritedAes, layers, grouping, groupingDirection, groupingStack, facetBy} = this.settings;\n this.calculatedData.legendInfo = getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes);\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(key => facetLabels[key]),\n //for titles, if facet by more than 1 column\n this.calculatedData.histogramDataByFacets,\n this.calculatedData.legendInfo,\n layers,\n inheritedAes,\n grouping,\n groupingStack,\n groupingDirection,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getLegendInfo","data","grouping","inheritedAes","res","column","categories","getValueLabel","category","labels","a","b","ChartHistogram","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","HistogramSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","_b","l","_c","key","_d","prevData","prevKeys","keys","valueColumn","facetBy","binsCount","chartSettings","groupingOrder","facetKeysLists","facetKeysCombinations","getKeysCombinations","MAX_FACETS_COUNT","errorInfo","facetGroupingValues","groupingValues","groupingKeys","MAX_GROUPS_COUNT","intersection","histogramDataByFacets","createHistogramDataByFacets","facetKeys","v","facetLabels","getFacetLabels","id","facetSettings","layers","groupingDirection","groupingStack"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/histogram/index.ts"],"sourcesContent":["import {\n intersection\n} from 'lodash';\nimport { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ErrorInfoHistogramGroups} from '../types';\nimport { type Category, type ColumnName, type ErrorInfoFacets, getUnknownErrorInfo, type HistogramEventHandlers, type HistogramSettings, isErrorInfo } from '../types';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { HistogramLegendInfo } from './components/types';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport { createHistogramDataByFacets } from './getHistogramData';\nimport { HistogramSettingsImpl } from './HistogramSettingsImpl';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\n\nfunction getLegendInfo(\n data: DataFrame,\n grouping: ColumnName[],\n inheritedAes: HistogramSettingsImpl['inheritedAes']\n): HistogramLegendInfo {\n return grouping.reduce((res: HistogramLegendInfo, column) => {\n const categories = data.getColumnCategories(column.value, false);\n const getValueLabel = (category: Category) => (column.valueLabels\n ? String(data.getColumnValue(\n column.valueLabels,\n data.getColumnCategoryRowIndex(column.value, category)\n ))\n : category\n );\n const labels = categories.reduce((res: Record<string, string>, category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {});\n res[column.value] = {\n values: categories.sort((a, b) => labels[a].localeCompare(labels[b], 'en', {numeric: true})),\n aesMap: inheritedAes[column.value],\n labels,\n };\n return res;\n }, {});\n}\n\nexport class ChartHistogram extends AbstractChart {\n settings: HistogramSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n facetKeys: string[];\n facetKeysCombinations: string[][];\n histogramDataByFacets: Record<string, GroupedHistogramData>\n legendInfo: HistogramLegendInfo;\n facetLabels: Record<string, string[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: HistogramSettings, eventHandlers?: HistogramEventHandlers) {\n super(data, settings);\n\n this.settings = new HistogramSettingsImpl(settings);\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: HistogramSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HistogramSettingsImpl(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 histogram');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HistogramSettingsImpl, settings: HistogramSettingsImpl) {\n return (\n prevSettings.valueColumn.value !== settings.valueColumn.value ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping?.value !== settings.grouping?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n prevSettings.binsCount !== settings.binsCount ||\n prevSettings.chartSettings.xAxis.scale !== settings.chartSettings.xAxis.scale ||\n prevSettings.groupingOrder?.some((key, idx) => key !== settings.groupingOrder?.[idx]) ||\n settings.groupingOrder?.some((key, idx) => key !== prevSettings.groupingOrder?.[idx])\n );\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 {valueColumn, facetBy, grouping, binsCount, chartSettings, inheritedAes, groupingOrder} = this.settings;\n\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value));\n const facetKeysCombinations = facetKeysLists.length ? getKeysCombinations([...facetKeysLists]) : [['null']];\n\n if (facetKeysCombinations.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeysCombinations.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n const groupingValues = grouping ? [grouping.value] : [];\n let groupingKeys = grouping ? this.data.getColumnCategories(grouping.value) : ['null'];\n if (groupingKeys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoHistogramGroups = {\n type: 'tooManyHistogramGroups',\n info: {count: groupingKeys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (groupingOrder) {\n groupingKeys = intersection(groupingOrder, groupingKeys);\n }\n\n this.data.setGrouping([...facetGroupingValues, ...groupingValues]);\n const histogramDataByFacets = createHistogramDataByFacets(this.data, facetKeysCombinations, groupingKeys, valueColumn, binsCount, chartSettings.xAxis.scale);\n\n const facetKeys = facetKeysCombinations.map(v => v.join(', '));\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeysCombinations);\n this.calculatedData = {\n facetKeys,\n facetKeysCombinations,\n facetLabels,\n histogramDataByFacets,\n legendInfo: getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes)\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 {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, inheritedAes, layers, grouping, groupingDirection, groupingStack, facetBy} = this.settings;\n this.calculatedData.legendInfo = getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes);\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(key => facetLabels[key]),\n //for titles, if facet by more than 1 column\n this.calculatedData.histogramDataByFacets,\n this.calculatedData.legendInfo,\n layers,\n inheritedAes,\n grouping,\n groupingStack,\n groupingDirection,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getLegendInfo","data","grouping","inheritedAes","res","column","categories","getValueLabel","category","labels","a","b","ChartHistogram","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","HistogramSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","_b","l","_c","key","_d","prevData","prevKeys","keys","valueColumn","facetBy","binsCount","chartSettings","groupingOrder","facetKeysLists","facetKeysCombinations","getKeysCombinations","MAX_FACETS_COUNT","errorInfo","facetGroupingValues","groupingValues","groupingKeys","MAX_GROUPS_COUNT","intersection","histogramDataByFacets","createHistogramDataByFacets","facetKeys","v","facetLabels","getFacetLabels","id","facetSettings","layers","groupingDirection","groupingStack"],"mappings":"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"}
|