@milaboratories/graph-maker 1.2.8 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Chart.js.map +1 -1
- package/dist/components/Chart.vue.d.ts.map +1 -1
- package/dist/components/Chart.vue2.js +23 -3
- package/dist/components/Chart.vue2.js.map +1 -1
- package/dist/constantsCommon.d.ts +6 -0
- package/dist/constantsCommon.d.ts.map +1 -1
- package/dist/constantsCommon.js +9 -3
- package/dist/constantsCommon.js.map +1 -1
- package/dist/forms/DataMappingForm/DendroForm.js.map +1 -1
- package/dist/forms/DataMappingForm/DendroForm.vue.d.ts.map +1 -1
- package/dist/forms/DataMappingForm/DendroForm.vue2.js +22 -3
- package/dist/forms/DataMappingForm/DendroForm.vue2.js.map +1 -1
- package/dist/forms/DataMappingForm/useBaskets.d.ts.map +1 -1
- package/dist/forms/DataMappingForm/useBaskets.js +22 -3
- package/dist/forms/DataMappingForm/useBaskets.js.map +1 -1
- package/dist/forms/LayersForm/Layer/Bubble.js.map +1 -1
- package/dist/forms/LayersForm/Layer/Bubble.vue.d.ts.map +1 -1
- package/dist/forms/LayersForm/Layer/Bubble.vue2.js +53 -45
- package/dist/forms/LayersForm/Layer/Bubble.vue2.js.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/Heatmap.js.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.d.ts.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue2.js +49 -41
- package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue2.js.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.js.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.d.ts.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue2.js +63 -55
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue2.js.map +1 -1
- package/dist/store.js +7 -1
- package/dist/store.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +2 -0
- package/dist/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js +1 -1
- package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +2 -0
- package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js +1 -1
- package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
- package/dist/utils/loadUniqueValuesToSave.d.ts.map +1 -1
- package/dist/utils/loadUniqueValuesToSave.js +16 -3
- package/dist/utils/loadUniqueValuesToSave.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","names":[],"sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus, StatusTextData } from '../types.ts';\nimport GraphStatusScreen from './GraphStatusScreen.vue';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n errorInfo: ErrorInfo | null;\n customStatusText?: Partial<StatusTextData>;\n allowTitleEditing?: boolean;\n isScatterplotZoomChanged?: boolean;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\nconst filtersStates = computed(() => store.value.reactive.optionsState.components.filters?.selectorStates as SelectorStateFilter[]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch([() => tabBySource.value, () => tabByFilterValue.value], () => { // tabBy column changed, needs to update selected value\n tabByLocalValue.value = tabByFilterValue.value;\n}, { deep: true });\n\n// try to load full options list, without search query; if result is not overflow, use values from it in regular dropdown, no autocomplete;\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n return Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value,\n store.value.inputGuide.value,\n sourceId,\n MAX_SEARCH_OPTIONS_LIST_LENGTH,\n );\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore.value) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\n// search options for autocomplete component; use label-mode search for options and value-mode for search of label of selected by default value;\nasync function searchFilterOptions(sourceId: string, searchStr: string, type: 'value' | 'label' = 'label') {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n const results = await Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n return searchStr ? results.filter((v) => v.label.toLowerCase().includes(searchStr.toLowerCase())) : results;\n }\n const searchLabelStr = type === 'label' ? searchStr : undefined;\n const searchValueStr = type === 'value' ? searchStr : undefined;\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore.value, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchLabelStr, searchValueStr)).values;\n}\n\n// search by value, not by label;\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const value = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value, store.value.inputGuide.value,\n sourceId, 1, undefined, selectedValue).then((v) => v.values[0]);\n return value;\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\"\n :value=\"title\"\n :disabled=\"!allowTitleEditing\"\n @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" v-if=\"allowTitleEditing\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot />\n </div>\n </div>\n <PlNotificationAlert\n v-if=\"!store.reactive.tooltipHintWasShown\"\n v-model=\"store.reactive.showTooltipHint\"\n type=\"success\"\n class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\" label=\"Show for\" :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else v-model=\"tabByLocalValue\" label=\"Show for\"\n :options-search=\"(str, type) => searchFilterOptions(tabBySource as string, str, type)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{ 'chart_main-content__dendro': store.reactive.chartType === 'dendro' }, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\" :class=\"{\n 'chart_ready': graphStatus === 'ready',\n 'chart_loading': graphStatus === 'loading',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n />\n <GraphStatusScreen :graphStatus=\"graphStatus\" :top=\"tabBySource ? 24 : 0\" :bottom=\"11\" :customStatusText=\"customStatusText\" :errorInfo=\"errorInfo\"/>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\" @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\" :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\" :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id: string) => $emit('dendro-tooltip-btn-click', id)\" @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus === 'ready'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\" :isScatterplotZoomChanged=\"isScatterplotZoomChanged\"/>\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"Chart.js","names":[],"sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus, StatusTextData } from '../types.ts';\nimport GraphStatusScreen from './GraphStatusScreen.vue';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n errorInfo: ErrorInfo | null;\n customStatusText?: Partial<StatusTextData>;\n allowTitleEditing?: boolean;\n isScatterplotZoomChanged?: boolean;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\nconst filtersStates = computed(() => store.value.reactive.optionsState.components.filters?.selectorStates as SelectorStateFilter[]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch([() => tabBySource.value, () => tabByFilterValue.value], () => { // tabBy column changed, needs to update selected value\n tabByLocalValue.value = tabByFilterValue.value;\n}, { deep: true });\n\n// try to load full options list, without search query; if result is not overflow, use values from it in regular dropdown, no autocomplete;\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n return Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels({\n store: store.value.columnsDataStore.value,\n inputGuide: store.value.inputGuide.value,\n selectedSource: sourceId,\n limit: MAX_SEARCH_OPTIONS_LIST_LENGTH,\n });\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore.value) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\n// search options for autocomplete component; use label-mode search for options and value-mode for search of label of selected by default value;\nasync function searchFilterOptions(sourceId: string, searchStr: string, type: 'value' | 'label' = 'label') {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n const results = await Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n return searchStr ? results.filter((v) => v.label.toLowerCase().includes(searchStr.toLowerCase())) : results;\n }\n const searchLabelStr = type === 'label' ? searchStr : undefined;\n const searchValueStr = type === 'value' ? searchStr : undefined;\n return (await store.value.controller.getUniqueSourceValuesWithLabels({ store: store.value.columnsDataStore.value, inputGuide: store.value.inputGuide.value, selectedSource: sourceId, limit: MAX_SEARCH_OPTIONS_LIST_LENGTH, searchQuery: searchLabelStr, searchQueryByValue: searchValueStr })).values;\n}\n\n// search by value, not by label;\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const label = await store.value.controller.getLabelForValue({\n store: store.value.columnsDataStore.value, inputGuide: store.value.inputGuide.value, selectedSource: sourceId, value: selectedValue });\n return { value: selectedValue, label };\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\"\n :value=\"title\"\n :disabled=\"!allowTitleEditing\"\n @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" v-if=\"allowTitleEditing\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot />\n </div>\n </div>\n <PlNotificationAlert\n v-if=\"!store.reactive.tooltipHintWasShown\"\n v-model=\"store.reactive.showTooltipHint\"\n type=\"success\"\n class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\" label=\"Show for\" :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else v-model=\"tabByLocalValue\" label=\"Show for\"\n :options-search=\"(str, type) => searchFilterOptions(tabBySource as string, str, type)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{ 'chart_main-content__dendro': store.reactive.chartType === 'dendro' }, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\" :class=\"{\n 'chart_ready': graphStatus === 'ready',\n 'chart_loading': graphStatus === 'loading',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n />\n <GraphStatusScreen :graphStatus=\"graphStatus\" :top=\"tabBySource ? 24 : 0\" :bottom=\"11\" :customStatusText=\"customStatusText\" :errorInfo=\"errorInfo\"/>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\" @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\" :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\" :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id: string) => $emit('dendro-tooltip-btn-click', id)\" @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus === 'ready'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\" :isScatterplotZoomChanged=\"isScatterplotZoomChanged\"/>\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.vue.d.ts","sourceRoot":"","sources":["../../src/components/Chart.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Chart.vue.d.ts","sourceRoot":"","sources":["../../src/components/Chart.vue"],"names":[],"mappings":"AAqQA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAY1E,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO/D,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AA8JF,iBAAS,cAAc;WA2QT,OAAO,IAA6B;;yBAXrB,GAAG;;;;;;EAgB/B;AAiCD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;kBASnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -47,7 +47,12 @@ var k = { class: "chart_container" }, A = { class: "chart_header" }, j = ["value
|
|
|
47
47
|
let n = t.selectedFilterValues ?? [];
|
|
48
48
|
return Promise.all(n.map((t) => Z(e, t)));
|
|
49
49
|
}
|
|
50
|
-
let n = await L.value.controller.getUniqueSourceValuesWithLabels(
|
|
50
|
+
let n = await L.value.controller.getUniqueSourceValuesWithLabels({
|
|
51
|
+
store: L.value.columnsDataStore.value,
|
|
52
|
+
inputGuide: L.value.inputGuide.value,
|
|
53
|
+
selectedSource: e,
|
|
54
|
+
limit: 100
|
|
55
|
+
});
|
|
51
56
|
return n.overflow ? null : n.values;
|
|
52
57
|
}
|
|
53
58
|
let K = _();
|
|
@@ -84,10 +89,25 @@ var k = { class: "chart_container" }, A = { class: "chart_header" }, j = ["value
|
|
|
84
89
|
return t ? i.filter((e) => e.label.toLowerCase().includes(t.toLowerCase())) : i;
|
|
85
90
|
}
|
|
86
91
|
let i = n === "label" ? t : void 0, a = n === "value" ? t : void 0;
|
|
87
|
-
return (await L.value.controller.getUniqueSourceValuesWithLabels(
|
|
92
|
+
return (await L.value.controller.getUniqueSourceValuesWithLabels({
|
|
93
|
+
store: L.value.columnsDataStore.value,
|
|
94
|
+
inputGuide: L.value.inputGuide.value,
|
|
95
|
+
selectedSource: e,
|
|
96
|
+
limit: 100,
|
|
97
|
+
searchQuery: i,
|
|
98
|
+
searchQueryByValue: a
|
|
99
|
+
})).values;
|
|
88
100
|
}
|
|
89
101
|
async function Z(e, t) {
|
|
90
|
-
return L.value.columnsDataStore.value ?
|
|
102
|
+
return L.value.columnsDataStore.value ? {
|
|
103
|
+
value: t,
|
|
104
|
+
label: await L.value.controller.getLabelForValue({
|
|
105
|
+
store: L.value.columnsDataStore.value,
|
|
106
|
+
inputGuide: L.value.inputGuide.value,
|
|
107
|
+
selectedSource: e,
|
|
108
|
+
value: t
|
|
109
|
+
})
|
|
110
|
+
} : Promise.resolve({
|
|
91
111
|
value: t,
|
|
92
112
|
label: " "
|
|
93
113
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.vue_vue_type_script_setup_true_lang.js","names":["$emit"],"sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus, StatusTextData } from '../types.ts';\nimport GraphStatusScreen from './GraphStatusScreen.vue';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n errorInfo: ErrorInfo | null;\n customStatusText?: Partial<StatusTextData>;\n allowTitleEditing?: boolean;\n isScatterplotZoomChanged?: boolean;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\nconst filtersStates = computed(() => store.value.reactive.optionsState.components.filters?.selectorStates as SelectorStateFilter[]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch([() => tabBySource.value, () => tabByFilterValue.value], () => { // tabBy column changed, needs to update selected value\n tabByLocalValue.value = tabByFilterValue.value;\n}, { deep: true });\n\n// try to load full options list, without search query; if result is not overflow, use values from it in regular dropdown, no autocomplete;\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n return Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value,\n store.value.inputGuide.value,\n sourceId,\n MAX_SEARCH_OPTIONS_LIST_LENGTH,\n );\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore.value) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\n// search options for autocomplete component; use label-mode search for options and value-mode for search of label of selected by default value;\nasync function searchFilterOptions(sourceId: string, searchStr: string, type: 'value' | 'label' = 'label') {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n const results = await Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n return searchStr ? results.filter((v) => v.label.toLowerCase().includes(searchStr.toLowerCase())) : results;\n }\n const searchLabelStr = type === 'label' ? searchStr : undefined;\n const searchValueStr = type === 'value' ? searchStr : undefined;\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore.value, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchLabelStr, searchValueStr)).values;\n}\n\n// search by value, not by label;\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const value = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value, store.value.inputGuide.value,\n sourceId, 1, undefined, selectedValue).then((v) => v.values[0]);\n return value;\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\"\n :value=\"title\"\n :disabled=\"!allowTitleEditing\"\n @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" v-if=\"allowTitleEditing\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot />\n </div>\n </div>\n <PlNotificationAlert\n v-if=\"!store.reactive.tooltipHintWasShown\"\n v-model=\"store.reactive.showTooltipHint\"\n type=\"success\"\n class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\" label=\"Show for\" :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else v-model=\"tabByLocalValue\" label=\"Show for\"\n :options-search=\"(str, type) => searchFilterOptions(tabBySource as string, str, type)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{ 'chart_main-content__dendro': store.reactive.chartType === 'dendro' }, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\" :class=\"{\n 'chart_ready': graphStatus === 'ready',\n 'chart_loading': graphStatus === 'loading',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n />\n <GraphStatusScreen :graphStatus=\"graphStatus\" :top=\"tabBySource ? 24 : 0\" :bottom=\"11\" :customStatusText=\"customStatusText\" :errorInfo=\"errorInfo\"/>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\" @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\" :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\" :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id: string) => $emit('dendro-tooltip-btn-click', id)\" @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus === 'ready'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\" :isScatterplotZoomChanged=\"isScatterplotZoomChanged\"/>\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Chart.vue_vue_type_script_setup_true_lang.js","names":["$emit"],"sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus, StatusTextData } from '../types.ts';\nimport GraphStatusScreen from './GraphStatusScreen.vue';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n errorInfo: ErrorInfo | null;\n customStatusText?: Partial<StatusTextData>;\n allowTitleEditing?: boolean;\n isScatterplotZoomChanged?: boolean;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\nconst filtersStates = computed(() => store.value.reactive.optionsState.components.filters?.selectorStates as SelectorStateFilter[]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch([() => tabBySource.value, () => tabByFilterValue.value], () => { // tabBy column changed, needs to update selected value\n tabByLocalValue.value = tabByFilterValue.value;\n}, { deep: true });\n\n// try to load full options list, without search query; if result is not overflow, use values from it in regular dropdown, no autocomplete;\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n return Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels({\n store: store.value.columnsDataStore.value,\n inputGuide: store.value.inputGuide.value,\n selectedSource: sourceId,\n limit: MAX_SEARCH_OPTIONS_LIST_LENGTH,\n });\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore.value) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\n// search options for autocomplete component; use label-mode search for options and value-mode for search of label of selected by default value;\nasync function searchFilterOptions(sourceId: string, searchStr: string, type: 'value' | 'label' = 'label') {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n const results = await Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n return searchStr ? results.filter((v) => v.label.toLowerCase().includes(searchStr.toLowerCase())) : results;\n }\n const searchLabelStr = type === 'label' ? searchStr : undefined;\n const searchValueStr = type === 'value' ? searchStr : undefined;\n return (await store.value.controller.getUniqueSourceValuesWithLabels({ store: store.value.columnsDataStore.value, inputGuide: store.value.inputGuide.value, selectedSource: sourceId, limit: MAX_SEARCH_OPTIONS_LIST_LENGTH, searchQuery: searchLabelStr, searchQueryByValue: searchValueStr })).values;\n}\n\n// search by value, not by label;\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const label = await store.value.controller.getLabelForValue({\n store: store.value.columnsDataStore.value, inputGuide: store.value.inputGuide.value, selectedSource: sourceId, value: selectedValue });\n return { value: selectedValue, label };\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\"\n :value=\"title\"\n :disabled=\"!allowTitleEditing\"\n @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" v-if=\"allowTitleEditing\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot />\n </div>\n </div>\n <PlNotificationAlert\n v-if=\"!store.reactive.tooltipHintWasShown\"\n v-model=\"store.reactive.showTooltipHint\"\n type=\"success\"\n class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\" label=\"Show for\" :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else v-model=\"tabByLocalValue\" label=\"Show for\"\n :options-search=\"(str, type) => searchFilterOptions(tabBySource as string, str, type)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{ 'chart_main-content__dendro': store.reactive.chartType === 'dendro' }, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\" :class=\"{\n 'chart_ready': graphStatus === 'ready',\n 'chart_loading': graphStatus === 'loading',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n />\n <GraphStatusScreen :graphStatus=\"graphStatus\" :top=\"tabBySource ? 24 : 0\" :bottom=\"11\" :customStatusText=\"customStatusText\" :errorInfo=\"errorInfo\"/>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\" @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\" :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\" :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id: string) => $emit('dendro-tooltip-btn-click', id)\" @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus === 'ready'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\" :isScatterplotZoomChanged=\"isScatterplotZoomChanged\"/>\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -96,6 +96,8 @@ export type LayersSettings = {
|
|
|
96
96
|
aggregateByY: boolean;
|
|
97
97
|
aggregationMethod: 'mean' | 'median' | 'min' | 'max';
|
|
98
98
|
strokeColor: null | string;
|
|
99
|
+
showEmptyRows: boolean;
|
|
100
|
+
showEmptyColumns: boolean;
|
|
99
101
|
};
|
|
100
102
|
bins: {
|
|
101
103
|
fillColor: ColorAes | null;
|
|
@@ -118,6 +120,8 @@ export type LayersSettings = {
|
|
|
118
120
|
aggregateByX: boolean;
|
|
119
121
|
aggregateByY: boolean;
|
|
120
122
|
aggregationMethod: 'mean' | 'median' | 'min' | 'max';
|
|
123
|
+
showEmptyRows: boolean;
|
|
124
|
+
showEmptyColumns: boolean;
|
|
121
125
|
};
|
|
122
126
|
heatmapClustered: {
|
|
123
127
|
NAValueAs: number | null;
|
|
@@ -130,6 +134,8 @@ export type LayersSettings = {
|
|
|
130
134
|
aggregateByX: boolean;
|
|
131
135
|
aggregateByY: boolean;
|
|
132
136
|
aggregationMethod: 'mean' | 'median' | 'min' | 'max';
|
|
137
|
+
showEmptyRows: boolean;
|
|
138
|
+
showEmptyColumns: boolean;
|
|
133
139
|
};
|
|
134
140
|
dots: {
|
|
135
141
|
dotFill: ColorAes | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constantsCommon.d.ts","sourceRoot":"","sources":["../src/constantsCommon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constantsCommon.d.ts","sourceRoot":"","sources":["../src/constantsCommon.ts"],"names":[],"mappings":"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"}
|
package/dist/constantsCommon.js
CHANGED
|
@@ -135,7 +135,9 @@ const L = () => ({
|
|
|
135
135
|
normalizationMethod: "standardScaling",
|
|
136
136
|
aggregateByX: !1,
|
|
137
137
|
aggregateByY: !1,
|
|
138
|
-
aggregationMethod: "mean"
|
|
138
|
+
aggregationMethod: "mean",
|
|
139
|
+
showEmptyRows: !1,
|
|
140
|
+
showEmptyColumns: !1
|
|
139
141
|
},
|
|
140
142
|
bins: {
|
|
141
143
|
fillColor: null,
|
|
@@ -157,7 +159,9 @@ const L = () => ({
|
|
|
157
159
|
normalizationMethod: "standardScaling",
|
|
158
160
|
aggregateByX: !1,
|
|
159
161
|
aggregateByY: !1,
|
|
160
|
-
aggregationMethod: "mean"
|
|
162
|
+
aggregationMethod: "mean",
|
|
163
|
+
showEmptyRows: !1,
|
|
164
|
+
showEmptyColumns: !1
|
|
161
165
|
},
|
|
162
166
|
heatmapClustered: {
|
|
163
167
|
NAValueAs: 0,
|
|
@@ -169,7 +173,9 @@ const L = () => ({
|
|
|
169
173
|
disableClusteringY: !1,
|
|
170
174
|
aggregateByX: !1,
|
|
171
175
|
aggregateByY: !1,
|
|
172
|
-
aggregationMethod: "mean"
|
|
176
|
+
aggregationMethod: "mean",
|
|
177
|
+
showEmptyRows: !1,
|
|
178
|
+
showEmptyColumns: !1
|
|
173
179
|
},
|
|
174
180
|
dots: {
|
|
175
181
|
dotFill: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constantsCommon.js","names":[],"sources":["../src/constantsCommon.ts"],"sourcesContent":["import type { ChartType } from '@milaboratories/pf-plots';\nimport type { Component } from 'vue';\nimport type {\n DotShape,\n LineType,\n} from './components/AesSettings/types';\nimport {\n DEFAULT_BLACK,\n DEFAULT_DOT_SHAPE,\n DEFAULT_LINE_TYPE,\n} from './constantsAesthetic';\nimport { DEFAULT_DOT_SIZE, DEFAULT_LINE_COLOR } from './dataBindAes';\nimport BarAndErrorIcon from './icons/BarAndErrorIcon.vue';\nimport BarAndLineIcon from './icons/BarAndLineIcon.vue';\nimport BarIcon from './icons/BarIcon.vue';\nimport BinnedDotsIcon from './icons/BinnedDotsIcon.vue';\nimport BoxplotAndBinnedIcon from './icons/BoxplotAndBinnedIcon.vue';\nimport BoxplotAndJitterIcon from './icons/BoxplotAndJitterIcon.vue';\nimport BoxplotIcon from './icons/BoxplotIcon.vue';\nimport DendroIcon from './icons/DendroIcon.vue';\nimport HeatmapIcon from './icons/HeatmapIcon.vue';\nimport JitteredDotsIcon from './icons/JitteredDotsIcon.vue';\nimport LineAndBinnedIcon from './icons/LineAndBinnedIcon.vue';\nimport LineAndErrorbarIcon from './icons/LineAndErrorbarIcon.vue';\nimport LineAndJitterIcon from './icons/LineAndJitterIcon.vue';\nimport LineIcon from './icons/LineIcon.vue';\nimport LogoIcon from './icons/LogoIcon.vue';\nimport ScatterplotIcon from './icons/ScatterplotIcon.vue';\nimport SinaIcon from './icons/SinaIcon.vue';\nimport StackedBarIcon from './icons/StackedBarIcon.vue';\nimport StackedAreaIcon from './icons/StackedAreaIcon.vue';\nimport ViolinAndBinnedIcon from './icons/ViolinAndBinnedIcon.vue';\nimport ViolinAndJitterIcon from './icons/ViolinAndJitterIcon.vue';\nimport ViolinIcon from './icons/ViolinIcon.vue';\nimport type {\n AxisTitleMode,\n DeepPartial,\n DiscreteLayer,\n DiscreteLayersTemplate,\n Frame,\n HeatmapFrame, HeatmapLayer, HeatmapLayerTemplate, HistogramLayer, HistogramLayerTemplate,\n LabelsPosition,\n LabelsRotation,\n Layer,\n LayersTemplate,\n Scale,\n ScatterplotLayer,\n ScatterplotLayersTemplate,\n StatusTextData,\n TitlePosition,\n} from './types';\nimport { PL_PLACEHOLDER_TEXTS } from '@platforma-sdk/ui-vue';\n\nexport const DEFAULT_CHART_TYPE: ChartType = 'discrete';\n\nexport function getInitialTemplate(\n restoredTemplate: LayersTemplate | null,\n chartType: ChartType,\n) {\n if (chartType === 'discrete') {\n return restoredTemplate\n && DISCRETE_TEMPLATES_MAP[restoredTemplate as DiscreteLayersTemplate]\n ? restoredTemplate\n : 'box';\n }\n if (chartType === 'scatterplot' || chartType === 'scatterplot-umap') {\n return restoredTemplate\n && SCATTERPLOT_TEMPLATES_MAP[restoredTemplate as ScatterplotLayersTemplate]\n ? restoredTemplate\n : 'dots';\n }\n if (chartType === 'dendro') {\n return 'dendro';\n }\n return restoredTemplate ?? 'heatmap';\n}\n\nexport const DISCRETE_TEMPLATES_MAP: Record<\n DiscreteLayersTemplate,\n DiscreteLayer[]\n> = {\n box: ['box'],\n box_binnedDots: ['box', 'binnedDots'],\n box_jitteredDots: ['box', 'jitteredDots'],\n violin: ['violin'],\n violin_binnedDots: ['violin', 'binnedDots'],\n violin_jitteredDots: ['violin', 'jitteredDots'],\n binnedDots: ['binnedDots'],\n jitteredDots: ['jitteredDots'],\n bar: ['bar'],\n bar_line: ['bar', 'line'],\n bar_errorbar: ['bar', 'errorbar'],\n stackedBar: ['stackedBar'],\n stackedArea: ['stackedArea'],\n line: ['line'],\n line_jitteredDots: ['line', 'jitteredDots'],\n line_binnedDots: ['line', 'binnedDots'],\n line_errorbar: ['line', 'errorbar'],\n errorbar: ['errorbar'],\n sina: ['sina'],\n logo: ['logo'],\n};\n\nexport const SCATTERPLOT_TEMPLATES_MAP: Record<\n ScatterplotLayersTemplate,\n ScatterplotLayer[]\n> = {\n dots: ['dots'],\n curve: ['curve'],\n curve_dots: ['curve', 'dots'],\n};\n\nexport const SCATTERPLOT_UMAP_TEMPLATES_MAP: Partial<Record<\n ScatterplotLayersTemplate,\n ScatterplotLayer[]\n>> = {\n dots: ['dots'],\n curve_dots: ['curve', 'dots'],\n};\n\nexport const HEATMAP_TEMPLATES_MAP: Record<HeatmapLayerTemplate, HeatmapLayer[]> = {\n heatmap: ['heatmap'],\n heatmapClustered: ['heatmapClustered'],\n};\nexport const HISTOGRAM_TEMPLATES_MAP: Record<HistogramLayerTemplate, HistogramLayer[]> = {\n bins: ['bins'],\n};\nexport const LAYER_TITLES: Record<Layer, string> = {\n box: 'Boxplot',\n binnedDots: 'Binned Dots',\n jitteredDots: 'Jittered Dots',\n violin: 'Violins',\n bar: 'Bar',\n stackedBar: 'Stacked Bar',\n stackedArea: 'Stacked Bar + Stream Area',\n line: 'Line',\n errorbar: 'Error Bar',\n sina: 'Sina',\n logo: 'Logo Plot',\n dots: 'Scatter Plot',\n curve: 'Curve',\n heatmap: 'Heatmap',\n heatmapClustered: 'Heatmap + Dendro',\n dendro: 'Dendrogram',\n bins: 'Histogram',\n bubble: 'Bubble plot',\n};\n\nexport type DiscreteStatisticsState = {\n overall: {\n data: { testMethod: null | string };\n validity: { testMethod: boolean };\n };\n referenceGroup: {\n data: {\n testMethod: null | string;\n referenceGroup: null | string;\n correctionMethod: string;\n format: 'significance' | 'pValue';\n ns: boolean;\n };\n validity: {\n testMethod: boolean;\n referenceGroup: boolean;\n };\n };\n pairwise: {\n data: {\n testMethod: null | string;\n correctionMethod: string;\n format: 'significance' | 'pValue';\n ns: boolean;\n };\n validity: { testMethod: boolean };\n };\n};\n\nexport type ScatterplotStatisticsState = {\n trend: {\n on: boolean;\n trim: boolean;\n showLegend: boolean;\n };\n};\n\nexport type StatisticsState = DiscreteStatisticsState | ScatterplotStatisticsState;\n\nexport function getInitialStatisticsState(chartType: ChartType, initialData?: DeepPartial<StatisticsState>): StatisticsState {\n if (chartType === 'discrete') {\n const initial = initialData as DiscreteStatisticsState;\n return {\n overall: {\n data: { testMethod: initial?.overall?.data?.testMethod ?? null },\n validity: { testMethod: initial?.overall?.validity?.testMethod ?? true },\n },\n referenceGroup: {\n data: {\n testMethod: initial?.referenceGroup?.data?.testMethod ?? null,\n referenceGroup: initial?.referenceGroup?.data?.referenceGroup ?? null,\n correctionMethod: initial?.referenceGroup?.data?.correctionMethod ?? 'Bonferroni',\n format: initial?.referenceGroup?.data?.format ?? 'significance',\n ns: initial?.referenceGroup?.data?.ns ?? false,\n },\n validity: {\n testMethod: initial?.referenceGroup?.validity?.testMethod ?? true,\n referenceGroup: initial?.referenceGroup?.validity?.referenceGroup ?? true,\n },\n },\n pairwise: {\n data: {\n testMethod: initial?.pairwise?.data?.testMethod ?? null,\n correctionMethod: initial?.pairwise?.data?.correctionMethod ?? 'Bonferroni',\n format: initial?.pairwise?.data?.format ?? 'significance',\n ns: initial?.pairwise?.data?.ns ?? false,\n },\n validity: { testMethod: initial?.pairwise?.validity?.testMethod ?? true },\n },\n } as DiscreteStatisticsState;\n }\n const initial = initialData as ScatterplotStatisticsState;\n return {\n trend: {\n on: initial?.trend?.on ?? false,\n trim: initial?.trend?.trim ?? false,\n showLegend: initial?.trend?.showLegend ?? true,\n },\n };\n}\n\nexport type NumberRange = { min: number; max: number };\nexport type MappingLink = { type: string; value?: string }; // {type: 'primaryGrouping'} for example\nexport type ColorAes = string | MappingLink;\nexport type DotShapeAes = DotShape | MappingLink;\nexport type DotSizeAes = number | NumberRange;\nexport type LineTypeAes = LineType | MappingLink;\nexport type FixedOrMappedAes = ColorAes | DotShapeAes | LineTypeAes;\n\nexport type ContinuousDataMappingSize = {\n column: string;\n range: NumberRange;\n};\n\nexport type ContinuousDataMappingForGraph<T extends string | number> = { columnName: ColumnNameSchema; domain: number[]; range: T[]; type: 'linear' | 'log' };\n\nexport type ColumnNameSchema = {\n type: 'column';\n value: string;\n label?: string;\n valueLabels?: string;\n};\n\nexport function isNumberRange(v: number | NumberRange | null | undefined): v is NumberRange {\n return typeof v !== 'undefined' && v !== null && typeof v === 'object' && 'min' in v && 'max' in v;\n}\n\nexport function isMappedAes(\n item: FixedOrMappedAes | null | string | number | boolean | unknown,\n): item is MappingLink {\n return typeof item === 'object' && item !== null && 'type' in item;\n}\n\nexport function isContinuousDataMapping(v: ContinuousDataMappingSize | MappingLink | number | string | null | undefined): v is ContinuousDataMappingSize {\n return typeof v !== 'undefined' && v !== null && typeof v === 'object' && 'range' in v;\n}\n\nexport type LayersSettings = {\n // bubble\n bubble: {\n NAValueAs: number | null;\n minRadius: number;\n maxRadius: number;\n normalizationDirection: 'row' | 'column' | null;\n normalizationMethod: 'standardScaling' | 'meanNormalization';\n aggregateByX: boolean;\n aggregateByY: boolean;\n aggregationMethod: 'mean' | 'median' | 'min' | 'max';\n strokeColor: null | string;\n };\n // histogram\n bins: {\n fillColor: ColorAes | null;\n opacity: number;\n };\n // dendrogram\n dendro: {\n dotFill: ColorAes;\n dotShape: DotShapeAes;\n dotSize: DotSizeAes;\n lineColor: ColorAes;\n mode: 'normal' | 'useAllNodesAsLeaves';\n leavesMode: 'normal' | 'alignLeavesToLine';\n showTable: boolean;\n showLegend: boolean;\n };\n // heatmap\n heatmap: {\n NAValueAs: number | null;\n normalizationDirection: 'row' | 'column' | null;\n normalizationMethod: 'standardScaling' | 'meanNormalization';\n aggregateByX: boolean;\n aggregateByY: boolean;\n aggregationMethod: 'mean' | 'median' | 'min' | 'max';\n };\n heatmapClustered: {\n NAValueAs: number | null;\n normalizationDirection: 'row' | 'column' | null;\n normalizationMethod: 'standardScaling' | 'meanNormalization';\n dendrogramX: boolean;\n dendrogramY: boolean;\n disableClusteringX: boolean;\n disableClusteringY: boolean;\n aggregateByX: boolean;\n aggregateByY: boolean;\n aggregationMethod: 'mean' | 'median' | 'min' | 'max';\n };\n // scatterplot\n dots: {\n dotFill: ColorAes | null;\n dotShape: DotShapeAes | null;\n dotSize: ContinuousDataMappingSize | number | null;\n };\n curve: {\n smoothing: boolean;\n lineColor: ColorAes;\n };\n // discrete\n box: {\n showOutliers: boolean;\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n dotShape: DotShapeAes;\n lineType: LineTypeAes;\n gapWidth: number;\n opacity: number;\n stat: {\n low: number;\n middle: number;\n upper: number;\n k: number;\n };\n };\n binnedDots: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n opacity: number;\n showOutliers: boolean;\n };\n jitteredDots: {\n dotFill: ColorAes | null;\n dotShape: DotShapeAes;\n lineColor: ColorAes;\n opacity: number;\n showOutliers: boolean;\n };\n violin: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n lineType: LineTypeAes;\n opacity: number;\n trim: boolean;\n showQuartiles: boolean;\n quartilesLineStyle: LineType;\n medianLineStyle: LineType;\n };\n bar: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n opacity: number;\n height: 'max' | 'mean' | 'median';\n };\n stackedBar: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n opacity: number;\n normalize: boolean;\n height: 'sum' | 'max' | 'mean' | 'median';\n };\n stackedArea: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n barsOpacity: number;\n areaOpacity: number;\n normalize: boolean;\n height: 'sum' | 'max' | 'mean' | 'median';\n showBars: boolean;\n };\n line: {\n pointsValues: 'mean' | 'median';\n emptyGroupValue: number;\n lineColor: ColorAes | null;\n dotShape: DotShapeAes;\n lineType: LineTypeAes;\n dotFill: ColorAes | null;\n opacity: number;\n };\n errorbar: {\n pointsValues: 'mean' | 'median';\n interval: 'sd' | 'se' | '';\n lineColor: ColorAes | null;\n dotShape: DotShapeAes;\n dotFill: ColorAes | null;\n opacity: number;\n };\n sina: {\n dotFill: ColorAes | null;\n dotShape: DotShapeAes;\n opacity: number;\n showOutliers: boolean;\n };\n logo: {\n normalize: boolean;\n opacity: number;\n };\n};\nexport const DEFAULT_LAYERS_SETTINGS: () => LayersSettings = () => ({\n // bubble\n bubble: {\n NAValueAs: 0,\n strokeColor: null,\n minRadius: 3,\n maxRadius: 38,\n normalizationDirection: 'row',\n normalizationMethod: 'standardScaling',\n aggregateByX: false,\n aggregateByY: false,\n aggregationMethod: 'mean',\n },\n // histogram\n bins: {\n fillColor: null,\n opacity: 1,\n },\n // dendro\n dendro: {\n dotFill: DEFAULT_BLACK,\n dotShape: DEFAULT_DOT_SHAPE,\n dotSize: DEFAULT_DOT_SIZE,\n lineColor: DEFAULT_BLACK,\n mode: 'normal',\n leavesMode: 'normal',\n showTable: false,\n showLegend: true,\n },\n // heatmap\n heatmap: {\n NAValueAs: 0,\n normalizationDirection: 'row',\n normalizationMethod: 'standardScaling',\n aggregateByX: false,\n aggregateByY: false,\n aggregationMethod: 'mean',\n },\n heatmapClustered: {\n NAValueAs: 0,\n normalizationDirection: 'row',\n normalizationMethod: 'standardScaling',\n dendrogramX: true,\n dendrogramY: true,\n disableClusteringX: false,\n disableClusteringY: false,\n aggregateByX: false,\n aggregateByY: false,\n aggregationMethod: 'mean',\n },\n // scatterplot\n dots: {\n dotFill: null as ColorAes | null,\n dotShape: null as DotShapeAes | null,\n dotSize: null as ContinuousDataMappingSize | number | null,\n },\n curve: { lineColor: DEFAULT_BLACK, smoothing: true },\n // discrete\n box: {\n showOutliers: true,\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n lineType: DEFAULT_LINE_TYPE as LineTypeAes,\n gapWidth: 0.2,\n opacity: 1,\n stat: {\n low: 0.25,\n middle: 0.5,\n upper: 0.75,\n k: 1.5,\n },\n },\n binnedDots: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n showOutliers: true,\n },\n jitteredDots: {\n dotFill: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n showOutliers: true,\n },\n violin: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n lineType: DEFAULT_LINE_TYPE as LineTypeAes,\n opacity: 1,\n trim: false,\n showQuartiles: false,\n quartilesLineStyle: 'dashed',\n medianLineStyle: 'solid',\n },\n bar: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n height: 'max',\n },\n stackedBar: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n normalize: false,\n height: 'sum',\n },\n stackedArea: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n barsOpacity: 1,\n areaOpacity: 0.7,\n normalize: false,\n showBars: true,\n height: 'sum',\n },\n line: {\n pointsValues: 'mean',\n emptyGroupValue: 0,\n lineColor: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n lineType: DEFAULT_LINE_TYPE as LineTypeAes,\n dotFill: null as ColorAes | null,\n opacity: 1,\n },\n errorbar: {\n pointsValues: 'mean',\n interval: 'sd',\n lineColor: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n dotFill: null as ColorAes | null,\n opacity: 1,\n },\n sina: {\n dotFill: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n opacity: 1,\n showOutliers: true,\n },\n logo: {\n normalize: false,\n opacity: 1,\n },\n});\n\nexport function getDefaultLayersSettings() {\n return DEFAULT_LAYERS_SETTINGS();\n}\n\nconst DISCRETE_LAYERS: Layer[] = [\n 'box',\n 'binnedDots',\n 'jitteredDots',\n 'violin',\n 'bar',\n 'stackedBar',\n 'line',\n 'errorbar',\n 'sina',\n 'logo',\n];\nconst SCATTERPLOT_LAYERS: Layer[] = ['dots', 'curve'];\nconst SCATTERPLOT_UMAP_LAYERS: Layer[] = ['dots'];\nconst HEATMAP_LAYERS: Layer[] = ['heatmap', 'heatmapClustered'];\nconst DENDRO_LAYERS: Layer[] = ['dendro'];\nconst HISTOGRAM_LAYERS: Layer[] = ['bins'];\nconst BUBBLE_LAYERS: Layer[] = ['bubble'];\nconst _LAYERS_BY_CHART_TYPE: Record<ChartType, Layer[]> = {\n 'discrete': DISCRETE_LAYERS,\n 'scatterplot': SCATTERPLOT_LAYERS,\n 'scatterplot-umap': SCATTERPLOT_UMAP_LAYERS,\n 'heatmap': HEATMAP_LAYERS,\n 'dendro': DENDRO_LAYERS,\n 'histogram': HISTOGRAM_LAYERS,\n 'bubble': BUBBLE_LAYERS,\n};\n\nexport function getInitialLayersSettings(\n initialSettings?: DeepPartial<LayersSettings>,\n): LayersSettings {\n const defaultSettings = DEFAULT_LAYERS_SETTINGS();\n const layers: Layer[] = Object.keys(defaultSettings) as Layer[];\n return layers.reduce((res, layer) => {\n Object.assign(\n res[layer],\n initialSettings?.[layer] ?? {},\n );\n return res;\n }, defaultSettings);\n}\n\nexport type Sorting = 'asc' | 'desc';\nexport type AxesState = {\n title: { value: string; position: TitlePosition; mode: AxisTitleMode; facetTitleFrame: Frame };\n axisX: {\n labelsPosition: LabelsPosition; // for heatmap - top/bottom/left/right/hidden\n labelsRotation: LabelsRotation | null; // only for discrete X axis - 'center'/'90deg'/'45deg'; null for auto mode before user chose\n axisLabelsAngle: 0 | 45 | 90; // for heatmap\n groupLabelsAngle: 0 | 45 | 90; // for heatmap\n titleMode: AxisTitleMode; // 'auto' - from column or 'custom' - from 'customTitle' field or 'hidden'\n customTitle: string; // user axis title, not default from column\n gridlines: boolean;\n linesBetweenCategories: boolean; // for discrete - position for vertical gridlines\n ticks: boolean;\n scale: Scale; // linear or log\n significantLinesStyle: LineType;\n sorting: Sorting;\n allowNullPrimaryGroups: boolean; // for discrete - allow group with null grouping value\n allowNullSecondaryGroups: boolean;\n order: {\n source: string;\n options: { value: string; label: string }[];\n } | null;\n cellSize: number | null;\n annotationTitlePosition: 'left' | 'right' | 'hidden';\n hideAxisLabels: boolean;\n hideAxisGroupLabels: boolean;\n };\n axisY: {\n labelsRotation: LabelsRotation | null; // only for discrete X axis - 'center'/'90deg'/'45deg'; null for auto mode before user chose\n titleMode: AxisTitleMode;\n customTitle: string;\n axisLabelsAngle: 0 | 45 | 90; // for heatmap\n groupLabelsAngle: 0 | 45 | 90; // for heatmap\n gridlines: boolean;\n ticks: boolean;\n scale: Scale;\n significantLinesStyle: LineType;\n sorting: Sorting;\n order: {\n source: string;\n options: { value: string; label: string }[];\n } | null;\n cellSize: number | null;\n annotationTitlePosition: 'top' | 'bottom' | 'hidden';\n hideAxisLabels: boolean;\n hideAxisGroupLabels: boolean;\n };\n legend: { show?: boolean };\n other: {\n frame: Frame | HeatmapFrame;\n reverse: boolean;\n facetSharedBy: 'x' | 'y' | 'xy' | 'none';\n facetColumns: number;\n binsCount: number;\n groupingDirection: 'straight' | 'reverse';\n groupingStack: 'vertical' | 'horizontal';\n canvasRenderMode: boolean;\n showLegend: boolean;\n nullValueLabel: string;\n /** Max number of unique values saved per source (group/axis); over this limit sets overflow */\n maxGroupCount: number;\n /** Max number of facet values saved per facetBy column; over this limit sets overflow */\n maxFacetsCount: number;\n };\n};\n\nconst DEFAULT_AXES: () => AxesState = () => ({\n title: {\n value: 'Graph 1',\n position: 'center',\n mode: 'auto',\n facetTitleFrame: 'full',\n },\n axisX: {\n labelsPosition: 'bottom',\n labelsRotation: null,\n axisLabelsAngle: 90,\n groupLabelsAngle: 45,\n titleMode: 'auto',\n customTitle: '',\n gridlines: true,\n linesBetweenCategories: true,\n ticks: true,\n scale: 'linear',\n significantLinesStyle: 'dashed',\n sorting: 'asc',\n allowNullPrimaryGroups: false,\n allowNullSecondaryGroups: false,\n order: null,\n cellSize: null,\n annotationTitlePosition: 'right',\n hideAxisLabels: false,\n hideAxisGroupLabels: false,\n },\n axisY: {\n labelsRotation: null,\n titleMode: 'auto',\n customTitle: '',\n axisLabelsAngle: 90,\n groupLabelsAngle: 45,\n gridlines: true,\n ticks: true,\n scale: 'linear',\n significantLinesStyle: 'dashed',\n sorting: 'asc',\n order: null,\n cellSize: null,\n annotationTitlePosition: 'top',\n hideAxisLabels: false,\n hideAxisGroupLabels: false,\n },\n legend: {},\n other: {\n frame: 'full',\n reverse: false,\n canvasRenderMode: false,\n facetSharedBy: 'xy',\n facetColumns: 3,\n binsCount: 10,\n groupingDirection: 'straight',\n groupingStack: 'vertical',\n showLegend: true,\n nullValueLabel: 'NA',\n maxGroupCount: 100,\n maxFacetsCount: 30,\n },\n});\n\nfunction isHeatmapFrame(frame: Frame | HeatmapFrame): frame is HeatmapFrame {\n return frame === 'full' || frame === 'none';\n}\n\nexport function getInitialAxesSettings(\n chartType: ChartType,\n initialAxesSettings?: DeepPartial<AxesState>,\n): AxesState {\n const defaultAxes = DEFAULT_AXES();\n if (!initialAxesSettings) {\n return defaultAxes;\n }\n\n // TODO: divide into separated settings for chart types\n function getFrame(frame?: Frame | HeatmapFrame): Frame | HeatmapFrame {\n if (!frame) {\n return 'full';\n }\n if (chartType === 'heatmap' && !isHeatmapFrame(frame)) {\n return 'full' as HeatmapFrame;\n }\n if (chartType !== 'heatmap' && isHeatmapFrame(frame)) {\n return frame === 'none' ? 'empty' : (frame as Frame);\n }\n return frame;\n }\n\n return {\n title: {\n ...defaultAxes.title,\n ...initialAxesSettings.title,\n },\n axisX: {\n ...defaultAxes.axisX,\n ...initialAxesSettings.axisX,\n },\n axisY: {\n ...defaultAxes.axisY,\n ...initialAxesSettings.axisY,\n },\n legend: {\n ...defaultAxes.legend,\n ...initialAxesSettings.legend,\n },\n other: {\n ...defaultAxes.other,\n ...initialAxesSettings.other,\n frame: getFrame(initialAxesSettings.other?.frame),\n },\n };\n}\n\nexport const LAYER_ICONS: Record<LayersTemplate, Component> = {\n box: BoxplotIcon,\n box_binnedDots: BoxplotAndBinnedIcon,\n box_jitteredDots: BoxplotAndJitterIcon,\n binnedDots: BinnedDotsIcon,\n jitteredDots: JitteredDotsIcon,\n violin: ViolinIcon,\n violin_binnedDots: ViolinAndBinnedIcon,\n violin_jitteredDots: ViolinAndJitterIcon,\n bar: BarIcon,\n bar_line: BarAndLineIcon,\n bar_errorbar: BarAndErrorIcon,\n stackedBar: StackedBarIcon,\n stackedArea: StackedAreaIcon,\n line: LineIcon,\n line_binnedDots: LineAndBinnedIcon,\n line_jitteredDots: LineAndJitterIcon,\n line_errorbar: LineAndErrorbarIcon,\n errorbar: BarAndLineIcon,\n sina: SinaIcon,\n logo: LogoIcon,\n dots: ScatterplotIcon,\n curve: LineIcon,\n curve_dots: LineAndJitterIcon,\n heatmap: HeatmapIcon,\n heatmapClustered: DendroIcon,\n dendro: DendroIcon,\n bins: BarIcon,\n bubble: HeatmapIcon,\n};\n\ntype Option = { value: string; text: string };\nexport const STAT_TEST_METHOD: Option[] = [\n { value: 'ttest', text: 'TTest' },\n { value: 'anova', text: 'ANOVA' },\n { value: 'wilcoxon', text: 'Wilcoxon' },\n { value: 'kruskalWallis', text: 'Kruskal-Wallis' },\n];\n\nexport const STAT_CORRECTION_METHOD: Option[] = [\n { value: 'BenjaminiHochberg', text: 'Benjamini-Hochberg' },\n { value: 'BenjaminiYekutieli', text: 'Benjamini-Yekutieli' },\n { value: 'Bonferroni', text: 'Bonferroni' },\n { value: 'Hochberg', text: 'Hochberg' },\n { value: 'Holm', text: 'Holm' },\n { value: 'Hommel', text: 'Hommel' },\n { value: 'none', text: 'None' },\n];\n\nexport const FORMAT_P_VALUE_OPTIONS: Option[] = [\n { value: 'pValue', text: 'p-value' },\n { value: 'significance', text: 'significance' },\n];\n\nexport type AesType = 'fill' | 'stroke' | 'dotShape' | 'lineType' | 'size';\n\nexport const DEFAULT_WIDTH = 600;\nexport const DEFAULT_HEIGHT = 350;\nexport const DEFAULT_WIDTH_SMALL = 400;\nexport const DEFAULT_HEIGHT_SMALL = 250;\n\nexport const MAX_SEARCH_OPTIONS_LIST_LENGTH = 100;\n\nexport const MAX_FACETS_COUNT = 1000;\nexport const MAX_GROUPS_COUNT = 1000;\n\nexport const AGGREGATION_METHOD_OPTIONS: Option[] = [\n { value: 'sum', text: 'Sum' },\n { value: 'mean', text: 'Mean' },\n { value: 'median', text: 'Median' },\n { value: 'min', text: 'Min' },\n { value: 'max', text: 'Max' },\n];\n\nexport const DEFAULT_STATUS_TEXT: StatusTextData = {\n noPframe: { title: `Configure settings and click \"Run\" to see the data` },\n noPframeWithError: { title: 'An error occurred while running the block' },\n notReady: { title: 'Please set up the data mapping' },\n empty: { title: 'No data to show' },\n inconsistent: { title: 'Remove inconsistent values from the data mapping' },\n knownError: { title: '' },\n unknownError: { title: 'Unknown error' },\n ready: { title: '' },\n loading: { title: 'Recalculating data projections...', subtitle: 'Retrieving remote assets and rendering high-volume points' },\n running: { title: PL_PLACEHOLDER_TEXTS.RUNNING.title, subtitle: PL_PLACEHOLDER_TEXTS.RUNNING.subtitle },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constantsCommon.js","names":[],"sources":["../src/constantsCommon.ts"],"sourcesContent":["import type { ChartType } from '@milaboratories/pf-plots';\nimport type { Component } from 'vue';\nimport type {\n DotShape,\n LineType,\n} from './components/AesSettings/types';\nimport {\n DEFAULT_BLACK,\n DEFAULT_DOT_SHAPE,\n DEFAULT_LINE_TYPE,\n} from './constantsAesthetic';\nimport { DEFAULT_DOT_SIZE, DEFAULT_LINE_COLOR } from './dataBindAes';\nimport BarAndErrorIcon from './icons/BarAndErrorIcon.vue';\nimport BarAndLineIcon from './icons/BarAndLineIcon.vue';\nimport BarIcon from './icons/BarIcon.vue';\nimport BinnedDotsIcon from './icons/BinnedDotsIcon.vue';\nimport BoxplotAndBinnedIcon from './icons/BoxplotAndBinnedIcon.vue';\nimport BoxplotAndJitterIcon from './icons/BoxplotAndJitterIcon.vue';\nimport BoxplotIcon from './icons/BoxplotIcon.vue';\nimport DendroIcon from './icons/DendroIcon.vue';\nimport HeatmapIcon from './icons/HeatmapIcon.vue';\nimport JitteredDotsIcon from './icons/JitteredDotsIcon.vue';\nimport LineAndBinnedIcon from './icons/LineAndBinnedIcon.vue';\nimport LineAndErrorbarIcon from './icons/LineAndErrorbarIcon.vue';\nimport LineAndJitterIcon from './icons/LineAndJitterIcon.vue';\nimport LineIcon from './icons/LineIcon.vue';\nimport LogoIcon from './icons/LogoIcon.vue';\nimport ScatterplotIcon from './icons/ScatterplotIcon.vue';\nimport SinaIcon from './icons/SinaIcon.vue';\nimport StackedBarIcon from './icons/StackedBarIcon.vue';\nimport StackedAreaIcon from './icons/StackedAreaIcon.vue';\nimport ViolinAndBinnedIcon from './icons/ViolinAndBinnedIcon.vue';\nimport ViolinAndJitterIcon from './icons/ViolinAndJitterIcon.vue';\nimport ViolinIcon from './icons/ViolinIcon.vue';\nimport type {\n AxisTitleMode,\n DeepPartial,\n DiscreteLayer,\n DiscreteLayersTemplate,\n Frame,\n HeatmapFrame, HeatmapLayer, HeatmapLayerTemplate, HistogramLayer, HistogramLayerTemplate,\n LabelsPosition,\n LabelsRotation,\n Layer,\n LayersTemplate,\n Scale,\n ScatterplotLayer,\n ScatterplotLayersTemplate,\n StatusTextData,\n TitlePosition,\n} from './types';\nimport { PL_PLACEHOLDER_TEXTS } from '@platforma-sdk/ui-vue';\n\nexport const DEFAULT_CHART_TYPE: ChartType = 'discrete';\n\nexport function getInitialTemplate(\n restoredTemplate: LayersTemplate | null,\n chartType: ChartType,\n) {\n if (chartType === 'discrete') {\n return restoredTemplate\n && DISCRETE_TEMPLATES_MAP[restoredTemplate as DiscreteLayersTemplate]\n ? restoredTemplate\n : 'box';\n }\n if (chartType === 'scatterplot' || chartType === 'scatterplot-umap') {\n return restoredTemplate\n && SCATTERPLOT_TEMPLATES_MAP[restoredTemplate as ScatterplotLayersTemplate]\n ? restoredTemplate\n : 'dots';\n }\n if (chartType === 'dendro') {\n return 'dendro';\n }\n return restoredTemplate ?? 'heatmap';\n}\n\nexport const DISCRETE_TEMPLATES_MAP: Record<\n DiscreteLayersTemplate,\n DiscreteLayer[]\n> = {\n box: ['box'],\n box_binnedDots: ['box', 'binnedDots'],\n box_jitteredDots: ['box', 'jitteredDots'],\n violin: ['violin'],\n violin_binnedDots: ['violin', 'binnedDots'],\n violin_jitteredDots: ['violin', 'jitteredDots'],\n binnedDots: ['binnedDots'],\n jitteredDots: ['jitteredDots'],\n bar: ['bar'],\n bar_line: ['bar', 'line'],\n bar_errorbar: ['bar', 'errorbar'],\n stackedBar: ['stackedBar'],\n stackedArea: ['stackedArea'],\n line: ['line'],\n line_jitteredDots: ['line', 'jitteredDots'],\n line_binnedDots: ['line', 'binnedDots'],\n line_errorbar: ['line', 'errorbar'],\n errorbar: ['errorbar'],\n sina: ['sina'],\n logo: ['logo'],\n};\n\nexport const SCATTERPLOT_TEMPLATES_MAP: Record<\n ScatterplotLayersTemplate,\n ScatterplotLayer[]\n> = {\n dots: ['dots'],\n curve: ['curve'],\n curve_dots: ['curve', 'dots'],\n};\n\nexport const SCATTERPLOT_UMAP_TEMPLATES_MAP: Partial<Record<\n ScatterplotLayersTemplate,\n ScatterplotLayer[]\n>> = {\n dots: ['dots'],\n curve_dots: ['curve', 'dots'],\n};\n\nexport const HEATMAP_TEMPLATES_MAP: Record<HeatmapLayerTemplate, HeatmapLayer[]> = {\n heatmap: ['heatmap'],\n heatmapClustered: ['heatmapClustered'],\n};\nexport const HISTOGRAM_TEMPLATES_MAP: Record<HistogramLayerTemplate, HistogramLayer[]> = {\n bins: ['bins'],\n};\nexport const LAYER_TITLES: Record<Layer, string> = {\n box: 'Boxplot',\n binnedDots: 'Binned Dots',\n jitteredDots: 'Jittered Dots',\n violin: 'Violins',\n bar: 'Bar',\n stackedBar: 'Stacked Bar',\n stackedArea: 'Stacked Bar + Stream Area',\n line: 'Line',\n errorbar: 'Error Bar',\n sina: 'Sina',\n logo: 'Logo Plot',\n dots: 'Scatter Plot',\n curve: 'Curve',\n heatmap: 'Heatmap',\n heatmapClustered: 'Heatmap + Dendro',\n dendro: 'Dendrogram',\n bins: 'Histogram',\n bubble: 'Bubble plot',\n};\n\nexport type DiscreteStatisticsState = {\n overall: {\n data: { testMethod: null | string };\n validity: { testMethod: boolean };\n };\n referenceGroup: {\n data: {\n testMethod: null | string;\n referenceGroup: null | string;\n correctionMethod: string;\n format: 'significance' | 'pValue';\n ns: boolean;\n };\n validity: {\n testMethod: boolean;\n referenceGroup: boolean;\n };\n };\n pairwise: {\n data: {\n testMethod: null | string;\n correctionMethod: string;\n format: 'significance' | 'pValue';\n ns: boolean;\n };\n validity: { testMethod: boolean };\n };\n};\n\nexport type ScatterplotStatisticsState = {\n trend: {\n on: boolean;\n trim: boolean;\n showLegend: boolean;\n };\n};\n\nexport type StatisticsState = DiscreteStatisticsState | ScatterplotStatisticsState;\n\nexport function getInitialStatisticsState(chartType: ChartType, initialData?: DeepPartial<StatisticsState>): StatisticsState {\n if (chartType === 'discrete') {\n const initial = initialData as DiscreteStatisticsState;\n return {\n overall: {\n data: { testMethod: initial?.overall?.data?.testMethod ?? null },\n validity: { testMethod: initial?.overall?.validity?.testMethod ?? true },\n },\n referenceGroup: {\n data: {\n testMethod: initial?.referenceGroup?.data?.testMethod ?? null,\n referenceGroup: initial?.referenceGroup?.data?.referenceGroup ?? null,\n correctionMethod: initial?.referenceGroup?.data?.correctionMethod ?? 'Bonferroni',\n format: initial?.referenceGroup?.data?.format ?? 'significance',\n ns: initial?.referenceGroup?.data?.ns ?? false,\n },\n validity: {\n testMethod: initial?.referenceGroup?.validity?.testMethod ?? true,\n referenceGroup: initial?.referenceGroup?.validity?.referenceGroup ?? true,\n },\n },\n pairwise: {\n data: {\n testMethod: initial?.pairwise?.data?.testMethod ?? null,\n correctionMethod: initial?.pairwise?.data?.correctionMethod ?? 'Bonferroni',\n format: initial?.pairwise?.data?.format ?? 'significance',\n ns: initial?.pairwise?.data?.ns ?? false,\n },\n validity: { testMethod: initial?.pairwise?.validity?.testMethod ?? true },\n },\n } as DiscreteStatisticsState;\n }\n const initial = initialData as ScatterplotStatisticsState;\n return {\n trend: {\n on: initial?.trend?.on ?? false,\n trim: initial?.trend?.trim ?? false,\n showLegend: initial?.trend?.showLegend ?? true,\n },\n };\n}\n\nexport type NumberRange = { min: number; max: number };\nexport type MappingLink = { type: string; value?: string }; // {type: 'primaryGrouping'} for example\nexport type ColorAes = string | MappingLink;\nexport type DotShapeAes = DotShape | MappingLink;\nexport type DotSizeAes = number | NumberRange;\nexport type LineTypeAes = LineType | MappingLink;\nexport type FixedOrMappedAes = ColorAes | DotShapeAes | LineTypeAes;\n\nexport type ContinuousDataMappingSize = {\n column: string;\n range: NumberRange;\n};\n\nexport type ContinuousDataMappingForGraph<T extends string | number> = { columnName: ColumnNameSchema; domain: number[]; range: T[]; type: 'linear' | 'log' };\n\nexport type ColumnNameSchema = {\n type: 'column';\n value: string;\n label?: string;\n valueLabels?: string;\n};\n\nexport function isNumberRange(v: number | NumberRange | null | undefined): v is NumberRange {\n return typeof v !== 'undefined' && v !== null && typeof v === 'object' && 'min' in v && 'max' in v;\n}\n\nexport function isMappedAes(\n item: FixedOrMappedAes | null | string | number | boolean | unknown,\n): item is MappingLink {\n return typeof item === 'object' && item !== null && 'type' in item;\n}\n\nexport function isContinuousDataMapping(v: ContinuousDataMappingSize | MappingLink | number | string | null | undefined): v is ContinuousDataMappingSize {\n return typeof v !== 'undefined' && v !== null && typeof v === 'object' && 'range' in v;\n}\n\nexport type LayersSettings = {\n // bubble\n bubble: {\n NAValueAs: number | null;\n minRadius: number;\n maxRadius: number;\n normalizationDirection: 'row' | 'column' | null;\n normalizationMethod: 'standardScaling' | 'meanNormalization';\n aggregateByX: boolean;\n aggregateByY: boolean;\n aggregationMethod: 'mean' | 'median' | 'min' | 'max';\n strokeColor: null | string;\n showEmptyRows: boolean;\n showEmptyColumns: boolean;\n };\n // histogram\n bins: {\n fillColor: ColorAes | null;\n opacity: number;\n };\n // dendrogram\n dendro: {\n dotFill: ColorAes;\n dotShape: DotShapeAes;\n dotSize: DotSizeAes;\n lineColor: ColorAes;\n mode: 'normal' | 'useAllNodesAsLeaves';\n leavesMode: 'normal' | 'alignLeavesToLine';\n showTable: boolean;\n showLegend: boolean;\n };\n // heatmap\n heatmap: {\n NAValueAs: number | null;\n normalizationDirection: 'row' | 'column' | null;\n normalizationMethod: 'standardScaling' | 'meanNormalization';\n aggregateByX: boolean;\n aggregateByY: boolean;\n aggregationMethod: 'mean' | 'median' | 'min' | 'max';\n showEmptyRows: boolean;\n showEmptyColumns: boolean;\n };\n heatmapClustered: {\n NAValueAs: number | null;\n normalizationDirection: 'row' | 'column' | null;\n normalizationMethod: 'standardScaling' | 'meanNormalization';\n dendrogramX: boolean;\n dendrogramY: boolean;\n disableClusteringX: boolean;\n disableClusteringY: boolean;\n aggregateByX: boolean;\n aggregateByY: boolean;\n aggregationMethod: 'mean' | 'median' | 'min' | 'max';\n showEmptyRows: boolean;\n showEmptyColumns: boolean;\n };\n // scatterplot\n dots: {\n dotFill: ColorAes | null;\n dotShape: DotShapeAes | null;\n dotSize: ContinuousDataMappingSize | number | null;\n };\n curve: {\n smoothing: boolean;\n lineColor: ColorAes;\n };\n // discrete\n box: {\n showOutliers: boolean;\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n dotShape: DotShapeAes;\n lineType: LineTypeAes;\n gapWidth: number;\n opacity: number;\n stat: {\n low: number;\n middle: number;\n upper: number;\n k: number;\n };\n };\n binnedDots: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n opacity: number;\n showOutliers: boolean;\n };\n jitteredDots: {\n dotFill: ColorAes | null;\n dotShape: DotShapeAes;\n lineColor: ColorAes;\n opacity: number;\n showOutliers: boolean;\n };\n violin: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n lineType: LineTypeAes;\n opacity: number;\n trim: boolean;\n showQuartiles: boolean;\n quartilesLineStyle: LineType;\n medianLineStyle: LineType;\n };\n bar: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n opacity: number;\n height: 'max' | 'mean' | 'median';\n };\n stackedBar: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n opacity: number;\n normalize: boolean;\n height: 'sum' | 'max' | 'mean' | 'median';\n };\n stackedArea: {\n fillColor: ColorAes | null;\n lineColor: ColorAes;\n barsOpacity: number;\n areaOpacity: number;\n normalize: boolean;\n height: 'sum' | 'max' | 'mean' | 'median';\n showBars: boolean;\n };\n line: {\n pointsValues: 'mean' | 'median';\n emptyGroupValue: number;\n lineColor: ColorAes | null;\n dotShape: DotShapeAes;\n lineType: LineTypeAes;\n dotFill: ColorAes | null;\n opacity: number;\n };\n errorbar: {\n pointsValues: 'mean' | 'median';\n interval: 'sd' | 'se' | '';\n lineColor: ColorAes | null;\n dotShape: DotShapeAes;\n dotFill: ColorAes | null;\n opacity: number;\n };\n sina: {\n dotFill: ColorAes | null;\n dotShape: DotShapeAes;\n opacity: number;\n showOutliers: boolean;\n };\n logo: {\n normalize: boolean;\n opacity: number;\n };\n};\nexport const DEFAULT_LAYERS_SETTINGS: () => LayersSettings = () => ({\n // bubble\n bubble: {\n NAValueAs: 0,\n strokeColor: null,\n minRadius: 3,\n maxRadius: 38,\n normalizationDirection: 'row',\n normalizationMethod: 'standardScaling',\n aggregateByX: false,\n aggregateByY: false,\n aggregationMethod: 'mean',\n showEmptyRows: false,\n showEmptyColumns: false,\n },\n // histogram\n bins: {\n fillColor: null,\n opacity: 1,\n },\n // dendro\n dendro: {\n dotFill: DEFAULT_BLACK,\n dotShape: DEFAULT_DOT_SHAPE,\n dotSize: DEFAULT_DOT_SIZE,\n lineColor: DEFAULT_BLACK,\n mode: 'normal',\n leavesMode: 'normal',\n showTable: false,\n showLegend: true,\n },\n // heatmap\n heatmap: {\n NAValueAs: 0,\n normalizationDirection: 'row',\n normalizationMethod: 'standardScaling',\n aggregateByX: false,\n aggregateByY: false,\n aggregationMethod: 'mean',\n showEmptyRows: false,\n showEmptyColumns: false,\n },\n heatmapClustered: {\n NAValueAs: 0,\n normalizationDirection: 'row',\n normalizationMethod: 'standardScaling',\n dendrogramX: true,\n dendrogramY: true,\n disableClusteringX: false,\n disableClusteringY: false,\n aggregateByX: false,\n aggregateByY: false,\n aggregationMethod: 'mean',\n showEmptyRows: false,\n showEmptyColumns: false,\n },\n // scatterplot\n dots: {\n dotFill: null as ColorAes | null,\n dotShape: null as DotShapeAes | null,\n dotSize: null as ContinuousDataMappingSize | number | null,\n },\n curve: { lineColor: DEFAULT_BLACK, smoothing: true },\n // discrete\n box: {\n showOutliers: true,\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n lineType: DEFAULT_LINE_TYPE as LineTypeAes,\n gapWidth: 0.2,\n opacity: 1,\n stat: {\n low: 0.25,\n middle: 0.5,\n upper: 0.75,\n k: 1.5,\n },\n },\n binnedDots: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n showOutliers: true,\n },\n jitteredDots: {\n dotFill: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n showOutliers: true,\n },\n violin: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n lineType: DEFAULT_LINE_TYPE as LineTypeAes,\n opacity: 1,\n trim: false,\n showQuartiles: false,\n quartilesLineStyle: 'dashed',\n medianLineStyle: 'solid',\n },\n bar: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n height: 'max',\n },\n stackedBar: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n opacity: 1,\n normalize: false,\n height: 'sum',\n },\n stackedArea: {\n fillColor: null as ColorAes | null,\n lineColor: DEFAULT_LINE_COLOR as ColorAes,\n barsOpacity: 1,\n areaOpacity: 0.7,\n normalize: false,\n showBars: true,\n height: 'sum',\n },\n line: {\n pointsValues: 'mean',\n emptyGroupValue: 0,\n lineColor: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n lineType: DEFAULT_LINE_TYPE as LineTypeAes,\n dotFill: null as ColorAes | null,\n opacity: 1,\n },\n errorbar: {\n pointsValues: 'mean',\n interval: 'sd',\n lineColor: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n dotFill: null as ColorAes | null,\n opacity: 1,\n },\n sina: {\n dotFill: null as ColorAes | null,\n dotShape: DEFAULT_DOT_SHAPE as DotShapeAes,\n opacity: 1,\n showOutliers: true,\n },\n logo: {\n normalize: false,\n opacity: 1,\n },\n});\n\nexport function getDefaultLayersSettings() {\n return DEFAULT_LAYERS_SETTINGS();\n}\n\nconst DISCRETE_LAYERS: Layer[] = [\n 'box',\n 'binnedDots',\n 'jitteredDots',\n 'violin',\n 'bar',\n 'stackedBar',\n 'line',\n 'errorbar',\n 'sina',\n 'logo',\n];\nconst SCATTERPLOT_LAYERS: Layer[] = ['dots', 'curve'];\nconst SCATTERPLOT_UMAP_LAYERS: Layer[] = ['dots'];\nconst HEATMAP_LAYERS: Layer[] = ['heatmap', 'heatmapClustered'];\nconst DENDRO_LAYERS: Layer[] = ['dendro'];\nconst HISTOGRAM_LAYERS: Layer[] = ['bins'];\nconst BUBBLE_LAYERS: Layer[] = ['bubble'];\nconst _LAYERS_BY_CHART_TYPE: Record<ChartType, Layer[]> = {\n 'discrete': DISCRETE_LAYERS,\n 'scatterplot': SCATTERPLOT_LAYERS,\n 'scatterplot-umap': SCATTERPLOT_UMAP_LAYERS,\n 'heatmap': HEATMAP_LAYERS,\n 'dendro': DENDRO_LAYERS,\n 'histogram': HISTOGRAM_LAYERS,\n 'bubble': BUBBLE_LAYERS,\n};\n\nexport function getInitialLayersSettings(\n initialSettings?: DeepPartial<LayersSettings>,\n): LayersSettings {\n const defaultSettings = DEFAULT_LAYERS_SETTINGS();\n const layers: Layer[] = Object.keys(defaultSettings) as Layer[];\n return layers.reduce((res, layer) => {\n Object.assign(\n res[layer],\n initialSettings?.[layer] ?? {},\n );\n return res;\n }, defaultSettings);\n}\n\nexport type Sorting = 'asc' | 'desc';\nexport type AxesState = {\n title: { value: string; position: TitlePosition; mode: AxisTitleMode; facetTitleFrame: Frame };\n axisX: {\n labelsPosition: LabelsPosition; // for heatmap - top/bottom/left/right/hidden\n labelsRotation: LabelsRotation | null; // only for discrete X axis - 'center'/'90deg'/'45deg'; null for auto mode before user chose\n axisLabelsAngle: 0 | 45 | 90; // for heatmap\n groupLabelsAngle: 0 | 45 | 90; // for heatmap\n titleMode: AxisTitleMode; // 'auto' - from column or 'custom' - from 'customTitle' field or 'hidden'\n customTitle: string; // user axis title, not default from column\n gridlines: boolean;\n linesBetweenCategories: boolean; // for discrete - position for vertical gridlines\n ticks: boolean;\n scale: Scale; // linear or log\n significantLinesStyle: LineType;\n sorting: Sorting;\n allowNullPrimaryGroups: boolean; // for discrete - allow group with null grouping value\n allowNullSecondaryGroups: boolean;\n order: {\n source: string;\n options: { value: string; label: string }[];\n } | null;\n cellSize: number | null;\n annotationTitlePosition: 'left' | 'right' | 'hidden';\n hideAxisLabels: boolean;\n hideAxisGroupLabels: boolean;\n };\n axisY: {\n labelsRotation: LabelsRotation | null; // only for discrete X axis - 'center'/'90deg'/'45deg'; null for auto mode before user chose\n titleMode: AxisTitleMode;\n customTitle: string;\n axisLabelsAngle: 0 | 45 | 90; // for heatmap\n groupLabelsAngle: 0 | 45 | 90; // for heatmap\n gridlines: boolean;\n ticks: boolean;\n scale: Scale;\n significantLinesStyle: LineType;\n sorting: Sorting;\n order: {\n source: string;\n options: { value: string; label: string }[];\n } | null;\n cellSize: number | null;\n annotationTitlePosition: 'top' | 'bottom' | 'hidden';\n hideAxisLabels: boolean;\n hideAxisGroupLabels: boolean;\n };\n legend: { show?: boolean };\n other: {\n frame: Frame | HeatmapFrame;\n reverse: boolean;\n facetSharedBy: 'x' | 'y' | 'xy' | 'none';\n facetColumns: number;\n binsCount: number;\n groupingDirection: 'straight' | 'reverse';\n groupingStack: 'vertical' | 'horizontal';\n canvasRenderMode: boolean;\n showLegend: boolean;\n nullValueLabel: string;\n /** Max number of unique values saved per source (group/axis); over this limit sets overflow */\n maxGroupCount: number;\n /** Max number of facet values saved per facetBy column; over this limit sets overflow */\n maxFacetsCount: number;\n };\n};\n\nconst DEFAULT_AXES: () => AxesState = () => ({\n title: {\n value: 'Graph 1',\n position: 'center',\n mode: 'auto',\n facetTitleFrame: 'full',\n },\n axisX: {\n labelsPosition: 'bottom',\n labelsRotation: null,\n axisLabelsAngle: 90,\n groupLabelsAngle: 45,\n titleMode: 'auto',\n customTitle: '',\n gridlines: true,\n linesBetweenCategories: true,\n ticks: true,\n scale: 'linear',\n significantLinesStyle: 'dashed',\n sorting: 'asc',\n allowNullPrimaryGroups: false,\n allowNullSecondaryGroups: false,\n order: null,\n cellSize: null,\n annotationTitlePosition: 'right',\n hideAxisLabels: false,\n hideAxisGroupLabels: false,\n },\n axisY: {\n labelsRotation: null,\n titleMode: 'auto',\n customTitle: '',\n axisLabelsAngle: 90,\n groupLabelsAngle: 45,\n gridlines: true,\n ticks: true,\n scale: 'linear',\n significantLinesStyle: 'dashed',\n sorting: 'asc',\n order: null,\n cellSize: null,\n annotationTitlePosition: 'top',\n hideAxisLabels: false,\n hideAxisGroupLabels: false,\n },\n legend: {},\n other: {\n frame: 'full',\n reverse: false,\n canvasRenderMode: false,\n facetSharedBy: 'xy',\n facetColumns: 3,\n binsCount: 10,\n groupingDirection: 'straight',\n groupingStack: 'vertical',\n showLegend: true,\n nullValueLabel: 'NA',\n maxGroupCount: 100,\n maxFacetsCount: 30,\n },\n});\n\nfunction isHeatmapFrame(frame: Frame | HeatmapFrame): frame is HeatmapFrame {\n return frame === 'full' || frame === 'none';\n}\n\nexport function getInitialAxesSettings(\n chartType: ChartType,\n initialAxesSettings?: DeepPartial<AxesState>,\n): AxesState {\n const defaultAxes = DEFAULT_AXES();\n if (!initialAxesSettings) {\n return defaultAxes;\n }\n\n // TODO: divide into separated settings for chart types\n function getFrame(frame?: Frame | HeatmapFrame): Frame | HeatmapFrame {\n if (!frame) {\n return 'full';\n }\n if (chartType === 'heatmap' && !isHeatmapFrame(frame)) {\n return 'full' as HeatmapFrame;\n }\n if (chartType !== 'heatmap' && isHeatmapFrame(frame)) {\n return frame === 'none' ? 'empty' : (frame as Frame);\n }\n return frame;\n }\n\n return {\n title: {\n ...defaultAxes.title,\n ...initialAxesSettings.title,\n },\n axisX: {\n ...defaultAxes.axisX,\n ...initialAxesSettings.axisX,\n },\n axisY: {\n ...defaultAxes.axisY,\n ...initialAxesSettings.axisY,\n },\n legend: {\n ...defaultAxes.legend,\n ...initialAxesSettings.legend,\n },\n other: {\n ...defaultAxes.other,\n ...initialAxesSettings.other,\n frame: getFrame(initialAxesSettings.other?.frame),\n },\n };\n}\n\nexport const LAYER_ICONS: Record<LayersTemplate, Component> = {\n box: BoxplotIcon,\n box_binnedDots: BoxplotAndBinnedIcon,\n box_jitteredDots: BoxplotAndJitterIcon,\n binnedDots: BinnedDotsIcon,\n jitteredDots: JitteredDotsIcon,\n violin: ViolinIcon,\n violin_binnedDots: ViolinAndBinnedIcon,\n violin_jitteredDots: ViolinAndJitterIcon,\n bar: BarIcon,\n bar_line: BarAndLineIcon,\n bar_errorbar: BarAndErrorIcon,\n stackedBar: StackedBarIcon,\n stackedArea: StackedAreaIcon,\n line: LineIcon,\n line_binnedDots: LineAndBinnedIcon,\n line_jitteredDots: LineAndJitterIcon,\n line_errorbar: LineAndErrorbarIcon,\n errorbar: BarAndLineIcon,\n sina: SinaIcon,\n logo: LogoIcon,\n dots: ScatterplotIcon,\n curve: LineIcon,\n curve_dots: LineAndJitterIcon,\n heatmap: HeatmapIcon,\n heatmapClustered: DendroIcon,\n dendro: DendroIcon,\n bins: BarIcon,\n bubble: HeatmapIcon,\n};\n\ntype Option = { value: string; text: string };\nexport const STAT_TEST_METHOD: Option[] = [\n { value: 'ttest', text: 'TTest' },\n { value: 'anova', text: 'ANOVA' },\n { value: 'wilcoxon', text: 'Wilcoxon' },\n { value: 'kruskalWallis', text: 'Kruskal-Wallis' },\n];\n\nexport const STAT_CORRECTION_METHOD: Option[] = [\n { value: 'BenjaminiHochberg', text: 'Benjamini-Hochberg' },\n { value: 'BenjaminiYekutieli', text: 'Benjamini-Yekutieli' },\n { value: 'Bonferroni', text: 'Bonferroni' },\n { value: 'Hochberg', text: 'Hochberg' },\n { value: 'Holm', text: 'Holm' },\n { value: 'Hommel', text: 'Hommel' },\n { value: 'none', text: 'None' },\n];\n\nexport const FORMAT_P_VALUE_OPTIONS: Option[] = [\n { value: 'pValue', text: 'p-value' },\n { value: 'significance', text: 'significance' },\n];\n\nexport type AesType = 'fill' | 'stroke' | 'dotShape' | 'lineType' | 'size';\n\nexport const DEFAULT_WIDTH = 600;\nexport const DEFAULT_HEIGHT = 350;\nexport const DEFAULT_WIDTH_SMALL = 400;\nexport const DEFAULT_HEIGHT_SMALL = 250;\n\nexport const MAX_SEARCH_OPTIONS_LIST_LENGTH = 100;\n\nexport const MAX_FACETS_COUNT = 1000;\nexport const MAX_GROUPS_COUNT = 1000;\n\nexport const AGGREGATION_METHOD_OPTIONS: Option[] = [\n { value: 'sum', text: 'Sum' },\n { value: 'mean', text: 'Mean' },\n { value: 'median', text: 'Median' },\n { value: 'min', text: 'Min' },\n { value: 'max', text: 'Max' },\n];\n\nexport const DEFAULT_STATUS_TEXT: StatusTextData = {\n noPframe: { title: `Configure settings and click \"Run\" to see the data` },\n noPframeWithError: { title: 'An error occurred while running the block' },\n notReady: { title: 'Please set up the data mapping' },\n empty: { title: 'No data to show' },\n inconsistent: { title: 'Remove inconsistent values from the data mapping' },\n knownError: { title: '' },\n unknownError: { title: 'Unknown error' },\n ready: { title: '' },\n loading: { title: 'Recalculating data projections...', subtitle: 'Retrieving remote assets and rendering high-volume points' },\n running: { title: PL_PLACEHOLDER_TEXTS.RUNNING.title, subtitle: PL_PLACEHOLDER_TEXTS.RUNNING.subtitle },\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DendroForm.js","names":[],"sources":["../../../src/forms/DataMappingForm/DendroForm.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlDropdown } from '@platforma-sdk/ui-vue';\nimport type {\n DendroUIState,\n InputGuide,\n InputState,\n} from '@milaboratories/pf-plots';\nimport FormLayout from './Layout/FormLayout.vue';\nimport type { Ref } from 'vue';\nimport { computed, watch, toRef, ref } from 'vue';\nimport { useStore } from '../../store';\nimport {\n getAllInputsOptions,\n toFiltersMulti,\n getErrorForPlDropdown,\n toSimpleMulti,\n getChipInfo,\n toSimpleSingle,\n getFreeOptions,\n hasInputError,\n} from './utils';\nimport { DEFAULT_DOT_SHAPE } from '../../dataBindAes';\nimport { DEFAULT_BLACK } from '../../constantsAesthetic';\nimport type {\n BasketProps,\n ChipInfo,\n DropItemEvent,\n RemoveItemEvent,\n} from '../../components/DragAndDrop/types';\nimport DndChip from '../../components/DragAndDrop/DndChip.vue';\nimport DndBasket from '../../components/DragAndDrop/DndBasket.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../../constantsCommon';\n\ntype BasketIds = Exclude<\n keyof (typeof inputStateValues)['value'] & keyof DendroUIState['components'],\n 'value' | 'filters' | 'tabBy'\n>;\n\nconst store = useStore();\nconst state = store.value.reactive.optionsState as DendroUIState;\nconst stateRef = toRef(store.value.reactive, 'optionsState');\n\nconst inputGuide = computed(\n () => store.value.inputGuide.value,\n) as unknown as Ref<InputGuide<DendroUIState>>;\nconst labelsInfo = computed(() => store.value.uniqueValuesData.value);\n\n// const nodeSize = toRef(state.data.nodeSize.selectorState, \"selectedSource\");\nfunction getSimpleSingle(inputName: keyof InputState['components']) {\n return toSimpleSingle(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n}\nfunction getSimpleMulti(inputName: keyof InputState['components']) {\n return toSimpleMulti(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n}\nfunction getFiltersMulti(inputName: keyof InputState['components']) {\n return toFiltersMulti(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n inputGuide,\n );\n}\n\nconst inputStateValues = ref({\n value: getSimpleSingle('value'),\n tableContent: getSimpleMulti('tableContent'),\n heatmapAnnotation: getSimpleMulti('heatmapAnnotation'),\n heatmapForSequence: getSimpleMulti('heatmapForSequence'),\n filters: getFiltersMulti('filters'),\n tabBy: getFiltersMulti('tabBy'),\n height: getSimpleMulti('height'),\n labels: getSimpleMulti('labels'),\n nodeShape: getSimpleMulti('nodeShape'),\n nodeColor: getSimpleMulti('nodeColor'),\n nodeSize: getSimpleMulti('nodeSize'),\n lineColor: getSimpleMulti('lineColor'),\n heatmapAxis: getSimpleMulti('heatmapAxis'),\n heatmapGroup: getSimpleMulti('heatmapGroup'),\n});\nwatch(\n () => inputStateValues.value.nodeShape,\n (value) => {\n store.value.reactive.layersSettings.dendro.dotShape = value.length\n ? { type: 'nodeShape', value: value[0] }\n : DEFAULT_DOT_SHAPE;\n },\n);\nwatch(\n () => inputStateValues.value.nodeColor,\n (value) => {\n store.value.reactive.layersSettings.dendro.dotFill = value.length\n ? { type: 'nodeColor', value: value[0] }\n : DEFAULT_BLACK;\n },\n);\nwatch(\n () => inputStateValues.value.lineColor,\n (value) => {\n store.value.reactive.layersSettings.dendro.lineColor = value.length\n ? { type: 'lineColor', value: value[0] }\n : DEFAULT_BLACK;\n },\n);\n\nconst options = computed(() => {\n return getAllInputsOptions(\n state,\n inputGuide as Ref<InputGuide<DendroUIState>>,\n );\n});\n\nconst freeOptions = computed(() =>\n getFreeOptions(inputGuide as Ref<InputGuide<InputState>>, BASKETS),\n);\nconst freeMandatoryOptions = computed(() =>\n freeOptions.value.filter((item) => item.info.kind === 'axis'),\n);\nconst BASKETS: BasketIds[] = [\n 'height',\n 'tableContent',\n 'labels',\n 'heatmapAnnotation',\n 'heatmapAxis',\n 'heatmapGroup',\n 'heatmapForSequence',\n 'nodeShape',\n 'nodeColor',\n 'nodeSize',\n 'lineColor',\n];\n\nconst BASKET_LABELS: Record<BasketIds, string> = {\n height: 'Connections length',\n tableContent: 'Table/tooltip content',\n labels: 'Labels',\n heatmapAnnotation: 'Heatmap annotation',\n heatmapAxis: 'Heatmap axis',\n heatmapGroup: 'Heatmap group',\n heatmapForSequence: 'Alignment data',\n nodeShape: 'Node shape',\n nodeColor: 'Node color',\n nodeSize: 'Node size',\n lineColor: 'Line color',\n};\n\nconst draggedId = ref<string | null>(null);\n\nconst chipInfo = computed<Record<string, ChipInfo>>(() => {\n const freeAndSelectedIds = new Set<string>();\n BASKETS.forEach((name) => {\n options.value[name].forEach((option) => {\n freeAndSelectedIds.add(option.value);\n });\n state.components[name].selectorStates.forEach((selectorState) => {\n freeAndSelectedIds.add(selectorState.selectedSource);\n });\n });\n return getChipInfo(inputGuide.value, state.components, labelsInfo.value, [...freeAndSelectedIds]);\n});\n\nfunction commonDropItemHandler(event: DropItemEvent<BasketIds>) {\n inputStateValues.value[event.id] = [\n ...inputStateValues.value[event.id],\n event.draggedId,\n ];\n draggedId.value = null;\n}\n\nfunction commonReorder(data: ChipInfo['id'][], name: BasketIds) {\n inputStateValues.value[name] = data;\n}\n\nfunction commonRemoveItem(event: RemoveItemEvent<BasketIds>) {\n inputStateValues.value[event.basketId] = inputStateValues.value[\n event.basketId\n ].filter((op) => op !== event.chipId);\n}\n\nfunction getConsistency(basketId: BasketIds) {\n return inputGuide.value.components[basketId].stateConsistency;\n}\n\nfunction getDisabled(basketId: BasketIds) {\n return (\n !inputGuide.value.readyData\n || options.value[basketId].length === 0\n || (draggedId.value !== null\n && !chipInfo.value[draggedId.value].availableBasketIds.has(basketId))\n );\n}\n\nasync function searchFilterOptions(sourceId: string, searchStr: string): Promise<{ value: string; label: string }[]> {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore.value, inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchStr)).values;\n}\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string): Promise<{ value: string; label: string }[]> {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore.value, inputGuide.value, sourceId, 1, undefined, selectedValue)).values;\n}\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ values: [], overflow: false });\n }\n return store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore.value, inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH);\n}\n\nconst basketsData = computed<BasketProps[]>(() =>\n BASKETS.map((name) => {\n const guide = inputGuide.value.components[name];\n\n const basketProps: BasketProps = {\n id: name,\n title: BASKET_LABELS[name],\n isFilter: false,\n sortable: name === 'tableContent',\n multiple: guide.multipleSelectors,\n required: guide.required,\n disabled: getDisabled(name),\n readonly: store.value.readonlyInputs?.includes(name) ?? false,\n consistency: getConsistency(name),\n draggedId: draggedId.value,\n droppedIds: inputStateValues.value[name],\n info: chipInfo.value,\n\n searchFn: searchFilterOptions,\n searchSelectedValueFn: searchSelectedFilterValueOptions,\n loadOptionsFn: loadOptions,\n\n listeners: {\n 'drop-item': commonDropItemHandler,\n 'remove-item': commonRemoveItem,\n 'reorder': (data: ChipInfo['id'][]) => commonReorder(data, name),\n },\n };\n return basketProps;\n }),\n);\n\nfunction showBasket(basketId: BasketProps['id']) {\n if (basketId === 'heatmapAxis' || basketId === 'heatmapGroup') {\n return inputStateValues.value.heatmapAnnotation !== null;\n }\n return true;\n}\n\nfunction cleanDraggedId() {\n draggedId.value = null;\n}\n\nconst autoFillInputs: (keyof typeof inputStateValues.value)[] = ['value'];\n\nautoFillInputs.forEach((inputName) => {\n watch(\n [() => inputStateValues.value[inputName], () => options.value],\n ([v, vOptions]) => {\n if (\n (typeof v === 'undefined'\n || hasInputError('value', inputGuide.value))\n && vOptions[inputName]\n && vOptions[inputName].length\n ) {\n store.value.controller.changeSelected(\n inputName,\n store.value.columnsDataStore.value!,\n store.value.reactive.optionsState,\n [{ selectedSource: vOptions[inputName][0].value }],\n\n );\n }\n },\n { immediate: true },\n );\n});\n\nconst readonlyValue = computed(() => store.value.readonlyInputs?.includes('value') ?? false);\n\n</script>\n\n<template>\n <FormLayout>\n <template #dataInputs>\n <div class=\"data-form-input-item\">\n <PlDropdown\n v-model=\"inputStateValues.value\"\n label=\"Data source:\"\n :options=\"options.value\"\n :disabled=\"readonlyValue\"\n :error=\"getErrorForPlDropdown('value', inputGuide)\"\n />\n </div>\n <div v-if=\"freeMandatoryOptions.length > 0\" class=\"metadata-block\">\n <div class=\"title\">Drag to build the chart</div>\n <div class=\"metadata-block__items\">\n <DndChip\n v-for=\"{ id } in freeMandatoryOptions\"\n :key=\"id\"\n :info=\"chipInfo[id]\"\n @dragstart=\"draggedId = $event\"\n @dragend=\"cleanDraggedId\"\n />\n </div>\n </div>\n <div v-if=\"freeOptions.length > 0\" class=\"metadata-block\">\n <div class=\"title\">Metadata</div>\n <div class=\"metadata-block__items\">\n <DndChip\n v-for=\"{ id } in freeOptions\"\n :key=\"id\"\n :info=\"chipInfo[id]\"\n @dragstart=\"draggedId = $event\"\n @dragend=\"cleanDraggedId\"\n />\n </div>\n </div>\n </template>\n\n <template #chartVar>\n <template v-for=\"basketProp in basketsData\" :key=\"basketProp.id\">\n <div v-if=\"showBasket(basketProp.id)\" class=\"data-form-input-item\">\n <DndBasket v-bind=\"basketProp\" v-on=\"basketProp.listeners\" />\n </div>\n </template>\n </template>\n </FormLayout>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"DendroForm.js","names":[],"sources":["../../../src/forms/DataMappingForm/DendroForm.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlDropdown } from '@platforma-sdk/ui-vue';\nimport type {\n DendroUIState,\n InputGuide,\n InputState,\n} from '@milaboratories/pf-plots';\nimport FormLayout from './Layout/FormLayout.vue';\nimport type { Ref } from 'vue';\nimport { computed, watch, toRef, ref } from 'vue';\nimport { useStore } from '../../store';\nimport {\n getAllInputsOptions,\n toFiltersMulti,\n getErrorForPlDropdown,\n toSimpleMulti,\n getChipInfo,\n toSimpleSingle,\n getFreeOptions,\n hasInputError,\n} from './utils';\nimport { DEFAULT_DOT_SHAPE } from '../../dataBindAes';\nimport { DEFAULT_BLACK } from '../../constantsAesthetic';\nimport type {\n BasketProps,\n ChipInfo,\n DropItemEvent,\n RemoveItemEvent,\n} from '../../components/DragAndDrop/types';\nimport DndChip from '../../components/DragAndDrop/DndChip.vue';\nimport DndBasket from '../../components/DragAndDrop/DndBasket.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../../constantsCommon';\n\ntype BasketIds = Exclude<\n keyof (typeof inputStateValues)['value'] & keyof DendroUIState['components'],\n 'value' | 'filters' | 'tabBy'\n>;\n\nconst store = useStore();\nconst state = store.value.reactive.optionsState as DendroUIState;\nconst stateRef = toRef(store.value.reactive, 'optionsState');\n\nconst inputGuide = computed(\n () => store.value.inputGuide.value,\n) as unknown as Ref<InputGuide<DendroUIState>>;\nconst labelsInfo = computed(() => store.value.uniqueValuesData.value);\n\n// const nodeSize = toRef(state.data.nodeSize.selectorState, \"selectedSource\");\nfunction getSimpleSingle(inputName: keyof InputState['components']) {\n return toSimpleSingle(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n}\nfunction getSimpleMulti(inputName: keyof InputState['components']) {\n return toSimpleMulti(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n}\nfunction getFiltersMulti(inputName: keyof InputState['components']) {\n return toFiltersMulti(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n inputGuide,\n );\n}\n\nconst inputStateValues = ref({\n value: getSimpleSingle('value'),\n tableContent: getSimpleMulti('tableContent'),\n heatmapAnnotation: getSimpleMulti('heatmapAnnotation'),\n heatmapForSequence: getSimpleMulti('heatmapForSequence'),\n filters: getFiltersMulti('filters'),\n tabBy: getFiltersMulti('tabBy'),\n height: getSimpleMulti('height'),\n labels: getSimpleMulti('labels'),\n nodeShape: getSimpleMulti('nodeShape'),\n nodeColor: getSimpleMulti('nodeColor'),\n nodeSize: getSimpleMulti('nodeSize'),\n lineColor: getSimpleMulti('lineColor'),\n heatmapAxis: getSimpleMulti('heatmapAxis'),\n heatmapGroup: getSimpleMulti('heatmapGroup'),\n});\nwatch(\n () => inputStateValues.value.nodeShape,\n (value) => {\n store.value.reactive.layersSettings.dendro.dotShape = value.length\n ? { type: 'nodeShape', value: value[0] }\n : DEFAULT_DOT_SHAPE;\n },\n);\nwatch(\n () => inputStateValues.value.nodeColor,\n (value) => {\n store.value.reactive.layersSettings.dendro.dotFill = value.length\n ? { type: 'nodeColor', value: value[0] }\n : DEFAULT_BLACK;\n },\n);\nwatch(\n () => inputStateValues.value.lineColor,\n (value) => {\n store.value.reactive.layersSettings.dendro.lineColor = value.length\n ? { type: 'lineColor', value: value[0] }\n : DEFAULT_BLACK;\n },\n);\n\nconst options = computed(() => {\n return getAllInputsOptions(\n state,\n inputGuide as Ref<InputGuide<DendroUIState>>,\n );\n});\n\nconst freeOptions = computed(() =>\n getFreeOptions(inputGuide as Ref<InputGuide<InputState>>, BASKETS),\n);\nconst freeMandatoryOptions = computed(() =>\n freeOptions.value.filter((item) => item.info.kind === 'axis'),\n);\nconst BASKETS: BasketIds[] = [\n 'height',\n 'tableContent',\n 'labels',\n 'heatmapAnnotation',\n 'heatmapAxis',\n 'heatmapGroup',\n 'heatmapForSequence',\n 'nodeShape',\n 'nodeColor',\n 'nodeSize',\n 'lineColor',\n];\n\nconst BASKET_LABELS: Record<BasketIds, string> = {\n height: 'Connections length',\n tableContent: 'Table/tooltip content',\n labels: 'Labels',\n heatmapAnnotation: 'Heatmap annotation',\n heatmapAxis: 'Heatmap axis',\n heatmapGroup: 'Heatmap group',\n heatmapForSequence: 'Alignment data',\n nodeShape: 'Node shape',\n nodeColor: 'Node color',\n nodeSize: 'Node size',\n lineColor: 'Line color',\n};\n\nconst draggedId = ref<string | null>(null);\n\nconst chipInfo = computed<Record<string, ChipInfo>>(() => {\n const freeAndSelectedIds = new Set<string>();\n BASKETS.forEach((name) => {\n options.value[name].forEach((option) => {\n freeAndSelectedIds.add(option.value);\n });\n state.components[name].selectorStates.forEach((selectorState) => {\n freeAndSelectedIds.add(selectorState.selectedSource);\n });\n });\n return getChipInfo(inputGuide.value, state.components, labelsInfo.value, [...freeAndSelectedIds]);\n});\n\nfunction commonDropItemHandler(event: DropItemEvent<BasketIds>) {\n inputStateValues.value[event.id] = [\n ...inputStateValues.value[event.id],\n event.draggedId,\n ];\n draggedId.value = null;\n}\n\nfunction commonReorder(data: ChipInfo['id'][], name: BasketIds) {\n inputStateValues.value[name] = data;\n}\n\nfunction commonRemoveItem(event: RemoveItemEvent<BasketIds>) {\n inputStateValues.value[event.basketId] = inputStateValues.value[\n event.basketId\n ].filter((op) => op !== event.chipId);\n}\n\nfunction getConsistency(basketId: BasketIds) {\n return inputGuide.value.components[basketId].stateConsistency;\n}\n\nfunction getDisabled(basketId: BasketIds) {\n return (\n !inputGuide.value.readyData\n || options.value[basketId].length === 0\n || (draggedId.value !== null\n && !chipInfo.value[draggedId.value].availableBasketIds.has(basketId))\n );\n}\n\nasync function searchFilterOptions(sourceId: string, searchStr: string): Promise<{ value: string; label: string }[]> {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n return (await store.value.controller.getUniqueSourceValuesWithLabels({ store: store.value.columnsDataStore.value, inputGuide: inputGuide.value, selectedSource: sourceId, limit: MAX_SEARCH_OPTIONS_LIST_LENGTH, searchQuery: searchStr })).values;\n}\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string): Promise<{ value: string; label: string }[]> {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n const label = await store.value.controller.getLabelForValue({ store: store.value.columnsDataStore.value, inputGuide: inputGuide.value, selectedSource: sourceId, value: selectedValue });\n return [{ value: selectedValue, label }];\n}\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ values: [], overflow: false });\n }\n return store.value.controller.getUniqueSourceValuesWithLabels({ store: store.value.columnsDataStore.value, inputGuide: inputGuide.value, selectedSource: sourceId, limit: MAX_SEARCH_OPTIONS_LIST_LENGTH });\n}\n\nconst basketsData = computed<BasketProps[]>(() =>\n BASKETS.map((name) => {\n const guide = inputGuide.value.components[name];\n\n const basketProps: BasketProps = {\n id: name,\n title: BASKET_LABELS[name],\n isFilter: false,\n sortable: name === 'tableContent',\n multiple: guide.multipleSelectors,\n required: guide.required,\n disabled: getDisabled(name),\n readonly: store.value.readonlyInputs?.includes(name) ?? false,\n consistency: getConsistency(name),\n draggedId: draggedId.value,\n droppedIds: inputStateValues.value[name],\n info: chipInfo.value,\n\n searchFn: searchFilterOptions,\n searchSelectedValueFn: searchSelectedFilterValueOptions,\n loadOptionsFn: loadOptions,\n\n listeners: {\n 'drop-item': commonDropItemHandler,\n 'remove-item': commonRemoveItem,\n 'reorder': (data: ChipInfo['id'][]) => commonReorder(data, name),\n },\n };\n return basketProps;\n }),\n);\n\nfunction showBasket(basketId: BasketProps['id']) {\n if (basketId === 'heatmapAxis' || basketId === 'heatmapGroup') {\n return inputStateValues.value.heatmapAnnotation !== null;\n }\n return true;\n}\n\nfunction cleanDraggedId() {\n draggedId.value = null;\n}\n\nconst autoFillInputs: (keyof typeof inputStateValues.value)[] = ['value'];\n\nautoFillInputs.forEach((inputName) => {\n watch(\n [() => inputStateValues.value[inputName], () => options.value],\n ([v, vOptions]) => {\n if (\n (typeof v === 'undefined'\n || hasInputError('value', inputGuide.value))\n && vOptions[inputName]\n && vOptions[inputName].length\n ) {\n store.value.controller.changeSelected(\n inputName,\n store.value.columnsDataStore.value!,\n store.value.reactive.optionsState,\n [{ selectedSource: vOptions[inputName][0].value }],\n\n );\n }\n },\n { immediate: true },\n );\n});\n\nconst readonlyValue = computed(() => store.value.readonlyInputs?.includes('value') ?? false);\n\n</script>\n\n<template>\n <FormLayout>\n <template #dataInputs>\n <div class=\"data-form-input-item\">\n <PlDropdown\n v-model=\"inputStateValues.value\"\n label=\"Data source:\"\n :options=\"options.value\"\n :disabled=\"readonlyValue\"\n :error=\"getErrorForPlDropdown('value', inputGuide)\"\n />\n </div>\n <div v-if=\"freeMandatoryOptions.length > 0\" class=\"metadata-block\">\n <div class=\"title\">Drag to build the chart</div>\n <div class=\"metadata-block__items\">\n <DndChip\n v-for=\"{ id } in freeMandatoryOptions\"\n :key=\"id\"\n :info=\"chipInfo[id]\"\n @dragstart=\"draggedId = $event\"\n @dragend=\"cleanDraggedId\"\n />\n </div>\n </div>\n <div v-if=\"freeOptions.length > 0\" class=\"metadata-block\">\n <div class=\"title\">Metadata</div>\n <div class=\"metadata-block__items\">\n <DndChip\n v-for=\"{ id } in freeOptions\"\n :key=\"id\"\n :info=\"chipInfo[id]\"\n @dragstart=\"draggedId = $event\"\n @dragend=\"cleanDraggedId\"\n />\n </div>\n </div>\n </template>\n\n <template #chartVar>\n <template v-for=\"basketProp in basketsData\" :key=\"basketProp.id\">\n <div v-if=\"showBasket(basketProp.id)\" class=\"data-form-input-item\">\n <DndBasket v-bind=\"basketProp\" v-on=\"basketProp.listeners\" />\n </div>\n </template>\n </template>\n </FormLayout>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DendroForm.vue.d.ts","sourceRoot":"","sources":["../../../src/forms/DataMappingForm/DendroForm.vue"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"DendroForm.vue.d.ts","sourceRoot":"","sources":["../../../src/forms/DataMappingForm/DendroForm.vue"],"names":[],"mappings":";AAmzBA,wBAMG"}
|
|
@@ -110,13 +110,32 @@ var te = { class: "data-form-input-item" }, A = {
|
|
|
110
110
|
return !R.value.readyData || W.value[e].length === 0 || Y.value !== null && !X.value[Y.value].availableBasketIds.has(e);
|
|
111
111
|
}
|
|
112
112
|
async function ae(e, t) {
|
|
113
|
-
return F.value.columnsDataStore.value ? (await F.value.controller.getUniqueSourceValuesWithLabels(
|
|
113
|
+
return F.value.columnsDataStore.value ? (await F.value.controller.getUniqueSourceValuesWithLabels({
|
|
114
|
+
store: F.value.columnsDataStore.value,
|
|
115
|
+
inputGuide: R.value,
|
|
116
|
+
selectedSource: e,
|
|
117
|
+
limit: 100,
|
|
118
|
+
searchQuery: t
|
|
119
|
+
})).values : Promise.resolve([]);
|
|
114
120
|
}
|
|
115
121
|
async function oe(e, t) {
|
|
116
|
-
return F.value.columnsDataStore.value ?
|
|
122
|
+
return F.value.columnsDataStore.value ? [{
|
|
123
|
+
value: t,
|
|
124
|
+
label: await F.value.controller.getLabelForValue({
|
|
125
|
+
store: F.value.columnsDataStore.value,
|
|
126
|
+
inputGuide: R.value,
|
|
127
|
+
selectedSource: e,
|
|
128
|
+
value: t
|
|
129
|
+
})
|
|
130
|
+
}] : Promise.resolve([]);
|
|
117
131
|
}
|
|
118
132
|
async function se(e) {
|
|
119
|
-
return F.value.columnsDataStore.value ? F.value.controller.getUniqueSourceValuesWithLabels(
|
|
133
|
+
return F.value.columnsDataStore.value ? F.value.controller.getUniqueSourceValuesWithLabels({
|
|
134
|
+
store: F.value.columnsDataStore.value,
|
|
135
|
+
inputGuide: R.value,
|
|
136
|
+
selectedSource: e,
|
|
137
|
+
limit: 100
|
|
138
|
+
}) : Promise.resolve({
|
|
120
139
|
values: [],
|
|
121
140
|
overflow: !1
|
|
122
141
|
});
|