@milaboratories/graph-maker 1.1.161 → 1.1.163

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.
Files changed (40) hide show
  1. package/dist/GraphMaker/constantsCommon.d.ts +6 -0
  2. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  3. package/dist/GraphMaker/constantsCommon.js +25 -19
  4. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  5. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.d.ts.map +1 -1
  6. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js +122 -91
  7. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js.map +1 -1
  8. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.d.ts.map +1 -1
  9. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js +105 -77
  10. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js.map +1 -1
  11. package/dist/GraphMaker/index.vue.d.ts.map +1 -1
  12. package/dist/GraphMaker/index.vue.js +77 -73
  13. package/dist/GraphMaker/index.vue.js.map +1 -1
  14. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +5 -0
  15. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  16. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +28 -24
  17. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  18. package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +4 -4
  19. package/dist/node_modules/@milaboratories/miplots4/dist/common/Legend.js +3 -3
  20. package/dist/node_modules/@milaboratories/miplots4/dist/common/Legend.js.map +1 -1
  21. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +25 -25
  22. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  23. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +13 -8
  24. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  25. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js +58 -58
  26. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js.map +1 -1
  27. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +10 -10
  28. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Dendrograms.js +51 -51
  29. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Dendrograms.js.map +1 -1
  30. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +204 -110
  31. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  32. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getClusters.js +135 -46
  33. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getClusters.js.map +1 -1
  34. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js +35 -37
  35. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js.map +1 -1
  36. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +81 -78
  37. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  38. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +14 -9
  39. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
  40. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../src/GraphMaker/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n ChartInterface,\n DataByColumns,\n LassoControlsState,\n MiPlots,\n Settings\n} from '@milaboratories/miplots4';\nimport {\n ChartType,\n DemoDataStore, getInitialStateByType,\n PlotDataAndSettings\n} from '@milaboratories/pf-plots';\nimport type { AxisSpec, PFrameDriver, PlSelectionModel, PTableKey } from '@platforma-sdk/model';\nimport { watchDebounced } from '@vueuse/core';\nimport canonicalize from 'canonicalize';\nimport { computed, onMounted, onUnmounted, ref, shallowRef, toRaw, useSlots, watch } from 'vue';\nimport './assets/ui.scss';\nimport Chart from './components/Chart.vue';\nimport Loading from './components/Loading.vue';\nimport PanelModal from './components/PanelModal.vue';\nimport VTabs from './components/SettingsTabs/index.vue';\nimport TransitionSlidePanel from './components/TransitionSlidePanel.vue';\nimport { useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { GraphMakerState, GraphStatus } from './types';\nimport { DendroNodeInfo, GraphMakerProps } from './types';\nimport { composeChartSettings, saveToFile } from './utils';\nimport { copyJSON } from './utils/copyJSON';\n\nconst emit = defineEmits(['delete-this-graph', 'tooltip-btn-click']);\n\nconst graphMakerState = defineModel<GraphMakerState>({ required: true });\nconst selectionState = defineModel<PlSelectionModel>('selection');\n\nconst props = defineProps<GraphMakerProps>();\n\ndefineExpose({\n /**\n reset() will update data-mapping, axis-settings, layers-settings with the state that is in v-model at the moment.\n In other cases editing of v-model fields doesn't make any impact to graphs and interface.\n Besides, after reset default-options will be applied again. You can use reset to apply new default-options.\n */\n reset,\n /**\n Apply new defaults without resetting all the state\n */\n resetDefaults\n});\n\nconst dataStore = ref<DemoDataStore | null>(null);\n\nwatch(() => props.pFrame, (pframeValue) => {\n if (!pframeValue) {\n return;\n }\n const driver = ('platforma' in window) ? window.platforma?.pFrameDriver as PFrameDriver : props.driver;\n if (!driver) {\n throw new Error('PFrame driver is missing');\n }\n dataStore.value = new DemoDataStore(\n pframeValue,\n driver,\n props.labelsModifier\n );\n}, { immediate: true });\n\n\n//fixed options can be updated outside, other settings only inside from chart settings interface, so we don't watching other settings\nconst fixedOptions = ref<typeof props.fixedOptions>(props.fixedOptions ?? []);\nwatch(() => props.fixedOptions, (value, oldValue) => {\n if (\n value && oldValue && JSON.stringify(value) !== JSON.stringify(oldValue) ||\n value && !oldValue ||\n oldValue && !value\n ) {\n fixedOptions.value = value;\n }\n}, { deep: true });\nconst defaultOptions = ref<typeof props.defaultOptions>(props.defaultOptions);\n\nconst state = provideStore(\n toRaw(graphMakerState.value),\n dataStore,\n props.chartType,\n defaultOptions,\n fixedOptions,\n props.dataColumnPredicate,\n props.readonlyInputs\n);\n\nfunction reset() {\n const nextReactiveState = createReactiveState(\n toRaw(graphMakerState.value),\n props.chartType\n );\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions;\n}\n\nfunction resetDefaults() {\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : [];\n}\n\nconst prevDataKey = computed(() => state.value.reactive.dataStateKey);\nwatch(() => canonicalize(props.dataStateKey), (keyValue) => {\n if ((keyValue !== undefined || prevDataKey.value !== undefined) && prevDataKey.value !== keyValue) {\n graphMakerState.value.optionsState = copyJSON(getInitialStateByType(props.chartType));\n const nextReactiveState = createReactiveState(toRaw(graphMakerState.value), props.chartType);\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : []; // to trigger watch on defaults\n }\n state.value.reactive.dataStateKey = keyValue;\n}, {deep: true, immediate: true});\n\nconst currentForm = computed(() => useSettingsForm(state.value.reactive.currentTab));\n\nconst chartRef = shallowRef<ChartInterface | null>(null);\nconst chartCalculatedDataRef = ref<Record<string, unknown> | null>(null);\nconst chartError = ref(false);\n\nconst graphStatus = computed<GraphStatus>(() => {\n const inputGuide = state.value.inputGuide.value;\n const chartData = state.value.chartData.value;\n if (!inputGuide.consistent) {\n return 'inconsistent';\n }\n if (!inputGuide.ready) {\n return 'notReady';\n }\n if (chartData && Object.values(chartData.data.byColumns.values)[0]?.length === 0) {\n return 'empty';\n }\n if (chartError.value) {\n return 'error';\n }\n return 'ready';\n});\nfunction onTreeNodeClick(d: DendroNodeInfo) {\n state.value.reactive.dendroSelectedNodeId = d?.info[0]?.id as number;\n state.value.reactive.dendroInfoByClick = d;\n}\n\nfunction onTooltipHintSwitch(v:boolean) {\n state.value.reactive.showTooltipHint = v;\n}\n\nfunction onLassoPolygonUpdate(dotIndexes:number[], polygons:{points:[number, number][], closed: boolean}[]) {\n graphMakerState.value = {\n ...graphMakerState.value,\n selectedPolygons: polygons\n };\n\n const axesData = state.value.chartData.value?.data?.axesData;\n if (dotIndexes.length === 0 || !axesData) {\n selectionState.value = {axesSpec: [], selectedKeys: []};\n return;\n }\n\n const axisKeys = Object.keys(axesData);\n const inputGuide = state.value.inputGuide.value;\n selectionState.value = {\n axesSpec: axisKeys.map(axisKey => inputGuide.getSourceInfo(axisKey).spec as AxisSpec),\n selectedKeys: dotIndexes.map((idx) => axisKeys.map((axisKey) => axesData[axisKey][idx]) as PTableKey)\n };\n}\n\nfunction onLassoStateChange (v:LassoControlsState) {\n state.value.reactive.lassoControlsState = v;\n}\nconst graphEventHandlers:Record<ChartType, unknown> = {\n dendro: [onTreeNodeClick],\n 'scatterplot-umap': {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange\n },\n discrete: [onTooltipHintSwitch],\n scatterplot: {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange\n },\n histogram: [onTooltipHintSwitch],\n heatmap: [onTooltipHintSwitch],\n bubble: [onTooltipHintSwitch]\n}\nfunction updateChart(value: {data: PlotDataAndSettings['data']['byColumns'], settings: PlotDataAndSettings['settings']} | null) {\n // if dataByColumns exists but columns has no data - show empty chart\n if (value && Object.values(value.data.values)[0]?.length > 0) {\n console.log('value.dataByColumns', toRaw(value.data));\n console.log('value.settings', toRaw(value.settings));\n if (chartRef.value) {\n chartRef.value.updateSettingsAndData(toRaw(value.data), toRaw(value.settings) as Settings);\n } else {\n const htmlNode = document.getElementById('chartSvgContainer');\n if (htmlNode) {\n chartRef.value = MiPlots.newPlot(toRaw(value.data), toRaw(value.settings) as Settings, graphEventHandlers[value.settings.type as ChartType]);\n if (value.settings.type === 'scatterplot-umap') {\n // set default polygons (from props)\n chartRef.value.updateChartState('polygon', graphMakerState.value.selectedPolygons ?? []);\n }\n chartRef.value.mount(htmlNode);\n }\n }\n // calculated by chart renderer data, tree hierarchy for example\n chartCalculatedDataRef.value = chartRef.value?.calculatedData ? { ...chartRef.value.calculatedData } : null;\n chartError.value = chartRef.value?.hasError ?? false;\n } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n}\n\nconst chartDataForRender = shallowRef<{settings:Settings, data:DataByColumns} | null>(null);\nwatch([\n () => state.value.chartData.value\n], ([chartData]) => {\n chartDataForRender.value = composeChartSettings(\n toRaw(chartData),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive)\n );\n});\nwatch([\n () => state.value.reactive.template,\n () => state.value.reactive.layersSettings,\n () => state.value.reactive.axesSettings,\n () => state.value.reactive.statisticsSettings,\n () => state.value.reactive.dataBindAes,\n () => state.value.reactive.chartScale,\n], () => {\n chartDataForRender.value = composeChartSettings(\n toRaw(state.value.chartData.value),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n );\n}, {deep: true});\n\nwatch(() => chartDataForRender.value, (chartData) => {\n updateChart(chartData);\n});\nonMounted(() => {\n updateChart(null);\n});\nonUnmounted(() => {\n chartRef.value?.unmount();\n});\n\nwatchDebounced(() => state.value.reactive.optionsState, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n optionsState: copyJSON(v)\n }\n}, {deep: true, debounce: 1000});\nwatchDebounced(() => state.value.reactive.statisticsSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n statisticsSettings: copyJSON(v)\n }\n}, {deep: true, debounce: 1000});\nwatchDebounced(() => state.value.reactive.axesSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n axesSettings: copyJSON(v)\n }\n}, {deep: true, debounce: 1000});\nwatchDebounced(() => state.value.reactive.layersSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n layersSettings: copyJSON(v)\n }\n}, {deep: true, debounce: 1000});\nwatchDebounced(() => state.value.reactive.dataBindAes, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataBindAes: copyJSON(v)\n }\n}, {deep: true, debounce: 1000});\n\nwatchDebounced([\n () => state.value.reactive.chartScale,\n () => state.value.reactive.template,\n () => state.value.reactive.currentTab\n], ([zoomState, template, currentTab]) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n zoomState,\n template,\n currentTab\n }\n}, { debounce: 1000});\n\nwatch(() => state.value.reactive.dataStateKey, (dataStateKey) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataStateKey\n }\n}, {immediate: true});\n\nwatch(() => graphMakerState.value.currentTab, (v) => {\n state.value.reactive.currentTab = v === undefined ? 'dataMapping' : v;\n});\n\nwatch(() => graphMakerState.value?.layersSettings?.dendro?.showTable, (v) => {\n state.value.reactive.layersSettings.dendro.showTable = v ?? false;\n});\n\nfunction onExport() {\n saveToFile(\n new Blob([\n chartRef.value?.export() ?? ''\n ]),\n 'chart.svg'\n );\n}\n\nfunction updateGraphTitle(nextTitle: string) {\n graphMakerState.value = {\n ...graphMakerState.value,\n title: nextTitle\n };\n}\n\nfunction selectTreeNode(id: number | null) {\n state.value.reactive.dendroSelectedNodeId = id;\n chartRef.value?.updateChartState('selectedNode', id);\n}\n\nconst slots = useSlots();\n\nconst hasSettingsSlot = computed(() => Boolean(slots.settingsSlot));\nconst hasLogSlot = computed(() => Boolean(slots.logSlot));\n\n</script>\n\n<template>\n <div class=\"graph-maker\">\n <div class=\"graph-maker__main-pane\">\n <chart\n :graph-status=\"graphStatus\"\n :graphTitle=\"graphMakerState.title\"\n :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\"\n :dendroTooltipButton=\"tooltipButton\"\n @graph-title-update=\"updateGraphTitle\"\n @dendro-node-select=\"selectTreeNode\"\n @dendro-tooltip-btn-click=\"(id:string) => $emit('tooltip-btn-click', id)\"\n >\n <slot name=\"titleLineSlot\"></slot>\n </chart>\n <loading v-if=\"state.loading.initialInputGuide\" :top=\"67\" :left=\"12\" :right=\"12\" :bottom=\"12\" />\n <TransitionSlidePanel id=\"graph-settings-modal\" v-if=\"!state.loading.initialInputGuide\">\n <panel-modal v-if=\"state.reactive.currentTab\" @close=\"state.reactive.currentTab = null\">\n <component :is=\"currentForm.value\">\n <slot v-if=\"state.reactive.currentTab === 'settings'\" name=\"settingsSlot\"></slot> \n <slot v-if=\"state.reactive.currentTab === 'log'\" name=\"logSlot\"></slot> \n </component>\n </panel-modal>\n </TransitionSlidePanel>\n </div>\n <v-tabs\n :chart-type=\"state.reactive.chartType\"\n :graph-status=\"graphStatus\"\n :allowDeleting=\"allowChartDeleting\"\n :hasSettingsSlot=\"hasSettingsSlot\"\n :hasLogSlot=\"hasLogSlot\"\n :initialLoading=\"state.loading.initialInputGuide\"\n v-model=\"state.reactive.currentTab\"\n @export=\"onExport\"\n @delete=\"$emit('delete-this-graph')\"\n />\n </div>\n</template>\n"],"names":["graphMakerState","_useModel","selectionState","__props","props","__expose","reset","resetDefaults","dataStore","ref","watch","pframeValue","driver","_a","DemoDataStore","fixedOptions","value","oldValue","defaultOptions","state","provideStore","toRaw","nextReactiveState","createReactiveState","prevDataKey","computed","canonicalize","keyValue","copyJSON","getInitialStateByType","currentForm","useSettingsForm","chartRef","shallowRef","chartCalculatedDataRef","chartError","graphStatus","inputGuide","chartData","onTreeNodeClick","d","onTooltipHintSwitch","v","onLassoPolygonUpdate","dotIndexes","polygons","axesData","_b","axisKeys","axisKey","idx","onLassoStateChange","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","zoomState","template","currentTab","dataStateKey","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasSettingsSlot","hasLogSlot"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue.js","sources":["../../src/GraphMaker/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n ChartInterface,\n DataByColumns,\n LassoControlsState,\n MiPlots,\n Settings\n} from '@milaboratories/miplots4';\nimport {\n ChartType,\n DemoDataStore, getInitialStateByType,\n PlotDataAndSettings\n} from '@milaboratories/pf-plots';\nimport type { AxisSpec, PFrameDriver, PlSelectionModel, PTableKey } from '@platforma-sdk/model';\nimport { watchDebounced } from '@vueuse/core';\nimport canonicalize from 'canonicalize';\nimport { computed, onMounted, onUnmounted, ref, shallowRef, toRaw, useSlots, watch } from 'vue';\nimport './assets/ui.scss';\nimport Chart from './components/Chart.vue';\nimport Loading from './components/Loading.vue';\nimport PanelModal from './components/PanelModal.vue';\nimport VTabs from './components/SettingsTabs/index.vue';\nimport TransitionSlidePanel from './components/TransitionSlidePanel.vue';\nimport { useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { GraphMakerState, GraphStatus } from './types';\nimport { DendroNodeInfo, GraphMakerProps } from './types';\nimport { composeChartSettings, saveToFile } from './utils';\nimport { copyJSON } from './utils/copyJSON';\n\nconst emit = defineEmits(['delete-this-graph', 'tooltip-btn-click']);\n\nconst graphMakerState = defineModel<GraphMakerState>({ required: true });\nconst selectionState = defineModel<PlSelectionModel>('selection');\n\nconst props = defineProps<GraphMakerProps>();\n\ndefineExpose({\n /**\n reset() will update data-mapping, axis-settings, layers-settings with the state that is in v-model at the moment.\n In other cases editing of v-model fields doesn't make any impact to graphs and interface.\n Besides, after reset default-options will be applied again. You can use reset to apply new default-options.\n */\n reset,\n /**\n Apply new defaults without resetting all the state\n */\n resetDefaults\n});\n\nconst dataStore = ref<DemoDataStore | null>(null);\n\nwatch(() => props.pFrame, (pframeValue) => {\n if (!pframeValue) {\n return;\n }\n const driver = ('platforma' in window) ? window.platforma?.pFrameDriver as PFrameDriver : props.driver;\n if (!driver) {\n throw new Error('PFrame driver is missing');\n }\n dataStore.value = new DemoDataStore(\n pframeValue,\n driver,\n props.labelsModifier\n );\n}, { immediate: true });\n\n\n//fixed options can be updated outside, other settings only inside from chart settings interface, so we don't watching other settings\nconst fixedOptions = ref<typeof props.fixedOptions>(props.fixedOptions ?? []);\nwatch(() => props.fixedOptions, (value, oldValue) => {\n if (\n value && oldValue && JSON.stringify(value) !== JSON.stringify(oldValue) ||\n value && !oldValue ||\n oldValue && !value\n ) {\n fixedOptions.value = value;\n }\n}, { deep: true });\nconst defaultOptions = ref<typeof props.defaultOptions>(props.defaultOptions);\n\nconst state = provideStore(\n toRaw(graphMakerState.value),\n dataStore,\n props.chartType,\n defaultOptions,\n fixedOptions,\n props.dataColumnPredicate,\n props.readonlyInputs\n);\n\nfunction reset() {\n const nextReactiveState = createReactiveState(\n toRaw(graphMakerState.value),\n props.chartType\n );\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions;\n}\n\nfunction resetDefaults() {\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : [];\n}\n\nconst prevDataKey = computed(() => state.value.reactive.dataStateKey);\nwatch(() => canonicalize(props.dataStateKey), (keyValue) => {\n if ((keyValue !== undefined || prevDataKey.value !== undefined) && prevDataKey.value !== keyValue) {\n graphMakerState.value.optionsState = copyJSON(getInitialStateByType(props.chartType));\n const nextReactiveState = createReactiveState(toRaw(graphMakerState.value), props.chartType);\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : []; // to trigger watch on defaults\n }\n state.value.reactive.dataStateKey = keyValue;\n}, { deep: true, immediate: true });\n\nconst currentForm = computed(() => useSettingsForm(state.value.reactive.currentTab));\n\nconst chartRef = shallowRef<ChartInterface | null>(null);\nconst chartCalculatedDataRef = ref<Record<string, unknown> | null>(null);\nconst chartError = ref(false);\n\nconst graphStatus = computed<GraphStatus>(() => {\n const inputGuide = state.value.inputGuide.value;\n const chartData = state.value.chartData.value;\n if (!inputGuide.consistent) {\n return 'inconsistent';\n }\n if (!inputGuide.ready) {\n return 'notReady';\n }\n if (chartData && Object.values(chartData.data.byColumns.values)[0]?.length === 0) {\n return 'empty';\n }\n if (chartError.value) {\n return 'error';\n }\n return 'ready';\n});\nfunction onTreeNodeClick(d: DendroNodeInfo) {\n state.value.reactive.dendroSelectedNodeId = d?.info[0]?.id as number;\n state.value.reactive.dendroInfoByClick = d;\n}\n\nfunction onTooltipHintSwitch(v: boolean) {\n state.value.reactive.showTooltipHint = v;\n}\n\nfunction onLassoPolygonUpdate(dotIndexes: number[], polygons: { points: [number, number][], closed: boolean }[]) {\n graphMakerState.value = {\n ...graphMakerState.value,\n selectedPolygons: polygons\n };\n\n const axesData = state.value.chartData.value?.data?.axesData;\n if (dotIndexes.length === 0 || !axesData) {\n selectionState.value = { axesSpec: [], selectedKeys: [] };\n return;\n }\n\n const axisKeys = Object.keys(axesData);\n const inputGuide = state.value.inputGuide.value;\n selectionState.value = {\n axesSpec: axisKeys.map(axisKey => inputGuide.getSourceInfo(axisKey).spec as AxisSpec),\n selectedKeys: dotIndexes.map((idx) => axisKeys.map((axisKey) => axesData[axisKey][idx]) as PTableKey)\n };\n}\n\nfunction onLassoStateChange(v: LassoControlsState) {\n state.value.reactive.lassoControlsState = v;\n}\nconst graphEventHandlers: Record<ChartType, unknown> = {\n dendro: [onTreeNodeClick],\n 'scatterplot-umap': {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange\n },\n discrete: [onTooltipHintSwitch],\n scatterplot: {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange\n },\n histogram: [onTooltipHintSwitch],\n heatmap: [onTooltipHintSwitch],\n bubble: [onTooltipHintSwitch]\n}\nfunction updateChart(value: { data: PlotDataAndSettings['data']['byColumns'], settings: PlotDataAndSettings['settings'] } | null) {\n // if dataByColumns exists but columns has no data - show empty chart\n if (value && Object.values(value.data.values)[0]?.length > 0) {\n // console.log('value.dataByColumns', toRaw(value.data));\n // console.log('value.settings', toRaw(value.settings));\n if (chartRef.value) {\n chartRef.value.updateSettingsAndData(toRaw(value.data), toRaw(value.settings) as Settings);\n } else {\n const htmlNode = document.getElementById('chartSvgContainer');\n if (htmlNode) {\n chartRef.value = MiPlots.newPlot(toRaw(value.data), toRaw(value.settings) as Settings, graphEventHandlers[value.settings.type as ChartType]);\n if (value.settings.type === 'scatterplot-umap') {\n // set default polygons (from props)\n chartRef.value.updateChartState('polygon', graphMakerState.value.selectedPolygons ?? []);\n }\n chartRef.value.mount(htmlNode);\n }\n }\n // calculated by chart renderer data, tree hierarchy for example\n chartCalculatedDataRef.value = chartRef.value?.calculatedData ? { ...chartRef.value.calculatedData } : null;\n chartError.value = chartRef.value?.hasError ?? false;\n } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n}\n\nwatch(() => graphStatus.value, (v) => {\n if (v === 'notReady') {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n});\n\nconst chartDataForRender = shallowRef<{ settings: Settings, data: DataByColumns } | null>(null);\nwatch([\n () => state.value.chartData.value\n], ([chartData]) => {\n chartDataForRender.value = composeChartSettings(\n toRaw(chartData),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive)\n );\n});\nwatch([\n () => state.value.reactive.template,\n () => state.value.reactive.layersSettings,\n () => state.value.reactive.axesSettings,\n () => state.value.reactive.statisticsSettings,\n () => state.value.reactive.dataBindAes,\n () => state.value.reactive.chartScale,\n], () => {\n chartDataForRender.value = composeChartSettings(\n toRaw(state.value.chartData.value),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n );\n}, { deep: true });\n\nwatch(() => chartDataForRender.value, (chartData) => {\n updateChart(chartData);\n});\nonMounted(() => {\n updateChart(null);\n});\nonUnmounted(() => {\n chartRef.value?.unmount();\n});\n\nwatchDebounced(() => state.value.reactive.optionsState, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n optionsState: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.statisticsSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n statisticsSettings: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.axesSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n axesSettings: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.layersSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n layersSettings: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.dataBindAes, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataBindAes: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\n\nwatchDebounced([\n () => state.value.reactive.chartScale,\n () => state.value.reactive.template,\n () => state.value.reactive.currentTab\n], ([zoomState, template, currentTab]) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n zoomState,\n template,\n currentTab\n }\n}, { debounce: 1000 });\n\nwatch(() => state.value.reactive.dataStateKey, (dataStateKey) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataStateKey\n }\n}, { immediate: true });\n\nwatch(() => graphMakerState.value.currentTab, (v) => {\n state.value.reactive.currentTab = v === undefined ? 'dataMapping' : v;\n});\n\nwatch(() => graphMakerState.value?.layersSettings?.dendro?.showTable, (v) => {\n state.value.reactive.layersSettings.dendro.showTable = v ?? false;\n});\n\nfunction onExport() {\n saveToFile(\n new Blob([\n chartRef.value?.export() ?? ''\n ]),\n 'chart.svg'\n );\n}\n\nfunction updateGraphTitle(nextTitle: string) {\n graphMakerState.value = {\n ...graphMakerState.value,\n title: nextTitle\n };\n}\n\nfunction selectTreeNode(id: number | null) {\n state.value.reactive.dendroSelectedNodeId = id;\n chartRef.value?.updateChartState('selectedNode', id);\n}\n\nconst slots = useSlots();\n\nconst hasSettingsSlot = computed(() => Boolean(slots.settingsSlot));\nconst hasLogSlot = computed(() => Boolean(slots.logSlot));\n\n</script>\n\n<template>\n <div class=\"graph-maker\">\n <div class=\"graph-maker__main-pane\">\n <chart :graph-status=\"graphStatus\" :graphTitle=\"graphMakerState.title\" :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\" :dendroTooltipButton=\"tooltipButton\" @graph-title-update=\"updateGraphTitle\"\n @dendro-node-select=\"selectTreeNode\" @dendro-tooltip-btn-click=\"(id: string) => $emit('tooltip-btn-click', id)\">\n <slot name=\"titleLineSlot\"></slot>\n </chart>\n <loading v-if=\"state.loading.initialInputGuide\" :top=\"67\" :left=\"12\" :right=\"12\" :bottom=\"12\" />\n <TransitionSlidePanel id=\"graph-settings-modal\" v-if=\"!state.loading.initialInputGuide\">\n <panel-modal v-if=\"state.reactive.currentTab\" @close=\"state.reactive.currentTab = null\">\n <component :is=\"currentForm.value\">\n <slot v-if=\"state.reactive.currentTab === 'settings'\" name=\"settingsSlot\"></slot>\n <slot v-if=\"state.reactive.currentTab === 'log'\" name=\"logSlot\"></slot>\n </component>\n </panel-modal>\n </TransitionSlidePanel>\n </div>\n <v-tabs :chart-type=\"state.reactive.chartType\" :graph-status=\"graphStatus\" :allowDeleting=\"allowChartDeleting\"\n :hasSettingsSlot=\"hasSettingsSlot\" :hasLogSlot=\"hasLogSlot\" :initialLoading=\"state.loading.initialInputGuide\"\n v-model=\"state.reactive.currentTab\" @export=\"onExport\" @delete=\"$emit('delete-this-graph')\" />\n </div>\n</template>\n"],"names":["graphMakerState","_useModel","selectionState","__props","props","__expose","reset","resetDefaults","dataStore","ref","watch","pframeValue","driver","_a","DemoDataStore","fixedOptions","value","oldValue","defaultOptions","state","provideStore","toRaw","nextReactiveState","createReactiveState","prevDataKey","computed","canonicalize","keyValue","copyJSON","getInitialStateByType","currentForm","useSettingsForm","chartRef","shallowRef","chartCalculatedDataRef","chartError","graphStatus","inputGuide","chartData","onTreeNodeClick","d","onTooltipHintSwitch","v","onLassoPolygonUpdate","dotIndexes","polygons","axesData","_b","axisKeys","axisKey","idx","onLassoStateChange","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","zoomState","template","currentTab","dataStateKey","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasSettingsSlot","hasLogSlot"],"mappings":"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"}
@@ -122,6 +122,11 @@ export declare function composeHeatmapSettings(settings: HeatmapSettings, reacti
122
122
  valueLabels?: string | undefined;
123
123
  }[] | undefined;
124
124
  keysOrder?: Record<string, string[]> | undefined;
125
+ aggregation?: {
126
+ x?: boolean | undefined;
127
+ y?: boolean | undefined;
128
+ method?: "mean" | "median" | "min" | "max" | undefined;
129
+ } | undefined;
125
130
  annotations?: ({
126
131
  type: "continuous" | "discrete";
127
132
  valueColumn: {
@@ -1 +1 @@
1
- {"version":3,"file":"composeHeatmapSettings.d.ts","sourceRoot":"","sources":["../../../../src/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"composeHeatmapSettings.d.ts","sourceRoot":"","sources":["../../../../src/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.ts"],"names":[],"mappings":"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"}
@@ -1,42 +1,46 @@
1
- import { PALETTE_MAP as d, DEFAULT_PALETTE as A, DEFAULT_CATEGORICAL_PALETTE as T, DEFAULT_CONTINUOUS_PALETTE as h } from "../../constantsAesthetic.js";
1
+ import { PALETTE_MAP as d, DEFAULT_PALETTE as A, DEFAULT_CATEGORICAL_PALETTE as h, DEFAULT_CONTINUOUS_PALETTE as T } from "../../constantsAesthetic.js";
2
2
  import "vue";
3
- import { getAxesDataFromForms as E } from "./getAxesDataFromForms.js";
3
+ import { getAxesDataFromForms as g } from "./getAxesDataFromForms.js";
4
4
  import "../../../node_modules/@milaboratories/pf-plots/dist/index.js";
5
- function y(l, e) {
6
- var s, n;
7
- const r = {}, i = (s = e.dataBindAes[l.valueColumn.value]) == null ? void 0 : s.palette;
8
- if ((l == null ? void 0 : l.valueType) !== "discrete") {
9
- if (e.template === "heatmapClustered") {
10
- const o = e.layersSettings.heatmapClustered;
11
- o.disableClusteringX || (l.dendrogramX = {
5
+ function C(e, l) {
6
+ var n, s;
7
+ const r = {}, i = (n = l.dataBindAes[e.valueColumn.value]) == null ? void 0 : n.palette;
8
+ if ((e == null ? void 0 : e.valueType) !== "discrete") {
9
+ if (l.template === "heatmapClustered") {
10
+ const a = l.layersSettings.heatmapClustered;
11
+ a.disableClusteringX || (e.dendrogramX = {
12
12
  fillNA: 0,
13
13
  showNodes: !1,
14
- hidden: !o.dendrogramX
15
- }), o.disableClusteringY || (l.dendrogramY = {
14
+ hidden: !a.dendrogramX
15
+ }), a.disableClusteringY || (e.dendrogramY = {
16
16
  fillNA: 0,
17
17
  position: "right",
18
18
  showNodes: !1,
19
- hidden: !o.dendrogramY
19
+ hidden: !a.dendrogramY
20
20
  });
21
21
  }
22
22
  r.colorsList = d[i ?? A].colors;
23
23
  } else
24
24
  r.colorsList = d[i ?? "bright"].colors;
25
- l.aes = r, (n = l.annotations) == null || n.forEach((o) => {
25
+ e.aes = r, (s = e.annotations) == null || s.forEach((a) => {
26
26
  var c;
27
- const p = o.valueColumn.value, u = (c = e.dataBindAes[p]) == null ? void 0 : c.palette, f = o.type === "discrete" ? T : h;
28
- o.colors = d[u ?? f].colors;
27
+ const u = a.valueColumn.value, p = (c = l.dataBindAes[u]) == null ? void 0 : c.palette, f = a.type === "discrete" ? h : T;
28
+ a.colors = d[p ?? f].colors;
29
29
  }), Object.assign(
30
- l,
31
- E(e.axesSettings, e.chartType)
32
- ), e.axesSettings.axisX.cellSize !== null && l.size && (l.size.cellWidth = e.axesSettings.axisX.cellSize), e.axesSettings.axisY.cellSize !== null && l.size && (l.size.cellHeight = e.axesSettings.axisY.cellSize), e.template === "heatmapClustered" && (l == null ? void 0 : l.valueType) !== "discrete" && (l.facetSettings.sharedX = !1, l.facetSettings.sharedY = !1);
33
- const m = e.template, a = e.layersSettings[m];
34
- return l.NAValueAs = a.NAValueAs, l.valueType === "continuous" && a.normalizationDirection && (l.normalization = {
35
- method: a.normalizationMethod,
36
- direction: a.normalizationDirection
37
- }), e.axesSettings.other.canvasRenderMode && (l.cellsRenderingMode = "canvas"), console.log("settings.cellsRenderingMode", l.cellsRenderingMode), l;
30
+ e,
31
+ g(l.axesSettings, l.chartType)
32
+ ), l.axesSettings.axisX.cellSize !== null && e.size && (e.size.cellWidth = l.axesSettings.axisX.cellSize), l.axesSettings.axisY.cellSize !== null && e.size && (e.size.cellHeight = l.axesSettings.axisY.cellSize), l.template === "heatmapClustered" && (e == null ? void 0 : e.valueType) !== "discrete" && (e.facetSettings.sharedX = !1, e.facetSettings.sharedY = !1);
33
+ const m = l.template, o = l.layersSettings[m];
34
+ return e.NAValueAs = o.NAValueAs, e.valueType === "continuous" && o.normalizationDirection && (e.normalization = {
35
+ method: o.normalizationMethod,
36
+ direction: o.normalizationDirection
37
+ }), e.valueType === "continuous" && (o.aggregateByX || o.aggregateByY) && (e.aggregation = {
38
+ x: o.aggregateByX,
39
+ y: o.aggregateByY,
40
+ method: o.aggregationMethod
41
+ }), l.axesSettings.other.canvasRenderMode && (e.cellsRenderingMode = "canvas"), console.log("settings.cellsRenderingMode", e.cellsRenderingMode), e;
38
42
  }
39
43
  export {
40
- y as composeHeatmapSettings
44
+ C as composeHeatmapSettings
41
45
  };
42
46
  //# sourceMappingURL=composeHeatmapSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"composeHeatmapSettings.js","sources":["../../../../src/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.ts"],"sourcesContent":["import { HeatmapSettings } from '@milaboratories/miplots4';\nimport {\n DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE,\n DEFAULT_PALETTE,\n PALETTE_MAP\n} from '../../constantsAesthetic';\nimport { HeatmapLayerTemplate, ReactiveState } from '../../types';\nimport { getAxesDataFromForms } from '../index';\n\nexport function composeHeatmapSettings(\n settings: HeatmapSettings,\n reactiveState: ReactiveState\n) {\n const aes = {} as Record<string, unknown>;\n const palette = reactiveState.dataBindAes[settings.valueColumn.value]?.palette;\n if (settings?.valueType !== 'discrete') {\n if (reactiveState.template === 'heatmapClustered') {\n const layer = reactiveState.layersSettings.heatmapClustered;\n if (!layer.disableClusteringX) {\n settings.dendrogramX = {\n fillNA: 0,\n showNodes: false,\n hidden: !layer.dendrogramX\n };\n }\n if (!layer.disableClusteringY) {\n settings.dendrogramY = {\n fillNA: 0,\n position: 'right',\n showNodes: false,\n hidden: !layer.dendrogramY\n };\n }\n }\n aes.colorsList = PALETTE_MAP[palette ?? DEFAULT_PALETTE].colors;\n } else {\n aes.colorsList = PALETTE_MAP[palette ?? 'bright'].colors;\n }\n\n settings.aes = aes;\n\n settings.annotations?.forEach((annotationSchema) => {\n const source = annotationSchema.valueColumn.value;\n const palette = reactiveState.dataBindAes[source]?.palette;\n const defaultPalette = annotationSchema.type === 'discrete' ? DEFAULT_CATEGORICAL_PALETTE : DEFAULT_CONTINUOUS_PALETTE;\n\n annotationSchema.colors = PALETTE_MAP[palette ?? defaultPalette].colors;\n });\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType)\n );\n\n if (reactiveState.axesSettings.axisX.cellSize !== null && settings.size) {\n settings.size.cellWidth = reactiveState.axesSettings.axisX.cellSize;\n }\n if (reactiveState.axesSettings.axisY.cellSize !== null && settings.size) {\n settings.size.cellHeight = reactiveState.axesSettings.axisY.cellSize;\n }\n if (reactiveState.template === 'heatmapClustered' && settings?.valueType !== 'discrete') {\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedX = false;\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedY = false;\n }\n\n const template = reactiveState.template as HeatmapLayerTemplate;\n const layerSettings = reactiveState.layersSettings[template];\n\n settings.NAValueAs = layerSettings.NAValueAs;\n if (settings.valueType === 'continuous' && layerSettings.normalizationDirection) {\n settings.normalization = {\n method: layerSettings.normalizationMethod,\n direction: layerSettings.normalizationDirection\n }\n }\n\n if (reactiveState.axesSettings.other.canvasRenderMode) {\n settings.cellsRenderingMode = 'canvas';\n }\n\n console.log('settings.cellsRenderingMode', settings.cellsRenderingMode)\n return settings;\n}"],"names":["composeHeatmapSettings","settings","reactiveState","aes","palette","_a","layer","PALETTE_MAP","DEFAULT_PALETTE","_b","annotationSchema","source","defaultPalette","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","getAxesDataFromForms","template","layerSettings"],"mappings":";;;;AASO,SAASA,EACdC,GACAC,GACA;;AACA,QAAMC,IAAM,CAAA,GACNC,KAAUC,IAAAH,EAAc,YAAYD,EAAS,YAAY,KAAK,MAApD,gBAAAI,EAAuD;AACvE,OAAIJ,KAAA,gBAAAA,EAAU,eAAc,YAAY;AACtC,QAAIC,EAAc,aAAa,oBAAoB;AACjD,YAAMI,IAAQJ,EAAc,eAAe;AAC3C,MAAKI,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA,IAGdA,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA;AAAA,IAGrB;AACA,IAAAH,EAAI,aAAaI,EAAYH,KAAWI,CAAe,EAAE;AAAA,EAC3D;AACE,IAAAL,EAAI,aAAaI,EAAYH,KAAW,QAAQ,EAAE;AAGpD,EAAAH,EAAS,MAAME,IAEfM,IAAAR,EAAS,gBAAT,QAAAQ,EAAsB,QAAQ,CAACC,MAAqB;;AAClD,UAAMC,IAASD,EAAiB,YAAY,OACtCN,KAAUC,IAAAH,EAAc,YAAYS,CAAM,MAAhC,gBAAAN,EAAmC,SAC7CO,IAAiBF,EAAiB,SAAS,aAAaG,IAA8BC;AAE5F,IAAAJ,EAAiB,SAASH,EAAYH,KAAWQ,CAAc,EAAE;AAAA,EACnE,IACA,OAAO;AAAA,IACLX;AAAA,IACAc,EAAqBb,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAGtEA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SAC/DA,EAAS,KAAK,YAAYC,EAAc,aAAa,MAAM,WAE3DA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SAC/DA,EAAS,KAAK,aAAaC,EAAc,aAAa,MAAM,WAE5DA,EAAc,aAAa,uBAAsBD,KAAA,gBAAAA,EAAU,eAAc,eAC1EA,EAAS,cAAoD,UAAU,IACvEA,EAAS,cAAoD,UAAU;AAG1E,QAAMe,IAAWd,EAAc,UACzBe,IAAgBf,EAAc,eAAec,CAAQ;AAE3D,SAAAf,EAAS,YAAYgB,EAAc,WAC/BhB,EAAS,cAAc,gBAAgBgB,EAAc,2BACvDhB,EAAS,gBAAgB;AAAA,IACvB,QAAQgB,EAAc;AAAA,IACtB,WAAWA,EAAc;AAAA,EAAA,IAIzBf,EAAc,aAAa,MAAM,qBACnCD,EAAS,qBAAqB,WAGhC,QAAQ,IAAI,+BAA+BA,EAAS,kBAAkB,GAC/DA;AACT;"}
1
+ {"version":3,"file":"composeHeatmapSettings.js","sources":["../../../../src/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.ts"],"sourcesContent":["import { HeatmapSettings } from '@milaboratories/miplots4';\nimport {\n DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE,\n DEFAULT_PALETTE,\n PALETTE_MAP\n} from '../../constantsAesthetic';\nimport { HeatmapLayerTemplate, ReactiveState } from '../../types';\nimport { getAxesDataFromForms } from '../index';\n\nexport function composeHeatmapSettings(\n settings: HeatmapSettings,\n reactiveState: ReactiveState\n) {\n const aes = {} as Record<string, unknown>;\n const palette = reactiveState.dataBindAes[settings.valueColumn.value]?.palette;\n if (settings?.valueType !== 'discrete') {\n if (reactiveState.template === 'heatmapClustered') {\n const layer = reactiveState.layersSettings.heatmapClustered;\n if (!layer.disableClusteringX) {\n settings.dendrogramX = {\n fillNA: 0,\n showNodes: false,\n hidden: !layer.dendrogramX\n };\n }\n if (!layer.disableClusteringY) {\n settings.dendrogramY = {\n fillNA: 0,\n position: 'right',\n showNodes: false,\n hidden: !layer.dendrogramY\n };\n }\n }\n aes.colorsList = PALETTE_MAP[palette ?? DEFAULT_PALETTE].colors;\n } else {\n aes.colorsList = PALETTE_MAP[palette ?? 'bright'].colors;\n }\n\n settings.aes = aes;\n\n settings.annotations?.forEach((annotationSchema) => {\n const source = annotationSchema.valueColumn.value;\n const palette = reactiveState.dataBindAes[source]?.palette;\n const defaultPalette = annotationSchema.type === 'discrete' ? DEFAULT_CATEGORICAL_PALETTE : DEFAULT_CONTINUOUS_PALETTE;\n\n annotationSchema.colors = PALETTE_MAP[palette ?? defaultPalette].colors;\n });\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType)\n );\n\n if (reactiveState.axesSettings.axisX.cellSize !== null && settings.size) {\n settings.size.cellWidth = reactiveState.axesSettings.axisX.cellSize;\n }\n if (reactiveState.axesSettings.axisY.cellSize !== null && settings.size) {\n settings.size.cellHeight = reactiveState.axesSettings.axisY.cellSize;\n }\n if (reactiveState.template === 'heatmapClustered' && settings?.valueType !== 'discrete') {\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedX = false;\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedY = false;\n }\n\n const template = reactiveState.template as HeatmapLayerTemplate;\n const layerSettings = reactiveState.layersSettings[template];\n\n settings.NAValueAs = layerSettings.NAValueAs;\n if (settings.valueType === 'continuous' && layerSettings.normalizationDirection) {\n settings.normalization = {\n method: layerSettings.normalizationMethod,\n direction: layerSettings.normalizationDirection\n }\n }\n\n if (settings.valueType === 'continuous' && (layerSettings.aggregateByX || layerSettings.aggregateByY)) {\n settings.aggregation = {\n x: layerSettings.aggregateByX,\n y: layerSettings.aggregateByY,\n method: layerSettings.aggregationMethod,\n }\n }\n\n if (reactiveState.axesSettings.other.canvasRenderMode) {\n settings.cellsRenderingMode = 'canvas';\n }\n\n console.log('settings.cellsRenderingMode', settings.cellsRenderingMode)\n return settings;\n}"],"names":["composeHeatmapSettings","settings","reactiveState","aes","palette","_a","layer","PALETTE_MAP","DEFAULT_PALETTE","_b","annotationSchema","source","defaultPalette","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","getAxesDataFromForms","template","layerSettings"],"mappings":";;;;AASO,SAASA,EACdC,GACAC,GACA;;AACA,QAAMC,IAAM,CAAA,GACNC,KAAUC,IAAAH,EAAc,YAAYD,EAAS,YAAY,KAAK,MAApD,gBAAAI,EAAuD;AACvE,OAAIJ,KAAA,gBAAAA,EAAU,eAAc,YAAY;AACtC,QAAIC,EAAc,aAAa,oBAAoB;AACjD,YAAMI,IAAQJ,EAAc,eAAe;AAC3C,MAAKI,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA,IAGdA,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA;AAAA,IAGrB;AACA,IAAAH,EAAI,aAAaI,EAAYH,KAAWI,CAAe,EAAE;AAAA,EAC3D;AACE,IAAAL,EAAI,aAAaI,EAAYH,KAAW,QAAQ,EAAE;AAGpD,EAAAH,EAAS,MAAME,IAEfM,IAAAR,EAAS,gBAAT,QAAAQ,EAAsB,QAAQ,CAACC,MAAqB;;AAClD,UAAMC,IAASD,EAAiB,YAAY,OACtCN,KAAUC,IAAAH,EAAc,YAAYS,CAAM,MAAhC,gBAAAN,EAAmC,SAC7CO,IAAiBF,EAAiB,SAAS,aAAaG,IAA8BC;AAE5F,IAAAJ,EAAiB,SAASH,EAAYH,KAAWQ,CAAc,EAAE;AAAA,EACnE,IACA,OAAO;AAAA,IACLX;AAAA,IACAc,EAAqBb,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAGtEA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SAC/DA,EAAS,KAAK,YAAYC,EAAc,aAAa,MAAM,WAE3DA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SAC/DA,EAAS,KAAK,aAAaC,EAAc,aAAa,MAAM,WAE5DA,EAAc,aAAa,uBAAsBD,KAAA,gBAAAA,EAAU,eAAc,eAC1EA,EAAS,cAAoD,UAAU,IACvEA,EAAS,cAAoD,UAAU;AAG1E,QAAMe,IAAWd,EAAc,UACzBe,IAAgBf,EAAc,eAAec,CAAQ;AAE3D,SAAAf,EAAS,YAAYgB,EAAc,WAC/BhB,EAAS,cAAc,gBAAgBgB,EAAc,2BACvDhB,EAAS,gBAAgB;AAAA,IACvB,QAAQgB,EAAc;AAAA,IACtB,WAAWA,EAAc;AAAA,EAAA,IAIzBhB,EAAS,cAAc,iBAAiBgB,EAAc,gBAAgBA,EAAc,kBACtFhB,EAAS,cAAc;AAAA,IACrB,GAAGgB,EAAc;AAAA,IACjB,GAAGA,EAAc;AAAA,IACjB,QAAQA,EAAc;AAAA,EAAA,IAItBf,EAAc,aAAa,MAAM,qBACnCD,EAAS,qBAAqB,WAGhC,QAAQ,IAAI,+BAA+BA,EAAS,kBAAkB,GAC/DA;AACT;"}
@@ -4,9 +4,9 @@ import { ChartHeatmap as u } from "./heatmap/index.js";
4
4
  import { ChartHistogram as m } from "./histogram/index.js";
5
5
  import { ChartScatterplot as p } from "./scatterplot/index.js";
6
6
  import { ChartScatterplotUmap as f } from "./scatterplot-umap/index.js";
7
- import { ChartBubble as d } from "./bubble/index.js";
7
+ import { ChartBubble as l } from "./bubble/index.js";
8
8
  import { DataFrame as s } from "./DataFrame.js";
9
- import { exhaustive as l } from "./utils/index.js";
9
+ import { exhaustive as d } from "./utils/index.js";
10
10
  var C = Object.defineProperty, w = (o, t, r) => t in o ? C(o, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[t] = r, i = (o, t, r) => w(o, typeof t != "symbol" ? t + "" : t, r);
11
11
  class h {
12
12
  constructor(t) {
@@ -27,8 +27,8 @@ class h {
27
27
  if (e === "histogram")
28
28
  return new m(t, r, a);
29
29
  if (e === "bubble")
30
- return new d(t, r, a);
31
- l(e, `Unknown chart type: ${e}`);
30
+ return new l(t, r, a);
31
+ d(e, `Unknown chart type: ${e}`);
32
32
  }
33
33
  static newPlot(t, r, a) {
34
34
  const e = s.from(t);
@@ -77,7 +77,7 @@ function C({ legendData: n }) {
77
77
  }) }, e.id)) }),
78
78
  n.items.map((e) => {
79
79
  if (e.type === "continuous")
80
- return /* @__PURE__ */ t.jsxs("g", { transform: `translate(${e.left},${e.top})`, children: [
80
+ return /* @__PURE__ */ t.jsxs("g", { transform: `translate(${e.left},${e.top})`, fontSize: "14px", children: [
81
81
  /* @__PURE__ */ t.jsx("text", { fontWeight: 500, fontSize: "14px", y: d, children: e.title }),
82
82
  /* @__PURE__ */ t.jsx(
83
83
  "rect",
@@ -100,8 +100,8 @@ function C({ legendData: n }) {
100
100
  !1
101
101
  ] }, e.id);
102
102
  if (e.type === "discreteColor")
103
- return /* @__PURE__ */ t.jsxs("g", { transform: `translate(${e.left},${e.top})`, children: [
104
- /* @__PURE__ */ t.jsx("text", { fontWeight: 500, fontSize: "14px", y: d, children: e.title }),
103
+ return /* @__PURE__ */ t.jsxs("g", { transform: `translate(${e.left},${e.top})`, fontSize: "14px", children: [
104
+ /* @__PURE__ */ t.jsx("text", { fontWeight: 500, y: d, children: e.title }),
105
105
  e.values.map((s, l) => /* @__PURE__ */ t.jsxs("g", { transform: `translate(0, ${l * (r + 4)})`, children: [
106
106
  /* @__PURE__ */ t.jsx(
107
107
  "rect",
@@ -1 +1 @@
1
- {"version":3,"file":"Legend.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/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})`}>\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})`}>\n <text fontWeight={500} fontSize=\"14px\" 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={BLACK}/>\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"],"names":["LEGEND_ITEM_SIZE","TITLE_POSITION","COLOR_ITEM_WIDTH_C","getLineShapePath","lineShape","POINT_SIZE","LINE_WIDTH","getAesItemStroke","fillColor","lineColor","BLACK","fill","color","AesLegendItem","aes","label","usedAes","needRenderLine","needRenderDot","needRenderRect","shape","getPointShape","lineOffset","textOffset","n","jsx","DotAesItemElement","Legend","legendData","continuousItems","item","t","value","domain","range","percent","jsxs","y","idx","size","r"],"mappings":";;;;AAMA,MAAMA,IAAmB,IACnBC,IAAiB,KACjBC,IAAqB;AAM3B,SAASC,EAAiBC,IAA2B,MAAa;AAC9D,SAAIA,MAAc,WACP,0FAEPA,MAAc,WACP,4LAEPA,MAAc,aACP,2DAEPA,MAAc,YACP,2FAEPA,MAAc,YACP,+FAEJ;AACX;AAEA,MAAMC,IAAa,GACbC,IAAa;AAEnB,SAASC,EAAiBC,GAAmBC,GAAmB;AAC5D,MAAID,MAAc;AACd,WAAOE;AAGX,QAAMC,IAAOC,EAAMJ,KAAaC,KAAa,EAAE;AAC/C,SAAIE,KAAQA,EAAK,UAAA,MAAgB,YACtBD,IAEJF,KAAaC;AACxB;AACA,SAASI,EAAc,EAAE,KAAAC,GAAK,OAAAC,GAAO,SAAAC,KAA4F;AAC7H,QAAMC,IAAiBD,EAAQ,WACzBE,IAAgBF,EAAQ,UACxBG,IAAiBH,EAAQ,aAC1BA,EAAQ,aAAa,CAACA,EAAQ,aAC9BA,EAAQ,WAAW,CAACA,EAAQ,UAE3BI,IAAQF,IAAgBG;AAAAA,IAC1BP,EAAI,YAAY;AAAA,IAChBT;AAAAA,IACAc,IAAiBT,IAAQI,EAAI,WAAWJ;AAAAA,EAAA,IACxC,MAEEY,KAAcJ,KAAiBD,IAAiB,IAAIjB,IAAmB,KAAM,GAC7EuB,IAAaN,IAAiBK,IAAahB,IAAa,IAAIN,IAAmB;AACrF,SAAAwB,gBAAAA,EAAA,KACK,KAAA,EACI,UAAA;AAAA,IAAAL,KACGM,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,OAAOzB;AAAAA,QACP,QAAQA;AAAAA,QACR,QAAQO,EAAiBO,EAAI,WAAWA,EAAI,SAAS;AAAA,QACrD,MAAMA,EAAI,aAAaA,EAAI;AAAA,QAC3B,IAAG;AAAA,QACH,IAAG;AAAA,MAAA;AAAA,IAAA;AAAA,IAGVI,KAAiBO,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAW,aAAazB,IAAmB,CAAC,IAAIA,IAAmB,CAAC,KACpF,UAAAoB,GACL;AAAA,IACCH,KACGQ,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,aAAaH,CAAU;AAAA,QAClC,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAGnB,EAAiBW,EAAI,SAAS;AAAA,QACjC,MAAMA,EAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAGlBW,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAGF;AAAAA,QACH,GAAGvB,IAAmB;AAAA,QACtB,kBAAiB;AAAA,QACjB,YAAY;AAAA,QAEX,UAAAe;AAAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAET;AAER;AAEA,SAASW,EAAkB,EAAC,KAAAZ,GAAK,OAAAC,EAAAA,GAA0C;AACvE,QAAMK,IAAQC,EAAcP,EAAI,OAAOA,EAAI,MAAMA,EAAI,KAAK;AAE1D,SAAAU,gBAAAA,EAAA,KACK,KAAA,EACG,UAAA;AAAA,IAAAC,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAW,aAAazB,IAAmB,CAAC,IAAIA,IAAmB,CAAC,KAAM,UAAAoB,GAAM;AAAA,IACnFK,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAGzB,IAAmB,GAAG,GAAGA,IAAmB,GAAG,kBAAiB,WAAU,YAAY,KAC1F,UAAAe,GACL;AAAA,EAAA,GACJ;AAER;AAEO,SAASY,EAAO,EAAC,YAAAC,KAA0B;AAE9C,QAAMC,IAAiBD,EAAW,MAAM,OAAO,CAACE,MAASA,EAAK,SAAS,YAAY;AACnF,SAAAN,gBAAAA,EAAA,KACK,KAAA,EACG,UAAA;AAAA,IAAAC,gBAAAA,EAAAA,IAAC,QAAA,EACI,UAAAI,EAAgB,IAAI,CAAAE,MACjBN,gBAAAA,EAAAA,IAAC,kBAAA,EAA6B,IAAIK,EAAK,IAAI,mBAAkB,cACxD,UAAAC,EAAK,MAAM,OAAA,EAAS,QAAA,EAAU,IAAI,CAAAC,MAAS;AACxC,YAAMC,IAASH,EAAK,MAAM,OAAA,GACpBI,IAAQD,EAAOA,EAAO,SAAS,CAAC,IAAIA,EAAO,CAAC,GAC5CE,IAAUD,IAAQ,IAAI,OAAOF,IAAQC,EAAO,CAAC,KAAKC,IAAQ,MAAM;AACtE,aACIT,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAEG,QAAQ,GAAGU,CAAO;AAAA,UAClB,WAAWL,EAAK,MAAME,CAAK;AAAA,QAAA;AAAA,QAFtBA;AAAAA,MAAA;AAAA,IAKjB,CAAC,EAAA,GAZgBF,EAAK,EAa1B,CACH,GACL;AAAA,IACCF,EAAW,MAAM,IAAI,CAAAE,MAAQ;AAC1B,UAAIA,EAAK,SAAS;AACd,eACIM,gBAAAA,EAAAA,KAAC,KAAA,EAAgB,WAAW,aAAaN,EAAK,IAAI,IAAIA,EAAK,GAAG,KAC1D,UAAA;AAAA,UAAAL,gBAAAA,EAAAA,IAAC,QAAA,EAAK,YAAY,KAAK,UAAS,QAAO,GAAGxB,GAAiB,UAAA8B,EAAK,OAAM;AAAA,UACtEN,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG,GAAE;AAAA,cACF,GAAE;AAAA,cACF,OAAOvB;AAAAA,cACP,QAAQ4B,EAAK;AAAA,cACb,QAAQpB;AAAAA,cACR,MAAM,QAAQoB,EAAK,EAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAEzBL,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAW,aAAavB,CAAkB,OACxC,UAAA4B,EAAK,OAAO,IAAI,CAAAE,MAAS;AACtB,kBAAMK,IAAIP,EAAK,kBAAkBE,CAAK,KAAK;AAC3C,mBACII,gBAAAA,EAAAA,KAAC,KAAA,EAAc,WAAW,eAAeC,CAAC,KACtC,UAAA;AAAA,cAAAZ,gBAAAA,MAAC,QAAA,EAAK,IAAG,KAAI,IAAI,IAAI,QAAQf,GAAO;AAAA,cAAAc,gBAAAA,EAAA,IACnC,QAAA,EAAK,GAAG,GAAG,GAAG,GAAI,UAAAQ,GAAM;AAAA,YAAA,EAAA,GAFrBA,CAGR;AAAA,UAER,CAAC,GACL;AAAA,UACC;AAAA,QAAA,EAAiF,GArB9EF,EAAK,EAsBb;AAGR,UAAIA,EAAK,SAAS;AACd,eACIM,gBAAAA,EAAAA,KAAC,KAAA,EAAgB,WAAW,aAAaN,EAAK,IAAI,IAAIA,EAAK,GAAG,KAC1D,UAAA;AAAA,UAAAL,gBAAAA,EAAAA,IAAC,QAAA,EAAK,YAAY,KAAK,UAAS,QAAO,GAAGxB,GAAiB,UAAA8B,EAAK,OAAM;AAAA,UACrED,EAAK,OAAO,IAAI,CAACE,GAAOM,MAAAA,gBAAAA,EAAAA,KACb,KAAA,EAAc,WAAW,gBAAgBA,KAAOtC,IAAmB,EAAE,KACzE,UAAA;AAAA,YAAAyB,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACG,GAAE;AAAA,gBACF,GAAE;AAAA,gBACF,OAAOzB;AAAAA,gBACP,QAAQA;AAAAA,gBACR,MAAM8B,EAAK,MAAME,CAAK;AAAA,gBACtB,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,QAAQtB;AAAAA,cAAA;AAAA,YAAA;AAAA,YAEZe,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAGzB,IAAmB,GAAG,GAAG,IAAK,UAAA8B,EAAK,OAAOE,CAAK,KAAKA,GAAM;AAAA,UAAA,EAAA,GAXxDA,CAYf,CACH;AAAA,UACA;AAAA,QAAA,EAAiF,GAjB9EF,EAAK,EAkBb;AAGR,UAAIA,EAAK,SAAS;AACd,eACIM,gBAAAA,EAAAA,KAAC,KAAA,EAAgB,WAAW,aAAaN,EAAK,IAAI,IAAIA,EAAK,GAAG,KAAK,UAAS,QAAO,YAAY,KAC3F,UAAA;AAAA,UAAAL,gBAAAA,MAAC,QAAA,EAAK,YAAY,KAAK,GAAGxB,GACrB,YAAK,MAAA,CACV;AAAA,UACC6B,EAAK,OAAO,IAAI,CAACE,GAAOM,4BAEhB,KAAA,EAAc,WAAW,gBAAgBA,KAAOtC,IAAmB,EAAE,KAClE,UAAAyB,gBAAAA,EAAAA;AAAAA,YAACZ;AAAAA,YAAA;AAAA,cACG,KAAKiB,EAAK,MAAME,CAAK;AAAA,cACrB,OAAOF,EAAK,OAAOE,CAAK;AAAA,cACxB,SAASF,EAAK;AAAA,YAAA;AAAA,UAAA,EAAA,GAJdE,CAMR,CAEP;AAAA,UACA;AAAA,QAAA,EAAkF,GAf/EF,EAAK,EAgBb;AAGR,UAAIA,EAAK,SAAS;AACd,eACIM,gBAAAA,EAAAA,KAAC,KAAA,EAAgB,WAAW,aAAaN,EAAK,IAAI,IAAIA,EAAK,GAAG,KAAK,UAAS,QAAO,YAAY,KAC3F,UAAA;AAAA,UAAAL,gBAAAA,MAAC,QAAA,EAAK,YAAY,KAAK,GAAGxB,GACrB,YAAK,MAAA,CACV;AAAA,UACC6B,EAAK,OAAO,IAAI,CAACE,GAAOM,MAEjBb,gBAAAA,EAAAA,IAAC,KAAA,EAAc,WAAW,gBAAgBa,KAAOtC,IAAmB,EAAE,KAClE,UAAAyB,gBAAAA,EAAAA,IAACC,GAAA,EAAkB,KAAKI,EAAK,MAAME,CAAK,GAAG,OAAOF,EAAK,OAAOE,CAAK,EAAA,CAAG,EAAA,GADlEA,CAER,CAEP;AAAA,UACA;AAAA,QAAA,EAAkF,GAX/EF,EAAK,EAYb;AAGR,UAAIA,EAAK,SAAS,QAAQ;AACtB,cAAMS,IAAOT,EAAK,SAASA,EAAK,OAAO;AACvC,eACIM,gBAAAA,EAAAA,KAAC,KAAA,EAAgB,WAAW,aAAaN,EAAK,IAAI,IAAIA,EAAK,GAAG,KAAK,UAAS,QAAO,YAAY,KAC3F,UAAA;AAAA,UAAAL,gBAAAA,MAAC,QAAA,EAAK,YAAY,KAAK,GAAGxB,GACrB,YAAK,MAAA,CACV;AAAA,UACC6B,EAAK,OAAO,IAAI,CAACE,GAAOM,MAAQ;AAC7B,kBAAME,IAAIV,EAAK,MAAME,CAAK;AAC1B,mBAAAR,gBAAAA,EAAA,KACK,KAAA,EAAc,WAAW,gBAAgBc,IAAMC,CAAI,KAChD,UAAA;AAAA,cAAAd,gBAAAA,EAAAA,IAAC,UAAA,EAAO,GAAAe,GAAM,IAAID,IAAO,GAAG,IAAIA,IAAO,GAAG,MAAM7B,GAAM;AAAA,cACtDe,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAGc,IAAO,GAAG,GAAGA,IAAO,GAAG,mBAAkB,WAAW,UAAAT,EAAK,OAAOE,CAAK,GAAE;AAAA,YAAA,EAAA,GAF5EA,CAGR;AAAA,UAER,CAAC;AAAA,UACA;AAAA,QAAA,EAAkF,GAb/EF,EAAK,EAcb;AAAA,MAER;AAAA,IACJ,CAAC;AAAA,EAAA,GACL;AAER;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Legend.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/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={BLACK}/>\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"],"names":["LEGEND_ITEM_SIZE","TITLE_POSITION","COLOR_ITEM_WIDTH_C","getLineShapePath","lineShape","POINT_SIZE","LINE_WIDTH","getAesItemStroke","fillColor","lineColor","BLACK","fill","color","AesLegendItem","aes","label","usedAes","needRenderLine","needRenderDot","needRenderRect","shape","getPointShape","lineOffset","textOffset","n","jsx","DotAesItemElement","Legend","legendData","continuousItems","item","t","value","domain","range","percent","jsxs","y","idx","size","r"],"mappings":"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","x_google_ignoreList":[0]}
@@ -20,7 +20,7 @@ import N from "../node_modules/d3-scale/src/linear.js";
20
20
  import bt from "../node_modules/d3-array/src/extent.js";
21
21
  import tt from "../node_modules/d3-hierarchy/src/cluster.js";
22
22
  var At = Object.defineProperty, Gt = (m, s, e) => s in m ? At(m, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : m[s] = e, A = (m, s, e) => Gt(m, typeof s != "symbol" ? s + "" : s, e);
23
- const zt = Math.cos(Math.PI / 4), Et = 5;
23
+ const zt = Math.cos(Math.PI / 4), Lt = 5;
24
24
  function et(m, s, e) {
25
25
  function t(r) {
26
26
  r[e] = s(r.data.height), r.children && r.children.forEach(t);
@@ -33,7 +33,7 @@ function st(m, s, e, t = e) {
33
33
  }
34
34
  r(m);
35
35
  }
36
- const Lt = (m, s) => {
36
+ const Et = (m, s) => {
37
37
  const e = Math.min(...s), t = Math.max(...s);
38
38
  if (e === t) {
39
39
  const n = m % 2 === 0 ? [] : [e];
@@ -50,7 +50,7 @@ const Lt = (m, s) => {
50
50
  };
51
51
  function it(m, s, e) {
52
52
  let t = e;
53
- return m && (m.colorRange && (t = m.colorRange), m.method === "standardScaling" && (t = [-2, 2]), m.method === "meanNormalization" && (t = [-0.75, 0.75])), Lt(s, t);
53
+ return m && (m.colorRange && (t = m.colorRange), m.method === "standardScaling" && (t = [-2, 2]), m.method === "meanNormalization" && (t = [-0.75, 0.75])), Et(s, t);
54
54
  }
55
55
  function k(m, s, e) {
56
56
  let t = 0;
@@ -62,7 +62,7 @@ function k(m, s, e) {
62
62
  return t;
63
63
  }
64
64
  function F(m, s) {
65
- return s === 90 ? m : s === 45 ? m * zt + (m > 0 ? 2 * Et : 0) : Y;
65
+ return s === 90 ? m : s === 45 ? m * zt + (m > 0 ? 2 * Lt : 0) : Y;
66
66
  }
67
67
  class Yt {
68
68
  constructor() {
@@ -159,22 +159,22 @@ class Yt {
159
159
  this.legend = { width: 0, height: 0, items: [] };
160
160
  return;
161
161
  }
162
- const d = ct(l, this.chartSizes.chartHeight), p = d[d.length - 1], E = p.left + p.width + mt;
162
+ const d = ct(l, this.chartSizes.chartHeight), p = d[d.length - 1], L = p.left + p.width + mt;
163
163
  this.legend = {
164
- width: E,
164
+ width: L,
165
165
  height: n,
166
166
  items: d
167
167
  };
168
168
  }
169
169
  updateCaptionsSize(s, e, t, r) {
170
- const o = new dt("bold 16px Manrope"), { xGroupKeys: n, yGroupKeys: l, xGroupLabels: u, yGroupLabels: f, xKeysByGroups: d, yKeysByGroups: p, xLabels: E, yLabels: c } = s.meta;
170
+ const o = new dt("bold 16px Manrope"), { xGroupKeys: n, yGroupKeys: l, xGroupLabels: u, yGroupLabels: f, xKeysByGroups: d, yKeysByGroups: p, xLabels: L, yLabels: c } = s.meta;
171
171
  this.labelAngles = {
172
172
  xAxisLabels: e.axisLabelsAngle,
173
173
  yAxisLabels: t.axisLabelsAngle,
174
174
  xGroupLabels: e.groupLabelsAngle,
175
175
  yGroupLabels: t.groupLabelsAngle
176
176
  };
177
- const h = n.reduce((C, g) => Math.max(C, k(d[g], E, o)), 0), i = l.reduce((C, g) => Math.max(C, k(p[g], c, o)), 0), a = k(n, u, o), y = k(l, f, o), { xCaptionTail: x, yCaptionTail: T } = Ct(
177
+ const h = n.reduce((C, g) => Math.max(C, k(d[g], L, o)), 0), i = l.reduce((C, g) => Math.max(C, k(p[g], c, o)), 0), a = k(n, u, o), y = k(l, f, o), { xCaptionTail: x, yCaptionTail: T } = Ct(
178
178
  this.labelAngles,
179
179
  r,
180
180
  this.scales,
@@ -192,8 +192,8 @@ class Yt {
192
192
  };
193
193
  }
194
194
  updateChartDimensions(s, e, t, r, o, n, l, u, f, d) {
195
- const p = e.length, E = Math.min(o.nRows ?? p, p), c = Math.min(o.nCols ?? p, p);
196
- this.columnsCount = o.nRows ? Math.ceil(p / E) : c, this.rowsCount = Math.ceil(p / this.columnsCount);
195
+ const p = e.length, L = Math.min(o.nRows ?? p, p), c = Math.min(o.nCols ?? p, p);
196
+ this.columnsCount = o.nRows ? Math.ceil(p / L) : c, this.rowsCount = Math.ceil(p / this.columnsCount);
197
197
  const { sharedX: h, sharedY: i } = o;
198
198
  this.chartsDimensions = {};
199
199
  let a = 0, y = 0;
@@ -221,20 +221,20 @@ class Yt {
221
221
  s.innerOffset
222
222
  );
223
223
  }
224
- const L = {
224
+ const E = {
225
225
  left: v("left"),
226
226
  right: v("right"),
227
227
  top: v("top"),
228
228
  bottom: v("bottom")
229
229
  };
230
- L.left < this.captionsSizes.xCaptionTail && (L.left = this.captionsSizes.xCaptionTail), L.bottom < this.captionsSizes.yCaptionTail && (L.bottom = this.captionsSizes.yCaptionTail);
231
- const D = yt(w, this.chartSizes.chartWidth, this.chartSizes.chartHeight), R = this.chartSizes.chartWidth + L.left + L.right, _ = this.chartSizes.chartHeight + L.top + L.bottom;
230
+ E.left < this.captionsSizes.xCaptionTail && (E.left = this.captionsSizes.xCaptionTail), E.bottom < this.captionsSizes.yCaptionTail && (E.bottom = this.captionsSizes.yCaptionTail);
231
+ const D = yt(w, this.chartSizes.chartWidth, this.chartSizes.chartHeight), R = this.chartSizes.chartWidth + E.left + E.right, _ = this.chartSizes.chartHeight + E.top + E.bottom;
232
232
  this.chartsDimensions[C] = {
233
233
  left: a,
234
234
  top: y,
235
235
  inner: { width: this.chartSizes.chartWidth, height: this.chartSizes.chartHeight },
236
236
  outer: { width: R, height: _ },
237
- padding: L,
237
+ padding: E,
238
238
  sideElementBBoxes: D,
239
239
  chartEdgeSides: S
240
240
  }, a += R, b === this.columnsCount && (a = 0, y += _);
@@ -257,13 +257,13 @@ class Yt {
257
257
  }
258
258
  // update scales for cell positions, x and y for each facet
259
259
  updateScales(s, e, t, r, o, n, l, u, f, d) {
260
- const { width: p, height: E, cellWidth: c, cellHeight: h } = o, { meta: i, facets: a } = e, { sharedX: y, sharedY: x } = r, T = (g, b = {}) => g.sort(
260
+ const { width: p, height: L, cellWidth: c, cellHeight: h } = o, { meta: i, facets: a } = e, { sharedX: y, sharedY: x } = r, T = (g, b = {}) => g.sort(
261
261
  (S, G) => n.sorting === "asc" ? (b[S] ?? S).localeCompare(b[G] ?? G, "en", { numeric: !0 }) : (b[G] ?? G).localeCompare(b[S] ?? S, "en", { numeric: !0 })
262
262
  ), C = (g, b = {}) => g.sort(
263
263
  (S, G) => l.sorting === "asc" ? (b[S] ?? S).localeCompare(b[G] ?? G, "en", { numeric: !0 }) : (b[G] ?? G).localeCompare(b[S] ?? S, "en", { numeric: !0 })
264
264
  );
265
265
  s.forEach((g) => {
266
- const b = a[g], S = d.xGroup ? i.xGroupKeys : T(i.xGroupKeys), G = d.yGroup ? i.yGroupKeys : C(i.yGroupKeys), { xKeysByGroups: M } = y ? i : b, { yKeysByGroups: w } = x ? i : b, H = S.map((z) => M[z].length), v = G.map((z) => w[z].length), L = H.reduce((z, K) => z + K, 0), D = v.reduce((z, K) => z + K, 0), R = y && c ? c : (p - (H.filter((z) => z > 0).length - 1) * t) / L, _ = x && h ? h : (E - (v.filter((z) => z > 0).length - 1) * t) / D, B = [], O = [];
266
+ const b = a[g], S = d.xGroup ? i.xGroupKeys : T(i.xGroupKeys), G = d.yGroup ? i.yGroupKeys : C(i.yGroupKeys), { xKeysByGroups: M } = y ? i : b, { yKeysByGroups: w } = x ? i : b, H = S.map((z) => M[z].length), v = G.map((z) => w[z].length), E = H.reduce((z, K) => z + K, 0), D = v.reduce((z, K) => z + K, 0), R = y && c ? c : (p - (H.filter((z) => z > 0).length - 1) * t) / E, _ = x && h ? h : (L - (v.filter((z) => z > 0).length - 1) * t) / D, B = [], O = [];
267
267
  let $ = 0;
268
268
  S.forEach((z) => {
269
269
  const K = u || d.x ? M[z] : T(M[z], i.xLabels);
@@ -290,8 +290,8 @@ class Yt {
290
290
  } else t.colorsList && (this.colorScale = Z(t.colorsList, n.map(String)));
291
291
  const { xDataByKeys: u, yDataByKeys: f } = o.meta;
292
292
  r.forEach((d) => {
293
- const { colors: p, type: E, axis: c, valueColumn: h } = d, i = (c === "x" ? u : f)[h.value];
294
- if (E === "discrete") {
293
+ const { colors: p, type: L, axis: c, valueColumn: h } = d, i = (c === "x" ? u : f)[h.valueLabels ?? h.value];
294
+ if (L === "discrete") {
295
295
  const a = ot.uniq(Object.values(i).map(String)).sort();
296
296
  this.annotationColorScales[d.id] = {
297
297
  type: "discrete",
@@ -312,7 +312,7 @@ class Yt {
312
312
  updateDendrogram(s, e, t, r, o, n, l) {
313
313
  s.forEach((u) => {
314
314
  this.dendrograms[u] = { x: { treesByGroupKey: {}, data: n }, y: { treesByGroupKey: {}, data: l } };
315
- const { xKeysByGroups: f, yKeysByGroups: d } = r[u], { hierarchyByGroupX: p, hierarchyByGroupY: E } = o[u];
315
+ const { xKeysByGroups: f, yKeysByGroups: d } = r[u], { hierarchyByGroupX: p, hierarchyByGroupY: L } = o[u];
316
316
  if (n) {
317
317
  const c = e.reduce((h, i) => {
318
318
  var a;
@@ -330,10 +330,10 @@ class Yt {
330
330
  if (l) {
331
331
  const c = t.reduce((h, i) => {
332
332
  var a;
333
- return Math.max(h, (a = E[i]) == null ? void 0 : a.data.height);
333
+ return Math.max(h, (a = L[i]) == null ? void 0 : a.data.height);
334
334
  }, 0);
335
335
  this.dendrograms[u].y.treesByGroupKey = t.reduce((h, i) => {
336
- const a = E[i], y = d[i];
336
+ const a = L[i], y = d[i];
337
337
  tt().separation(() => 1).size([y.length * this.step.y[u], l.size])(
338
338
  a
339
339
  );
@@ -357,10 +357,10 @@ class Yt {
357
357
  ).unknown(Q), t;
358
358
  }, {});
359
359
  }
360
- render(s, e, t, r, o, n, l, u, f, d, p, E, c, h, i, a, y) {
360
+ render(s, e, t, r, o, n, l, u, f, d, p, L, c, h, i, a, y) {
361
361
  var x;
362
- const { meta: T, facets: C } = n, { facetKeys: g, xGroupKeys: b, yGroupKeys: S, valueExtent: G } = T, { xAxis: M, yAxis: w, title: H, size: v, valueType: L } = t;
363
- this.updateChartsSizes(v, r, n, o.groupGap), this.updateAesScale(L, G, o, l, n, c, h), this.updateScales(g, n, o.groupGap, r, v, t.xAxis, t.yAxis, f, d, a), this.updateCaptionsSize(n, M, w, r), this.updateChartDimensions(
362
+ const { meta: T, facets: C } = n, { facetKeys: g, xGroupKeys: b, yGroupKeys: S, valueExtent: G } = T, { xAxis: M, yAxis: w, title: H, size: v, valueType: E } = t;
363
+ this.updateChartsSizes(v, r, n, o.groupGap), this.updateAesScale(E, G, o, l, n, c, h), this.updateScales(g, n, o.groupGap, r, v, t.xAxis, t.yAxis, f, d, a), this.updateCaptionsSize(n, M, w, r), this.updateChartDimensions(
364
364
  v,
365
365
  g,
366
366
  b,
@@ -371,7 +371,7 @@ class Yt {
371
371
  l,
372
372
  f,
373
373
  d
374
- ), this.updateLegendSize(L, t.legend, l, u, G), this.updateMargins(H, v), this.updateDendrogram(g, b, S, C, p, f, d), this.updateDendrogramAesScales(E);
374
+ ), this.updateLegendSize(E, t.legend, l, u, G), this.updateMargins(H, v), this.updateDendrogram(g, b, S, C, p, f, d), this.updateDendrogramAesScales(L);
375
375
  const D = /* @__PURE__ */ I.jsx(nt, { dataFrame: s, children: /* @__PURE__ */ I.jsx(
376
376
  pt,
377
377
  {