@milaboratories/graph-maker 1.1.177 → 1.1.178

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 (197) hide show
  1. package/dist/components/AesButton.vue.d.ts +6 -6
  2. package/dist/components/AesButton.vue.js +2 -2
  3. package/dist/components/AesButton.vue.js.map +1 -1
  4. package/dist/components/AesSettings/AesDataMappingContinuous.vue.js +14 -14
  5. package/dist/components/AesSettings/AesDataMappingContinuous.vue.js.map +1 -1
  6. package/dist/components/AesSettings/AesDataMappingDiscrete.vue.js +39 -38
  7. package/dist/components/AesSettings/AesDataMappingDiscrete.vue.js.map +1 -1
  8. package/dist/components/AesSettings/FixedColorsList.vue.d.ts +1 -1
  9. package/dist/components/AesSettings/FixedColorsList.vue.js +13 -12
  10. package/dist/components/AesSettings/FixedColorsList.vue.js.map +1 -1
  11. package/dist/components/AesSettings/FixedDotShapeList.vue.js +10 -9
  12. package/dist/components/AesSettings/FixedDotShapeList.vue.js.map +1 -1
  13. package/dist/components/AesSettings/FixedLineTypeList.vue.js +12 -11
  14. package/dist/components/AesSettings/FixedLineTypeList.vue.js.map +1 -1
  15. package/dist/components/AesSettings/FormWrapper.vue.js +2 -2
  16. package/dist/components/AesSettings/FormWrapper.vue.js.map +1 -1
  17. package/dist/components/AesSettings/PalettesForm.vue.js +54 -50
  18. package/dist/components/AesSettings/PalettesForm.vue.js.map +1 -1
  19. package/dist/components/AesSettings/types.d.ts +9 -9
  20. package/dist/components/BtnIconGroup.vue.js +10 -11
  21. package/dist/components/BtnIconGroup.vue.js.map +1 -1
  22. package/dist/components/Chart.vue.js +6 -8
  23. package/dist/components/Chart.vue.js.map +1 -1
  24. package/dist/components/CollapsableBlock.vue.js +2 -2
  25. package/dist/components/CollapsableBlock.vue.js.map +1 -1
  26. package/dist/components/DendroTable.vue.js +2 -2
  27. package/dist/components/DendroTable.vue.js.map +1 -1
  28. package/dist/components/DendroTooltip.vue.js +15 -14
  29. package/dist/components/DendroTooltip.vue.js.map +1 -1
  30. package/dist/components/DragAndDrop/DnDBasketChip.vue.js +2 -2
  31. package/dist/components/DragAndDrop/DnDBasketChip.vue.js.map +1 -1
  32. package/dist/components/DragAndDrop/DnDRangeChip.vue.d.ts +12 -3
  33. package/dist/components/DragAndDrop/DnDRangeChip.vue.js +4 -4
  34. package/dist/components/DragAndDrop/DnDRangeChip.vue.js.map +1 -1
  35. package/dist/components/DragAndDrop/DndBasket.vue.js +26 -26
  36. package/dist/components/DragAndDrop/DndBasket.vue.js.map +1 -1
  37. package/dist/components/DragAndDrop/DndChip.vue.js.map +1 -1
  38. package/dist/components/DragAndDrop/DndDoubleChip.vue.js +2 -2
  39. package/dist/components/DragAndDrop/DndDoubleChip.vue.js.map +1 -1
  40. package/dist/components/DragAndDrop/types.d.ts +1 -1
  41. package/dist/components/LassoControls/index.vue.js +4 -4
  42. package/dist/components/LassoControls/index.vue.js.map +1 -1
  43. package/dist/components/Loading.vue.js +8 -7
  44. package/dist/components/Loading.vue.js.map +1 -1
  45. package/dist/components/MultiselectButton.vue.js +28 -27
  46. package/dist/components/MultiselectButton.vue.js.map +1 -1
  47. package/dist/components/PanelModal.vue.js.map +1 -1
  48. package/dist/components/PlColorSlider.vue.js +12 -12
  49. package/dist/components/PlColorSlider.vue.js.map +1 -1
  50. package/dist/components/PlColorSliderThumb.vue.js +1 -3
  51. package/dist/components/PlColorSliderThumb.vue.js.map +1 -1
  52. package/dist/components/Popup.vue.d.ts +2 -0
  53. package/dist/components/Popup.vue.js +21 -21
  54. package/dist/components/Popup.vue.js.map +1 -1
  55. package/dist/components/ReorderForm.vue.js +20 -17
  56. package/dist/components/ReorderForm.vue.js.map +1 -1
  57. package/dist/components/SettingsTabs/icons/DeleteChartIcon.vue.js.map +1 -1
  58. package/dist/components/SettingsTabs/icons/LogIcon.vue.js.map +1 -1
  59. package/dist/components/SettingsTabs/icons/SettingsIcon.vue.js.map +1 -1
  60. package/dist/components/SettingsTabs/index.vue.js.map +1 -1
  61. package/dist/components/Zoom/ZoomInput.vue.js +11 -11
  62. package/dist/components/Zoom/ZoomInput.vue.js.map +1 -1
  63. package/dist/components/Zoom/index.vue.js.map +1 -1
  64. package/dist/composition/useComponent.js.map +1 -1
  65. package/dist/constantsAesthetic.js.map +1 -1
  66. package/dist/constantsCommon.d.ts +3 -1
  67. package/dist/constantsCommon.js +5 -5
  68. package/dist/constantsCommon.js.map +1 -1
  69. package/dist/dataBindAes.js +4 -2
  70. package/dist/dataBindAes.js.map +1 -1
  71. package/dist/forms/AxesSettingsForm/BubbleAxesSettingsForm.vue.js +35 -35
  72. package/dist/forms/AxesSettingsForm/BubbleAxesSettingsForm.vue.js.map +1 -1
  73. package/dist/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js +49 -47
  74. package/dist/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
  75. package/dist/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js +53 -53
  76. package/dist/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js.map +1 -1
  77. package/dist/forms/AxesSettingsForm/HistogramAxesSettingsForm.vue.js +37 -37
  78. package/dist/forms/AxesSettingsForm/HistogramAxesSettingsForm.vue.js.map +1 -1
  79. package/dist/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js +38 -38
  80. package/dist/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js.map +1 -1
  81. package/dist/forms/AxesSettingsForm/index.vue.js.map +1 -1
  82. package/dist/forms/DataMappingForm/BubbleForm.vue.js +4 -4
  83. package/dist/forms/DataMappingForm/BubbleForm.vue.js.map +1 -1
  84. package/dist/forms/DataMappingForm/DendroForm.vue.js +1 -1
  85. package/dist/forms/DataMappingForm/DendroForm.vue.js.map +1 -1
  86. package/dist/forms/DataMappingForm/DiscreteForm.vue.js.map +1 -1
  87. package/dist/forms/DataMappingForm/HeatmapForm.vue.js +2 -2
  88. package/dist/forms/DataMappingForm/HeatmapForm.vue.js.map +1 -1
  89. package/dist/forms/DataMappingForm/HistogramForm.vue.js.map +1 -1
  90. package/dist/forms/DataMappingForm/Layout/FormLayout.vue.js.map +1 -1
  91. package/dist/forms/DataMappingForm/Layout/MandatoryOptions.vue.js.map +1 -1
  92. package/dist/forms/DataMappingForm/Layout/OptionsList.vue.js.map +1 -1
  93. package/dist/forms/DataMappingForm/ScatterplotForm.vue.js +4 -4
  94. package/dist/forms/DataMappingForm/ScatterplotForm.vue.js.map +1 -1
  95. package/dist/forms/DataMappingForm/ScatterplotUmapForm.vue.js +4 -4
  96. package/dist/forms/DataMappingForm/ScatterplotUmapForm.vue.js.map +1 -1
  97. package/dist/forms/DataMappingForm/index.vue.js.map +1 -1
  98. package/dist/forms/DataMappingForm/useBaskets.js.map +1 -1
  99. package/dist/forms/DataMappingForm/utils.d.ts +1 -1
  100. package/dist/forms/DataMappingForm/utils.js +34 -34
  101. package/dist/forms/DataMappingForm/utils.js.map +1 -1
  102. package/dist/forms/LayersForm/AesSelector.vue.js +18 -25
  103. package/dist/forms/LayersForm/AesSelector.vue.js.map +1 -1
  104. package/dist/forms/LayersForm/DotSizeSelector.vue.d.ts +2 -0
  105. package/dist/forms/LayersForm/DotSizeSelector.vue.js +23 -23
  106. package/dist/forms/LayersForm/DotSizeSelector.vue.js.map +1 -1
  107. package/dist/forms/LayersForm/Layer/Bubble.vue.js +32 -34
  108. package/dist/forms/LayersForm/Layer/Bubble.vue.js.map +1 -1
  109. package/dist/forms/LayersForm/Layer/Dendro.vue.js +6 -6
  110. package/dist/forms/LayersForm/Layer/Dendro.vue.js.map +1 -1
  111. package/dist/forms/LayersForm/Layer/discrete/Bar.vue.js +6 -6
  112. package/dist/forms/LayersForm/Layer/discrete/Bar.vue.js.map +1 -1
  113. package/dist/forms/LayersForm/Layer/discrete/BinnedDots.vue.js +3 -3
  114. package/dist/forms/LayersForm/Layer/discrete/BinnedDots.vue.js.map +1 -1
  115. package/dist/forms/LayersForm/Layer/discrete/Boxplot.vue.js +3 -3
  116. package/dist/forms/LayersForm/Layer/discrete/Boxplot.vue.js.map +1 -1
  117. package/dist/forms/LayersForm/Layer/discrete/Errorbar.vue.js +9 -9
  118. package/dist/forms/LayersForm/Layer/discrete/Errorbar.vue.js.map +1 -1
  119. package/dist/forms/LayersForm/Layer/discrete/JitteredDots.vue.js +3 -3
  120. package/dist/forms/LayersForm/Layer/discrete/JitteredDots.vue.js.map +1 -1
  121. package/dist/forms/LayersForm/Layer/discrete/Line.vue.js +8 -8
  122. package/dist/forms/LayersForm/Layer/discrete/Line.vue.js.map +1 -1
  123. package/dist/forms/LayersForm/Layer/discrete/Logo.vue.js +3 -3
  124. package/dist/forms/LayersForm/Layer/discrete/Logo.vue.js.map +1 -1
  125. package/dist/forms/LayersForm/Layer/discrete/Sina.vue.js +3 -3
  126. package/dist/forms/LayersForm/Layer/discrete/Sina.vue.js.map +1 -1
  127. package/dist/forms/LayersForm/Layer/discrete/StackedArea.vue.js +9 -9
  128. package/dist/forms/LayersForm/Layer/discrete/StackedArea.vue.js.map +1 -1
  129. package/dist/forms/LayersForm/Layer/discrete/StackedBar.vue.js +6 -6
  130. package/dist/forms/LayersForm/Layer/discrete/StackedBar.vue.js.map +1 -1
  131. package/dist/forms/LayersForm/Layer/discrete/Violin.vue.js +3 -3
  132. package/dist/forms/LayersForm/Layer/discrete/Violin.vue.js.map +1 -1
  133. package/dist/forms/LayersForm/Layer/discrete/utils.js.map +1 -1
  134. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.js +23 -23
  135. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.js.map +1 -1
  136. package/dist/forms/LayersForm/Layer/heatmap/HeatmapAnnotations.vue.js +6 -6
  137. package/dist/forms/LayersForm/Layer/heatmap/HeatmapAnnotations.vue.js.map +1 -1
  138. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js +28 -28
  139. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js.map +1 -1
  140. package/dist/forms/LayersForm/Layer/histogram/Bins.vue.js +3 -3
  141. package/dist/forms/LayersForm/Layer/histogram/Bins.vue.js.map +1 -1
  142. package/dist/forms/LayersForm/Layer/scatterplot/Curve.vue.js.map +1 -1
  143. package/dist/forms/LayersForm/Layer/scatterplot/Scatter.vue.js.map +1 -1
  144. package/dist/forms/LayersForm/Layer/scatterplot-umap/Scatter.vue.js +2 -2
  145. package/dist/forms/LayersForm/Layer/scatterplot-umap/Scatter.vue.js.map +1 -1
  146. package/dist/forms/LayersForm/index.vue.js +56 -52
  147. package/dist/forms/LayersForm/index.vue.js.map +1 -1
  148. package/dist/forms/LogForm.vue.js.map +1 -1
  149. package/dist/forms/SettingsForm.vue.js.map +1 -1
  150. package/dist/forms/StatisticsForm/DiscreteStatisticsForm.vue.js +14 -14
  151. package/dist/forms/StatisticsForm/DiscreteStatisticsForm.vue.js.map +1 -1
  152. package/dist/forms/StatisticsForm/ScatterplotStatisticsForm.vue.js.map +1 -1
  153. package/dist/forms/StatisticsForm/index.vue.js.map +1 -1
  154. package/dist/forms/TemplateForm.vue.js +59 -52
  155. package/dist/forms/TemplateForm.vue.js.map +1 -1
  156. package/dist/forms/index.js.map +1 -1
  157. package/dist/icons/BinnedDotsIcon.vue.js.map +1 -1
  158. package/dist/icons/BoxplotAndBinnedIcon.vue.js.map +1 -1
  159. package/dist/icons/BoxplotAndJitterIcon.vue.js.map +1 -1
  160. package/dist/icons/BoxplotIcon.vue.js.map +1 -1
  161. package/dist/icons/EditIcon.vue.js.map +1 -1
  162. package/dist/icons/FrameLeft.vue.js.map +1 -1
  163. package/dist/icons/HeatmapAnnotation.vue.js.map +1 -1
  164. package/dist/icons/LineAndErrorbarIcon.vue.js.map +1 -1
  165. package/dist/icons/LogoIcon.vue.js.map +1 -1
  166. package/dist/icons/PlusIcon.vue.js.map +1 -1
  167. package/dist/icons/SinaIcon.vue.js.map +1 -1
  168. package/dist/icons/StackedAreaIcon.vue.js.map +1 -1
  169. package/dist/index.vue.js +4 -4
  170. package/dist/index.vue.js.map +1 -1
  171. package/dist/store.d.ts +1 -1
  172. package/dist/store.js +2 -2
  173. package/dist/store.js.map +1 -1
  174. package/dist/types.d.ts +1 -1
  175. package/dist/utils/addFixedOptionsToState.js.map +1 -1
  176. package/dist/utils/calculateDiscreteGroups.js.map +1 -1
  177. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
  178. package/dist/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
  179. package/dist/utils/createChartSettingsForRender/composeDendroSettings.js.map +1 -1
  180. package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.js +1 -1
  181. package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.js.map +1 -1
  182. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  183. package/dist/utils/createChartSettingsForRender/composeHistogramSettings.js.map +1 -1
  184. package/dist/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
  185. package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +1 -1
  186. package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  187. package/dist/utils/createChartSettingsForRender/getAxesDataFromForms.js +24 -24
  188. package/dist/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
  189. package/dist/utils/createChartSettingsForRender/getLayersDataFromForms.js.map +1 -1
  190. package/dist/utils/getPopupHeightForFixedAesList.js.map +1 -1
  191. package/dist/utils/getStatisticsOptions.js.map +1 -1
  192. package/dist/utils/getUsedAesInMapping.js +1 -1
  193. package/dist/utils/getUsedAesInMapping.js.map +1 -1
  194. package/dist/utils/loadDefaultSources.js.map +1 -1
  195. package/dist/utils/loadUniqueValuesToSave.js.map +1 -1
  196. package/dist/utils/saveToFile.js.map +1 -1
  197. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../src/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n ChartInterface,\n DataByColumns,\n LassoControlsState,\n MiPlots,\n Settings\n} from '@milaboratories/miplots4';\nimport {\n ChartType,\n DemoDataStore, getInitialStateByType,\n PlotDataAndSettings\n} from '@milaboratories/pf-plots';\nimport type { AxisSpec, PFrameDriver, PlSelectionModel, PTableKey } from '@platforma-sdk/model';\nimport { watchDebounced } from '@vueuse/core';\nimport canonicalize from 'canonicalize';\nimport { computed, onMounted, onUnmounted, ref, shallowRef, toRaw, useSlots, watch } from 'vue';\nimport './assets/ui.scss';\nimport Chart from './components/Chart.vue';\nimport Loading from './components/Loading.vue';\nimport PanelModal from './components/PanelModal.vue';\nimport VTabs from './components/SettingsTabs/index.vue';\nimport TransitionSlidePanel from './components/TransitionSlidePanel.vue';\nimport { useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { GraphMakerState, GraphStatus } from './types';\nimport { DendroNodeInfo, GraphMakerProps } from './types';\nimport { composeChartSettings, saveToFile } from './utils';\nimport { copyJSON } from './utils/copyJSON';\n\nconst emit = defineEmits(['delete-this-graph', 'tooltip-btn-click']);\n\nconst graphMakerState = defineModel<GraphMakerState>({ required: true });\nconst selectionState = defineModel<PlSelectionModel>('selection');\n\nconst props = defineProps<GraphMakerProps>();\n\ndefineExpose({\n /**\n reset() will update data-mapping, axis-settings, layers-settings with the state that is in v-model at the moment.\n In other cases editing of v-model fields doesn't make any impact to graphs and interface.\n Besides, after reset default-options will be applied again. You can use reset to apply new default-options.\n */\n reset,\n /**\n Apply new defaults without resetting all the state\n */\n resetDefaults\n});\n\nconst dataStore = ref<DemoDataStore | null>(null);\n\nwatch(() => props.pFrame, (pframeValue) => {\n if (!pframeValue) {\n return;\n }\n const driver = ('platforma' in window) ? window.platforma?.pFrameDriver as PFrameDriver : props.driver;\n if (!driver) {\n throw new Error('PFrame driver is missing');\n }\n dataStore.value = new DemoDataStore(\n pframeValue,\n driver,\n props.labelsModifier\n );\n}, { immediate: true });\n\n\n//fixed options can be updated outside, other settings only inside from chart settings interface, so we don't watching other settings\nconst fixedOptions = ref<typeof props.fixedOptions>(props.fixedOptions ?? []);\nwatch(() => props.fixedOptions, (value, oldValue) => {\n if (\n value && oldValue && JSON.stringify(value) !== JSON.stringify(oldValue) ||\n value && !oldValue ||\n oldValue && !value\n ) {\n fixedOptions.value = value;\n }\n}, { deep: true });\nconst defaultOptions = ref<typeof props.defaultOptions>(props.defaultOptions);\n\nconst state = provideStore(\n toRaw(graphMakerState.value),\n dataStore,\n props.chartType,\n defaultOptions,\n fixedOptions,\n props.dataColumnPredicate,\n props.readonlyInputs\n);\n\nfunction reset() {\n const nextReactiveState = createReactiveState(\n toRaw(graphMakerState.value),\n props.chartType\n );\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions;\n}\n\nfunction resetDefaults() {\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : [];\n}\n\nconst prevDataKey = computed(() => state.value.reactive.dataStateKey);\nwatch(() => canonicalize(props.dataStateKey), (keyValue) => {\n if ((keyValue !== undefined || prevDataKey.value !== undefined) && prevDataKey.value !== keyValue) {\n graphMakerState.value.optionsState = copyJSON(getInitialStateByType(props.chartType));\n const nextReactiveState = createReactiveState(toRaw(graphMakerState.value), props.chartType);\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : []; // to trigger watch on defaults\n }\n state.value.reactive.dataStateKey = keyValue;\n}, { deep: true, immediate: true });\n\nconst currentForm = computed(() => useSettingsForm(state.value.reactive.currentTab));\n\nconst chartRef = shallowRef<ChartInterface | null>(null);\nconst chartCalculatedDataRef = ref<Record<string, unknown> | null>(null);\nconst chartError = ref(false);\n\nconst graphStatus = computed<GraphStatus>((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 'error';\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 console.log('onLoadingStateChange', v);\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 } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n}\n\nwatch(() => graphStatus.value, (v) => {\n if (v === 'notReady') {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n});\n\nconst chartDataForRender = shallowRef<{ settings: Settings, data: DataByColumns } | null>(null);\nwatch([\n () => state.value.chartData.value\n], ([chartData]) => {\n chartDataForRender.value = composeChartSettings(\n toRaw(chartData),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive)\n );\n});\nwatch([\n () => state.value.reactive.template,\n () => state.value.reactive.layersSettings,\n () => state.value.reactive.axesSettings,\n () => state.value.reactive.statisticsSettings,\n () => state.value.reactive.dataBindAes,\n () => state.value.reactive.chartScale,\n], () => {\n chartDataForRender.value = composeChartSettings(\n toRaw(state.value.chartData.value),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n );\n}, { deep: true });\n\nwatch(() => chartDataForRender.value, (chartData) => {\n updateChart(chartData);\n});\nonMounted(() => {\n updateChart(null);\n});\nonUnmounted(() => {\n chartRef.value?.unmount();\n});\n\nwatchDebounced(() => state.value.reactive.optionsState, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n optionsState: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.statisticsSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n statisticsSettings: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.axesSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n axesSettings: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.layersSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n layersSettings: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.dataBindAes, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataBindAes: copyJSON(v)\n }\n}, { deep: true, debounce: 1000 });\n\nwatchDebounced([\n () => state.value.reactive.chartScale,\n () => state.value.reactive.template,\n () => state.value.reactive.currentTab\n], ([zoomState, template, currentTab]) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n zoomState,\n template,\n currentTab\n }\n}, { debounce: 1000 });\n\nwatch(() => state.value.reactive.dataStateKey, (dataStateKey) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataStateKey\n }\n}, { immediate: true });\n\nwatch(() => graphMakerState.value.currentTab, (v) => {\n state.value.reactive.currentTab = v === undefined ? 'dataMapping' : v;\n});\n\nwatch(() => graphMakerState.value?.layersSettings?.dendro?.showTable, (v) => {\n state.value.reactive.layersSettings.dendro.showTable = v ?? false;\n});\n\nfunction onExport() {\n saveToFile(\n new Blob([\n chartRef.value?.export() ?? ''\n ]),\n 'chart.svg'\n );\n}\n\nfunction updateGraphTitle(nextTitle: string) {\n graphMakerState.value = {\n ...graphMakerState.value,\n title: nextTitle\n };\n}\n\nfunction selectTreeNode(id: number | null) {\n state.value.reactive.dendroSelectedNodeId = id;\n chartRef.value?.updateChartState('selectedNode', id);\n}\n\nconst slots = useSlots();\n\nconst hasSettingsSlot = computed(() => Boolean(slots.settingsSlot));\nconst hasLogSlot = computed(() => Boolean(slots.logSlot));\n\n</script>\n\n<template>\n <div class=\"graph-maker\">\n <div class=\"graph-maker__main-pane\">\n <chart :graph-status=\"graphStatus\" :graphTitle=\"graphMakerState.title\" :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\" :dendroTooltipButton=\"tooltipButton\" @graph-title-update=\"updateGraphTitle\"\n @dendro-node-select=\"selectTreeNode\" @dendro-tooltip-btn-click=\"(id: string) => $emit('tooltip-btn-click', id)\">\n <slot name=\"titleLineSlot\"></slot>\n </chart>\n <loading v-if=\"state.loading.initialInputGuide\" :top=\"67\" :left=\"12\" :right=\"12\" :bottom=\"12\" />\n <TransitionSlidePanel id=\"graph-settings-modal\" v-if=\"!state.loading.initialInputGuide\">\n <panel-modal v-if=\"state.reactive.currentTab\" @close=\"state.reactive.currentTab = null\">\n <component :is=\"currentForm.value\">\n <slot v-if=\"state.reactive.currentTab === 'settings'\" name=\"settingsSlot\"></slot>\n <slot v-if=\"state.reactive.currentTab === 'log'\" name=\"logSlot\"></slot>\n </component>\n </panel-modal>\n </TransitionSlidePanel>\n </div>\n <v-tabs :chart-type=\"state.reactive.chartType\" :graph-status=\"graphStatus\" :allowDeleting=\"allowChartDeleting\"\n :hasSettingsSlot=\"hasSettingsSlot\" :hasLogSlot=\"hasLogSlot\" :initialLoading=\"state.loading.initialInputGuide\"\n v-model=\"state.reactive.currentTab\" @export=\"onExport\" @delete=\"$emit('delete-this-graph')\" />\n </div>\n</template>\n"],"names":["graphMakerState","_useModel","selectionState","__props","props","__expose","reset","resetDefaults","dataStore","ref","watch","pframeValue","driver","_a","DemoDataStore","fixedOptions","value","oldValue","defaultOptions","state","provideStore","toRaw","nextReactiveState","createReactiveState","prevDataKey","computed","canonicalize","keyValue","copyJSON","getInitialStateByType","currentForm","useSettingsForm","chartRef","shallowRef","chartCalculatedDataRef","chartError","graphStatus","previuosStatus","inputGuide","chartData","onTreeNodeClick","d","onTooltipHintSwitch","v","onLassoPolygonUpdate","dotIndexes","polygons","axesData","_b","axisKeys","axisKey","idx","onLassoStateChange","chartRenderingInProgress","onLoadingStateChange","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","zoomState","template","currentTab","dataStateKey","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasSettingsSlot","hasLogSlot","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","Chart","_cache","$emit","_renderSlot","_ctx","_unref","_createBlock","Loading","TransitionSlidePanel","PanelModal","$event","_resolveDynamicComponent","VTabs"],"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 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 { useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { GraphMakerState, GraphStatus } from './types';\nimport type { DendroNodeInfo, GraphMakerProps } from './types';\nimport { composeChartSettings, saveToFile } from './utils';\nimport { copyJSON } from './utils/copyJSON';\n\nconst _emit = defineEmits(['delete-this-graph', 'tooltip-btn-click']);\n\nconst graphMakerState = defineModel<GraphMakerState>({ required: true });\nconst selectionState = defineModel<PlSelectionModel>('selection');\n\nconst props = defineProps<GraphMakerProps>();\n\ndefineExpose({\n /**\n reset() will update data-mapping, axis-settings, layers-settings with the state that is in v-model at the moment.\n In other cases editing of v-model fields doesn't make any impact to graphs and interface.\n Besides, after reset default-options will be applied again. You can use reset to apply new default-options.\n */\n reset,\n /**\n Apply new defaults without resetting all the state\n */\n resetDefaults,\n});\n\nconst dataStore = ref<DemoDataStore | null>(null);\n\nwatch(() => props.pFrame, (pframeValue) => {\n if (!pframeValue) {\n return;\n }\n const driver = ('platforma' in window) ? window.platforma?.pFrameDriver as PFrameDriver : props.driver;\n if (!driver) {\n throw new Error('PFrame driver is missing');\n }\n dataStore.value = new DemoDataStore(\n pframeValue,\n driver,\n props.labelsModifier,\n );\n}, { immediate: true });\n\n// fixed options can be updated outside, other settings only inside from chart settings interface, so we don't watching other settings\nconst fixedOptions = ref<typeof props.fixedOptions>(props.fixedOptions ?? []);\nwatch(() => props.fixedOptions, (value, oldValue) => {\n if (\n (value && oldValue && JSON.stringify(value) !== JSON.stringify(oldValue))\n || (value && !oldValue)\n || (oldValue && !value)\n ) {\n fixedOptions.value = value;\n }\n}, { deep: true });\nconst defaultOptions = ref<typeof props.defaultOptions>(props.defaultOptions);\n\nconst state = provideStore(\n toRaw(graphMakerState.value),\n dataStore,\n props.chartType,\n defaultOptions,\n fixedOptions,\n props.dataColumnPredicate,\n props.readonlyInputs,\n);\n\nfunction reset() {\n const nextReactiveState = createReactiveState(\n toRaw(graphMakerState.value),\n props.chartType,\n );\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions;\n}\n\nfunction resetDefaults() {\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : [];\n}\n\nconst prevDataKey = computed(() => state.value.reactive.dataStateKey);\nwatch(() => canonicalize(props.dataStateKey), (keyValue) => {\n if ((keyValue !== undefined || prevDataKey.value !== undefined) && prevDataKey.value !== keyValue) {\n graphMakerState.value.optionsState = copyJSON(getInitialStateByType(props.chartType));\n const nextReactiveState = createReactiveState(toRaw(graphMakerState.value), props.chartType);\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions ? [...props.defaultOptions] as typeof props.defaultOptions : []; // to trigger watch on defaults\n }\n state.value.reactive.dataStateKey = keyValue;\n}, { deep: true, immediate: true });\n\nconst currentForm = computed(() => useSettingsForm(state.value.reactive.currentTab));\n\nconst chartRef = shallowRef<ChartInterface | null>(null);\nconst chartCalculatedDataRef = ref<Record<string, unknown> | null>(null);\nconst chartError = ref(false);\n\nconst graphStatus = computed<GraphStatus>((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 'error';\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 } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n}\n\nwatch(() => graphStatus.value, (v) => {\n if (v === 'notReady') {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n});\n\nconst chartDataForRender = shallowRef<{ settings: Settings; data: DataByColumns } | null>(null);\nwatch([\n () => state.value.chartData.value,\n], ([chartData]) => {\n chartDataForRender.value = composeChartSettings(\n toRaw(chartData),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n );\n});\nwatch([\n () => state.value.reactive.template,\n () => state.value.reactive.layersSettings,\n () => state.value.reactive.axesSettings,\n () => state.value.reactive.statisticsSettings,\n () => state.value.reactive.dataBindAes,\n () => state.value.reactive.chartScale,\n], () => {\n chartDataForRender.value = composeChartSettings(\n toRaw(state.value.chartData.value),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n );\n}, { deep: true });\n\nwatch(() => chartDataForRender.value, (chartData) => {\n updateChart(chartData);\n});\nonMounted(() => {\n updateChart(null);\n});\nonUnmounted(() => {\n chartRef.value?.unmount();\n});\n\nwatchDebounced(() => state.value.reactive.optionsState, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n optionsState: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.statisticsSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n statisticsSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.axesSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n axesSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.layersSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n layersSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.dataBindAes, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataBindAes: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\n\nwatchDebounced([\n () => state.value.reactive.chartScale,\n () => state.value.reactive.template,\n () => state.value.reactive.currentTab,\n], ([zoomState, template, currentTab]) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n zoomState,\n template,\n currentTab,\n };\n}, { debounce: 1000 });\n\nwatch(() => state.value.reactive.dataStateKey, (dataStateKey) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataStateKey,\n };\n}, { immediate: true });\n\nwatch(() => graphMakerState.value.currentTab, (v) => {\n state.value.reactive.currentTab = v === undefined ? 'dataMapping' : v;\n});\n\nwatch(() => graphMakerState.value?.layersSettings?.dendro?.showTable, (v) => {\n state.value.reactive.layersSettings.dendro.showTable = v ?? false;\n});\n\nfunction onExport() {\n saveToFile(\n new Blob([\n chartRef.value?.export() ?? '',\n ]),\n 'chart.svg',\n );\n}\n\nfunction updateGraphTitle(nextTitle: string) {\n graphMakerState.value = {\n ...graphMakerState.value,\n title: nextTitle,\n };\n}\n\nfunction selectTreeNode(id: number | null) {\n state.value.reactive.dendroSelectedNodeId = id;\n chartRef.value?.updateChartState('selectedNode', id);\n}\n\nconst slots = useSlots();\n\nconst hasSettingsSlot = computed(() => Boolean(slots.settingsSlot));\nconst hasLogSlot = computed(() => Boolean(slots.logSlot));\n\n</script>\n\n<template>\n <div class=\"graph-maker\">\n <div class=\"graph-maker__main-pane\">\n <Chart\n :graph-status=\"graphStatus\" :graphTitle=\"graphMakerState.title\" :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\" :dendroTooltipButton=\"tooltipButton\" @graph-title-update=\"updateGraphTitle\"\n @dendro-node-select=\"selectTreeNode\" @dendro-tooltip-btn-click=\"(id: string) => $emit('tooltip-btn-click', id)\"\n >\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 === '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\" :hasSettingsSlot=\"hasSettingsSlot\" :hasLogSlot=\"hasLogSlot\"\n :initialLoading=\"state.loading.initialInputGuide\" @export=\"onExport\" @delete=\"$emit('delete-this-graph')\"\n />\n </div>\n</template>\n"],"names":["graphMakerState","_useModel","selectionState","__props","props","__expose","reset","resetDefaults","dataStore","ref","watch","pframeValue","driver","_a","DemoDataStore","fixedOptions","value","oldValue","defaultOptions","state","provideStore","toRaw","nextReactiveState","createReactiveState","prevDataKey","computed","canonicalize","keyValue","copyJSON","getInitialStateByType","currentForm","useSettingsForm","chartRef","shallowRef","chartCalculatedDataRef","chartError","graphStatus","previuosStatus","inputGuide","chartData","onTreeNodeClick","d","onTooltipHintSwitch","v","onLassoPolygonUpdate","dotIndexes","polygons","axesData","_b","axisKeys","axisKey","idx","onLassoStateChange","chartRenderingInProgress","onLoadingStateChange","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","zoomState","template","currentTab","dataStateKey","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasSettingsSlot","hasLogSlot","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","Chart","_cache","$emit","_renderSlot","_ctx","_unref","_createBlock","Loading","TransitionSlidePanel","PanelModal","$event","_resolveDynamicComponent","VTabs"],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ChartType, DemoDataStore, DendroStateController, getControllerByType, InputGuide, InputNamesByChartType, InputState, PlotDataAndSettings } from '@milaboratories/pf-plots';
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
4
  import { ComputedRef, Reactive, Ref } from 'vue';
package/dist/store.js CHANGED
@@ -35,12 +35,12 @@ function et(t, e) {
35
35
  optionsState: tt(e, t.optionsState),
36
36
  // contains user selected inputs
37
37
  dataStateKey: V(t.dataStateKey),
38
- //local form states, updates directly in forms
38
+ // local form states, updates directly in forms
39
39
  template: P(t.template, e),
40
40
  statisticsSettings: O(e, t.statisticsSettings),
41
41
  layersSettings: J(t.layersSettings),
42
42
  axesSettings: z(e, t.axesSettings),
43
- //common aesthetics data mapped on columns/axes values
43
+ // common aesthetics data mapped on columns/axes values
44
44
  dataBindAes: C(t.dataBindAes ?? {}),
45
45
  chartScale: t.zoomState ?? 100,
46
46
  lassoControlsState: null,
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 {\n ChartType,\n DemoDataStore,\n DendroStateController,\n DendroUIState,\n getControllerByType,\n getInitialStateByType,\n InputGuide,\n InputNamesByChartType,\n InputState,\n PlotDataAndSettings\n} from '@milaboratories/pf-plots';\nimport { PColumnSpec } from '@platforma-sdk/model';\nimport { ListOption } from '@platforma-sdk/ui-vue';\nimport { computed, ComputedRef, inject, provide, reactive, Reactive, Ref, ref, toRaw, watch } from 'vue';\nimport {\n AesType,\n getInitialAxesSettings,\n getInitialLayersSettings,\n getInitialStatisticsState,\n getInitialTemplate\n} from './constantsCommon';\nimport { updateDataBindAes } from './dataBindAes';\nimport { notEmpty } from './helpers';\nimport { storeKey } from './keys';\nimport {\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 { FormKey, 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) => { res[formKey] = {}; return res; }, {} 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 ? await loadFilterLabelsForTitle(\n reactiveState.optionsState.components,\n ig,\n controller,\n ds,\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 { 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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"}
package/dist/types.d.ts CHANGED
@@ -25,7 +25,7 @@ export type GraphMakerState = {
25
25
  optionsState?: InputState;
26
26
  /** Saved settings of p-value (for discrete charts), trends (for scatterplot) */
27
27
  statisticsSettings?: DeepPartial<StatisticsState>;
28
- /** Settings of grid, axes titles, facet positions, grouping order*/
28
+ /** Settings of grid, axes titles, facet positions, grouping order */
29
29
  axesSettings?: DeepPartial<AxesState>;
30
30
  /** Settings for every type of layer, aesthetics */
31
31
  layersSettings?: DeepPartial<LayersSettings>;
@@ -1 +1 @@
1
- {"version":3,"file":"addFixedOptionsToState.js","sources":["../../src/utils/addFixedOptionsToState.ts"],"sourcesContent":["import { GraphMakerProps } from '../types';\nimport { copyJSON } from './copyJSON';\nimport { DemoDataStore, InputState } from '@milaboratories/pf-plots';\nimport { loadDefaultSources } from './loadDefaultSources';\n\nexport async function addFixedOptionsToState(\n state: InputState,\n dataStore: DemoDataStore,\n fixedOptions: GraphMakerProps['fixedOptions']\n): Promise<InputState> {\n if (!fixedOptions || fixedOptions.length === 0) {\n return state;\n }\n const loadedFixedOptions = await loadDefaultSources(dataStore, fixedOptions, false);\n const res: InputState = copyJSON(state);\n loadedFixedOptions.forEach(({ inputName, selectedSource, selectedFilterValues }) => {\n if (state.components[inputName]) {\n res.components[inputName].selectorStates.push({ selectedSource, type: 'equals', selectedFilterValues });\n }\n });\n return res;\n}"],"names":["addFixedOptionsToState","state","dataStore","fixedOptions","loadedFixedOptions","loadDefaultSources","res","copyJSON","inputName","selectedSource","selectedFilterValues"],"mappings":";;AAKA,eAAsBA,EACpBC,GACAC,GACAC,GACqB;AACrB,MAAI,CAACA,KAAgBA,EAAa,WAAW;AAC3C,WAAOF;AAET,QAAMG,IAAqB,MAAMC,EAAmBH,GAAWC,GAAc,EAAK,GAC5EG,IAAkBC,EAASN,CAAK;AACtC,SAAAG,EAAmB,QAAQ,CAAC,EAAE,WAAAI,GAAW,gBAAAC,GAAgB,sBAAAC,QAA2B;AAClF,IAAIT,EAAM,WAAWO,CAAS,KAC5BF,EAAI,WAAWE,CAAS,EAAE,eAAe,KAAK,EAAE,gBAAAC,GAAgB,MAAM,UAAU,sBAAAC,GAAsB;AAAA,EAE1G,CAAC,GACMJ;AACT;"}
1
+ {"version":3,"file":"addFixedOptionsToState.js","sources":["../../src/utils/addFixedOptionsToState.ts"],"sourcesContent":["import type { GraphMakerProps } from '../types';\nimport { copyJSON } from './copyJSON';\nimport type { DemoDataStore, InputState } from '@milaboratories/pf-plots';\nimport { loadDefaultSources } from './loadDefaultSources';\n\nexport async function addFixedOptionsToState(\n state: InputState,\n dataStore: DemoDataStore,\n fixedOptions: GraphMakerProps['fixedOptions'],\n): Promise<InputState> {\n if (!fixedOptions || fixedOptions.length === 0) {\n return state;\n }\n const loadedFixedOptions = await loadDefaultSources(dataStore, fixedOptions, false);\n const res: InputState = copyJSON(state);\n loadedFixedOptions.forEach(({ inputName, selectedSource, selectedFilterValues }) => {\n if (state.components[inputName]) {\n res.components[inputName].selectorStates.push({ selectedSource, type: 'equals', selectedFilterValues });\n }\n });\n return res;\n}\n"],"names":["addFixedOptionsToState","state","dataStore","fixedOptions","loadedFixedOptions","loadDefaultSources","res","copyJSON","inputName","selectedSource","selectedFilterValues"],"mappings":";;AAKA,eAAsBA,EACpBC,GACAC,GACAC,GACqB;AACrB,MAAI,CAACA,KAAgBA,EAAa,WAAW;AAC3C,WAAOF;AAET,QAAMG,IAAqB,MAAMC,EAAmBH,GAAWC,GAAc,EAAK,GAC5EG,IAAkBC,EAASN,CAAK;AACtC,SAAAG,EAAmB,QAAQ,CAAC,EAAE,WAAAI,GAAW,gBAAAC,GAAgB,sBAAAC,QAA2B;AAClF,IAAIT,EAAM,WAAWO,CAAS,KAC5BF,EAAI,WAAWE,CAAS,EAAE,eAAe,KAAK,EAAE,gBAAAC,GAAgB,MAAM,UAAU,sBAAAC,GAAsB;AAAA,EAE1G,CAAC,GACMJ;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"calculateDiscreteGroups.js","sources":["../../src/utils/calculateDiscreteGroups.ts"],"sourcesContent":["import { InputState } from '@milaboratories/pf-plots';\nimport { UniqueValuesBySourceMap } from '../types';\n\nexport function calculateDiscreteGroups(optionsState: InputState, uniqueValuesInfo: UniqueValuesBySourceMap, field: 'primaryGrouping' | 'secondaryGrouping'): string[] {\n if (optionsState.components?.y?.selectorStates.length === 0) {\n return [];\n }\n if (!optionsState.components?.[field]?.selectorStates.length) {\n return ['single common group'];\n }\n const idGroupingStr: string = optionsState.components?.[field].selectorStates[0].selectedSource;\n return uniqueValuesInfo[idGroupingStr]?.list ?? [];\n}\n"],"names":["calculateDiscreteGroups","optionsState","uniqueValuesInfo","field","_a","_b","_c","_d","_e","_f","idGroupingStr"],"mappings":"AAGO,SAASA,EAAwBC,GAA0BC,GAA2CC,GAA0D;AAAhK,MAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC;AACL,QAAIJ,KAAAD,IAAAH,EAAa,eAAb,gBAAAG,EAAyB,MAAzB,gBAAAC,EAA4B,eAAe,YAAW;AACxD,WAAO,CAAA;AAET,MAAI,GAACE,KAAAD,IAAAL,EAAa,eAAb,gBAAAK,EAA0BH,OAA1B,QAAAI,EAAkC,eAAe;AACpD,WAAO,CAAC,qBAAqB;AAE/B,QAAMG,KAAwBF,IAAAP,EAAa,eAAb,gBAAAO,EAA0BL,GAAO,eAAe,GAAG;AACjF,WAAOM,IAAAP,EAAiBQ,CAAa,MAA9B,gBAAAD,EAAiC,SAAQ,CAAA;AAClD;"}
1
+ {"version":3,"file":"calculateDiscreteGroups.js","sources":["../../src/utils/calculateDiscreteGroups.ts"],"sourcesContent":["import type { InputState } from '@milaboratories/pf-plots';\nimport type { UniqueValuesBySourceMap } from '../types';\n\nexport function calculateDiscreteGroups(optionsState: InputState, uniqueValuesInfo: UniqueValuesBySourceMap, field: 'primaryGrouping' | 'secondaryGrouping'): string[] {\n if (optionsState.components?.y?.selectorStates.length === 0) {\n return [];\n }\n if (!optionsState.components?.[field]?.selectorStates.length) {\n return ['single common group'];\n }\n const idGroupingStr: string = optionsState.components?.[field].selectorStates[0].selectedSource;\n return uniqueValuesInfo[idGroupingStr]?.list ?? [];\n}\n"],"names":["calculateDiscreteGroups","optionsState","uniqueValuesInfo","field","_a","_b","_c","_d","_e","_f","idGroupingStr"],"mappings":"AAGO,SAASA,EAAwBC,GAA0BC,GAA2CC,GAA0D;AAAhK,MAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC;AACL,QAAIJ,KAAAD,IAAAH,EAAa,eAAb,gBAAAG,EAAyB,MAAzB,gBAAAC,EAA4B,eAAe,YAAW;AACxD,WAAO,CAAA;AAET,MAAI,GAACE,KAAAD,IAAAL,EAAa,eAAb,gBAAAK,EAA0BH,OAA1B,QAAAI,EAAkC,eAAe;AACpD,WAAO,CAAC,qBAAqB;AAE/B,QAAMG,KAAwBF,IAAAP,EAAa,eAAb,gBAAAO,EAA0BL,GAAO,eAAe,GAAG;AACjF,WAAOM,IAAAP,EAAiBQ,CAAa,MAA9B,gBAAAD,EAAiC,SAAQ,CAAA;AAClD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"composeBubbleSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeBubbleSettings.ts"],"sourcesContent":["import { BubbleSettings } from '@milaboratories/miplots4';\nimport {\n DEFAULT_BLACK,\n DEFAULT_CONTINUOUS_PALETTE,\n PALETTE_MAP\n} from '../../constantsAesthetic';\nimport { BubbleLayer, ReactiveState } from '../../types';\nimport { getAxesDataFromForms } from '../index';\n\nconst DEFAULT_CELL_SIZE = 40;\nconst DEFAULT_MAX_R = DEFAULT_CELL_SIZE / 2 - 2;\nconst DEFAULT_MIN_R = 3;\nexport function composeBubbleSettings(\n settings: BubbleSettings,\n reactiveState: ReactiveState\n) {\n const template = reactiveState.template as BubbleLayer;\n const layerSettings = reactiveState.layersSettings[template];\n const palette = reactiveState.dataBindAes[settings.valueColor.value]?.palette;\n settings.aes = {\n cellStrokeColor: layerSettings.strokeColor ?? DEFAULT_BLACK,\n colorsList: PALETTE_MAP[palette ?? DEFAULT_CONTINUOUS_PALETTE].colors,\n maxRadius: DEFAULT_MAX_R * (reactiveState.chartScale / 100),\n minRadius: DEFAULT_MIN_R\n }\n\n settings.size = {cellSize: DEFAULT_CELL_SIZE * (reactiveState.chartScale / 100)}\n\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType)\n );\n\n\n settings.NAValueAs = layerSettings.NAValueAs;\n if (layerSettings.normalizationDirection) {\n settings.normalization = {\n method: layerSettings.normalizationMethod,\n direction: layerSettings.normalizationDirection\n }\n }\n\n if (layerSettings.aggregateByX || layerSettings.aggregateByY) {\n settings.aggregation = {\n x: layerSettings.aggregateByX && settings.xGroupBy && settings.xGroupBy.length > 0,\n y: layerSettings.aggregateByY && settings.yGroupBy && settings.yGroupBy.length > 0,\n method: layerSettings.aggregationMethod,\n }\n }\n\n return settings;\n}"],"names":["DEFAULT_CELL_SIZE","DEFAULT_MAX_R","DEFAULT_MIN_R","composeBubbleSettings","settings","reactiveState","template","layerSettings","palette","_a","DEFAULT_BLACK","PALETTE_MAP","DEFAULT_CONTINUOUS_PALETTE","getAxesDataFromForms"],"mappings":";;;;;;AASA,MAAMA,IAAoB,IACpBC,IAAgBD,IAAoB,IAAI,GACxCE,IAAgB;AACf,SAASC,EACdC,GACAC,GACA;;AACA,QAAMC,IAAWD,EAAc,UACzBE,IAAgBF,EAAc,eAAeC,CAAQ,GACrDE,KAAUC,IAAAJ,EAAc,YAAYD,EAAS,WAAW,KAAK,MAAnD,gBAAAK,EAAsD;AACtE,SAAAL,EAAS,MAAM;AAAA,IACb,iBAAiBG,EAAc,eAAeG;AAAA,IAC9C,YAAYC,EAAYH,KAAWI,CAA0B,EAAE;AAAA,IAC/D,WAAWX,KAAiBI,EAAc,aAAa;AAAA,IACvD,WAAWH;AAAA,EAAA,GAGbE,EAAS,OAAO,EAAC,UAAUJ,KAAqBK,EAAc,aAAa,KAAA,GAE3E,OAAO;AAAA,IACLD;AAAA,IACAS,EAAqBR,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAI1ED,EAAS,YAAYG,EAAc,WAC/BA,EAAc,2BAChBH,EAAS,gBAAgB;AAAA,IACvB,QAAQG,EAAc;AAAA,IACtB,WAAWA,EAAc;AAAA,EAAA,KAIzBA,EAAc,gBAAgBA,EAAc,kBAC9CH,EAAS,cAAc;AAAA,IACrB,GAAGG,EAAc,gBAAgBH,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,GAAGG,EAAc,gBAAgBH,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,QAAQG,EAAc;AAAA,EAAA,IAInBH;AACT;"}
1
+ {"version":3,"file":"composeBubbleSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeBubbleSettings.ts"],"sourcesContent":["import type { BubbleSettings } from '@milaboratories/miplots4';\nimport {\n DEFAULT_BLACK,\n DEFAULT_CONTINUOUS_PALETTE,\n PALETTE_MAP,\n} from '../../constantsAesthetic';\nimport type { BubbleLayer, ReactiveState } from '../../types';\nimport { getAxesDataFromForms } from '../index';\n\nconst DEFAULT_CELL_SIZE = 40;\nconst DEFAULT_MAX_R = DEFAULT_CELL_SIZE / 2 - 2;\nconst DEFAULT_MIN_R = 3;\nexport function composeBubbleSettings(\n settings: BubbleSettings,\n reactiveState: ReactiveState,\n) {\n const template = reactiveState.template as BubbleLayer;\n const layerSettings = reactiveState.layersSettings[template];\n const palette = reactiveState.dataBindAes[settings.valueColor.value]?.palette;\n settings.aes = {\n cellStrokeColor: layerSettings.strokeColor ?? DEFAULT_BLACK,\n colorsList: PALETTE_MAP[palette ?? DEFAULT_CONTINUOUS_PALETTE].colors,\n maxRadius: DEFAULT_MAX_R * (reactiveState.chartScale / 100),\n minRadius: DEFAULT_MIN_R,\n };\n\n settings.size = { cellSize: DEFAULT_CELL_SIZE * (reactiveState.chartScale / 100) };\n\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType),\n );\n\n settings.NAValueAs = layerSettings.NAValueAs;\n if (layerSettings.normalizationDirection) {\n settings.normalization = {\n method: layerSettings.normalizationMethod,\n direction: layerSettings.normalizationDirection,\n };\n }\n\n if (layerSettings.aggregateByX || layerSettings.aggregateByY) {\n settings.aggregation = {\n x: layerSettings.aggregateByX && settings.xGroupBy && settings.xGroupBy.length > 0,\n y: layerSettings.aggregateByY && settings.yGroupBy && settings.yGroupBy.length > 0,\n method: layerSettings.aggregationMethod,\n };\n }\n\n return settings;\n}\n"],"names":["DEFAULT_CELL_SIZE","DEFAULT_MAX_R","DEFAULT_MIN_R","composeBubbleSettings","settings","reactiveState","template","layerSettings","palette","_a","DEFAULT_BLACK","PALETTE_MAP","DEFAULT_CONTINUOUS_PALETTE","getAxesDataFromForms"],"mappings":";;;;;;AASA,MAAMA,IAAoB,IACpBC,IAAgBD,IAAoB,IAAI,GACxCE,IAAgB;AACf,SAASC,EACdC,GACAC,GACA;;AACA,QAAMC,IAAWD,EAAc,UACzBE,IAAgBF,EAAc,eAAeC,CAAQ,GACrDE,KAAUC,IAAAJ,EAAc,YAAYD,EAAS,WAAW,KAAK,MAAnD,gBAAAK,EAAsD;AACtE,SAAAL,EAAS,MAAM;AAAA,IACb,iBAAiBG,EAAc,eAAeG;AAAA,IAC9C,YAAYC,EAAYH,KAAWI,CAA0B,EAAE;AAAA,IAC/D,WAAWX,KAAiBI,EAAc,aAAa;AAAA,IACvD,WAAWH;AAAA,EAAA,GAGbE,EAAS,OAAO,EAAE,UAAUJ,KAAqBK,EAAc,aAAa,KAAA,GAE5E,OAAO;AAAA,IACLD;AAAA,IACAS,EAAqBR,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAG1ED,EAAS,YAAYG,EAAc,WAC/BA,EAAc,2BAChBH,EAAS,gBAAgB;AAAA,IACvB,QAAQG,EAAc;AAAA,IACtB,WAAWA,EAAc;AAAA,EAAA,KAIzBA,EAAc,gBAAgBA,EAAc,kBAC9CH,EAAS,cAAc;AAAA,IACrB,GAAGG,EAAc,gBAAgBH,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,GAAGG,EAAc,gBAAgBH,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,QAAQG,EAAc;AAAA,EAAA,IAInBH;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"composeChartSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeChartSettings.ts"],"sourcesContent":["import {\n ChartType,\n DemoDataStore,\n getControllerByType,\n InputGuide,\n InputState,\n PlotDataAndSettings,\n SelectorStateFilter\n} from '@milaboratories/pf-plots';\nimport {\n GraphMakerProps,\n ReactiveState,\n TitlePosition,\n UniqueValuesBySourceMap\n} from '../../types';\nimport { addFixedOptionsToState } from '../addFixedOptionsToState';\nimport {\n AxesState, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL,\n} from '../../constantsCommon';\nimport {\n BubbleSettings,\n DataByColumns,\n DendroSettings,\n DiscreteSettings,\n HeatmapSettings,\n HistogramSettings,\n ScatterplotSettings,\n ScatterplotUmapSettings,\n Settings\n} from '@milaboratories/miplots4';\nimport { composeDiscreteSettings } from './composeDiscreteSettings';\nimport { composeScatterplotSettings } from './composeScatterplotSettings';\nimport { composeScatterplotUmapSettings } from './composeScatterplotUmapSettings';\nimport { composeHeatmapSettings } from './composeHeatmapSettings';\nimport { composeDendroSettings } from './composeDendroSettings';\nimport { composeHistogramSettings } from './composeHistogramSettings';\nimport { composeBubbleSettings } from './composeBubbleSettings';\nimport { ListOption } from '@platforma-sdk/ui-vue';\n\nfunction getChartSizes(chartScale: number, facetByLength = 0) {\n return {\n width: (facetByLength > 0 ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH) * (chartScale / 100),\n height: (facetByLength > 0 ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT) * (chartScale / 100)\n };\n}\n\nfunction getChartTitle(\n chartType: ChartType,\n optionsState: InputState,\n filterLabelsInfo: Record<string, ListOption>,\n axesSettings: AxesState\n): {\n name: string,\n show: boolean,\n position?: TitlePosition\n} {\n if (\n chartType !== 'scatterplot' &&\n chartType !== 'scatterplot-umap' &&\n chartType !== 'discrete' &&\n chartType !== 'heatmap' &&\n chartType !== 'histogram' &&\n chartType !== 'bubble'\n ) {\n return { name: '', show: false };\n }\n if (axesSettings.title.mode === 'hidden') {\n return { name: '', show: false };\n }\n if (axesSettings.title.mode === 'custom') {\n return { name: axesSettings.title.value, show: true, position: axesSettings.title.position };\n }\n if (axesSettings.title.mode === 'auto') {\n const selectedFilters: string[] = [];\n const usedInTitleStates = [\n ...(optionsState.components?.filters.selectorStates ?? []),\n ...(optionsState.components?.tabBy.selectorStates ?? [])\n ] as SelectorStateFilter[];\n usedInTitleStates.forEach(({ type, selectedSource, selectedFilterValues }) => {\n if ((!type || type === 'equals') && selectedFilterValues && filterLabelsInfo[selectedSource]) {\n const {value, label} = filterLabelsInfo[selectedSource] as {value: unknown, label: string};\n selectedFilters.push(...selectedFilterValues.map(selectedFilterValue => value === selectedFilterValue ? label : String(selectedFilterValue)));\n }\n });\n const title = selectedFilters.join(', ');\n return { name: title, show: true, position: axesSettings.title.position };\n }\n return { name: '', show: false };\n}\n\nexport async function loadDataForPlot(\n inputGuide: InputGuide<InputState>,\n reactiveState: ReactiveState,\n dataStore: DemoDataStore | null,\n fixedOptions?: GraphMakerProps['fixedOptions']\n) {\n if (!inputGuide.ready || dataStore === null) {\n return null;\n }\n try {\n const controller = getControllerByType(reactiveState.chartType);\n const optionsStateWithFixed = await addFixedOptionsToState(\n reactiveState.optionsState,\n dataStore,\n fixedOptions\n );\n return controller.createDataForPlot(\n dataStore,\n optionsStateWithFixed\n );\n } catch (err) {\n console.warn('Cant build chart data');\n // @ts-ignore\n console.warn(err.message);\n return null;\n }\n}\nexport function composeChartSettings(\n chartData: PlotDataAndSettings | null,\n inputGuide: InputGuide<InputState>,\n labelsInfo: UniqueValuesBySourceMap,\n filterLabelsInfo: Record<string, ListOption>,\n reactiveState: ReactiveState,\n): null | {settings: Settings, data: DataByColumns} {\n if (!inputGuide.ready || chartData === null) {\n return null;\n }\n\n let settings = {...chartData.settings};\n const dataByColumns = chartData.data.byColumns;\n settings.title = getChartTitle(reactiveState.chartType, reactiveState.optionsState, filterLabelsInfo, reactiveState.axesSettings);\n settings.size = getChartSizes(reactiveState.chartScale, reactiveState.optionsState.components?.facetBy.selectorStates.length || 0);\n if (reactiveState.chartType === 'discrete') {\n settings = composeDiscreteSettings(settings as DiscreteSettings, reactiveState, labelsInfo, inputGuide);\n }\n if (reactiveState.chartType === 'scatterplot') {\n settings = composeScatterplotSettings(settings as ScatterplotSettings, dataByColumns, reactiveState, inputGuide, labelsInfo);\n }\n if (reactiveState.chartType === 'scatterplot-umap') {\n settings = composeScatterplotUmapSettings(settings as ScatterplotUmapSettings, dataByColumns, reactiveState, inputGuide, labelsInfo);\n }\n if (reactiveState.chartType === 'heatmap') {\n settings = composeHeatmapSettings(settings as HeatmapSettings, reactiveState);\n }\n if (reactiveState.chartType === 'dendro') {\n settings = composeDendroSettings(settings as DendroSettings, dataByColumns, reactiveState, inputGuide, labelsInfo);\n }\n if (reactiveState.chartType === 'histogram') {\n settings = composeHistogramSettings(settings as HistogramSettings, reactiveState, labelsInfo);\n }\n if (reactiveState.chartType === 'bubble') {\n settings = composeBubbleSettings(settings as BubbleSettings, reactiveState);\n }\n return {\n settings: settings as Settings,\n data: chartData.data.byColumns\n };\n}\n"],"names":["getChartSizes","chartScale","facetByLength","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","getChartTitle","chartType","optionsState","filterLabelsInfo","axesSettings","selectedFilters","_a","_b","type","selectedSource","selectedFilterValues","value","label","selectedFilterValue","loadDataForPlot","inputGuide","reactiveState","dataStore","fixedOptions","controller","getControllerByType","optionsStateWithFixed","addFixedOptionsToState","err","composeChartSettings","chartData","labelsInfo","settings","dataByColumns","composeDiscreteSettings","composeScatterplotSettings","composeScatterplotUmapSettings","composeHeatmapSettings","composeDendroSettings","composeHistogramSettings","composeBubbleSettings"],"mappings":"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"}
1
+ {"version":3,"file":"composeChartSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeChartSettings.ts"],"sourcesContent":["import type {\n ChartType,\n DemoDataStore,\n InputGuide,\n InputState,\n PlotDataAndSettings,\n SelectorStateFilter,\n} from '@milaboratories/pf-plots';\nimport {\n getControllerByType,\n} from '@milaboratories/pf-plots';\nimport type {\n GraphMakerProps,\n ReactiveState,\n TitlePosition,\n UniqueValuesBySourceMap,\n} from '../../types';\nimport { addFixedOptionsToState } from '../addFixedOptionsToState';\nimport type {\n AxesState } from '../../constantsCommon';\nimport { DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL,\n} from '../../constantsCommon';\nimport type {\n BubbleSettings,\n DataByColumns,\n DendroSettings,\n DiscreteSettings,\n HeatmapSettings,\n HistogramSettings,\n ScatterplotSettings,\n ScatterplotUmapSettings,\n Settings,\n} from '@milaboratories/miplots4';\nimport { composeDiscreteSettings } from './composeDiscreteSettings';\nimport { composeScatterplotSettings } from './composeScatterplotSettings';\nimport { composeScatterplotUmapSettings } from './composeScatterplotUmapSettings';\nimport { composeHeatmapSettings } from './composeHeatmapSettings';\nimport { composeDendroSettings } from './composeDendroSettings';\nimport { composeHistogramSettings } from './composeHistogramSettings';\nimport { composeBubbleSettings } from './composeBubbleSettings';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\n\nfunction getChartSizes(chartScale: number, facetByLength = 0) {\n return {\n width: (facetByLength > 0 ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH) * (chartScale / 100),\n height: (facetByLength > 0 ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT) * (chartScale / 100),\n };\n}\n\nfunction getChartTitle(\n chartType: ChartType,\n optionsState: InputState,\n filterLabelsInfo: Record<string, ListOption>,\n axesSettings: AxesState,\n): {\n name: string;\n show: boolean;\n position?: TitlePosition;\n } {\n if (\n chartType !== 'scatterplot'\n && chartType !== 'scatterplot-umap'\n && chartType !== 'discrete'\n && chartType !== 'heatmap'\n && chartType !== 'histogram'\n && chartType !== 'bubble'\n ) {\n return { name: '', show: false };\n }\n if (axesSettings.title.mode === 'hidden') {\n return { name: '', show: false };\n }\n if (axesSettings.title.mode === 'custom') {\n return { name: axesSettings.title.value, show: true, position: axesSettings.title.position };\n }\n if (axesSettings.title.mode === 'auto') {\n const selectedFilters: string[] = [];\n const usedInTitleStates = [\n ...(optionsState.components?.filters.selectorStates ?? []),\n ...(optionsState.components?.tabBy.selectorStates ?? []),\n ] as SelectorStateFilter[];\n usedInTitleStates.forEach(({ type, selectedSource, selectedFilterValues }) => {\n if ((!type || type === 'equals') && selectedFilterValues && filterLabelsInfo[selectedSource]) {\n const { value, label } = filterLabelsInfo[selectedSource] as { value: unknown; label: string };\n selectedFilters.push(...selectedFilterValues.map((selectedFilterValue) => value === selectedFilterValue ? label : String(selectedFilterValue)));\n }\n });\n const title = selectedFilters.join(', ');\n return { name: title, show: true, position: axesSettings.title.position };\n }\n return { name: '', show: false };\n}\n\nexport async function loadDataForPlot(\n inputGuide: InputGuide<InputState>,\n reactiveState: ReactiveState,\n dataStore: DemoDataStore | null,\n fixedOptions?: GraphMakerProps['fixedOptions'],\n) {\n if (!inputGuide.ready || dataStore === null) {\n return null;\n }\n try {\n const controller = getControllerByType(reactiveState.chartType);\n const optionsStateWithFixed = await addFixedOptionsToState(\n reactiveState.optionsState,\n dataStore,\n fixedOptions,\n );\n return controller.createDataForPlot(\n dataStore,\n optionsStateWithFixed,\n );\n } catch (err) {\n console.warn('Cant build chart data');\n console.warn((err as Error).message);\n return null;\n }\n}\nexport function composeChartSettings(\n chartData: PlotDataAndSettings | null,\n inputGuide: InputGuide<InputState>,\n labelsInfo: UniqueValuesBySourceMap,\n filterLabelsInfo: Record<string, ListOption>,\n reactiveState: ReactiveState,\n): null | { settings: Settings; data: DataByColumns } {\n if (!inputGuide.ready || chartData === null) {\n return null;\n }\n\n let settings = { ...chartData.settings };\n const dataByColumns = chartData.data.byColumns;\n settings.title = getChartTitle(reactiveState.chartType, reactiveState.optionsState, filterLabelsInfo, reactiveState.axesSettings);\n settings.size = getChartSizes(reactiveState.chartScale, reactiveState.optionsState.components?.facetBy.selectorStates.length || 0);\n if (reactiveState.chartType === 'discrete') {\n settings = composeDiscreteSettings(settings as DiscreteSettings, reactiveState, labelsInfo, inputGuide);\n }\n if (reactiveState.chartType === 'scatterplot') {\n settings = composeScatterplotSettings(settings as ScatterplotSettings, dataByColumns, reactiveState, inputGuide, labelsInfo);\n }\n if (reactiveState.chartType === 'scatterplot-umap') {\n settings = composeScatterplotUmapSettings(settings as ScatterplotUmapSettings, dataByColumns, reactiveState, inputGuide, labelsInfo);\n }\n if (reactiveState.chartType === 'heatmap') {\n settings = composeHeatmapSettings(settings as HeatmapSettings, reactiveState);\n }\n if (reactiveState.chartType === 'dendro') {\n settings = composeDendroSettings(settings as DendroSettings, dataByColumns, reactiveState, inputGuide, labelsInfo);\n }\n if (reactiveState.chartType === 'histogram') {\n settings = composeHistogramSettings(settings as HistogramSettings, reactiveState, labelsInfo);\n }\n if (reactiveState.chartType === 'bubble') {\n settings = composeBubbleSettings(settings as BubbleSettings, reactiveState);\n }\n return {\n settings: settings as Settings,\n data: chartData.data.byColumns,\n };\n}\n"],"names":["getChartSizes","chartScale","facetByLength","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","getChartTitle","chartType","optionsState","filterLabelsInfo","axesSettings","selectedFilters","_a","_b","type","selectedSource","selectedFilterValues","value","label","selectedFilterValue","loadDataForPlot","inputGuide","reactiveState","dataStore","fixedOptions","controller","getControllerByType","optionsStateWithFixed","addFixedOptionsToState","err","composeChartSettings","chartData","labelsInfo","settings","dataByColumns","composeDiscreteSettings","composeScatterplotSettings","composeScatterplotUmapSettings","composeHeatmapSettings","composeDendroSettings","composeHistogramSettings","composeBubbleSettings"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"composeDendroSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeDendroSettings.ts"],"sourcesContent":["import {\n DendroUIState,\n InputGuide, InputState,\n PlotDataAndSettings\n} from '@milaboratories/pf-plots';\nimport { ReactiveState, UniqueValuesBySourceMap, UniqueValuesData } from '../../types';\nimport { DEFAULT_DOT_RANGE, DEFAULT_DOT_SHAPE, getDendroAes } from '../../dataBindAes';\nimport { DEFAULT_BLACK, PALETTE_MAP } from '../../constantsAesthetic';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, isNumberRange } from '../../constantsCommon';\nimport { DendroSettings } from '@milaboratories/miplots4';\n\nconst NARROW_TREE_WIDTH = 280;\n\nexport function composeDendroSettings(\n settings: DendroSettings,\n dataByColumns: PlotDataAndSettings['data']['byColumns'],\n reactiveState: ReactiveState,\n inputGuide: InputGuide<InputState>,\n uniqueValuesData: UniqueValuesBySourceMap\n) {\n settings.rootPosition = 'left';\n settings.size = { width: DEFAULT_WIDTH, height: DEFAULT_HEIGHT }\n\n const optionsState = (reactiveState.optionsState as DendroUIState).components;\n const layerSettings = reactiveState.layersSettings.dendro;\n const aes = settings?.aes as Record<string, Record<string, unknown> | string | number>;\n if (aes.nodeShape && typeof aes.nodeShape === 'object') {\n const selectedStr = optionsState.nodeShape.selectorStates[0]?.selectedSource;\n const valuesMap = getDendroAes(\n selectedStr,\n uniqueValuesData,\n reactiveState.dataBindAes,\n 'dotShape'\n );\n if (Object.keys(valuesMap).length) {\n aes.nodeShape.valuesMap = valuesMap;\n } else {\n aes.nodeShape = DEFAULT_DOT_SHAPE;\n }\n } else if (typeof layerSettings.dotShape === 'string') {\n aes.nodeShape = layerSettings.dotShape as string;\n }\n if (aes.nodeColor && typeof aes.nodeColor === 'object') {\n const selectedStr = optionsState.nodeColor.selectorStates[0]?.selectedSource;\n const valuesMap = getDendroAes(\n selectedStr,\n uniqueValuesData,\n reactiveState.dataBindAes,\n 'color'\n );\n if (Object.keys(valuesMap).length) {\n aes.nodeColor.valuesMap = valuesMap;\n } else {\n aes.nodeColor = DEFAULT_BLACK;\n }\n } else if (typeof layerSettings.dotFill === 'string') {\n aes.nodeColor = layerSettings.dotFill;\n }\n if (aes.nodeSize && typeof aes.nodeSize === 'object') {\n const selectedStr = optionsState.nodeSize.selectorStates[0]?.selectedSource;\n let [min, max] = [Infinity, -Infinity];\n dataByColumns.values[selectedStr].forEach(v => {\n const value = Number(v);\n if (value < min) {\n min = value;\n }\n if (value > max) {\n max = value;\n }\n });\n\n aes.nodeSize.domain = [min, max];\n aes.nodeSize.range = isNumberRange(layerSettings.dotSize) ? [layerSettings.dotSize.min, layerSettings.dotSize.max] : [DEFAULT_DOT_RANGE.min, DEFAULT_DOT_RANGE.max];\n } else if (typeof layerSettings.dotSize === 'number') {\n aes.nodeSize = layerSettings.dotSize;\n }\n if (aes.lineColor && typeof aes.lineColor === 'object') {\n const selectedStr = optionsState.lineColor.selectorStates[0]?.selectedSource;\n aes.lineColor.valuesMap = getDendroAes(\n selectedStr,\n uniqueValuesData,\n reactiveState.dataBindAes,\n 'color'\n );\n } else if (\n typeof layerSettings.lineColor === 'string'\n ) {\n aes.lineColor = layerSettings.lineColor;\n }\n\n if (optionsState.heatmapForSequence.selectorStates.length > 0) {\n settings.heatmapSettings = {\n valueType: 'stringSource',\n aes: {\n colorsList: PALETTE_MAP['bright'].colors\n }\n };\n (settings.size as Record<string, number>).maxCellWidth = 8;\n }\n\n if (optionsState.heatmapAnnotation.selectorStates.length > 0) {\n const selectedSource = optionsState.heatmapAnnotation.selectorStates[0].selectedSource;\n const info = inputGuide.getSourceInfo(selectedSource);\n const valueType =\n info.type === 'Double' ||\n info.type === 'Float' ||\n info.type === 'Int' ||\n info.type === 'Long' ? 'continuous' : 'discrete';\n const colors = PALETTE_MAP['bright'].colors; // TODO: should be in settings\n\n let colorsMap;\n const uniqueValues = uniqueValuesData[selectedSource]?.list;\n if (uniqueValues) {\n colorsMap = uniqueValues.reduce((res: Record<string, string>, value, idx) => {\n res[value] = colors[idx % colors.length];\n return res;\n }, {});\n }\n\n settings.heatmapSettings = {\n valueType,\n aes: {\n colorsList: PALETTE_MAP['viridis'].colors,\n colorsMap: colorsMap\n }\n };\n }\n\n settings.mode = layerSettings.mode;\n settings.leavesMode = layerSettings.leavesMode;\n settings.showNodesLabels = optionsState.labels.selectorStates.length > 0;\n settings.showLeavesLabels = optionsState.labels.selectorStates.length > 0;\n\n // in other cases (if there is heatmap) tree width is half-width of svg\n if (layerSettings.showTable &&\n optionsState.heatmapAnnotation.selectorStates.length === 0 &&\n optionsState.heatmapForSequence.selectorStates.length === 0\n ) {\n (settings.size as Record<string, number>).width = NARROW_TREE_WIDTH;\n }\n\n (settings.size as Record<string, number>).scale = reactiveState.chartScale / 100;\n settings.legend = { show: reactiveState.layersSettings.dendro.showLegend ?? true };\n return settings;\n}\n"],"names":["NARROW_TREE_WIDTH","composeDendroSettings","settings","dataByColumns","reactiveState","inputGuide","uniqueValuesData","DEFAULT_WIDTH","DEFAULT_HEIGHT","optionsState","layerSettings","aes","selectedStr","_a","valuesMap","getDendroAes","DEFAULT_DOT_SHAPE","_b","DEFAULT_BLACK","_c","min","max","v","value","isNumberRange","DEFAULT_DOT_RANGE","_d","PALETTE_MAP","selectedSource","info","valueType","colors","colorsMap","uniqueValues","_e","res","idx"],"mappings":"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"}
1
+ {"version":3,"file":"composeDendroSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeDendroSettings.ts"],"sourcesContent":["import type {\n DendroUIState,\n InputGuide, InputState,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport type { ReactiveState, UniqueValuesBySourceMap } from '../../types';\nimport { DEFAULT_DOT_RANGE, DEFAULT_DOT_SHAPE, getDendroAes } from '../../dataBindAes';\nimport { DEFAULT_BLACK, PALETTE_MAP } from '../../constantsAesthetic';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, isNumberRange } from '../../constantsCommon';\nimport type { DendroSettings } from '@milaboratories/miplots4';\n\nconst NARROW_TREE_WIDTH = 280;\n\nexport function composeDendroSettings(\n settings: DendroSettings,\n dataByColumns: PlotDataAndSettings['data']['byColumns'],\n reactiveState: ReactiveState,\n inputGuide: InputGuide<InputState>,\n uniqueValuesData: UniqueValuesBySourceMap,\n) {\n settings.rootPosition = 'left';\n settings.size = { width: DEFAULT_WIDTH, height: DEFAULT_HEIGHT };\n\n const optionsState = (reactiveState.optionsState as DendroUIState).components;\n const layerSettings = reactiveState.layersSettings.dendro;\n const aes = settings?.aes as Record<string, Record<string, unknown> | string | number>;\n if (aes.nodeShape && typeof aes.nodeShape === 'object') {\n const selectedStr = optionsState.nodeShape.selectorStates[0]?.selectedSource;\n const valuesMap = getDendroAes(\n selectedStr,\n uniqueValuesData,\n reactiveState.dataBindAes,\n 'dotShape',\n );\n if (Object.keys(valuesMap).length) {\n aes.nodeShape.valuesMap = valuesMap;\n } else {\n aes.nodeShape = DEFAULT_DOT_SHAPE;\n }\n } else if (typeof layerSettings.dotShape === 'string') {\n aes.nodeShape = layerSettings.dotShape as string;\n }\n if (aes.nodeColor && typeof aes.nodeColor === 'object') {\n const selectedStr = optionsState.nodeColor.selectorStates[0]?.selectedSource;\n const valuesMap = getDendroAes(\n selectedStr,\n uniqueValuesData,\n reactiveState.dataBindAes,\n 'color',\n );\n if (Object.keys(valuesMap).length) {\n aes.nodeColor.valuesMap = valuesMap;\n } else {\n aes.nodeColor = DEFAULT_BLACK;\n }\n } else if (typeof layerSettings.dotFill === 'string') {\n aes.nodeColor = layerSettings.dotFill;\n }\n if (aes.nodeSize && typeof aes.nodeSize === 'object') {\n const selectedStr = optionsState.nodeSize.selectorStates[0]?.selectedSource;\n let [min, max] = [Infinity, -Infinity];\n dataByColumns.values[selectedStr].forEach((v) => {\n const value = Number(v);\n if (value < min) {\n min = value;\n }\n if (value > max) {\n max = value;\n }\n });\n\n aes.nodeSize.domain = [min, max];\n aes.nodeSize.range = isNumberRange(layerSettings.dotSize) ? [layerSettings.dotSize.min, layerSettings.dotSize.max] : [DEFAULT_DOT_RANGE.min, DEFAULT_DOT_RANGE.max];\n } else if (typeof layerSettings.dotSize === 'number') {\n aes.nodeSize = layerSettings.dotSize;\n }\n if (aes.lineColor && typeof aes.lineColor === 'object') {\n const selectedStr = optionsState.lineColor.selectorStates[0]?.selectedSource;\n aes.lineColor.valuesMap = getDendroAes(\n selectedStr,\n uniqueValuesData,\n reactiveState.dataBindAes,\n 'color',\n );\n } else if (\n typeof layerSettings.lineColor === 'string'\n ) {\n aes.lineColor = layerSettings.lineColor;\n }\n\n if (optionsState.heatmapForSequence.selectorStates.length > 0) {\n settings.heatmapSettings = {\n valueType: 'stringSource',\n aes: {\n colorsList: PALETTE_MAP['bright'].colors,\n },\n };\n (settings.size as Record<string, number>).maxCellWidth = 8;\n }\n\n if (optionsState.heatmapAnnotation.selectorStates.length > 0) {\n const selectedSource = optionsState.heatmapAnnotation.selectorStates[0].selectedSource;\n const info = inputGuide.getSourceInfo(selectedSource);\n const valueType\n = info.type === 'Double'\n || info.type === 'Float'\n || info.type === 'Int'\n || info.type === 'Long'\n ? 'continuous'\n : 'discrete';\n const colors = PALETTE_MAP['bright'].colors; // TODO: should be in settings\n\n let colorsMap;\n const uniqueValues = uniqueValuesData[selectedSource]?.list;\n if (uniqueValues) {\n colorsMap = uniqueValues.reduce((res: Record<string, string>, value, idx) => {\n res[value] = colors[idx % colors.length];\n return res;\n }, {});\n }\n\n settings.heatmapSettings = {\n valueType,\n aes: {\n colorsList: PALETTE_MAP['viridis'].colors,\n colorsMap: colorsMap,\n },\n };\n }\n\n settings.mode = layerSettings.mode;\n settings.leavesMode = layerSettings.leavesMode;\n settings.showNodesLabels = optionsState.labels.selectorStates.length > 0;\n settings.showLeavesLabels = optionsState.labels.selectorStates.length > 0;\n\n // in other cases (if there is heatmap) tree width is half-width of svg\n if (layerSettings.showTable\n && optionsState.heatmapAnnotation.selectorStates.length === 0\n && optionsState.heatmapForSequence.selectorStates.length === 0\n ) {\n (settings.size as Record<string, number>).width = NARROW_TREE_WIDTH;\n }\n\n (settings.size as Record<string, number>).scale = reactiveState.chartScale / 100;\n settings.legend = { show: reactiveState.layersSettings.dendro.showLegend ?? true };\n return settings;\n}\n"],"names":["NARROW_TREE_WIDTH","composeDendroSettings","settings","dataByColumns","reactiveState","inputGuide","uniqueValuesData","DEFAULT_WIDTH","DEFAULT_HEIGHT","optionsState","layerSettings","aes","selectedStr","_a","valuesMap","getDendroAes","DEFAULT_DOT_SHAPE","_b","DEFAULT_BLACK","_c","min","max","v","value","isNumberRange","DEFAULT_DOT_RANGE","_d","PALETTE_MAP","selectedSource","info","valueType","colors","colorsMap","uniqueValues","_e","res","idx"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import "../../constantsAesthetic.js";
2
1
  import { DISCRETE_TEMPLATES_MAP as e } from "../../constantsCommon.js";
3
2
  import { getChartSettingsInheritedAes as y } from "../../dataBindAes.js";
4
3
  import { getUsedAesInMapping as c } from "../getUsedAesInMapping.js";
@@ -7,6 +6,7 @@ import { getAxesDataFromForms as f } from "./getAxesDataFromForms.js";
7
6
  import "@milaboratories/pf-plots";
8
7
  import "@platforma-sdk/model";
9
8
  import "vue";
9
+ import "../../constantsAesthetic.js";
10
10
  function T(r, o, i, l) {
11
11
  var s;
12
12
  const d = g(
@@ -1 +1 @@
1
- {"version":3,"file":"composeDiscreteSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeDiscreteSettings.ts"],"sourcesContent":["import { DiscreteSettings } from '@milaboratories/miplots4';\nimport { DiscreteUIState, InputGuide, InputState } from '@milaboratories/pf-plots';\nimport { DEFAULT_BLACK, DEFAULT_WHITE } from '../../constantsAesthetic';\nimport { DISCRETE_TEMPLATES_MAP, DiscreteStatisticsState } from '../../constantsCommon';\nimport {\n DEFAULT_DOT_SHAPE,\n DEFAULT_DOT_SIZE,\n DEFAULT_LINE_WIDTH,\n getChartSettingsInheritedAes\n} from '../../dataBindAes';\nimport {\n DiscreteLayersTemplate,\n ReactiveState,\n UniqueValuesBySourceMap\n} from '../../types';\nimport { getUsedAesInMapping } from '../getUsedAesInMapping';\nimport { getAxesDataFromForms, getDiscreteLayersSettings } from '../index';\n\nconst NULL_DISCRETE_AES = {\n fillColor: DEFAULT_WHITE,\n lineColor: DEFAULT_BLACK,\n dotFill: DEFAULT_WHITE,\n dotShape: DEFAULT_DOT_SHAPE,\n dotSize: DEFAULT_DOT_SIZE,\n lineWidth: DEFAULT_LINE_WIDTH,\n}\nexport function composeDiscreteSettings(\n settings: DiscreteSettings,\n reactiveState: ReactiveState,\n uniqueValuesData: UniqueValuesBySourceMap,\n inputGuide: InputGuide<InputState>,\n) {\n const layers = getDiscreteLayersSettings(\n DISCRETE_TEMPLATES_MAP[reactiveState.template as DiscreteLayersTemplate],\n reactiveState.layersSettings,\n reactiveState.statisticsSettings as DiscreteStatisticsState,\n reactiveState.optionsState as DiscreteUIState,\n inputGuide\n ) as DiscreteSettings['layers'];\n const usedAesInMappingsMap = getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide\n );\n settings.layers = layers;\n\n const inputStateMap = reactiveState.optionsState.components;\n\n if (inputStateMap.primaryGrouping.selectorStates.length && settings.primaryGrouping) {\n settings.primaryGrouping = {...settings.primaryGrouping}\n if (settings.primaryGrouping.order) {\n settings.primaryGrouping.order = [...settings.primaryGrouping.order]\n }\n const columnName = inputStateMap.primaryGrouping.selectorStates[0].selectedSource;\n const usedAesInMapping = usedAesInMappingsMap[columnName];\n Object.assign(\n settings.primaryGrouping,\n getChartSettingsInheritedAes(\n uniqueValuesData,\n reactiveState.dataBindAes[columnName],\n columnName,\n usedAesInMapping\n )\n );\n settings.primaryGrouping.allowNullGroup = reactiveState.axesSettings.axisX.allowNullPrimaryGroups;\n if (!reactiveState.axesSettings.axisX.allowNullPrimaryGroups && settings.primaryGrouping.order) {\n settings.primaryGrouping.order = settings.primaryGrouping.order.filter(v => v !== 'null');\n }\n }\n if (inputStateMap.secondaryGrouping.selectorStates && settings.secondaryGrouping) {\n settings.secondaryGrouping = {...settings.secondaryGrouping}\n if (settings.secondaryGrouping.order) {\n settings.secondaryGrouping.order = [...settings.secondaryGrouping.order]\n }\n const columnName = inputStateMap.secondaryGrouping.selectorStates[0].selectedSource;\n const usedAesInMapping = usedAesInMappingsMap[columnName];\n Object.assign(\n settings.secondaryGrouping,\n getChartSettingsInheritedAes(\n uniqueValuesData,\n reactiveState.dataBindAes[columnName],\n columnName,\n usedAesInMapping\n )\n );\n settings.secondaryGrouping.allowNullGroup = reactiveState.axesSettings.axisX.allowNullSecondaryGroups;\n if (!reactiveState.axesSettings.axisX.allowNullPrimaryGroups && settings.secondaryGrouping.order) {\n settings.secondaryGrouping.order = settings.secondaryGrouping.order.filter(v => v !== 'null');\n }\n }\n\n const primaryGroups = settings.primaryGrouping ? uniqueValuesData[settings.primaryGrouping.columnName.value]?.options : [];\n\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType, primaryGroups)\n );\n\n return settings;\n}"],"names":["composeDiscreteSettings","settings","reactiveState","uniqueValuesData","inputGuide","layers","getDiscreteLayersSettings","DISCRETE_TEMPLATES_MAP","usedAesInMappingsMap","getUsedAesInMapping","inputStateMap","columnName","usedAesInMapping","getChartSettingsInheritedAes","v","primaryGroups","_a","getAxesDataFromForms"],"mappings":";;;;;;;;;AA0BO,SAASA,EACdC,GACAC,GACAC,GACAC,GACA;;AACA,QAAMC,IAASC;AAAA,IACbC,EAAuBL,EAAc,QAAkC;AAAA,IACvEA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdE;AAAA,EAAA,GAEII,IAAuBC;AAAA,IAC3BP,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdE;AAAA,EAAA;AAEF,EAAAH,EAAS,SAASI;AAElB,QAAMK,IAAgBR,EAAc,aAAa;AAEjD,MAAIQ,EAAc,gBAAgB,eAAe,UAAUT,EAAS,iBAAiB;AACnF,IAAAA,EAAS,kBAAkB,EAAC,GAAGA,EAAS,gBAAA,GACpCA,EAAS,gBAAgB,UAC3BA,EAAS,gBAAgB,QAAQ,CAAC,GAAGA,EAAS,gBAAgB,KAAK;AAErE,UAAMU,IAAaD,EAAc,gBAAgB,eAAe,CAAC,EAAE,gBAC7DE,IAAmBJ,EAAqBG,CAAU;AACxD,WAAO;AAAA,MACLV,EAAS;AAAA,MACTY;AAAA,QACEV;AAAA,QACAD,EAAc,YAAYS,CAAU;AAAA,QACpCA;AAAA,QACAC;AAAA,MAAA;AAAA,IACF,GAEFX,EAAS,gBAAgB,iBAAiBC,EAAc,aAAa,MAAM,wBACvE,CAACA,EAAc,aAAa,MAAM,0BAA0BD,EAAS,gBAAgB,UACvFA,EAAS,gBAAgB,QAAQA,EAAS,gBAAgB,MAAM,OAAO,CAAAa,MAAKA,MAAM,MAAM;AAAA,EAE5F;AACA,MAAIJ,EAAc,kBAAkB,kBAAkBT,EAAS,mBAAmB;AAChF,IAAAA,EAAS,oBAAoB,EAAC,GAAGA,EAAS,kBAAA,GACtCA,EAAS,kBAAkB,UAC7BA,EAAS,kBAAkB,QAAQ,CAAC,GAAGA,EAAS,kBAAkB,KAAK;AAEzE,UAAMU,IAAaD,EAAc,kBAAkB,eAAe,CAAC,EAAE,gBAC/DE,IAAmBJ,EAAqBG,CAAU;AACxD,WAAO;AAAA,MACLV,EAAS;AAAA,MACTY;AAAA,QACEV;AAAA,QACAD,EAAc,YAAYS,CAAU;AAAA,QACpCA;AAAA,QACAC;AAAA,MAAA;AAAA,IACF,GAEFX,EAAS,kBAAkB,iBAAiBC,EAAc,aAAa,MAAM,0BACzE,CAACA,EAAc,aAAa,MAAM,0BAA0BD,EAAS,kBAAkB,UACzFA,EAAS,kBAAkB,QAAQA,EAAS,kBAAkB,MAAM,OAAO,CAAAa,MAAKA,MAAM,MAAM;AAAA,EAEhG;AAEA,QAAMC,IAAgBd,EAAS,mBAAkBe,IAAAb,EAAiBF,EAAS,gBAAgB,WAAW,KAAK,MAA1D,gBAAAe,EAA6D,UAAU,CAAA;AAExH,gBAAO;AAAA,IACLf;AAAA,IACAgB,EAAqBf,EAAc,cAAcA,EAAc,WAAWa,CAAa;AAAA,EAAA,GAGlFd;AACT;"}
1
+ {"version":3,"file":"composeDiscreteSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeDiscreteSettings.ts"],"sourcesContent":["import type { DiscreteSettings } from '@milaboratories/miplots4';\nimport type { DiscreteUIState, InputGuide, InputState } from '@milaboratories/pf-plots';\nimport type { DiscreteStatisticsState } from '../../constantsCommon';\nimport { DISCRETE_TEMPLATES_MAP } from '../../constantsCommon';\nimport {\n getChartSettingsInheritedAes,\n} from '../../dataBindAes';\nimport type {\n DiscreteLayersTemplate,\n ReactiveState,\n UniqueValuesBySourceMap,\n} from '../../types';\nimport { getUsedAesInMapping } from '../getUsedAesInMapping';\nimport { getAxesDataFromForms, getDiscreteLayersSettings } from '../index';\n\nexport function composeDiscreteSettings(\n settings: DiscreteSettings,\n reactiveState: ReactiveState,\n uniqueValuesData: UniqueValuesBySourceMap,\n inputGuide: InputGuide<InputState>,\n) {\n const layers = getDiscreteLayersSettings(\n DISCRETE_TEMPLATES_MAP[reactiveState.template as DiscreteLayersTemplate],\n reactiveState.layersSettings,\n reactiveState.statisticsSettings as DiscreteStatisticsState,\n reactiveState.optionsState as DiscreteUIState,\n inputGuide,\n ) as DiscreteSettings['layers'];\n const usedAesInMappingsMap = getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide,\n );\n settings.layers = layers;\n\n const inputStateMap = reactiveState.optionsState.components;\n\n if (inputStateMap.primaryGrouping.selectorStates.length && settings.primaryGrouping) {\n settings.primaryGrouping = { ...settings.primaryGrouping };\n if (settings.primaryGrouping.order) {\n settings.primaryGrouping.order = [...settings.primaryGrouping.order];\n }\n const columnName = inputStateMap.primaryGrouping.selectorStates[0].selectedSource;\n const usedAesInMapping = usedAesInMappingsMap[columnName];\n Object.assign(\n settings.primaryGrouping,\n getChartSettingsInheritedAes(\n uniqueValuesData,\n reactiveState.dataBindAes[columnName],\n columnName,\n usedAesInMapping,\n ),\n );\n settings.primaryGrouping.allowNullGroup = reactiveState.axesSettings.axisX.allowNullPrimaryGroups;\n if (!reactiveState.axesSettings.axisX.allowNullPrimaryGroups && settings.primaryGrouping.order) {\n settings.primaryGrouping.order = settings.primaryGrouping.order.filter((v) => v !== 'null');\n }\n }\n if (inputStateMap.secondaryGrouping.selectorStates && settings.secondaryGrouping) {\n settings.secondaryGrouping = { ...settings.secondaryGrouping };\n if (settings.secondaryGrouping.order) {\n settings.secondaryGrouping.order = [...settings.secondaryGrouping.order];\n }\n const columnName = inputStateMap.secondaryGrouping.selectorStates[0].selectedSource;\n const usedAesInMapping = usedAesInMappingsMap[columnName];\n Object.assign(\n settings.secondaryGrouping,\n getChartSettingsInheritedAes(\n uniqueValuesData,\n reactiveState.dataBindAes[columnName],\n columnName,\n usedAesInMapping,\n ),\n );\n settings.secondaryGrouping.allowNullGroup = reactiveState.axesSettings.axisX.allowNullSecondaryGroups;\n if (!reactiveState.axesSettings.axisX.allowNullPrimaryGroups && settings.secondaryGrouping.order) {\n settings.secondaryGrouping.order = settings.secondaryGrouping.order.filter((v) => v !== 'null');\n }\n }\n\n const primaryGroups = settings.primaryGrouping ? uniqueValuesData[settings.primaryGrouping.columnName.value]?.options : [];\n\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType, primaryGroups),\n );\n\n return settings;\n}\n"],"names":["composeDiscreteSettings","settings","reactiveState","uniqueValuesData","inputGuide","layers","getDiscreteLayersSettings","DISCRETE_TEMPLATES_MAP","usedAesInMappingsMap","getUsedAesInMapping","inputStateMap","columnName","usedAesInMapping","getChartSettingsInheritedAes","v","primaryGroups","_a","getAxesDataFromForms"],"mappings":";;;;;;;;;AAeO,SAASA,EACdC,GACAC,GACAC,GACAC,GACA;;AACA,QAAMC,IAASC;AAAA,IACbC,EAAuBL,EAAc,QAAkC;AAAA,IACvEA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdE;AAAA,EAAA,GAEII,IAAuBC;AAAA,IAC3BP,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdE;AAAA,EAAA;AAEF,EAAAH,EAAS,SAASI;AAElB,QAAMK,IAAgBR,EAAc,aAAa;AAEjD,MAAIQ,EAAc,gBAAgB,eAAe,UAAUT,EAAS,iBAAiB;AACnF,IAAAA,EAAS,kBAAkB,EAAE,GAAGA,EAAS,gBAAA,GACrCA,EAAS,gBAAgB,UAC3BA,EAAS,gBAAgB,QAAQ,CAAC,GAAGA,EAAS,gBAAgB,KAAK;AAErE,UAAMU,IAAaD,EAAc,gBAAgB,eAAe,CAAC,EAAE,gBAC7DE,IAAmBJ,EAAqBG,CAAU;AACxD,WAAO;AAAA,MACLV,EAAS;AAAA,MACTY;AAAA,QACEV;AAAA,QACAD,EAAc,YAAYS,CAAU;AAAA,QACpCA;AAAA,QACAC;AAAA,MAAA;AAAA,IACF,GAEFX,EAAS,gBAAgB,iBAAiBC,EAAc,aAAa,MAAM,wBACvE,CAACA,EAAc,aAAa,MAAM,0BAA0BD,EAAS,gBAAgB,UACvFA,EAAS,gBAAgB,QAAQA,EAAS,gBAAgB,MAAM,OAAO,CAACa,MAAMA,MAAM,MAAM;AAAA,EAE9F;AACA,MAAIJ,EAAc,kBAAkB,kBAAkBT,EAAS,mBAAmB;AAChF,IAAAA,EAAS,oBAAoB,EAAE,GAAGA,EAAS,kBAAA,GACvCA,EAAS,kBAAkB,UAC7BA,EAAS,kBAAkB,QAAQ,CAAC,GAAGA,EAAS,kBAAkB,KAAK;AAEzE,UAAMU,IAAaD,EAAc,kBAAkB,eAAe,CAAC,EAAE,gBAC/DE,IAAmBJ,EAAqBG,CAAU;AACxD,WAAO;AAAA,MACLV,EAAS;AAAA,MACTY;AAAA,QACEV;AAAA,QACAD,EAAc,YAAYS,CAAU;AAAA,QACpCA;AAAA,QACAC;AAAA,MAAA;AAAA,IACF,GAEFX,EAAS,kBAAkB,iBAAiBC,EAAc,aAAa,MAAM,0BACzE,CAACA,EAAc,aAAa,MAAM,0BAA0BD,EAAS,kBAAkB,UACzFA,EAAS,kBAAkB,QAAQA,EAAS,kBAAkB,MAAM,OAAO,CAACa,MAAMA,MAAM,MAAM;AAAA,EAElG;AAEA,QAAMC,IAAgBd,EAAS,mBAAkBe,IAAAb,EAAiBF,EAAS,gBAAgB,WAAW,KAAK,MAA1D,gBAAAe,EAA6D,UAAU,CAAA;AAExH,gBAAO;AAAA,IACLf;AAAA,IACAgB,EAAqBf,EAAc,cAAcA,EAAc,WAAWa,CAAa;AAAA,EAAA,GAGlFd;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"composeHeatmapSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeHeatmapSettings.ts"],"sourcesContent":["import { HeatmapSettings } from '@milaboratories/miplots4';\nimport {\n DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE,\n DEFAULT_PALETTE,\n PALETTE_MAP\n} from '../../constantsAesthetic';\nimport { HeatmapLayerTemplate, ReactiveState } from '../../types';\nimport { getAxesDataFromForms } from '../index';\n\nexport function composeHeatmapSettings(\n settings: HeatmapSettings,\n reactiveState: ReactiveState\n) {\n const aes = {} as Record<string, unknown>;\n const palette = reactiveState.dataBindAes[settings.valueColumn.value]?.palette;\n if (settings?.valueType !== 'discrete') {\n if (reactiveState.template === 'heatmapClustered') {\n const layer = reactiveState.layersSettings.heatmapClustered;\n if (!layer.disableClusteringX) {\n settings.dendrogramX = {\n fillNA: 0,\n showNodes: false,\n hidden: !layer.dendrogramX\n };\n }\n if (!layer.disableClusteringY) {\n settings.dendrogramY = {\n fillNA: 0,\n position: 'right',\n showNodes: false,\n hidden: !layer.dendrogramY\n };\n }\n }\n aes.colorsList = PALETTE_MAP[palette ?? DEFAULT_PALETTE].colors;\n } else {\n aes.colorsList = PALETTE_MAP[palette ?? 'bright'].colors;\n }\n\n settings.aes = aes;\n\n settings.annotations?.forEach((annotationSchema) => {\n const source = annotationSchema.valueColumn.value;\n const palette = reactiveState.dataBindAes[source]?.palette;\n const defaultPalette = annotationSchema.type === 'discrete' ? DEFAULT_CATEGORICAL_PALETTE : DEFAULT_CONTINUOUS_PALETTE;\n\n annotationSchema.colors = PALETTE_MAP[palette ?? defaultPalette].colors;\n });\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType)\n );\n\n if (reactiveState.axesSettings.axisX.cellSize !== null && settings.size) {\n settings.size.cellWidth = reactiveState.axesSettings.axisX.cellSize;\n }\n if (reactiveState.axesSettings.axisY.cellSize !== null && settings.size) {\n settings.size.cellHeight = reactiveState.axesSettings.axisY.cellSize;\n }\n if (reactiveState.template === 'heatmapClustered' && settings?.valueType !== 'discrete') {\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedX = false;\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedY = false;\n }\n\n const template = reactiveState.template as HeatmapLayerTemplate;\n const layerSettings = reactiveState.layersSettings[template];\n\n settings.NAValueAs = layerSettings.NAValueAs;\n if (settings.valueType === 'continuous' && layerSettings.normalizationDirection) {\n settings.normalization = {\n method: layerSettings.normalizationMethod,\n direction: layerSettings.normalizationDirection\n }\n }\n\n if (settings.valueType === 'continuous' && (layerSettings.aggregateByX || layerSettings.aggregateByY)) {\n settings.aggregation = {\n x: layerSettings.aggregateByX && settings.xGroupBy && settings.xGroupBy.length > 0,\n y: layerSettings.aggregateByY && settings.yGroupBy && settings.yGroupBy.length > 0,\n method: layerSettings.aggregationMethod,\n }\n }\n\n if (reactiveState.axesSettings.other.canvasRenderMode) {\n settings.cellsRenderingMode = 'canvas';\n }\n\n return settings;\n}"],"names":["composeHeatmapSettings","settings","reactiveState","aes","palette","_a","layer","PALETTE_MAP","DEFAULT_PALETTE","_b","annotationSchema","source","defaultPalette","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","getAxesDataFromForms","template","layerSettings"],"mappings":";;;;;;AASO,SAASA,EACdC,GACAC,GACA;;AACA,QAAMC,IAAM,CAAA,GACNC,KAAUC,IAAAH,EAAc,YAAYD,EAAS,YAAY,KAAK,MAApD,gBAAAI,EAAuD;AACvE,OAAIJ,KAAA,gBAAAA,EAAU,eAAc,YAAY;AACtC,QAAIC,EAAc,aAAa,oBAAoB;AACjD,YAAMI,IAAQJ,EAAc,eAAe;AAC3C,MAAKI,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA,IAGdA,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA;AAAA,IAGrB;AACA,IAAAH,EAAI,aAAaI,EAAYH,KAAWI,CAAe,EAAE;AAAA,EAC3D;AACE,IAAAL,EAAI,aAAaI,EAAYH,KAAW,QAAQ,EAAE;AAGpD,EAAAH,EAAS,MAAME,IAEfM,IAAAR,EAAS,gBAAT,QAAAQ,EAAsB,QAAQ,CAACC,MAAqB;;AAClD,UAAMC,IAASD,EAAiB,YAAY,OACtCN,KAAUC,IAAAH,EAAc,YAAYS,CAAM,MAAhC,gBAAAN,EAAmC,SAC7CO,IAAiBF,EAAiB,SAAS,aAAaG,IAA8BC;AAE5F,IAAAJ,EAAiB,SAASH,EAAYH,KAAWQ,CAAc,EAAE;AAAA,EACnE,IACA,OAAO;AAAA,IACLX;AAAA,IACAc,EAAqBb,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAGtEA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SAC/DA,EAAS,KAAK,YAAYC,EAAc,aAAa,MAAM,WAE3DA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SAC/DA,EAAS,KAAK,aAAaC,EAAc,aAAa,MAAM,WAE5DA,EAAc,aAAa,uBAAsBD,KAAA,gBAAAA,EAAU,eAAc,eAC1EA,EAAS,cAAoD,UAAU,IACvEA,EAAS,cAAoD,UAAU;AAG1E,QAAMe,IAAWd,EAAc,UACzBe,IAAgBf,EAAc,eAAec,CAAQ;AAE3D,SAAAf,EAAS,YAAYgB,EAAc,WAC/BhB,EAAS,cAAc,gBAAgBgB,EAAc,2BACvDhB,EAAS,gBAAgB;AAAA,IACvB,QAAQgB,EAAc;AAAA,IACtB,WAAWA,EAAc;AAAA,EAAA,IAIzBhB,EAAS,cAAc,iBAAiBgB,EAAc,gBAAgBA,EAAc,kBACtFhB,EAAS,cAAc;AAAA,IACrB,GAAGgB,EAAc,gBAAgBhB,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,GAAGgB,EAAc,gBAAgBhB,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,QAAQgB,EAAc;AAAA,EAAA,IAItBf,EAAc,aAAa,MAAM,qBACnCD,EAAS,qBAAqB,WAGzBA;AACT;"}
1
+ {"version":3,"file":"composeHeatmapSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeHeatmapSettings.ts"],"sourcesContent":["import type { HeatmapSettings } from '@milaboratories/miplots4';\nimport {\n DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE,\n DEFAULT_PALETTE,\n PALETTE_MAP,\n} from '../../constantsAesthetic';\nimport type { HeatmapLayerTemplate, ReactiveState } from '../../types';\nimport { getAxesDataFromForms } from '../index';\n\nexport function composeHeatmapSettings(\n settings: HeatmapSettings,\n reactiveState: ReactiveState,\n) {\n const aes = {} as Record<string, unknown>;\n const palette = reactiveState.dataBindAes[settings.valueColumn.value]?.palette;\n if (settings?.valueType !== 'discrete') {\n if (reactiveState.template === 'heatmapClustered') {\n const layer = reactiveState.layersSettings.heatmapClustered;\n if (!layer.disableClusteringX) {\n settings.dendrogramX = {\n fillNA: 0,\n showNodes: false,\n hidden: !layer.dendrogramX,\n };\n }\n if (!layer.disableClusteringY) {\n settings.dendrogramY = {\n fillNA: 0,\n position: 'right',\n showNodes: false,\n hidden: !layer.dendrogramY,\n };\n }\n }\n aes.colorsList = PALETTE_MAP[palette ?? DEFAULT_PALETTE].colors;\n } else {\n aes.colorsList = PALETTE_MAP[palette ?? 'bright'].colors;\n }\n\n settings.aes = aes;\n\n settings.annotations?.forEach((annotationSchema) => {\n const source = annotationSchema.valueColumn.value;\n const palette = reactiveState.dataBindAes[source]?.palette;\n const defaultPalette = annotationSchema.type === 'discrete' ? DEFAULT_CATEGORICAL_PALETTE : DEFAULT_CONTINUOUS_PALETTE;\n\n annotationSchema.colors = PALETTE_MAP[palette ?? defaultPalette].colors;\n });\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType),\n );\n\n if (reactiveState.axesSettings.axisX.cellSize !== null && settings.size) {\n settings.size.cellWidth = reactiveState.axesSettings.axisX.cellSize;\n }\n if (reactiveState.axesSettings.axisY.cellSize !== null && settings.size) {\n settings.size.cellHeight = reactiveState.axesSettings.axisY.cellSize;\n }\n if (reactiveState.template === 'heatmapClustered' && settings?.valueType !== 'discrete') {\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedX = false;\n (settings.facetSettings as HeatmapSettings['facetSettings'])!.sharedY = false;\n }\n\n const template = reactiveState.template as HeatmapLayerTemplate;\n const layerSettings = reactiveState.layersSettings[template];\n\n settings.NAValueAs = layerSettings.NAValueAs;\n if (settings.valueType === 'continuous' && layerSettings.normalizationDirection) {\n settings.normalization = {\n method: layerSettings.normalizationMethod,\n direction: layerSettings.normalizationDirection,\n };\n }\n\n if (settings.valueType === 'continuous' && (layerSettings.aggregateByX || layerSettings.aggregateByY)) {\n settings.aggregation = {\n x: layerSettings.aggregateByX && settings.xGroupBy && settings.xGroupBy.length > 0,\n y: layerSettings.aggregateByY && settings.yGroupBy && settings.yGroupBy.length > 0,\n method: layerSettings.aggregationMethod,\n };\n }\n\n if (reactiveState.axesSettings.other.canvasRenderMode) {\n settings.cellsRenderingMode = 'canvas';\n }\n\n return settings;\n}\n"],"names":["composeHeatmapSettings","settings","reactiveState","aes","palette","_a","layer","PALETTE_MAP","DEFAULT_PALETTE","_b","annotationSchema","source","defaultPalette","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","getAxesDataFromForms","template","layerSettings"],"mappings":";;;;;;AASO,SAASA,EACdC,GACAC,GACA;;AACA,QAAMC,IAAM,CAAA,GACNC,KAAUC,IAAAH,EAAc,YAAYD,EAAS,YAAY,KAAK,MAApD,gBAAAI,EAAuD;AACvE,OAAIJ,KAAA,gBAAAA,EAAU,eAAc,YAAY;AACtC,QAAIC,EAAc,aAAa,oBAAoB;AACjD,YAAMI,IAAQJ,EAAc,eAAe;AAC3C,MAAKI,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA,IAGdA,EAAM,uBACTL,EAAS,cAAc;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ,CAACK,EAAM;AAAA,MAAA;AAAA,IAGrB;AACA,IAAAH,EAAI,aAAaI,EAAYH,KAAWI,CAAe,EAAE;AAAA,EAC3D;AACE,IAAAL,EAAI,aAAaI,EAAYH,KAAW,QAAQ,EAAE;AAGpD,EAAAH,EAAS,MAAME,IAEfM,IAAAR,EAAS,gBAAT,QAAAQ,EAAsB,QAAQ,CAACC,MAAqB;;AAClD,UAAMC,IAASD,EAAiB,YAAY,OACtCN,KAAUC,IAAAH,EAAc,YAAYS,CAAM,MAAhC,gBAAAN,EAAmC,SAC7CO,IAAiBF,EAAiB,SAAS,aAAaG,IAA8BC;AAE5F,IAAAJ,EAAiB,SAASH,EAAYH,KAAWQ,CAAc,EAAE;AAAA,EACnE,IACA,OAAO;AAAA,IACLX;AAAA,IACAc,EAAqBb,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAGtEA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SACjEA,EAAS,KAAK,YAAYC,EAAc,aAAa,MAAM,WAEzDA,EAAc,aAAa,MAAM,aAAa,QAAQD,EAAS,SACjEA,EAAS,KAAK,aAAaC,EAAc,aAAa,MAAM,WAE1DA,EAAc,aAAa,uBAAsBD,KAAA,gBAAAA,EAAU,eAAc,eAC1EA,EAAS,cAAoD,UAAU,IACvEA,EAAS,cAAoD,UAAU;AAG1E,QAAMe,IAAWd,EAAc,UACzBe,IAAgBf,EAAc,eAAec,CAAQ;AAE3D,SAAAf,EAAS,YAAYgB,EAAc,WAC/BhB,EAAS,cAAc,gBAAgBgB,EAAc,2BACvDhB,EAAS,gBAAgB;AAAA,IACvB,QAAQgB,EAAc;AAAA,IACtB,WAAWA,EAAc;AAAA,EAAA,IAIzBhB,EAAS,cAAc,iBAAiBgB,EAAc,gBAAgBA,EAAc,kBACtFhB,EAAS,cAAc;AAAA,IACrB,GAAGgB,EAAc,gBAAgBhB,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,GAAGgB,EAAc,gBAAgBhB,EAAS,YAAYA,EAAS,SAAS,SAAS;AAAA,IACjF,QAAQgB,EAAc;AAAA,EAAA,IAItBf,EAAc,aAAa,MAAM,qBACnCD,EAAS,qBAAqB,WAGzBA;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"composeHistogramSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeHistogramSettings.ts"],"sourcesContent":["import { HistogramSettings } from '@milaboratories/miplots4';\nimport { HISTOGRAM_TEMPLATES_MAP, MappingLink } from '../../constantsCommon';\nimport {\n getHistogramAes\n} from '../../dataBindAes';\nimport {\n HistogramLayerTemplate,\n ReactiveState,\n UniqueValuesBySourceMap\n} from '../../types';\nimport { ChartLayerSettings, getAxesDataFromForms } from '../index';\n\n\nfunction useDefault<T extends string>(value: T | MappingLink | null, columns: string[], defaultValue: T): T | {\n type: 'grouping',\n value: string\n} {\n if (columns.length) {\n return { type: 'grouping', value: columns[0] } as { type: 'grouping', value: string }\n }\n return typeof value === 'object' ? defaultValue : value as T;\n}\nexport function composeHistogramSettings(\n settings: HistogramSettings,\n reactiveState: ReactiveState,\n uniqueValuesData: UniqueValuesBySourceMap\n) {\n const grouping = reactiveState.optionsState.components.grouping;\n if (grouping.selectorStates.length) {\n const selectedSource = grouping.selectorStates[0].selectedSource;\n const {inheritedAes, order} = getHistogramAes(\n selectedSource,\n uniqueValuesData,\n reactiveState.dataBindAes\n );\n Object.assign(settings, { inheritedAes: {[selectedSource]: inheritedAes}, groupingOrder: order});\n }\n\n const layersKeys = HISTOGRAM_TEMPLATES_MAP[reactiveState.template as HistogramLayerTemplate];\n const layers:ChartLayerSettings[] = [];\n layersKeys.forEach((layer) => {\n if (layer === 'bins') {\n const layerSettings = reactiveState.layersSettings[layer];\n layers.push({\n type: 'bins',\n aes: {\n opacity: layerSettings.opacity,\n fillColor: useDefault(layerSettings.fillColor, grouping.selectorStates.map(v => v.selectedSource), 'white'),\n }\n });\n }\n });\n settings.layers = layers as HistogramSettings['layers'];\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType)\n );\n settings.binsCount = reactiveState.axesSettings.other.binsCount;\n\n return settings;\n}\n"],"names":["useDefault","value","columns","defaultValue","composeHistogramSettings","settings","reactiveState","uniqueValuesData","grouping","selectedSource","inheritedAes","order","getHistogramAes","layersKeys","HISTOGRAM_TEMPLATES_MAP","layers","layer","layerSettings","v","getAxesDataFromForms"],"mappings":";;;;;;;AAaA,SAASA,EAA6BC,GAA+BC,GAAmBC,GAGtF;AACA,SAAID,EAAQ,SACH,EAAE,MAAM,YAAY,OAAOA,EAAQ,CAAC,EAAA,IAEtC,OAAOD,KAAU,WAAWE,IAAeF;AACpD;AACO,SAASG,EACdC,GACAC,GACAC,GACA;AACA,QAAMC,IAAWF,EAAc,aAAa,WAAW;AACvD,MAAIE,EAAS,eAAe,QAAQ;AAClC,UAAMC,IAAiBD,EAAS,eAAe,CAAC,EAAE,gBAC5C,EAAC,cAAAE,GAAc,OAAAC,EAAA,IAASC;AAAA,MAC5BH;AAAA,MACAF;AAAA,MACAD,EAAc;AAAA,IAAA;AAEhB,WAAO,OAAOD,GAAU,EAAE,cAAc,EAAC,CAACI,CAAc,GAAGC,EAAA,GAAe,eAAeC,GAAM;AAAA,EACjG;AAEA,QAAME,IAAaC,EAAwBR,EAAc,QAAkC,GACrFS,IAA8B,CAAA;AACpC,SAAAF,EAAW,QAAQ,CAACG,MAAU;AAC5B,QAAIA,MAAU,QAAQ;AACpB,YAAMC,IAAgBX,EAAc,eAAeU,CAAK;AACxD,MAAAD,EAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,KAAK;AAAA,UACH,SAASE,EAAc;AAAA,UACvB,WAAWjB,EAAWiB,EAAc,WAAWT,EAAS,eAAe,IAAI,CAAAU,MAAKA,EAAE,cAAc,GAAG,OAAO;AAAA,QAAA;AAAA,MAC5G,CACD;AAAA,IACH;AAAA,EACF,CAAC,GACDb,EAAS,SAASU,GAClB,OAAO;AAAA,IACLV;AAAA,IACAc,EAAqBb,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAE1ED,EAAS,YAAYC,EAAc,aAAa,MAAM,WAE/CD;AACT;"}
1
+ {"version":3,"file":"composeHistogramSettings.js","sources":["../../../src/utils/createChartSettingsForRender/composeHistogramSettings.ts"],"sourcesContent":["import type { HistogramSettings } from '@milaboratories/miplots4';\nimport type { MappingLink } from '../../constantsCommon';\nimport { HISTOGRAM_TEMPLATES_MAP } from '../../constantsCommon';\nimport {\n getHistogramAes,\n} from '../../dataBindAes';\nimport type {\n HistogramLayerTemplate,\n ReactiveState,\n UniqueValuesBySourceMap,\n} from '../../types';\nimport type { ChartLayerSettings } from '../index';\nimport { getAxesDataFromForms } from '../index';\n\nfunction useDefault<T extends string>(value: T | MappingLink | null, columns: string[], defaultValue: T): T | {\n type: 'grouping';\n value: string;\n} {\n if (columns.length) {\n return { type: 'grouping', value: columns[0] } as { type: 'grouping'; value: string };\n }\n return typeof value === 'object' ? defaultValue : value as T;\n}\nexport function composeHistogramSettings(\n settings: HistogramSettings,\n reactiveState: ReactiveState,\n uniqueValuesData: UniqueValuesBySourceMap,\n) {\n const grouping = reactiveState.optionsState.components.grouping;\n if (grouping.selectorStates.length) {\n const selectedSource = grouping.selectorStates[0].selectedSource;\n const { inheritedAes, order } = getHistogramAes(\n selectedSource,\n uniqueValuesData,\n reactiveState.dataBindAes,\n );\n Object.assign(settings, { inheritedAes: { [selectedSource]: inheritedAes }, groupingOrder: order });\n }\n\n const layersKeys = HISTOGRAM_TEMPLATES_MAP[reactiveState.template as HistogramLayerTemplate];\n const layers: ChartLayerSettings[] = [];\n layersKeys.forEach((layer) => {\n if (layer === 'bins') {\n const layerSettings = reactiveState.layersSettings[layer];\n layers.push({\n type: 'bins',\n aes: {\n opacity: layerSettings.opacity,\n fillColor: useDefault(layerSettings.fillColor, grouping.selectorStates.map((v) => v.selectedSource), 'white'),\n },\n });\n }\n });\n settings.layers = layers as HistogramSettings['layers'];\n Object.assign(\n settings,\n getAxesDataFromForms(reactiveState.axesSettings, reactiveState.chartType),\n );\n settings.binsCount = reactiveState.axesSettings.other.binsCount;\n\n return settings;\n}\n"],"names":["useDefault","value","columns","defaultValue","composeHistogramSettings","settings","reactiveState","uniqueValuesData","grouping","selectedSource","inheritedAes","order","getHistogramAes","layersKeys","HISTOGRAM_TEMPLATES_MAP","layers","layer","layerSettings","v","getAxesDataFromForms"],"mappings":";;;;;;;AAcA,SAASA,EAA6BC,GAA+BC,GAAmBC,GAGtF;AACA,SAAID,EAAQ,SACH,EAAE,MAAM,YAAY,OAAOA,EAAQ,CAAC,EAAA,IAEtC,OAAOD,KAAU,WAAWE,IAAeF;AACpD;AACO,SAASG,EACdC,GACAC,GACAC,GACA;AACA,QAAMC,IAAWF,EAAc,aAAa,WAAW;AACvD,MAAIE,EAAS,eAAe,QAAQ;AAClC,UAAMC,IAAiBD,EAAS,eAAe,CAAC,EAAE,gBAC5C,EAAE,cAAAE,GAAc,OAAAC,EAAA,IAAUC;AAAA,MAC9BH;AAAA,MACAF;AAAA,MACAD,EAAc;AAAA,IAAA;AAEhB,WAAO,OAAOD,GAAU,EAAE,cAAc,EAAE,CAACI,CAAc,GAAGC,EAAA,GAAgB,eAAeC,GAAO;AAAA,EACpG;AAEA,QAAME,IAAaC,EAAwBR,EAAc,QAAkC,GACrFS,IAA+B,CAAA;AACrC,SAAAF,EAAW,QAAQ,CAACG,MAAU;AAC5B,QAAIA,MAAU,QAAQ;AACpB,YAAMC,IAAgBX,EAAc,eAAeU,CAAK;AACxD,MAAAD,EAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,KAAK;AAAA,UACH,SAASE,EAAc;AAAA,UACvB,WAAWjB,EAAWiB,EAAc,WAAWT,EAAS,eAAe,IAAI,CAACU,MAAMA,EAAE,cAAc,GAAG,OAAO;AAAA,QAAA;AAAA,MAC9G,CACD;AAAA,IACH;AAAA,EACF,CAAC,GACDb,EAAS,SAASU,GAClB,OAAO;AAAA,IACLV;AAAA,IACAc,EAAqBb,EAAc,cAAcA,EAAc,SAAS;AAAA,EAAA,GAE1ED,EAAS,YAAYC,EAAc,aAAa,MAAM,WAE/CD;AACT;"}