@milaboratories/graph-maker 1.1.191 → 1.1.193

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 (53) hide show
  1. package/dist/constantsAesthetic.d.ts +0 -1
  2. package/dist/constantsAesthetic.js +16 -17
  3. package/dist/constantsAesthetic.js.map +1 -1
  4. package/dist/dataBindAes.d.ts +5 -5
  5. package/dist/dataBindAes.js +110 -110
  6. package/dist/dataBindAes.js.map +1 -1
  7. package/dist/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js +35 -35
  8. package/dist/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
  9. package/dist/forms/LayersForm/AesSelector.vue.js +59 -59
  10. package/dist/forms/LayersForm/AesSelector.vue.js.map +1 -1
  11. package/dist/forms/LayersForm/Layer/Bubble.vue.js +41 -41
  12. package/dist/forms/LayersForm/Layer/Bubble.vue.js.map +1 -1
  13. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.js +35 -35
  14. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.js.map +1 -1
  15. package/dist/forms/LayersForm/Layer/heatmap/HeatmapAnnotations.vue.js +31 -31
  16. package/dist/forms/LayersForm/Layer/heatmap/HeatmapAnnotations.vue.js.map +1 -1
  17. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js +35 -35
  18. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js.map +1 -1
  19. package/dist/icons/StackedAreaIcon.vue.js +1 -0
  20. package/dist/icons/StackedAreaIcon.vue.js.map +1 -1
  21. package/dist/index.vue.js +94 -90
  22. package/dist/index.vue.js.map +1 -1
  23. package/dist/store.d.ts +8 -3
  24. package/dist/store.js +129 -123
  25. package/dist/store.js.map +1 -1
  26. package/dist/types.d.ts +9 -0
  27. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +2 -2
  28. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js +11 -11
  29. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
  30. package/dist/utils/createChartSettingsForRender/composeChartSettings.d.ts +2 -2
  31. package/dist/utils/createChartSettingsForRender/composeChartSettings.js +28 -28
  32. package/dist/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
  33. package/dist/utils/createChartSettingsForRender/composeDendroSettings.js +23 -20
  34. package/dist/utils/createChartSettingsForRender/composeDendroSettings.js.map +1 -1
  35. package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +2 -2
  36. package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.js +20 -18
  37. package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.js.map +1 -1
  38. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +2 -2
  39. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js +28 -28
  40. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  41. package/dist/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +2 -2
  42. package/dist/utils/createChartSettingsForRender/composeHistogramSettings.js +11 -10
  43. package/dist/utils/createChartSettingsForRender/composeHistogramSettings.js.map +1 -1
  44. package/dist/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +3 -3
  45. package/dist/utils/createChartSettingsForRender/composeScatterplotSettings.js +71 -68
  46. package/dist/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
  47. package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +2 -2
  48. package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +19 -18
  49. package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  50. package/dist/utils/createChartSettingsForRender/getLayersDataFromForms.d.ts +1 -1
  51. package/dist/utils/createChartSettingsForRender/getLayersDataFromForms.js +37 -37
  52. package/dist/utils/createChartSettingsForRender/getLayersDataFromForms.js.map +1 -1
  53. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../src/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n ErrorInfo,\n LassoControlsState,\n Settings,\n} from '@milaboratories/miplots4';\nimport {\n MiPlots,\n} from '@milaboratories/miplots4';\nimport type {\n ChartType,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n DemoDataStore, getInitialStateByType,\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 ChartErrorNotificationAlert from './components/ChartErrorNotificationAlert.vue';\nimport { useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { DendroNodeInfo, GraphMakerProps, GraphMakerState, GraphStatus } 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// 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);\nconst chartErrorInfo = ref<ErrorInfo | null>(null);\n\nconst graphStatus = computed<GraphStatus>((previuosStatus) => {\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 chartErrorInfo.value?.type === 'unknownError' ? 'unknownError' : 'knownError';\n }\n if ((state.value.loading.initialCharts || (previuosStatus !== 'ready' && state.value.loading.chartData) || state.value.loading.chartRendering)) {\n return 'loading';\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}\nlet chartRenderingInProgress: ReturnType<typeof setTimeout> | null = null;\nfunction onLoadingStateChange(v: boolean) {\n if (v) {\n chartRenderingInProgress = setTimeout(() => {\n state.value.loading.chartRendering = true;\n }, 1000);\n } else {\n if (chartRenderingInProgress) {\n clearTimeout(chartRenderingInProgress);\n }\n state.value.loading.chartRendering = false;\n }\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, onLoadingChange: onLoadingStateChange },\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 chartErrorInfo.value = chartRef.value?.errorInfo ?? null;\n } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n chartErrorInfo.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 hasAnnotationsSlot = computed(() => Boolean(slots.annotationsSlot));\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\" :graphTitle=\"graphMakerState.title\" :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\" :error-info=\"chartErrorInfo\" :dendroTooltipButton=\"tooltipButton\"\n @graph-title-update=\"updateGraphTitle\" @dendro-node-select=\"selectTreeNode\"\n @dendro-tooltip-btn-click=\"(id: string) => $emit('tooltip-btn-click', id)\"\n >\n <slot name=\"titleLineSlot\" />\n </Chart>\n <Loading v-if=\"state.loading.initialInputGuide\" :top=\"67\" :left=\"12\" :right=\"12\" :bottom=\"12\" />\n <TransitionSlidePanel v-if=\"!state.loading.initialInputGuide\" id=\"graph-settings-modal\">\n <PanelModal v-if=\"state.reactive.currentTab\" @close=\"state.reactive.currentTab = null\">\n <component :is=\"currentForm.value\">\n <slot v-if=\"state.reactive.currentTab === 'annotations'\" name=\"annotationsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'settings'\" name=\"settingsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'log'\" name=\"logSlot\" />\n </component>\n </PanelModal>\n </TransitionSlidePanel>\n </div>\n <VTabs\n v-model=\"state.reactive.currentTab\" :chart-type=\"state.reactive.chartType\" :graph-status=\"graphStatus\"\n :allowDeleting=\"allowChartDeleting\" :hasAnnotationsSlot=\"hasAnnotationsSlot\" :hasSettingsSlot=\"hasSettingsSlot\"\n :hasLogSlot=\"hasLogSlot\" :initialLoading=\"state.loading.initialInputGuide\" @export=\"onExport\"\n @delete=\"$emit('delete-this-graph')\"\n />\n <ChartErrorNotificationAlert v-if=\"chartErrorInfo?.type === 'unknownError'\" :errorInfo=\"chartErrorInfo\" />\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","chartErrorInfo","graphStatus","previuosStatus","inputGuide","chartData","_b","onTreeNodeClick","d","onTooltipHintSwitch","v","onLassoPolygonUpdate","dotIndexes","polygons","axesData","axisKeys","axisKey","idx","onLassoStateChange","chartRenderingInProgress","onLoadingStateChange","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","_e","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","zoomState","template","currentTab","dataStateKey","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasAnnotationsSlot","hasSettingsSlot","hasLogSlot","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","Chart","_cache","$emit","_renderSlot","_ctx","_unref","_createBlock","Loading","TransitionSlidePanel","PanelModal","$event","_resolveDynamicComponent","VTabs","ChartErrorNotificationAlert"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue.js","sources":["../src/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n ErrorInfo,\n LassoControlsState,\n Settings,\n} from '@milaboratories/miplots4';\nimport {\n MiPlots,\n} from '@milaboratories/miplots4';\nimport type {\n ChartType,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n DemoDataStore, getInitialStateByType,\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 ChartErrorNotificationAlert from './components/ChartErrorNotificationAlert.vue';\nimport { useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { DendroNodeInfo, GraphMakerProps, GraphMakerState, GraphStatus } 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// 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 props.defaultPalette,\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);\nconst chartErrorInfo = ref<ErrorInfo | null>(null);\n\nconst graphStatus = computed<GraphStatus>((previuosStatus) => {\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 chartErrorInfo.value?.type === 'unknownError' ? 'unknownError' : 'knownError';\n }\n if ((state.value.loading.initialCharts || (previuosStatus !== 'ready' && state.value.loading.chartData) || state.value.loading.chartRendering)) {\n return 'loading';\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}\nlet chartRenderingInProgress: ReturnType<typeof setTimeout> | null = null;\nfunction onLoadingStateChange(v: boolean) {\n if (v) {\n chartRenderingInProgress = setTimeout(() => {\n state.value.loading.chartRendering = true;\n }, 1000);\n } else {\n if (chartRenderingInProgress) {\n clearTimeout(chartRenderingInProgress);\n }\n state.value.loading.chartRendering = false;\n }\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, onLoadingChange: onLoadingStateChange },\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 chartErrorInfo.value = chartRef.value?.errorInfo ?? null;\n } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n chartErrorInfo.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 toRaw(state.value.defaultPalette),\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 toRaw(state.value.defaultPalette),\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 hasAnnotationsSlot = computed(() => Boolean(slots.annotationsSlot));\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\" :graphTitle=\"graphMakerState.title\" :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\" :error-info=\"chartErrorInfo\" :dendroTooltipButton=\"tooltipButton\"\n @graph-title-update=\"updateGraphTitle\" @dendro-node-select=\"selectTreeNode\"\n @dendro-tooltip-btn-click=\"(id: string) => $emit('tooltip-btn-click', id)\"\n >\n <slot name=\"titleLineSlot\" />\n </Chart>\n <Loading v-if=\"state.loading.initialInputGuide\" :top=\"67\" :left=\"12\" :right=\"12\" :bottom=\"12\" />\n <TransitionSlidePanel v-if=\"!state.loading.initialInputGuide\" id=\"graph-settings-modal\">\n <PanelModal v-if=\"state.reactive.currentTab\" @close=\"state.reactive.currentTab = null\">\n <component :is=\"currentForm.value\">\n <slot v-if=\"state.reactive.currentTab === 'annotations'\" name=\"annotationsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'settings'\" name=\"settingsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'log'\" name=\"logSlot\" />\n </component>\n </PanelModal>\n </TransitionSlidePanel>\n </div>\n <VTabs\n v-model=\"state.reactive.currentTab\" :chart-type=\"state.reactive.chartType\" :graph-status=\"graphStatus\"\n :allowDeleting=\"allowChartDeleting\" :hasAnnotationsSlot=\"hasAnnotationsSlot\" :hasSettingsSlot=\"hasSettingsSlot\"\n :hasLogSlot=\"hasLogSlot\" :initialLoading=\"state.loading.initialInputGuide\" @export=\"onExport\"\n @delete=\"$emit('delete-this-graph')\"\n />\n <ChartErrorNotificationAlert v-if=\"chartErrorInfo?.type === 'unknownError'\" :errorInfo=\"chartErrorInfo\" />\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","chartErrorInfo","graphStatus","previuosStatus","inputGuide","chartData","_b","onTreeNodeClick","d","onTooltipHintSwitch","v","onLassoPolygonUpdate","dotIndexes","polygons","axesData","axisKeys","axisKey","idx","onLassoStateChange","chartRenderingInProgress","onLoadingStateChange","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","_e","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","zoomState","template","currentTab","dataStateKey","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasAnnotationsSlot","hasSettingsSlot","hasLogSlot","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","Chart","_cache","$emit","_renderSlot","_ctx","_unref","_createBlock","Loading","TransitionSlidePanel","PanelModal","$event","_resolveDynamicComponent","VTabs","ChartErrorNotificationAlert"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,UAAMA,IAAkBC,iBAA+C,GACjEC,IAAiBD,EAA6BE,GAAC,WAAW,GAE1DC,IAAQD;AAEd,IAAAE,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,OAAAC;AAAA;AAAA;AAAA;AAAA,MAIA,eAAAC;AAAA,IAAA,CACD;AAED,UAAMC,IAAYC,EAA0B,IAAI;AAEhD,IAAAC,EAAM,MAAMN,EAAM,QAAQ,CAACO,MAAgB;;AACzC,UAAI,CAACA;AACH;AAEF,YAAMC,IAAU,eAAe,UAAUC,IAAA,OAAO,cAAP,gBAAAA,EAAkB,eAA+BT,EAAM;AAChG,UAAI,CAACQ;AACH,cAAM,IAAI,MAAM,0BAA0B;AAE5C,MAAAJ,EAAU,QAAQ,IAAIM;AAAA,QACpBH;AAAA,QACAC;AAAA,QACAR,EAAM;AAAA,MAAA;AAAA,IAEV,GAAG,EAAE,WAAW,IAAM;AAGtB,UAAMW,IAAeN,EAA+BL,EAAM,gBAAgB,CAAA,CAAE;AAC5E,IAAAM,EAAM,MAAMN,EAAM,cAAc,CAACY,GAAOC,MAAa;AACnD,OACGD,KAASC,KAAY,KAAK,UAAUD,CAAK,MAAM,KAAK,UAAUC,CAAQ,KACnED,KAAS,CAACC,KACVA,KAAY,CAACD,OAEjBD,EAAa,QAAQC;AAAA,IAEzB,GAAG,EAAE,MAAM,IAAM;AACjB,UAAME,IAAiBT,EAAiCL,EAAM,cAAc,GAEtEe,IAAQC;AAAA,MACZC,EAAMrB,EAAgB,KAAK;AAAA,MAC3BQ;AAAA,MACAJ,EAAM;AAAA,MACNc;AAAA,MACAH;AAAA,MACAX,EAAM;AAAA,MACNA,EAAM;AAAA,MACNA,EAAM;AAAA,IAAA;AAGR,aAASE,IAAQ;AACf,YAAMgB,IAAoBC;AAAA,QACxBF,EAAMrB,EAAgB,KAAK;AAAA,QAC3BI,EAAM;AAAA,MAAA;AAER,aAAO,OAAOe,EAAM,MAAM,UAAUG,CAAiB,GACrD,OAAO,OAAOH,EAAM,MAAM,SAAS;AAAA,QACjC,mBAAmB;AAAA,QACnB,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA,CACZ,GACDD,EAAe,QAAQd,EAAM;AAAA,IAC/B;AAEA,aAASG,IAAgB;AACvB,aAAO,OAAOY,EAAM,MAAM,SAAS;AAAA,QACjC,mBAAmB;AAAA,QACnB,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA,CACZ,GACDD,EAAe,QAAQd,EAAM,iBAAiB,CAAC,GAAGA,EAAM,cAAc,IAAmC,CAAA;AAAA,IAC3G;AAEA,UAAMoB,IAAcC,EAAS,MAAMN,EAAM,MAAM,SAAS,YAAY;AACpE,IAAAT,EAAM,MAAMgB,GAAatB,EAAM,YAAY,GAAG,CAACuB,MAAa;AAC1D,WAAKA,MAAa,UAAaH,EAAY,UAAU,WAAcA,EAAY,UAAUG,GAAU;AACjG,QAAA3B,EAAgB,MAAM,eAAe4B,EAASC,GAAsBzB,EAAM,SAAS,CAAC;AACpF,cAAMkB,IAAoBC,EAAoBF,EAAMrB,EAAgB,KAAK,GAAGI,EAAM,SAAS;AAC3F,eAAO,OAAOe,EAAM,MAAM,UAAUG,CAAiB,GACrD,OAAO,OAAOH,EAAM,MAAM,SAAS;AAAA,UACjC,mBAAmB;AAAA,UACnB,eAAe;AAAA,UACf,iBAAiB;AAAA,UACjB,YAAY;AAAA,UACZ,WAAW;AAAA,QAAA,CACZ,GACDD,EAAe,QAAQd,EAAM,iBAAiB,CAAC,GAAGA,EAAM,cAAc,IAAmC,CAAA;AAAA,MAC3G;AACA,MAAAe,EAAM,MAAM,SAAS,eAAeQ;AAAA,IACtC,GAAG,EAAE,MAAM,IAAM,WAAW,IAAM;AAElC,UAAMG,IAAcL,EAAS,MAAMM,GAAgBZ,EAAM,MAAM,SAAS,UAAU,CAAC,GAE7Ea,IAAWC,EAAkC,IAAI,GACjDC,IAAyBzB,EAAoC,IAAI,GACjE0B,IAAa1B,EAAI,EAAK,GACtB2B,IAAiB3B,EAAsB,IAAI,GAE3C4B,IAAcZ,EAAsB,CAACa,MAAmB;;AAC5D,YAAMC,IAAapB,EAAM,MAAM,WAAW,OACpCqB,IAAYrB,EAAM,MAAM,UAAU;AACxC,aAAKoB,EAAW,aAGXA,EAAW,QAGZC,OAAa3B,IAAA,OAAO,OAAO2B,EAAU,KAAK,UAAU,MAAM,EAAE,CAAC,MAAhD,gBAAA3B,EAAmD,YAAW,IACtE,UAELsB,EAAW,UACNM,IAAAL,EAAe,UAAf,gBAAAK,EAAsB,UAAS,iBAAiB,iBAAiB,eAErEtB,EAAM,MAAM,QAAQ,iBAAkBmB,MAAmB,WAAWnB,EAAM,MAAM,QAAQ,aAAcA,EAAM,MAAM,QAAQ,iBACtH,YAEF,UAXE,aAHA;AAAA,IAeX,CAAC;AACD,aAASuB,EAAgBC,GAAmB;;AAC1C,MAAAxB,EAAM,MAAM,SAAS,wBAAuBN,IAAA8B,KAAA,gBAAAA,EAAG,KAAK,OAAR,gBAAA9B,EAAY,IACxDM,EAAM,MAAM,SAAS,oBAAoBwB;AAAA,IAC3C;AAEA,aAASC,EAAoBC,GAAY;AACvC,MAAA1B,EAAM,MAAM,SAAS,kBAAkB0B;AAAA,IACzC;AAEA,aAASC,EAAqBC,GAAsBC,GAA6D;;AAC/G,MAAAhD,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,kBAAkBgD;AAAA,MAAA;AAGpB,YAAMC,KAAWR,KAAA5B,IAAAM,EAAM,MAAM,UAAU,UAAtB,gBAAAN,EAA6B,SAA7B,gBAAA4B,EAAmC;AACpD,UAAIM,EAAW,WAAW,KAAK,CAACE,GAAU;AACxC,QAAA/C,EAAe,QAAQ,EAAE,UAAU,CAAA,GAAI,cAAc,CAAA,EAAC;AACtD;AAAA,MACF;AAEA,YAAMgD,IAAW,OAAO,KAAKD,CAAQ,GAC/BV,IAAapB,EAAM,MAAM,WAAW;AAC1C,MAAAjB,EAAe,QAAQ;AAAA,QACrB,UAAUgD,EAAS,IAAI,CAACC,MAAYZ,EAAW,cAAcY,CAAO,EAAE,IAAgB;AAAA,QACtF,cAAcJ,EAAW,IAAI,CAACK,MAAQF,EAAS,IAAI,CAACC,OAAYF,EAASE,EAAO,EAAEC,CAAG,CAAC,CAAc;AAAA,MAAA;AAAA,IAExG;AAEA,aAASC,EAAmBR,GAAuB;AACjD,MAAA1B,EAAM,MAAM,SAAS,qBAAqB0B;AAAA,IAC5C;AACA,QAAIS,IAAiE;AACrE,aAASC,EAAqBV,GAAY;AACxC,MAAIA,IACFS,IAA2B,WAAW,MAAM;AAC1C,QAAAnC,EAAM,MAAM,QAAQ,iBAAiB;AAAA,MACvC,GAAG,GAAI,KAEHmC,KACF,aAAaA,CAAwB,GAEvCnC,EAAM,MAAM,QAAQ,iBAAiB;AAAA,IAEzC;AACA,UAAMqC,IAAiD;AAAA,MACrD,QAAU,CAACd,CAAe;AAAA,MAC1B,oBAAoB;AAAA,QAClB,iBAAiBI;AAAA,QACjB,qBAAAF;AAAA,QACA,4BAA4BS;AAAA,MAAA;AAAA,MAE9B,UAAY,CAACT,CAAmB;AAAA,MAChC,aAAe;AAAA,QACb,iBAAiBE;AAAA,QACjB,qBAAAF;AAAA,QACA,4BAA4BS;AAAA,MAAA;AAAA,MAE9B,WAAa,CAACT,CAAmB;AAAA,MACjC,SAAW,EAAE,qBAAAA,GAAqB,iBAAiBW,EAAA;AAAA,MACnD,QAAU,CAACX,CAAmB;AAAA,IAAA;AAEhC,aAASa,EAAYzC,GAA6G;;AAEhI,UAAIA,OAASH,IAAA,OAAO,OAAOG,EAAM,KAAK,MAAM,EAAE,CAAC,MAAlC,gBAAAH,EAAqC,UAAS,GAAG;AAG5D,YAAImB,EAAS;AACX,UAAAA,EAAS,MAAM,sBAAsBX,EAAML,EAAM,IAAI,GAAGK,EAAML,EAAM,QAAQ,CAAa;AAAA,aACpF;AACL,gBAAM0C,IAAW,SAAS,eAAe,mBAAmB;AAC5D,UAAIA,MACF1B,EAAS,QAAQ2B,GAAQ,QAAQtC,EAAML,EAAM,IAAI,GAAGK,EAAML,EAAM,QAAQ,GAAewC,EAAmBxC,EAAM,SAAS,IAAiB,CAAC,GACvIA,EAAM,SAAS,SAAS,sBAE1BgB,EAAS,MAAM,iBAAiB,WAAWhC,EAAgB,MAAM,oBAAoB,EAAE,GAEzFgC,EAAS,MAAM,MAAM0B,CAAQ;AAAA,QAEjC;AAEA,QAAAxB,EAAuB,SAAQO,IAAAT,EAAS,UAAT,QAAAS,EAAgB,iBAAiB,EAAE,GAAGT,EAAS,MAAM,eAAA,IAAmB,MACvGG,EAAW,UAAQyB,IAAA5B,EAAS,UAAT,gBAAA4B,EAAgB,aAAY,IAC/CxB,EAAe,UAAQyB,IAAA7B,EAAS,UAAT,gBAAA6B,EAAgB,cAAa;AAAA,MACtD;AACE,SAAAC,IAAA9B,EAAS,UAAT,QAAA8B,EAAgB,WAChB9B,EAAS,QAAQ,MACjBI,EAAe,QAAQ;AAAA,IAE3B;AAEA,IAAA1B,EAAM,MAAM2B,EAAY,OAAO,CAACQ,MAAM;;AACpC,MAAIA,MAAM,gBACRhC,IAAAmB,EAAS,UAAT,QAAAnB,EAAgB,WAChBmB,EAAS,QAAQ;AAAA,IAErB,CAAC;AAED,UAAM+B,IAAqB9B,EAA+D,IAAI;AAC9F,IAAAvB,EAAM;AAAA,MACJ,MAAMS,EAAM,MAAM,UAAU;AAAA,IAAA,GAC3B,CAAC,CAACqB,CAAS,MAAM;AAClB,MAAAuB,EAAmB,QAAQC;AAAA,QACzB3C,EAAMmB,CAAS;AAAA,QACfnB,EAAMF,EAAM,MAAM,WAAW,KAAK;AAAA,QAClCE,EAAMF,EAAM,MAAM,iBAAiB,KAAK;AAAA,QACxCE,EAAMF,EAAM,MAAM,iBAAiB,KAAK;AAAA,QACxCE,EAAMF,EAAM,MAAM,QAAQ;AAAA,QAC1BE,EAAMF,EAAM,MAAM,cAAc;AAAA,MAAA;AAAA,IAEpC,CAAC,GACDT,EAAM;AAAA,MACJ,MAAMS,EAAM,MAAM,SAAS;AAAA,MAC3B,MAAMA,EAAM,MAAM,SAAS;AAAA,MAC3B,MAAMA,EAAM,MAAM,SAAS;AAAA,MAC3B,MAAMA,EAAM,MAAM,SAAS;AAAA,MAC3B,MAAMA,EAAM,MAAM,SAAS;AAAA,MAC3B,MAAMA,EAAM,MAAM,SAAS;AAAA,IAAA,GAC1B,MAAM;AACP,MAAA4C,EAAmB,QAAQC;AAAA,QACzB3C,EAAMF,EAAM,MAAM,UAAU,KAAK;AAAA,QACjCE,EAAMF,EAAM,MAAM,WAAW,KAAK;AAAA,QAClCE,EAAMF,EAAM,MAAM,iBAAiB,KAAK;AAAA,QACxCE,EAAMF,EAAM,MAAM,iBAAiB,KAAK;AAAA,QACxCE,EAAMF,EAAM,MAAM,QAAQ;AAAA,QAC1BE,EAAMF,EAAM,MAAM,cAAc;AAAA,MAAA;AAAA,IAEpC,GAAG,EAAE,MAAM,IAAM,GAEjBT,EAAM,MAAMqD,EAAmB,OAAO,CAACvB,MAAc;AACnD,MAAAiB,EAAYjB,CAAS;AAAA,IACvB,CAAC,GACDyB,GAAU,MAAM;AACd,MAAAR,EAAY,IAAI;AAAA,IAClB,CAAC,GACDS,GAAY,MAAM;;AAChB,OAAArD,IAAAmB,EAAS,UAAT,QAAAnB,EAAgB;AAAA,IAClB,CAAC,GAEDsD,EAAe,MAAMhD,EAAM,MAAM,SAAS,cAAc,CAAC0B,MAAM;AAC7D,MAAA7C,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,cAAc4B,EAASiB,CAAC;AAAA,MAAA;AAAA,IAE5B,GAAG,EAAE,MAAM,IAAM,UAAU,KAAM,GACjCsB,EAAe,MAAMhD,EAAM,MAAM,SAAS,oBAAoB,CAAC0B,MAAM;AACnE,MAAA7C,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,oBAAoB4B,EAASiB,CAAC;AAAA,MAAA;AAAA,IAElC,GAAG,EAAE,MAAM,IAAM,UAAU,KAAM,GACjCsB,EAAe,MAAMhD,EAAM,MAAM,SAAS,cAAc,CAAC0B,MAAM;AAC7D,MAAA7C,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,cAAc4B,EAASiB,CAAC;AAAA,MAAA;AAAA,IAE5B,GAAG,EAAE,MAAM,IAAM,UAAU,KAAM,GACjCsB,EAAe,MAAMhD,EAAM,MAAM,SAAS,gBAAgB,CAAC0B,MAAM;AAC/D,MAAA7C,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,gBAAgB4B,EAASiB,CAAC;AAAA,MAAA;AAAA,IAE9B,GAAG,EAAE,MAAM,IAAM,UAAU,KAAM,GACjCsB,EAAe,MAAMhD,EAAM,MAAM,SAAS,aAAa,CAAC0B,MAAM;AAC5D,MAAA7C,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,aAAa4B,EAASiB,CAAC;AAAA,MAAA;AAAA,IAE3B,GAAG,EAAE,MAAM,IAAM,UAAU,KAAM,GAEjCsB,EAAe;AAAA,MACb,MAAMhD,EAAM,MAAM,SAAS;AAAA,MAC3B,MAAMA,EAAM,MAAM,SAAS;AAAA,MAC3B,MAAMA,EAAM,MAAM,SAAS;AAAA,IAAA,GAC1B,CAAC,CAACiD,GAAWC,GAAUC,CAAU,MAAM;AACxC,MAAAtE,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,WAAAoE;AAAA,QACA,UAAAC;AAAA,QACA,YAAAC;AAAA,MAAA;AAAA,IAEJ,GAAG,EAAE,UAAU,KAAM,GAErB5D,EAAM,MAAMS,EAAM,MAAM,SAAS,cAAc,CAACoD,MAAiB;AAC/D,MAAAvE,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,cAAAuE;AAAA,MAAA;AAAA,IAEJ,GAAG,EAAE,WAAW,IAAM,GAEtB7D,EAAM,MAAMV,EAAgB,MAAM,YAAY,CAAC6C,MAAM;AACnD,MAAA1B,EAAM,MAAM,SAAS,aAAa0B,MAAM,SAAY,gBAAgBA;AAAA,IACtE,CAAC,GAEDnC,EAAM,MAAA;;AAAM,cAAAkD,KAAAnB,KAAA5B,IAAAb,EAAgB,UAAhB,gBAAAa,EAAuB,mBAAvB,gBAAA4B,EAAuC,WAAvC,gBAAAmB,EAA+C;AAAA,OAAW,CAACf,MAAM;AAC3E,MAAA1B,EAAM,MAAM,SAAS,eAAe,OAAO,YAAY0B,KAAK;AAAA,IAC9D,CAAC;AAED,aAAS2B,KAAW;;AAClB,MAAAC;AAAA,QACE,IAAI,KAAK;AAAA,YACP5D,IAAAmB,EAAS,UAAT,gBAAAnB,EAAgB,aAAY;AAAA,QAAA,CAC7B;AAAA,QACD;AAAA,MAAA;AAAA,IAEJ;AAEA,aAAS6D,GAAiBC,GAAmB;AAC3C,MAAA3E,EAAgB,QAAQ;AAAA,QACtB,GAAGA,EAAgB;AAAA,QACnB,OAAO2E;AAAA,MAAA;AAAA,IAEX;AAEA,aAASC,GAAeC,GAAmB;;AACzC,MAAA1D,EAAM,MAAM,SAAS,uBAAuB0D,IAC5ChE,IAAAmB,EAAS,UAAT,QAAAnB,EAAgB,iBAAiB,gBAAgBgE;AAAA,IACnD;AAEA,UAAMC,IAAQC,GAAA,GAERC,KAAqBvD,EAAS,MAAM,EAAQqD,EAAM,eAAgB,GAClEG,KAAkBxD,EAAS,MAAM,EAAQqD,EAAM,YAAa,GAC5DI,KAAazD,EAAS,MAAM,EAAQqD,EAAM,OAAQ;;;AAKtD,aAAAK,EAAA,GAAAC,GA4BM,OA5BNC,IA4BM;AAAA,QA3BJC,GAmBM,OAnBNC,IAmBM;AAAA,UAlBJC,EAOQC,IAAA;AAAA,YANL,gBAAcpD,EAAA;AAAA,YAAc,YAAYrC,EAAA,MAAgB;AAAA,YAAQ,WAAWkC,EAAA;AAAA,YAC3E,aAAWF,EAAA;AAAA,YAAW,cAAYI,EAAA;AAAA,YAAiB,qBAAqBjC,EAAA;AAAA,YACxE,oBAAoBuE;AAAA,YAAmB,oBAAoBE;AAAA,YAC3D,yBAAwBc,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGb,MAAec,EAAAA,2BAA2Bd,CAAE;AAAA,UAAA;uBAExE,MAA6B;AAAA,cAA7Be,EAA6BC,EAAA,QAAA,eAAA;AAAA,YAAA;;;UAEhBC,EAAA3E,CAAA,EAAM,QAAQ,0BAA7B4E,EAAgGC,IAAA;AAAA;YAA/C,KAAK;AAAA,YAAK,MAAM;AAAA,YAAK,OAAO;AAAA,YAAK,QAAQ;AAAA,UAAA;UAC7DF,EAAA3E,CAAA,EAAM,QAAQ,sCAA3C4E,EAQuBE,IAAA;AAAA;YARuC,IAAG;AAAA,UAAA;uBAC/D,MAMa;AAAA,cANKH,EAAA3E,CAAA,EAAM,SAAS,mBAAjC4E,EAMaG,IAAA;AAAA;gBANiC,SAAKR,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAS,MAAEL,EAAA3E,CAAA,EAAM,SAAS,aAAU;AAAA,cAAA;2BAC5E,MAIY;AAAA,wBAJZ4E,EAIYK,GAJItE,EAAA,MAAY,KAAK,GAAA,MAAA;AAAA,+BAC/B,MAAkF;AAAA,sBAAtEgE,EAAA3E,CAAA,EAAM,SAAS,eAAU,gBAArCyE,EAAkFC,EAAA,QAAA,mBAAA,EAAA,KAAA,EAAA,CAAA;sBACtEC,EAAA3E,CAAA,EAAM,SAAS,eAAU,aAArCyE,EAA4EC,EAAA,QAAA,gBAAA,EAAA,KAAA,EAAA,CAAA;sBAChEC,EAAA3E,CAAA,EAAM,SAAS,eAAU,QAArCyE,EAAkEC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA;;;;;;;;;;;QAK1EL,EAKEa,IAAA;AAAA,sBAJSP,EAAA3E,CAAA,EAAM,SAAS;AAAA,wDAAf2E,EAAA3E,CAAA,EAAM,SAAS,aAAUgF;AAAA,UAAG,cAAYL,EAAA3E,CAAA,EAAM,SAAS;AAAA,UAAY,gBAAckB,EAAA;AAAA,UACzF,eAAelC,EAAA;AAAA,UAAqB,oBAAoB6E,GAAA;AAAA,UAAqB,iBAAiBC,GAAA;AAAA,UAC9F,YAAYC,GAAA;AAAA,UAAa,gBAAgBY,EAAA3E,CAAA,EAAM,QAAQ;AAAA,UAAoB,UAAAqD;AAAA,UAC3E,iCAAQmB,EAAAA,MAAK,mBAAA;AAAA,QAAA;UAEmB9E,IAAAuB,EAAA,UAAA,gBAAAvB,EAAgB,UAAI,uBAAvDkF,EAA0GO,IAAA;AAAA;UAA7B,WAAWlE,EAAA;AAAA,QAAA;;;;;"}
package/dist/store.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { ChartType, DemoDataStore, DendroStateController, InputGuide, InputNamesByChartType, InputState, PlotDataAndSettings, getControllerByType } from '@milaboratories/pf-plots';
2
2
  import { PColumnSpec } from '@platforma-sdk/model';
3
3
  import { ListOption } from '@platforma-sdk/ui-vue';
4
+ import { Palette } from './components/AesSettings/types';
4
5
  import { ComputedRef, Reactive, Ref } from 'vue';
5
6
  import { AesType } from './constantsCommon';
6
- import { FilterSuggestionsBySourceMap, GraphMakerProps, GraphMakerState, ReactiveState, UniqueValuesBySourceMap } from './types';
7
+ import { DefaultPalettes, FilterSuggestionsBySourceMap, GraphMakerProps, GraphMakerState, ReactiveState, UniqueValuesBySourceMap } from './types';
7
8
  import { calculateDiscreteGroups } from './utils/calculateDiscreteGroups';
8
9
  export declare function createReactiveState(initialData: GraphMakerState, chartType: ChartType): Reactive<ReactiveState>;
9
10
  export interface Store {
@@ -31,8 +32,12 @@ export interface Store {
31
32
  filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>;
32
33
  filterLabelsInfo: Ref<Record<string, ListOption>>;
33
34
  readonlyInputs?: InputNamesByChartType[ChartType][];
35
+ defaultPalette: DefaultPalettes;
34
36
  }
35
- export declare function factoryStore(reactiveState: Reactive<ReactiveState>, dataStore: DemoDataStore | null, inputGuide: Ref<InputGuide<InputState>>, chartData: Ref<PlotDataAndSettings | null>, dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>, uniqueValuesData: Ref<UniqueValuesBySourceMap>, filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>, filterLabelsInfo: Ref<Record<string, ListOption>>, readonlyInputs?: InputNamesByChartType[ChartType][]): Store;
37
+ export declare function factoryStore(reactiveState: Reactive<ReactiveState>, dataStore: DemoDataStore | null, inputGuide: Ref<InputGuide<InputState>>, chartData: Ref<PlotDataAndSettings | null>, dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>, uniqueValuesData: Ref<UniqueValuesBySourceMap>, filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>, filterLabelsInfo: Ref<Record<string, ListOption>>, readonlyInputs?: InputNamesByChartType[ChartType][], defaultPalette?: Palette | {
38
+ categorical?: Palette;
39
+ continuous?: Palette;
40
+ }): Store;
36
41
  export type ComputedStore = ComputedRef<Store>;
37
- export declare function provideStore(initialState: GraphMakerState, dataStoreRef: Ref<DemoDataStore | null>, chartType: ChartType, defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>, fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>, dataColumnPredicate?: (spec: PColumnSpec) => boolean, readonlyInputs?: InputNamesByChartType[ChartType][]): ComputedRef<Store>;
42
+ export declare function provideStore(initialState: GraphMakerState, dataStoreRef: Ref<DemoDataStore | null>, chartType: ChartType, defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>, fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>, dataColumnPredicate?: (spec: PColumnSpec) => boolean, readonlyInputs?: InputNamesByChartType[ChartType][], defaultPalette?: GraphMakerProps['defaultPalette']): ComputedRef<Store>;
38
43
  export declare function useStore(): ComputedStore;
package/dist/store.js CHANGED
@@ -1,60 +1,60 @@
1
- import { deepClone as V } from "@milaboratories/helpers";
2
- import { getControllerByType as F, getInitialStateByType as j } from "@milaboratories/pf-plots";
3
- import { ref as d, computed as I, toRaw as G, watch as T, provide as k, reactive as M, inject as q } from "vue";
4
- import { getInitialAxesSettings as z, getInitialLayersSettings as J, getInitialStatisticsState as O, getInitialTemplate as P } from "./constantsCommon.js";
5
- import { updateDataBindAes as W } from "./dataBindAes.js";
6
- import { notEmpty as Q } from "./helpers.js";
7
- import { storeKey as L } from "./keys.js";
8
- import "./constantsAesthetic.js";
9
- import { loadDataForPlot as X } from "./utils/createChartSettingsForRender/composeChartSettings.js";
10
- import { calculateDiscreteGroups as E } from "./utils/calculateDiscreteGroups.js";
11
- import { addFixedOptionsToState as Y } from "./utils/addFixedOptionsToState.js";
12
- import { loadDefaultSources as K } from "./utils/loadDefaultSources.js";
13
- import { copyJSON as C } from "./utils/copyJSON.js";
14
- import { getUsedAesInMapping as Z } from "./utils/getUsedAesInMapping.js";
15
- import { getUniqueValuesFromReadyChartData as _, loadFilterLabelsForTitle as $ } from "./utils/loadUniqueValuesToSave.js";
16
- import { tabKeys as R } from "./forms/index.js";
17
- function tt(t, e) {
18
- const u = C(j(t));
1
+ import { deepClone as j } from "@milaboratories/helpers";
2
+ import { getControllerByType as L, getInitialStateByType as H } from "@milaboratories/pf-plots";
3
+ import { ref as d, computed as I, toRaw as C, watch as T, provide as V, reactive as K, inject as k } from "vue";
4
+ import { getInitialAxesSettings as q, getInitialLayersSettings as z, getInitialStatisticsState as J, getInitialTemplate as W } from "./constantsCommon.js";
5
+ import { updateDataBindAes as Q } from "./dataBindAes.js";
6
+ import { notEmpty as X } from "./helpers.js";
7
+ import { storeKey as M } from "./keys.js";
8
+ import { DEFAULT_CONTINUOUS_PALETTE as Y, DEFAULT_CATEGORICAL_PALETTE as Z } from "./constantsAesthetic.js";
9
+ import { loadDataForPlot as $ } from "./utils/createChartSettingsForRender/composeChartSettings.js";
10
+ import { calculateDiscreteGroups as U } from "./utils/calculateDiscreteGroups.js";
11
+ import { addFixedOptionsToState as R } from "./utils/addFixedOptionsToState.js";
12
+ import { loadDefaultSources as x } from "./utils/loadDefaultSources.js";
13
+ import { copyJSON as A } from "./utils/copyJSON.js";
14
+ import { getUsedAesInMapping as P } from "./utils/getUsedAesInMapping.js";
15
+ import { getUniqueValuesFromReadyChartData as tt, loadFilterLabelsForTitle as et } from "./utils/loadUniqueValuesToSave.js";
16
+ import { tabKeys as at } from "./forms/index.js";
17
+ function ot(t, e) {
18
+ const l = A(H(t));
19
19
  if ((e == null ? void 0 : e.type) !== t)
20
- return u;
21
- const m = C(e);
20
+ return l;
21
+ const g = A(e);
22
22
  return {
23
- ...u,
24
- ...m,
23
+ ...l,
24
+ ...g,
25
25
  components: {
26
- ...u.components,
27
- ...m.components
26
+ ...l.components,
27
+ ...g.components
28
28
  }
29
29
  };
30
30
  }
31
- function et(t, e) {
32
- return M({
31
+ function nt(t, e) {
32
+ return K({
33
33
  chartType: e,
34
34
  // from pf-plots
35
- optionsState: tt(e, t.optionsState),
35
+ optionsState: ot(e, t.optionsState),
36
36
  // contains user selected inputs
37
- dataStateKey: V(t.dataStateKey),
37
+ dataStateKey: j(t.dataStateKey),
38
38
  // local form states, updates directly in forms
39
- template: P(t.template, e),
40
- statisticsSettings: O(e, t.statisticsSettings),
41
- layersSettings: J(t.layersSettings),
42
- axesSettings: z(e, t.axesSettings),
39
+ template: W(t.template, e),
40
+ statisticsSettings: J(e, t.statisticsSettings),
41
+ layersSettings: z(t.layersSettings),
42
+ axesSettings: q(e, t.axesSettings),
43
43
  // common aesthetics data mapped on columns/axes values
44
- dataBindAes: C(t.dataBindAes ?? {}),
44
+ dataBindAes: A(t.dataBindAes ?? {}),
45
45
  chartScale: t.zoomState ?? 100,
46
46
  lassoControlsState: null,
47
47
  currentTab: null,
48
- tabDefaultState: R().reduce((u, m) => (u[m] = {}, u), {}),
48
+ tabDefaultState: at().reduce((l, g) => (l[g] = {}, l), {}),
49
49
  dendroInfoByClick: null,
50
50
  dendroSelectedNodeId: null,
51
51
  showTooltipHint: !1
52
52
  });
53
53
  }
54
- function at(t, e, u, m, S, y, v, a, f) {
54
+ function it(t, e, l, g, S, y, f, D, a, o) {
55
55
  return {
56
56
  reactive: t,
57
- loading: M({
57
+ loading: K({
58
58
  initialInputGuide: !0,
59
59
  initialCharts: !0,
60
60
  initialDefaults: !0,
@@ -65,155 +65,161 @@ function at(t, e, u, m, S, y, v, a, f) {
65
65
  }),
66
66
  commonHelpersData: {
67
67
  primaryGroups: I(
68
- () => E(
68
+ () => U(
69
69
  t.optionsState,
70
70
  y.value,
71
71
  "primaryGrouping"
72
72
  )
73
73
  ),
74
74
  secondaryGroups: I(
75
- () => E(
75
+ () => U(
76
76
  t.optionsState,
77
77
  y.value,
78
78
  "secondaryGrouping"
79
79
  )
80
80
  ),
81
81
  usedAesInMapping: I(
82
- () => Z(
82
+ () => P(
83
83
  t.chartType,
84
84
  t.template,
85
85
  t.layersSettings,
86
86
  t.statisticsSettings,
87
87
  t.optionsState,
88
- u.value
88
+ l.value
89
89
  )
90
90
  ),
91
91
  dendroTableData: S
92
92
  },
93
- controller: F(t.chartType),
93
+ controller: L(t.chartType),
94
94
  columnsDataStore: e,
95
- inputGuide: u,
96
- chartData: m,
95
+ inputGuide: l,
96
+ chartData: g,
97
97
  uniqueValuesData: y,
98
- filterSuggestionsData: v,
99
- filterLabelsInfo: a,
100
- readonlyInputs: f
98
+ filterSuggestionsData: f,
99
+ filterLabelsInfo: D,
100
+ readonlyInputs: a,
101
+ defaultPalette: {
102
+ categorical: typeof o == "object" && o.categorical ? o.categorical : typeof o == "string" ? o : Z,
103
+ continuous: typeof o == "object" && o.continuous ? o.continuous : typeof o == "string" ? o : Y
104
+ }
101
105
  };
102
106
  }
103
- function Tt(t, e, u, m, S, y, v) {
104
- const a = et(t, u), f = F(a.chartType), D = d(F(a.chartType).getEmptyInputGuide(a.optionsState)), N = d(null), h = d({}), b = d({}), w = d({}), x = d(null), o = I(() => at(
107
+ function bt(t, e, l, g, S, y, f, D) {
108
+ console.log("defaultPalette", D);
109
+ const a = nt(t, l), o = L(a.chartType), h = d(L(a.chartType).getEmptyInputGuide(a.optionsState)), N = d(null), b = d({}), G = d({}), E = d({}), B = d(null), n = I(() => it(
105
110
  a,
106
- G(e.value),
107
- D,
108
- N,
109
- x,
111
+ C(e.value),
110
112
  h,
113
+ N,
114
+ B,
111
115
  b,
112
- w,
113
- v
116
+ G,
117
+ E,
118
+ f,
119
+ D
114
120
  ));
115
121
  T(() => e.value, () => {
116
- w.value = {}, h.value = {}, b.value = {};
122
+ E.value = {}, b.value = {}, G.value = {};
117
123
  }), T([
118
124
  () => e.value,
119
- () => m.value
120
- ], async ([n, s]) => {
121
- if (!s || !n || !o.value.loading.initialDefaults)
125
+ () => g.value
126
+ ], async ([i, c]) => {
127
+ if (!c || !i || !n.value.loading.initialDefaults)
122
128
  return;
123
- o.value.loading.initialDefaults = !1, o.value.loading.initialInputGuide = !0;
124
- const i = C(a.optionsState.components), l = s.filter((r) => {
125
- var g;
126
- return ((g = a.optionsState.components[r.inputName]) == null ? void 0 : g.selectorStates.length) === 0 || (v == null ? void 0 : v.includes(r.inputName));
129
+ n.value.loading.initialDefaults = !1, n.value.loading.initialInputGuide = !0;
130
+ const s = A(a.optionsState.components), r = c.filter((u) => {
131
+ var v;
132
+ return ((v = a.optionsState.components[u.inputName]) == null ? void 0 : v.selectorStates.length) === 0 || (f == null ? void 0 : f.includes(u.inputName));
127
133
  });
128
- if (l.length === 0)
134
+ if (r.length === 0)
129
135
  return;
130
- l.forEach((r) => {
131
- i[r.inputName].selectorStates = [];
136
+ r.forEach((u) => {
137
+ s[u.inputName].selectorStates = [];
132
138
  });
133
- const p = await K(n, l);
139
+ const m = await x(i, r);
134
140
  for (const {
135
- inputName: r,
136
- selectedSource: c,
137
- filterType: g,
138
- selectedFilterValues: U,
139
- selectedFilterRange: H
140
- } of p)
141
- i[r].selectorStates.push({
142
- selectedSource: c,
143
- type: g,
144
- selectedFilterValues: U,
145
- selectedFilterRange: H
141
+ inputName: u,
142
+ selectedSource: p,
143
+ filterType: v,
144
+ selectedFilterValues: O,
145
+ selectedFilterRange: _
146
+ } of m)
147
+ s[u].selectorStates.push({
148
+ selectedSource: p,
149
+ type: v,
150
+ selectedFilterValues: O,
151
+ selectedFilterRange: _
146
152
  });
147
153
  a.optionsState.components = {
148
154
  ...a.optionsState.components,
149
- ...i
155
+ ...s
150
156
  };
151
157
  }, { immediate: !0 });
152
- const A = d(0);
158
+ const w = d(0);
153
159
  T([
154
160
  () => a.optionsState,
155
161
  () => e.value,
156
162
  () => S.value
157
- ], async ([n, s, i]) => {
158
- A.value++;
159
- const l = A.value;
160
- o.value.loading.inputGuide = !0;
161
- const p = s && i ? (await K(s, i, !1)).map((c) => c.selectedSource) : [], r = s ? await f.calculateOptions(G(s), n, p, y) : f.getEmptyInputGuide(n);
162
- if (l === A.value && (D.value = r, o.value.loading.inputGuide = !1, o.value.loading.initialInputGuide)) {
163
- o.value.loading.initialInputGuide = !1;
164
- const c = t.currentTab === void 0 ? "dataMapping" : t.currentTab;
165
- o.value.reactive.currentTab = o.value.reactive.currentTab ?? c;
163
+ ], async ([i, c, s]) => {
164
+ w.value++;
165
+ const r = w.value;
166
+ n.value.loading.inputGuide = !0;
167
+ const m = c && s ? (await x(c, s, !1)).map((p) => p.selectedSource) : [], u = c ? await o.calculateOptions(C(c), i, m, y) : o.getEmptyInputGuide(i);
168
+ if (r === w.value && (h.value = u, n.value.loading.inputGuide = !1, n.value.loading.initialInputGuide)) {
169
+ n.value.loading.initialInputGuide = !1;
170
+ const p = t.currentTab === void 0 ? "dataMapping" : t.currentTab;
171
+ n.value.reactive.currentTab = n.value.reactive.currentTab ?? p;
166
172
  }
167
173
  }, { immediate: !0, deep: !0 });
168
- const B = d(0);
169
- if (T(() => D.value, async (n) => {
170
- B.value++;
171
- const s = B.value, i = setTimeout(() => {
172
- o.value.loading.chartData = !0;
173
- }, 300), l = G(e.value), p = await X(n, a, l, S.value);
174
- if (clearTimeout(i), p && l) {
175
- const { uniqueValues: r, filterSuggestions: c } = await _(
176
- p,
177
- n,
174
+ const F = d(0);
175
+ if (T(() => h.value, async (i) => {
176
+ F.value++;
177
+ const c = F.value, s = setTimeout(() => {
178
+ n.value.loading.chartData = !0;
179
+ }, 300), r = C(e.value), m = await $(i, a, r, S.value);
180
+ if (clearTimeout(s), m && r) {
181
+ const { uniqueValues: u, filterSuggestions: p } = await tt(
182
+ m,
183
+ i,
178
184
  a.optionsState.components,
179
- f,
180
- l,
181
- G(b.value)
185
+ o,
186
+ r,
187
+ C(G.value)
182
188
  );
183
- h.value = r, b.value = c, W(a.optionsState, a.dataBindAes, h.value);
189
+ b.value = u, G.value = p, Q(a.optionsState, a.dataBindAes, b.value);
184
190
  }
185
- w.value = l ? await $(
191
+ E.value = r ? await et(
186
192
  a.optionsState.components,
187
- n,
188
- f,
189
- l
190
- ) : {}, s === B.value && (N.value = p, n.ready && (o.value.loading.initialCharts = !1), o.value.loading.chartData = !1);
193
+ i,
194
+ o,
195
+ r
196
+ ) : {}, c === F.value && (N.value = m, i.ready && (n.value.loading.initialCharts = !1), n.value.loading.chartData = !1);
191
197
  }, { immediate: !0, deep: !0 }), a.chartType === "dendro") {
192
- const n = d(0);
198
+ const i = d(0);
193
199
  T([
194
200
  () => a.optionsState,
195
201
  () => e.value,
196
- () => D.value.readyData,
202
+ () => h.value.readyData,
197
203
  () => S.value
198
- ], async ([s, i, l, p]) => {
199
- if (l && i) {
200
- n.value++;
201
- const r = n.value;
202
- o.value.loading.dendroTableData = !0;
203
- const c = await Y(s, i, p), g = await f.createTableData(i, c);
204
- n.value === r && (x.value = g), o.value.loading.dendroTableData = !1;
204
+ ], async ([c, s, r, m]) => {
205
+ if (r && s) {
206
+ i.value++;
207
+ const u = i.value;
208
+ n.value.loading.dendroTableData = !0;
209
+ const p = await R(c, s, m), v = await o.createTableData(s, p);
210
+ i.value === u && (B.value = v), n.value.loading.dendroTableData = !1;
205
211
  }
206
212
  }, { immediate: !0 });
207
213
  }
208
- return k(L, o), o;
214
+ return V(M, n), n;
209
215
  }
210
- function Dt() {
211
- return Q(q(L), "Empty store");
216
+ function Gt() {
217
+ return X(k(M), "Empty store");
212
218
  }
213
219
  export {
214
- et as createReactiveState,
215
- at as factoryStore,
216
- Tt as provideStore,
217
- Dt as useStore
220
+ nt as createReactiveState,
221
+ it as factoryStore,
222
+ bt as provideStore,
223
+ Gt as useStore
218
224
  };
219
225
  //# sourceMappingURL=store.js.map
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import { deepClone } from '@milaboratories/helpers';\nimport type {\n ChartType,\n DemoDataStore,\n DendroStateController,\n DendroUIState,\n InputGuide,\n InputNamesByChartType,\n InputState,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n getControllerByType,\n getInitialStateByType,\n} from '@milaboratories/pf-plots';\nimport type { PColumnSpec } from '@platforma-sdk/model';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport type { ComputedRef, Reactive, Ref } from 'vue';\nimport { computed, inject, provide, reactive, ref, toRaw, watch } from 'vue';\nimport type {\n AesType } from './constantsCommon';\nimport {\n getInitialAxesSettings,\n getInitialLayersSettings,\n getInitialStatisticsState,\n getInitialTemplate,\n} from './constantsCommon';\nimport { updateDataBindAes } from './dataBindAes';\nimport { notEmpty } from './helpers';\nimport { storeKey } from './keys';\nimport type {\n DendroNodeInfo,\n FilterSuggestionsBySourceMap,\n GraphMakerProps,\n GraphMakerState,\n ReactiveState, UniqueValuesBySourceMap,\n} from './types';\nimport { loadDefaultSources } from './utils';\nimport { addFixedOptionsToState } from './utils/addFixedOptionsToState';\nimport { calculateDiscreteGroups } from './utils/calculateDiscreteGroups';\nimport { copyJSON } from './utils/copyJSON';\nimport { loadDataForPlot } from './utils/createChartSettingsForRender/composeChartSettings';\nimport { getUsedAesInMapping } from './utils/getUsedAesInMapping';\nimport {\n getUniqueValuesFromReadyChartData,\n loadFilterLabelsForTitle,\n} from './utils/loadUniqueValuesToSave';\nimport type { FormKey } from './forms';\nimport { tabKeys } from './forms';\n\nfunction getInitialOptionsState(chartType: ChartType, optionsState: InputState | undefined) {\n const defaultState = copyJSON(getInitialStateByType(chartType));\n if (optionsState?.type !== chartType) {\n return defaultState;\n }\n const optionsStateCopy = copyJSON(optionsState);\n\n return {\n ...defaultState,\n ...optionsStateCopy,\n components: {\n ...defaultState.components,\n ...optionsStateCopy.components,\n },\n };\n}\n\nexport function createReactiveState(\n initialData: GraphMakerState,\n chartType: ChartType,\n): Reactive<ReactiveState> {\n return reactive({\n chartType: chartType,\n // from pf-plots\n optionsState: getInitialOptionsState(chartType, initialData.optionsState), // contains user selected inputs\n\n dataStateKey: deepClone(initialData.dataStateKey),\n // local form states, updates directly in forms\n template: getInitialTemplate(initialData.template, chartType),\n statisticsSettings: getInitialStatisticsState(chartType, initialData.statisticsSettings),\n layersSettings: getInitialLayersSettings(initialData.layersSettings),\n axesSettings: getInitialAxesSettings(chartType, initialData.axesSettings),\n // common aesthetics data mapped on columns/axes values\n dataBindAes: copyJSON(initialData.dataBindAes ?? {}),\n chartScale: initialData.zoomState ?? 100,\n lassoControlsState: null,\n currentTab: null,\n tabDefaultState: tabKeys().reduce((res, formKey: FormKey) => {\n res[formKey] = {};\n return res;\n }, {} as Record<FormKey, Record<string, boolean>>),\n dendroInfoByClick: null as null | DendroNodeInfo,\n dendroSelectedNodeId: null,\n showTooltipHint: false,\n });\n}\n\nexport interface Store {\n reactive: Reactive<ReactiveState>;\n loading: {\n initialInputGuide: boolean;\n initialCharts: boolean;\n initialDefaults: boolean;\n inputGuide: boolean;\n chartData: boolean;\n chartRendering: boolean;\n dendroTableData: boolean;\n };\n commonHelpersData: {\n primaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n secondaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n usedAesInMapping: ComputedRef<Record<string, Record<AesType, boolean>>>;\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>;\n };\n controller: ReturnType<typeof getControllerByType>;\n columnsDataStore: DemoDataStore | null;\n inputGuide: Ref<InputGuide<InputState>>;\n chartData: Ref<PlotDataAndSettings | null>;\n uniqueValuesData: Ref<UniqueValuesBySourceMap>;\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>;\n filterLabelsInfo: Ref<Record<string, ListOption>>;\n readonlyInputs?: InputNamesByChartType[ChartType][];\n}\n\nexport function factoryStore(\n reactiveState: Reactive<ReactiveState>,\n dataStore: DemoDataStore | null,\n inputGuide: Ref<InputGuide<InputState>>,\n chartData: Ref<PlotDataAndSettings | null>,\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>,\n uniqueValuesData: Ref<UniqueValuesBySourceMap>,\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>,\n filterLabelsInfo: Ref<Record<string, ListOption>>,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n): Store {\n return {\n reactive: reactiveState,\n loading: reactive({\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n chartRendering: false,\n dendroTableData: false,\n }),\n commonHelpersData: {\n primaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'primaryGrouping',\n ),\n ),\n secondaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'secondaryGrouping',\n ),\n ),\n usedAesInMapping: computed<Record<string, Record<AesType, boolean>>>(() =>\n getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide.value,\n ),\n ),\n dendroTableData,\n },\n controller: getControllerByType(reactiveState.chartType),\n columnsDataStore: dataStore,\n inputGuide,\n chartData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n };\n}\n\nexport type ComputedStore = ComputedRef<Store>;\n\nexport function provideStore(\n initialState: GraphMakerState,\n dataStoreRef: Ref<DemoDataStore | null>,\n chartType: ChartType,\n defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>,\n fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>,\n dataColumnPredicate?: (spec: PColumnSpec) => boolean,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n) {\n const reactiveState = createReactiveState(initialState, chartType);\n const controller = getControllerByType(reactiveState.chartType);\n\n const inputGuide = ref<InputGuide<InputState>>(getControllerByType(reactiveState.chartType).getEmptyInputGuide(reactiveState.optionsState));\n const chartData = ref<PlotDataAndSettings | null>(null);\n\n const uniqueValuesData = ref<UniqueValuesBySourceMap>({});\n const filterSuggestionsData = ref<FilterSuggestionsBySourceMap>({});\n const filterLabelsInfo = ref<Record<string, ListOption>>({}); // for auto titles of chart if something selected in filter/tabby\n\n const dendroTableData = ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>(null);\n\n // toRaw removes Vue proxy from dataStore.pframe (PFrame api)\n const store = computed(() => factoryStore(\n reactiveState,\n toRaw(dataStoreRef.value),\n inputGuide,\n chartData,\n dendroTableData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n ));\n\n watch(() => dataStoreRef.value, () => {\n filterLabelsInfo.value = {};\n uniqueValuesData.value = {};\n filterSuggestionsData.value = {}; // reset saved data; avoid caching of empty results from old empty pframe\n });\n watch([\n () => dataStoreRef.value,\n () => defaultOptionsRef.value,\n ], async ([ds, defaultOptions]) => {\n if (!defaultOptions || !ds || !store.value.loading.initialDefaults) {\n return;\n }\n store.value.loading.initialDefaults = false; // to avoid multiple calculations, default settings cannot change except after reset\n store.value.loading.initialInputGuide = true; // to show loader on initial loading; changing of reactiveState.optionsState always triggers inputGuide recalculating, so it will be off after inputGuide\n\n const defaultStateMap = copyJSON(reactiveState.optionsState.components);\n const defaultOptionsWithoutUserChanges = defaultOptions.filter((opt) => {\n const res = reactiveState.optionsState.components[opt.inputName]?.selectorStates.length === 0\n || readonlyInputs?.includes(opt.inputName);\n return res;\n });\n if (defaultOptionsWithoutUserChanges.length === 0) {\n return;\n }\n defaultOptionsWithoutUserChanges.forEach((opt) => {\n defaultStateMap[opt.inputName].selectorStates = [];\n });\n const loadedDefaultSources = await loadDefaultSources(ds, defaultOptionsWithoutUserChanges);\n for (const {\n inputName,\n selectedSource,\n filterType,\n selectedFilterValues,\n selectedFilterRange,\n } of loadedDefaultSources) {\n defaultStateMap[inputName].selectorStates.push({\n selectedSource,\n type: filterType,\n selectedFilterValues,\n selectedFilterRange,\n });\n }\n\n reactiveState.optionsState.components = {\n ...reactiveState.optionsState.components,\n ...defaultStateMap,\n };\n }, { immediate: true });\n\n // recalculate input guide - options for every data input, consistency info etc\n const inputGuideCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState,\n () => dataStoreRef.value,\n () => fixedOptionsRef.value,\n ], async ([optionsState, ds, fixedOptions]) => {\n inputGuideCounter.value++;\n const counter = inputGuideCounter.value;\n store.value.loading.inputGuide = true;\n const ignoredIds = ds && fixedOptions ? (await loadDefaultSources(ds, fixedOptions, false)).map((item) => item.selectedSource) : [];\n\n // const start = Date.now();\n const nextInputGuide = ds ? await controller.calculateOptions(toRaw(ds), optionsState, ignoredIds, dataColumnPredicate) : controller.getEmptyInputGuide(optionsState);\n // console.log('input guide', Date.now() - start);\n\n if (counter === inputGuideCounter.value) { // race condition check\n inputGuide.value = nextInputGuide;\n\n store.value.loading.inputGuide = false;\n if (store.value.loading.initialInputGuide) { // open default/saved tab only after inputGuide loading\n store.value.loading.initialInputGuide = false;\n const initialTab = initialState.currentTab === undefined ? 'dataMapping' : initialState.currentTab;\n store.value.reactive.currentTab = store.value.reactive.currentTab ?? initialTab;\n }\n }\n }, { immediate: true, deep: true });\n\n // recalculate data for chart rendering (miplots4)\n const chartDataCounter = ref(0); // to avoid race condition on async calculations\n watch(() => inputGuide.value, async (ig) => {\n chartDataCounter.value++;\n const counter = chartDataCounter.value;\n\n const loading = setTimeout(() => {\n store.value.loading.chartData = true;\n }, 300);\n\n const ds = toRaw(dataStoreRef.value);\n // const start = Date.now();\n const nextChartData = await loadDataForPlot(ig, reactiveState, ds, fixedOptionsRef.value);\n clearTimeout(loading);\n\n if (nextChartData && ds) {\n const { uniqueValues, filterSuggestions } = await getUniqueValuesFromReadyChartData(\n nextChartData, ig, reactiveState.optionsState.components, controller, ds, toRaw(filterSuggestionsData.value),\n );\n uniqueValuesData.value = uniqueValues;\n filterSuggestionsData.value = filterSuggestions;\n updateDataBindAes(reactiveState.optionsState, reactiveState.dataBindAes, uniqueValuesData.value);\n }\n filterLabelsInfo.value = ds\n ? await loadFilterLabelsForTitle(\n reactiveState.optionsState.components,\n ig,\n controller,\n ds,\n )\n : {};\n // console.log('chart data', Date.now() - start);\n\n if (counter === chartDataCounter.value) { // race condition check\n chartData.value = nextChartData;\n if (ig.ready) {\n store.value.loading.initialCharts = false;\n }\n store.value.loading.chartData = false;\n }\n }, { immediate: true, deep: true });\n\n // watch data for table, only dendro chart; data is also using for popup by tree node click\n if (reactiveState.chartType === 'dendro') {\n const dendroDataCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState as DendroUIState,\n () => dataStoreRef.value,\n () => inputGuide.value.readyData,\n () => fixedOptionsRef.value,\n ], async ([optionsState, dataStore, ready, fixed]) => {\n if (ready && dataStore) {\n dendroDataCounter.value++;\n const counter = dendroDataCounter.value;\n store.value.loading.dendroTableData = true;\n const state = await addFixedOptionsToState(optionsState, dataStore, fixed) as DendroUIState;\n const nextDendroTableData = await (controller as unknown as DendroStateController).createTableData(dataStore, state);\n\n if (dendroDataCounter.value === counter) {\n dendroTableData.value = nextDendroTableData;\n }\n store.value.loading.dendroTableData = false;\n }\n }, { immediate: true });\n }\n\n provide(storeKey, store);\n return store;\n}\n\nexport function useStore() {\n return notEmpty(inject<ComputedStore>(storeKey), 'Empty store');\n}\n"],"names":["getInitialOptionsState","chartType","optionsState","defaultState","copyJSON","getInitialStateByType","optionsStateCopy","createReactiveState","initialData","reactive","deepClone","getInitialTemplate","getInitialStatisticsState","getInitialLayersSettings","getInitialAxesSettings","tabKeys","res","formKey","factoryStore","reactiveState","dataStore","inputGuide","chartData","dendroTableData","uniqueValuesData","filterSuggestionsData","filterLabelsInfo","readonlyInputs","computed","calculateDiscreteGroups","getUsedAesInMapping","getControllerByType","provideStore","initialState","dataStoreRef","defaultOptionsRef","fixedOptionsRef","dataColumnPredicate","controller","ref","store","toRaw","watch","ds","defaultOptions","defaultStateMap","defaultOptionsWithoutUserChanges","opt","_a","loadedDefaultSources","loadDefaultSources","inputName","selectedSource","filterType","selectedFilterValues","selectedFilterRange","inputGuideCounter","fixedOptions","counter","ignoredIds","item","nextInputGuide","initialTab","chartDataCounter","ig","loading","nextChartData","loadDataForPlot","uniqueValues","filterSuggestions","getUniqueValuesFromReadyChartData","updateDataBindAes","loadFilterLabelsForTitle","dendroDataCounter","ready","fixed","state","addFixedOptionsToState","nextDendroTableData","provide","storeKey","useStore","notEmpty","inject"],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import { deepClone } from '@milaboratories/helpers';\nimport type {\n ChartType,\n DemoDataStore,\n DendroStateController,\n DendroUIState,\n InputGuide,\n InputNamesByChartType,\n InputState,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n getControllerByType,\n getInitialStateByType,\n} from '@milaboratories/pf-plots';\nimport type { PColumnSpec } from '@platforma-sdk/model';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport type { CategoricalPalette, ContinuousPalette, Palette } from './components/AesSettings/types';\nimport type { ComputedRef, Reactive, Ref } from 'vue';\nimport { computed, inject, provide, reactive, ref, toRaw, watch } from 'vue';\nimport type {\n AesType } from './constantsCommon';\nimport {\n getInitialAxesSettings,\n getInitialLayersSettings,\n getInitialStatisticsState,\n getInitialTemplate,\n} from './constantsCommon';\nimport { updateDataBindAes } from './dataBindAes';\nimport { notEmpty } from './helpers';\nimport { storeKey } from './keys';\nimport type {\n DefaultPalettes,\n DendroNodeInfo,\n FilterSuggestionsBySourceMap,\n GraphMakerProps,\n GraphMakerState,\n ReactiveState, UniqueValuesBySourceMap,\n} from './types';\nimport { loadDefaultSources } from './utils';\nimport { addFixedOptionsToState } from './utils/addFixedOptionsToState';\nimport { calculateDiscreteGroups } from './utils/calculateDiscreteGroups';\nimport { copyJSON } from './utils/copyJSON';\nimport { loadDataForPlot } from './utils/createChartSettingsForRender/composeChartSettings';\nimport { getUsedAesInMapping } from './utils/getUsedAesInMapping';\nimport {\n getUniqueValuesFromReadyChartData,\n loadFilterLabelsForTitle,\n} from './utils/loadUniqueValuesToSave';\nimport type { FormKey } from './forms';\nimport { tabKeys } from './forms';\nimport { DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE } from './constantsAesthetic';\n\nfunction getInitialOptionsState(chartType: ChartType, optionsState: InputState | undefined) {\n const defaultState = copyJSON(getInitialStateByType(chartType));\n if (optionsState?.type !== chartType) {\n return defaultState;\n }\n const optionsStateCopy = copyJSON(optionsState);\n\n return {\n ...defaultState,\n ...optionsStateCopy,\n components: {\n ...defaultState.components,\n ...optionsStateCopy.components,\n },\n };\n}\n\nexport function createReactiveState(\n initialData: GraphMakerState,\n chartType: ChartType,\n): Reactive<ReactiveState> {\n return reactive({\n chartType: chartType,\n // from pf-plots\n optionsState: getInitialOptionsState(chartType, initialData.optionsState), // contains user selected inputs\n\n dataStateKey: deepClone(initialData.dataStateKey),\n // local form states, updates directly in forms\n template: getInitialTemplate(initialData.template, chartType),\n statisticsSettings: getInitialStatisticsState(chartType, initialData.statisticsSettings),\n layersSettings: getInitialLayersSettings(initialData.layersSettings),\n axesSettings: getInitialAxesSettings(chartType, initialData.axesSettings),\n // common aesthetics data mapped on columns/axes values\n dataBindAes: copyJSON(initialData.dataBindAes ?? {}),\n chartScale: initialData.zoomState ?? 100,\n lassoControlsState: null,\n currentTab: null,\n tabDefaultState: tabKeys().reduce((res, formKey: FormKey) => {\n res[formKey] = {};\n return res;\n }, {} as Record<FormKey, Record<string, boolean>>),\n dendroInfoByClick: null as null | DendroNodeInfo,\n dendroSelectedNodeId: null,\n showTooltipHint: false,\n });\n}\n\nexport interface Store {\n reactive: Reactive<ReactiveState>;\n loading: {\n initialInputGuide: boolean;\n initialCharts: boolean;\n initialDefaults: boolean;\n inputGuide: boolean;\n chartData: boolean;\n chartRendering: boolean;\n dendroTableData: boolean;\n };\n commonHelpersData: {\n primaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n secondaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n usedAesInMapping: ComputedRef<Record<string, Record<AesType, boolean>>>;\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>;\n };\n controller: ReturnType<typeof getControllerByType>;\n columnsDataStore: DemoDataStore | null;\n inputGuide: Ref<InputGuide<InputState>>;\n chartData: Ref<PlotDataAndSettings | null>;\n uniqueValuesData: Ref<UniqueValuesBySourceMap>;\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>;\n filterLabelsInfo: Ref<Record<string, ListOption>>;\n readonlyInputs?: InputNamesByChartType[ChartType][];\n defaultPalette: DefaultPalettes;\n}\n\nexport function factoryStore(\n reactiveState: Reactive<ReactiveState>,\n dataStore: DemoDataStore | null,\n inputGuide: Ref<InputGuide<InputState>>,\n chartData: Ref<PlotDataAndSettings | null>,\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>,\n uniqueValuesData: Ref<UniqueValuesBySourceMap>,\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>,\n filterLabelsInfo: Ref<Record<string, ListOption>>,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: Palette | { categorical?: Palette; continuous?: Palette },\n): Store {\n return {\n reactive: reactiveState,\n loading: reactive({\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n chartRendering: false,\n dendroTableData: false,\n }),\n commonHelpersData: {\n primaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'primaryGrouping',\n ),\n ),\n secondaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'secondaryGrouping',\n ),\n ),\n usedAesInMapping: computed<Record<string, Record<AesType, boolean>>>(() =>\n getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide.value,\n ),\n ),\n dendroTableData,\n },\n controller: getControllerByType(reactiveState.chartType),\n columnsDataStore: dataStore,\n inputGuide,\n chartData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette: {\n categorical: typeof defaultPalette === 'object' && defaultPalette.categorical\n ? defaultPalette.categorical as CategoricalPalette\n : typeof defaultPalette === 'string' ? defaultPalette as CategoricalPalette : DEFAULT_CATEGORICAL_PALETTE,\n continuous: typeof defaultPalette === 'object' && defaultPalette.continuous\n ? defaultPalette.continuous as ContinuousPalette\n : typeof defaultPalette === 'string' ? defaultPalette as ContinuousPalette : DEFAULT_CONTINUOUS_PALETTE,\n },\n };\n}\n\nexport type ComputedStore = ComputedRef<Store>;\n\nexport function provideStore(\n initialState: GraphMakerState,\n dataStoreRef: Ref<DemoDataStore | null>,\n chartType: ChartType,\n defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>,\n fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>,\n dataColumnPredicate?: (spec: PColumnSpec) => boolean,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: GraphMakerProps['defaultPalette'],\n) {\n console.log('defaultPalette', defaultPalette);\n const reactiveState = createReactiveState(initialState, chartType);\n const controller = getControllerByType(reactiveState.chartType);\n\n const inputGuide = ref<InputGuide<InputState>>(getControllerByType(reactiveState.chartType).getEmptyInputGuide(reactiveState.optionsState));\n const chartData = ref<PlotDataAndSettings | null>(null);\n\n const uniqueValuesData = ref<UniqueValuesBySourceMap>({});\n const filterSuggestionsData = ref<FilterSuggestionsBySourceMap>({});\n const filterLabelsInfo = ref<Record<string, ListOption>>({}); // for auto titles of chart if something selected in filter/tabby\n\n const dendroTableData = ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>(null);\n\n // toRaw removes Vue proxy from dataStore.pframe (PFrame api)\n const store = computed(() => factoryStore(\n reactiveState,\n toRaw(dataStoreRef.value),\n inputGuide,\n chartData,\n dendroTableData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette,\n ));\n\n watch(() => dataStoreRef.value, () => {\n filterLabelsInfo.value = {};\n uniqueValuesData.value = {};\n filterSuggestionsData.value = {}; // reset saved data; avoid caching of empty results from old empty pframe\n });\n watch([\n () => dataStoreRef.value,\n () => defaultOptionsRef.value,\n ], async ([ds, defaultOptions]) => {\n if (!defaultOptions || !ds || !store.value.loading.initialDefaults) {\n return;\n }\n store.value.loading.initialDefaults = false; // to avoid multiple calculations, default settings cannot change except after reset\n store.value.loading.initialInputGuide = true; // to show loader on initial loading; changing of reactiveState.optionsState always triggers inputGuide recalculating, so it will be off after inputGuide\n\n const defaultStateMap = copyJSON(reactiveState.optionsState.components);\n const defaultOptionsWithoutUserChanges = defaultOptions.filter((opt) => {\n const res = reactiveState.optionsState.components[opt.inputName]?.selectorStates.length === 0\n || readonlyInputs?.includes(opt.inputName);\n return res;\n });\n if (defaultOptionsWithoutUserChanges.length === 0) {\n return;\n }\n defaultOptionsWithoutUserChanges.forEach((opt) => {\n defaultStateMap[opt.inputName].selectorStates = [];\n });\n const loadedDefaultSources = await loadDefaultSources(ds, defaultOptionsWithoutUserChanges);\n for (const {\n inputName,\n selectedSource,\n filterType,\n selectedFilterValues,\n selectedFilterRange,\n } of loadedDefaultSources) {\n defaultStateMap[inputName].selectorStates.push({\n selectedSource,\n type: filterType,\n selectedFilterValues,\n selectedFilterRange,\n });\n }\n\n reactiveState.optionsState.components = {\n ...reactiveState.optionsState.components,\n ...defaultStateMap,\n };\n }, { immediate: true });\n\n // recalculate input guide - options for every data input, consistency info etc\n const inputGuideCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState,\n () => dataStoreRef.value,\n () => fixedOptionsRef.value,\n ], async ([optionsState, ds, fixedOptions]) => {\n inputGuideCounter.value++;\n const counter = inputGuideCounter.value;\n store.value.loading.inputGuide = true;\n const ignoredIds = ds && fixedOptions ? (await loadDefaultSources(ds, fixedOptions, false)).map((item) => item.selectedSource) : [];\n\n // const start = Date.now();\n const nextInputGuide = ds ? await controller.calculateOptions(toRaw(ds), optionsState, ignoredIds, dataColumnPredicate) : controller.getEmptyInputGuide(optionsState);\n // console.log('input guide', Date.now() - start);\n\n if (counter === inputGuideCounter.value) { // race condition check\n inputGuide.value = nextInputGuide;\n\n store.value.loading.inputGuide = false;\n if (store.value.loading.initialInputGuide) { // open default/saved tab only after inputGuide loading\n store.value.loading.initialInputGuide = false;\n const initialTab = initialState.currentTab === undefined ? 'dataMapping' : initialState.currentTab;\n store.value.reactive.currentTab = store.value.reactive.currentTab ?? initialTab;\n }\n }\n }, { immediate: true, deep: true });\n\n // recalculate data for chart rendering (miplots4)\n const chartDataCounter = ref(0); // to avoid race condition on async calculations\n watch(() => inputGuide.value, async (ig) => {\n chartDataCounter.value++;\n const counter = chartDataCounter.value;\n\n const loading = setTimeout(() => {\n store.value.loading.chartData = true;\n }, 300);\n\n const ds = toRaw(dataStoreRef.value);\n // const start = Date.now();\n const nextChartData = await loadDataForPlot(ig, reactiveState, ds, fixedOptionsRef.value);\n clearTimeout(loading);\n\n if (nextChartData && ds) {\n const { uniqueValues, filterSuggestions } = await getUniqueValuesFromReadyChartData(\n nextChartData, ig, reactiveState.optionsState.components, controller, ds, toRaw(filterSuggestionsData.value),\n );\n uniqueValuesData.value = uniqueValues;\n filterSuggestionsData.value = filterSuggestions;\n updateDataBindAes(reactiveState.optionsState, reactiveState.dataBindAes, uniqueValuesData.value);\n }\n filterLabelsInfo.value = ds\n ? await loadFilterLabelsForTitle(\n reactiveState.optionsState.components,\n ig,\n controller,\n ds,\n )\n : {};\n // console.log('chart data', Date.now() - start);\n\n if (counter === chartDataCounter.value) { // race condition check\n chartData.value = nextChartData;\n if (ig.ready) {\n store.value.loading.initialCharts = false;\n }\n store.value.loading.chartData = false;\n }\n }, { immediate: true, deep: true });\n\n // watch data for table, only dendro chart; data is also using for popup by tree node click\n if (reactiveState.chartType === 'dendro') {\n const dendroDataCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState as DendroUIState,\n () => dataStoreRef.value,\n () => inputGuide.value.readyData,\n () => fixedOptionsRef.value,\n ], async ([optionsState, dataStore, ready, fixed]) => {\n if (ready && dataStore) {\n dendroDataCounter.value++;\n const counter = dendroDataCounter.value;\n store.value.loading.dendroTableData = true;\n const state = await addFixedOptionsToState(optionsState, dataStore, fixed) as DendroUIState;\n const nextDendroTableData = await (controller as unknown as DendroStateController).createTableData(dataStore, state);\n\n if (dendroDataCounter.value === counter) {\n dendroTableData.value = nextDendroTableData;\n }\n store.value.loading.dendroTableData = false;\n }\n }, { immediate: true });\n }\n\n provide(storeKey, store);\n return store;\n}\n\nexport function useStore() {\n return notEmpty(inject<ComputedStore>(storeKey), 'Empty store');\n}\n"],"names":["getInitialOptionsState","chartType","optionsState","defaultState","copyJSON","getInitialStateByType","optionsStateCopy","createReactiveState","initialData","reactive","deepClone","getInitialTemplate","getInitialStatisticsState","getInitialLayersSettings","getInitialAxesSettings","tabKeys","res","formKey","factoryStore","reactiveState","dataStore","inputGuide","chartData","dendroTableData","uniqueValuesData","filterSuggestionsData","filterLabelsInfo","readonlyInputs","defaultPalette","computed","calculateDiscreteGroups","getUsedAesInMapping","getControllerByType","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","provideStore","initialState","dataStoreRef","defaultOptionsRef","fixedOptionsRef","dataColumnPredicate","controller","ref","store","toRaw","watch","ds","defaultOptions","defaultStateMap","defaultOptionsWithoutUserChanges","opt","_a","loadedDefaultSources","loadDefaultSources","inputName","selectedSource","filterType","selectedFilterValues","selectedFilterRange","inputGuideCounter","fixedOptions","counter","ignoredIds","item","nextInputGuide","initialTab","chartDataCounter","ig","loading","nextChartData","loadDataForPlot","uniqueValues","filterSuggestions","getUniqueValuesFromReadyChartData","updateDataBindAes","loadFilterLabelsForTitle","dendroDataCounter","ready","fixed","state","addFixedOptionsToState","nextDendroTableData","provide","storeKey","useStore","notEmpty","inject"],"mappings":"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"}