@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.
Files changed (41) hide show
  1. package/dist/components/Chart.js.map +1 -1
  2. package/dist/components/Chart.vue.d.ts.map +1 -1
  3. package/dist/components/Chart.vue2.js +23 -3
  4. package/dist/components/Chart.vue2.js.map +1 -1
  5. package/dist/constantsCommon.d.ts +6 -0
  6. package/dist/constantsCommon.d.ts.map +1 -1
  7. package/dist/constantsCommon.js +9 -3
  8. package/dist/constantsCommon.js.map +1 -1
  9. package/dist/forms/DataMappingForm/DendroForm.js.map +1 -1
  10. package/dist/forms/DataMappingForm/DendroForm.vue.d.ts.map +1 -1
  11. package/dist/forms/DataMappingForm/DendroForm.vue2.js +22 -3
  12. package/dist/forms/DataMappingForm/DendroForm.vue2.js.map +1 -1
  13. package/dist/forms/DataMappingForm/useBaskets.d.ts.map +1 -1
  14. package/dist/forms/DataMappingForm/useBaskets.js +22 -3
  15. package/dist/forms/DataMappingForm/useBaskets.js.map +1 -1
  16. package/dist/forms/LayersForm/Layer/Bubble.js.map +1 -1
  17. package/dist/forms/LayersForm/Layer/Bubble.vue.d.ts.map +1 -1
  18. package/dist/forms/LayersForm/Layer/Bubble.vue2.js +53 -45
  19. package/dist/forms/LayersForm/Layer/Bubble.vue2.js.map +1 -1
  20. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.js.map +1 -1
  21. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.d.ts.map +1 -1
  22. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue2.js +49 -41
  23. package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue2.js.map +1 -1
  24. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.js.map +1 -1
  25. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.d.ts.map +1 -1
  26. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue2.js +63 -55
  27. package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue2.js.map +1 -1
  28. package/dist/store.js +7 -1
  29. package/dist/store.js.map +1 -1
  30. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +2 -0
  31. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  32. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js +1 -1
  33. package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
  34. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +2 -0
  35. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  36. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js +1 -1
  37. package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  38. package/dist/utils/loadUniqueValuesToSave.d.ts.map +1 -1
  39. package/dist/utils/loadUniqueValuesToSave.js +16 -3
  40. package/dist/utils/loadUniqueValuesToSave.js.map +1 -1
  41. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"DendroForm.vue_vue_type_script_setup_true_lang.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":"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"}
1
+ {"version":3,"file":"DendroForm.vue_vue_type_script_setup_true_lang.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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBaskets.d.ts","sourceRoot":"","sources":["../../../src/forms/DataMappingForm/useBaskets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,qBAAqB,EACrB,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EAGT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EACV,eAAe,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAC6B,uBAAuB,EAAE,kBAAkB,EAI9E,MAAM,SAAS,CAAC;AAEjB,wBAAgB,UAAU,CACxB,CAAC,SAAS,UAAU,EACpB,SAAS,SAAS,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAC1E,OAAO,SAAS,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAExE,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,EAAE,SAAS,EAAE,EAC7B,gBAAgB,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,SAAS,EAAE,EACpB,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GACvC;IACC,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IACxC,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,oBAAoB,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChD,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/D,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9C,CAuNF"}
1
+ {"version":3,"file":"useBaskets.d.ts","sourceRoot":"","sources":["../../../src/forms/DataMappingForm/useBaskets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,qBAAqB,EACrB,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EAGT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EACV,eAAe,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAC6B,uBAAuB,EAAE,kBAAkB,EAI9E,MAAM,SAAS,CAAC;AAEjB,wBAAgB,UAAU,CACxB,CAAC,SAAS,UAAU,EACpB,SAAS,SAAS,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAC1E,OAAO,SAAS,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAExE,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,EAAE,SAAS,EAAE,EAC7B,gBAAgB,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,SAAS,EAAE,EACpB,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GACvC;IACC,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IACxC,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,oBAAoB,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChD,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/D,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9C,CAwNF"}
@@ -46,13 +46,32 @@ function d(d, f, p, m, h, g) {
46
46
  return !y.value.readyData || T.value[e].length === 0 || O.value !== null && !k.value[O.value].availableBasketIds.has(e);
47
47
  }
48
48
  async function L(e, t) {
49
- return d.value.columnsDataStore.value ? (await d.value.controller.getUniqueSourceValuesWithLabels(d.value.columnsDataStore.value, y.value, e, 100, t || void 0)).values : Promise.resolve([]);
49
+ return d.value.columnsDataStore.value ? (await d.value.controller.getUniqueSourceValuesWithLabels({
50
+ store: d.value.columnsDataStore.value,
51
+ inputGuide: y.value,
52
+ selectedSource: e,
53
+ limit: 100,
54
+ searchQuery: t || void 0
55
+ })).values : Promise.resolve([]);
50
56
  }
51
57
  async function R(e, t) {
52
- return d.value.columnsDataStore.value ? (await d.value.controller.getUniqueSourceValuesWithLabels(d.value.columnsDataStore.value, y.value, e, 1, void 0, t)).values : Promise.resolve([]);
58
+ return d.value.columnsDataStore.value ? [{
59
+ value: t,
60
+ label: await d.value.controller.getLabelForValue({
61
+ store: d.value.columnsDataStore.value,
62
+ inputGuide: y.value,
63
+ selectedSource: e,
64
+ value: t
65
+ })
66
+ }] : Promise.resolve([]);
53
67
  }
54
68
  async function z(e) {
55
- return d.value.columnsDataStore.value ? d.value.controller.getUniqueSourceValuesWithLabels(d.value.columnsDataStore.value, y.value, e, 100) : Promise.resolve({
69
+ return d.value.columnsDataStore.value ? d.value.controller.getUniqueSourceValuesWithLabels({
70
+ store: d.value.columnsDataStore.value,
71
+ inputGuide: y.value,
72
+ selectedSource: e,
73
+ limit: 100
74
+ }) : Promise.resolve({
56
75
  values: [],
57
76
  overflow: !1
58
77
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useBaskets.js","names":[],"sources":["../../../src/forms/DataMappingForm/useBaskets.ts"],"sourcesContent":["import type {\n ChartType,\n ComponentStateFilter,\n InputGuide,\n InputNamesByChartType,\n InputState,\n SelectorStateFilter,\n} from '@milaboratories/pf-plots';\nimport type { ComputedRef, Ref } from 'vue';\nimport { computed, ref, shallowRef, toRef } from 'vue';\nimport type {\n BasketProps,\n ChipInfo,\n DropItemEvent,\n RemoveItemEvent,\n} from '../../components/DragAndDrop/types';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../../constantsCommon';\nimport type { ComputedStore } from '../../store';\nimport type {\n AllStateOptions } from './utils';\nimport {\n getAllInputsOptions, getChipInfo, getFreeMandatoryOptions, getFreeMetaOptions,\n toFiltersMulti,\n toSimpleMulti,\n toSimpleSingle,\n} from './utils';\n\nexport function useBaskets<\n T extends InputState,\n BasketIds extends keyof T['components'] & InputNamesByChartType[ChartType],\n DataIds extends keyof T['components'] & InputNamesByChartType[ChartType],\n>(\n store: ComputedStore,\n dataKeys: DataIds[],\n filterBasketKeys: BasketIds[],\n simpleBasketKeys: BasketIds[],\n BASKETS: BasketIds[],\n BASKET_LABELS: Record<BasketIds, string>,\n): {\n draggedId: Ref<string | null>;\n cleanDraggedId: () => void;\n basketsData: ComputedRef<BasketProps[]>;\n freeMetaOptions: ComputedRef<ReturnType<typeof getFreeMetaOptions<T>>>;\n freeMandatoryOptions: ComputedRef<ReturnType<typeof getFreeMandatoryOptions<T>>>;\n chipInfo: ComputedRef<Record<string, ChipInfo>>;\n dataStateValues: Ref<Record<DataIds, Ref<string | undefined>>>;\n dataOptions: ComputedRef<AllStateOptions<T>>;\n } {\n const state = store.value.reactive.optionsState as T;\n const stateRef = toRef(store.value.reactive, 'optionsState');\n\n const inputGuide = computed(() => store.value.inputGuide.value) as Ref<InputGuide<T>>;\n\n function getSimpleSingle(inputName: keyof InputState['components']) {\n return toSimpleSingle(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n }\n\n function getSimpleMulti(inputName: keyof InputState['components']) {\n return toSimpleMulti(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n }\n\n function 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\n const dataStateValues = shallowRef({\n ...dataKeys.reduce((res: Record<DataIds, Ref<string | undefined>>, key: DataIds) => {\n res[key] = getSimpleSingle(key as keyof InputState['components']);\n return res;\n }, {} as Record<DataIds, Ref<string | undefined>>),\n });\n\ntype InputStateValues = Record<BasketIds, Ref<string[]>>;\n\nconst inputStateValues = ref<InputStateValues>({\n ...filterBasketKeys.reduce((res: InputStateValues, key) => {\n res[key] = getFiltersMulti(key as keyof InputState['components']);\n return res;\n }, {} as InputStateValues),\n ...simpleBasketKeys.reduce((res: InputStateValues, key) => {\n res[key] = getSimpleMulti(key as keyof InputState['components']);\n return res;\n }, {} as InputStateValues),\n});\n\nconst options = computed(() => {\n return getAllInputsOptions(state, inputGuide);\n});\n\nconst freeMetaOptions = computed(() =>\n getFreeMetaOptions(inputGuide, BASKETS),\n);\nconst freeMandatoryOptions = computed(() =>\n getFreeMandatoryOptions(inputGuide, BASKETS),\n);\n\nconst draggedId = ref<string | null>(null);\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, store.value.uniqueValuesData.value, [...freeAndSelectedIds]);\n});\n\nfunction getFiltersValues(name: BasketIds) {\n return (state.components[name] as ComponentStateFilter).selectorStates.reduce(\n (res: Record<string, string[]>, filterState) => {\n if (filterState.type !== 'range') {\n res[filterState.selectedSource] = filterState.selectedFilterValues ?? [];\n }\n return res;\n },\n {},\n );\n}\n\nfunction getFiltersRanges(name: BasketIds) {\n return (state.components[name] as ComponentStateFilter).selectorStates.reduce(\n (res: Record<string, [number, number]>, filterState) => {\n res[filterState.selectedSource] = filterState.selectedFilterRange\n ? [filterState.selectedFilterRange.min, filterState.selectedFilterRange.max]\n : [0, 0];\n return res;\n },\n {},\n );\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 commonRemoveItem(event: RemoveItemEvent<BasketIds>) {\n inputStateValues.value[event.basketId]\n = inputStateValues.value[event.basketId].filter((op: string) => op !== event.chipId);\n}\n\nfunction commonReorder(data: ChipInfo['id'][], name: BasketIds) {\n inputStateValues.value[name] = data;\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 || undefined)).values;\n}\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}\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 const isFilter = name === 'filters' || name === 'highlight';\n\n const basketProps: BasketProps = {\n id: name,\n title: BASKET_LABELS[name],\n isFilter,\n sortable: name === 'tooltipContent',\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 if (isFilter) {\n basketProps.selectedFilters = getFiltersValues(name);\n basketProps.selectedRanges = getFiltersRanges(name);\n basketProps.listeners['select-filter-value'] = (data) => {\n const selectorState = state.components[name].selectorStates[data.idx] as SelectorStateFilter;\n selectorState.type = 'equals';\n selectorState.selectedFilterValues = data.v as string[];\n };\n basketProps.listeners['select-filter-range'] = (data) => {\n const selectorState = state.components[name].selectorStates[data.idx] as SelectorStateFilter;\n selectorState.type = 'range';\n selectorState.selectedFilterRange = data.v as { min: number; max: number } | undefined;\n };\n }\n return basketProps;\n }),\n);\n\nfunction cleanDraggedId() {\n draggedId.value = null;\n}\n\nreturn {\n draggedId,\n cleanDraggedId,\n basketsData,\n freeMetaOptions,\n freeMandatoryOptions,\n chipInfo,\n dataStateValues,\n dataOptions: options,\n};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useBaskets.js","names":[],"sources":["../../../src/forms/DataMappingForm/useBaskets.ts"],"sourcesContent":["import type {\n ChartType,\n ComponentStateFilter,\n InputGuide,\n InputNamesByChartType,\n InputState,\n SelectorStateFilter,\n} from '@milaboratories/pf-plots';\nimport type { ComputedRef, Ref } from 'vue';\nimport { computed, ref, shallowRef, toRef } from 'vue';\nimport type {\n BasketProps,\n ChipInfo,\n DropItemEvent,\n RemoveItemEvent,\n} from '../../components/DragAndDrop/types';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../../constantsCommon';\nimport type { ComputedStore } from '../../store';\nimport type {\n AllStateOptions } from './utils';\nimport {\n getAllInputsOptions, getChipInfo, getFreeMandatoryOptions, getFreeMetaOptions,\n toFiltersMulti,\n toSimpleMulti,\n toSimpleSingle,\n} from './utils';\n\nexport function useBaskets<\n T extends InputState,\n BasketIds extends keyof T['components'] & InputNamesByChartType[ChartType],\n DataIds extends keyof T['components'] & InputNamesByChartType[ChartType],\n>(\n store: ComputedStore,\n dataKeys: DataIds[],\n filterBasketKeys: BasketIds[],\n simpleBasketKeys: BasketIds[],\n BASKETS: BasketIds[],\n BASKET_LABELS: Record<BasketIds, string>,\n): {\n draggedId: Ref<string | null>;\n cleanDraggedId: () => void;\n basketsData: ComputedRef<BasketProps[]>;\n freeMetaOptions: ComputedRef<ReturnType<typeof getFreeMetaOptions<T>>>;\n freeMandatoryOptions: ComputedRef<ReturnType<typeof getFreeMandatoryOptions<T>>>;\n chipInfo: ComputedRef<Record<string, ChipInfo>>;\n dataStateValues: Ref<Record<DataIds, Ref<string | undefined>>>;\n dataOptions: ComputedRef<AllStateOptions<T>>;\n } {\n const state = store.value.reactive.optionsState as T;\n const stateRef = toRef(store.value.reactive, 'optionsState');\n\n const inputGuide = computed(() => store.value.inputGuide.value) as Ref<InputGuide<T>>;\n\n function getSimpleSingle(inputName: keyof InputState['components']) {\n return toSimpleSingle(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n }\n\n function getSimpleMulti(inputName: keyof InputState['components']) {\n return toSimpleMulti(\n stateRef,\n inputName,\n store.value.controller,\n store.value.columnsDataStore.value,\n );\n }\n\n function 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\n const dataStateValues = shallowRef({\n ...dataKeys.reduce((res: Record<DataIds, Ref<string | undefined>>, key: DataIds) => {\n res[key] = getSimpleSingle(key as keyof InputState['components']);\n return res;\n }, {} as Record<DataIds, Ref<string | undefined>>),\n });\n\ntype InputStateValues = Record<BasketIds, Ref<string[]>>;\n\nconst inputStateValues = ref<InputStateValues>({\n ...filterBasketKeys.reduce((res: InputStateValues, key) => {\n res[key] = getFiltersMulti(key as keyof InputState['components']);\n return res;\n }, {} as InputStateValues),\n ...simpleBasketKeys.reduce((res: InputStateValues, key) => {\n res[key] = getSimpleMulti(key as keyof InputState['components']);\n return res;\n }, {} as InputStateValues),\n});\n\nconst options = computed(() => {\n return getAllInputsOptions(state, inputGuide);\n});\n\nconst freeMetaOptions = computed(() =>\n getFreeMetaOptions(inputGuide, BASKETS),\n);\nconst freeMandatoryOptions = computed(() =>\n getFreeMandatoryOptions(inputGuide, BASKETS),\n);\n\nconst draggedId = ref<string | null>(null);\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, store.value.uniqueValuesData.value, [...freeAndSelectedIds]);\n});\n\nfunction getFiltersValues(name: BasketIds) {\n return (state.components[name] as ComponentStateFilter).selectorStates.reduce(\n (res: Record<string, string[]>, filterState) => {\n if (filterState.type !== 'range') {\n res[filterState.selectedSource] = filterState.selectedFilterValues ?? [];\n }\n return res;\n },\n {},\n );\n}\n\nfunction getFiltersRanges(name: BasketIds) {\n return (state.components[name] as ComponentStateFilter).selectorStates.reduce(\n (res: Record<string, [number, number]>, filterState) => {\n res[filterState.selectedSource] = filterState.selectedFilterRange\n ? [filterState.selectedFilterRange.min, filterState.selectedFilterRange.max]\n : [0, 0];\n return res;\n },\n {},\n );\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 commonRemoveItem(event: RemoveItemEvent<BasketIds>) {\n inputStateValues.value[event.basketId]\n = inputStateValues.value[event.basketId].filter((op: string) => op !== event.chipId);\n}\n\nfunction commonReorder(data: ChipInfo['id'][], name: BasketIds) {\n inputStateValues.value[name] = data;\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 || undefined })).values;\n}\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}\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 const isFilter = name === 'filters' || name === 'highlight';\n\n const basketProps: BasketProps = {\n id: name,\n title: BASKET_LABELS[name],\n isFilter,\n sortable: name === 'tooltipContent',\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 if (isFilter) {\n basketProps.selectedFilters = getFiltersValues(name);\n basketProps.selectedRanges = getFiltersRanges(name);\n basketProps.listeners['select-filter-value'] = (data) => {\n const selectorState = state.components[name].selectorStates[data.idx] as SelectorStateFilter;\n selectorState.type = 'equals';\n selectorState.selectedFilterValues = data.v as string[];\n };\n basketProps.listeners['select-filter-range'] = (data) => {\n const selectorState = state.components[name].selectorStates[data.idx] as SelectorStateFilter;\n selectorState.type = 'range';\n selectorState.selectedFilterRange = data.v as { min: number; max: number } | undefined;\n };\n }\n return basketProps;\n }),\n);\n\nfunction cleanDraggedId() {\n draggedId.value = null;\n}\n\nreturn {\n draggedId,\n cleanDraggedId,\n basketsData,\n freeMetaOptions,\n freeMandatoryOptions,\n chipInfo,\n dataStateValues,\n dataOptions: options,\n};\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Bubble.js","names":[],"sources":["../../../../src/forms/LayersForm/Layer/Bubble.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useStore } from '../../../store';\nimport type { BubbleLayer } from '../../../types';\nimport { computed, ref } from 'vue';\nimport {\n DEFAULT_BLACK,\n PALETTE_MAP,\n} from '../../../constantsAesthetic';\nimport type { ContinuousPalette } from '../../../components/AesSettings/types';\nimport { createContinuousMappingFromPalette } from '../../../dataBindAes';\nimport MultiselectButton from '../../../components/MultiselectButton.vue';\nimport PalettesForm from '../../../components/AesSettings/PalettesForm.vue';\nimport FormWrapper from '../../../components/AesSettings/FormWrapper.vue';\nimport type { BubbleUIState } from '@milaboratories/pf-plots';\nimport type { SimpleOption } from '@platforma-sdk/ui-vue';\nimport { PlBtnGroup, PlCheckbox, PlNumberField } from '@platforma-sdk/ui-vue';\nimport AesSelector from '../AesSelector.vue';\nimport { AGGREGATION_METHOD_OPTIONS } from '../../../constantsCommon';\n\nconst store = useStore();\nconst layer: BubbleLayer = 'bubble';\nconst settings = computed(() => store.value.reactive.layersSettings[layer]);\nconst optionsState = computed(() => store.value.reactive.optionsState as BubbleUIState);\n\nconst valueColor = computed(() => optionsState.value.components.valueColor.selectorStates[0]?.selectedSource);\nconst savedDataValuePalette = computed(() => valueColor.value ? store.value.reactive.dataBindAes[valueColor.value]?.palette : undefined);\n\nconst palettesOpen = ref(false);\nconst palette = ref<ContinuousPalette>(savedDataValuePalette.value as ContinuousPalette ?? store.value.defaultPalette.continuous);\n\nfunction onPaletteSelect(value: ContinuousPalette) {\n palette.value = value;\n palettesOpen.value = false;\n if (valueColor.value) {\n store.value.reactive.dataBindAes[valueColor.value] = createContinuousMappingFromPalette(value);\n }\n}\n\nconst NORMALIZATION_DIRECTION: SimpleOption[] = [\n { label: 'None', value: null },\n { label: 'Columns', value: 'column' },\n { label: 'Rows', value: 'row' },\n];\nconst NORMALIZATION_METHOD: SimpleOption[] = [\n { label: 'z-score', value: 'standardScaling' },\n { label: 'Min-max', value: 'meanNormalization' },\n];\nconst AGGREGATION_METHOD = AGGREGATION_METHOD_OPTIONS;\n\nconst stroke = computed({\n get: () => {\n return settings.value.strokeColor ?? DEFAULT_BLACK;\n },\n set: (v: string) => {\n settings.value.strokeColor = v;\n },\n});\n\nconst NA_VALUE_OPTIONS: SimpleOption[] = [\n { label: 'empty', value: null },\n { label: 'Special value', value: 'custom' },\n];\n\nconst NAValueOption = ref(settings.value.NAValueAs !== null ? 'custom' : settings.value.NAValueAs);\nconst customNA = ref(settings.value.NAValueAs ?? 0);\n\n</script>\n\n<template>\n <MultiselectButton\n label=\"Color Palette \"\n :title=\"PALETTE_MAP[palette].title\"\n :palette=\"palette\"\n @button-click=\"palettesOpen = true;\"\n />\n <FormWrapper\n v-if=\"palettesOpen\"\n title=\"Color Palette\"\n back-title=\"Color mapping\"\n @form:close=\"palettesOpen = false\"\n >\n <PalettesForm :selected=\"palette\" :categorical=\"false\" @select=\"onPaletteSelect\" />\n </FormWrapper>\n <div class=\"input-item\">\n <AesSelector\n label=\"Stroke color\"\n form-title=\"Stroke Color Settings\"\n form-back-title=\"Layers\"\n type=\"stroke\"\n :possible-aes-source-inputs=\"[]\"\n :selected=\"stroke\"\n @aes-update=\"(v:string) => stroke = v\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationDirection\"\n label=\"Normalize by\"\n :options=\"NORMALIZATION_DIRECTION\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationMethod\"\n label=\"Normalization method\"\n :options=\"NORMALIZATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByX\"/>\n <span>Aggregate X groups</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByY\"/>\n <span>Aggregate Y groups</span>\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.aggregationMethod\"\n label=\"Aggregation method\"\n :options=\"AGGREGATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\" :style=\"{display: 'flex', alignItems: 'end'}\">\n <PlBtnGroup\n v-model=\"NAValueOption\"\n label=\"Treat NA value as:\"\n :options=\"NA_VALUE_OPTIONS\"\n :compact=\"true\"\n @update:modelValue=\"(value:unknown) => {\n if (value === 'custom') {\n settings.NAValueAs = customNA;\n } else {\n settings.NAValueAs = value as number|null;\n }\n }\"\n />\n <PlNumberField\n v-model=\"customNA\"\n :style=\"{height: '33px', marginLeft: '16px', width: '75px'}\"\n :disabled=\"NAValueOption !== 'custom'\"\n label=\"NA value\"\n :useIncrementButtons=\"false\"\n @update:modelValue=\"(value:unknown) => {\n if (value !== undefined) {\n settings.NAValueAs = value as number;\n }\n }\"\n />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Bubble.js","names":[],"sources":["../../../../src/forms/LayersForm/Layer/Bubble.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useStore } from '../../../store';\nimport type { BubbleLayer } from '../../../types';\nimport { computed, ref } from 'vue';\nimport {\n DEFAULT_BLACK,\n PALETTE_MAP,\n} from '../../../constantsAesthetic';\nimport type { ContinuousPalette } from '../../../components/AesSettings/types';\nimport { createContinuousMappingFromPalette } from '../../../dataBindAes';\nimport MultiselectButton from '../../../components/MultiselectButton.vue';\nimport PalettesForm from '../../../components/AesSettings/PalettesForm.vue';\nimport FormWrapper from '../../../components/AesSettings/FormWrapper.vue';\nimport type { BubbleUIState } from '@milaboratories/pf-plots';\nimport type { SimpleOption } from '@platforma-sdk/ui-vue';\nimport { PlBtnGroup, PlCheckbox, PlNumberField } from '@platforma-sdk/ui-vue';\nimport AesSelector from '../AesSelector.vue';\nimport { AGGREGATION_METHOD_OPTIONS } from '../../../constantsCommon';\n\nconst store = useStore();\nconst layer: BubbleLayer = 'bubble';\nconst settings = computed(() => store.value.reactive.layersSettings[layer]);\nconst optionsState = computed(() => store.value.reactive.optionsState as BubbleUIState);\n\nconst valueColor = computed(() => optionsState.value.components.valueColor.selectorStates[0]?.selectedSource);\nconst savedDataValuePalette = computed(() => valueColor.value ? store.value.reactive.dataBindAes[valueColor.value]?.palette : undefined);\n\nconst palettesOpen = ref(false);\nconst palette = ref<ContinuousPalette>(savedDataValuePalette.value as ContinuousPalette ?? store.value.defaultPalette.continuous);\n\nfunction onPaletteSelect(value: ContinuousPalette) {\n palette.value = value;\n palettesOpen.value = false;\n if (valueColor.value) {\n store.value.reactive.dataBindAes[valueColor.value] = createContinuousMappingFromPalette(value);\n }\n}\n\nconst NORMALIZATION_DIRECTION: SimpleOption[] = [\n { label: 'None', value: null },\n { label: 'Columns', value: 'column' },\n { label: 'Rows', value: 'row' },\n];\nconst NORMALIZATION_METHOD: SimpleOption[] = [\n { label: 'z-score', value: 'standardScaling' },\n { label: 'Min-max', value: 'meanNormalization' },\n];\nconst AGGREGATION_METHOD = AGGREGATION_METHOD_OPTIONS;\n\nconst stroke = computed({\n get: () => {\n return settings.value.strokeColor ?? DEFAULT_BLACK;\n },\n set: (v: string) => {\n settings.value.strokeColor = v;\n },\n});\n\nconst NA_VALUE_OPTIONS: SimpleOption[] = [\n { label: 'empty', value: null },\n { label: 'Special value', value: 'custom' },\n];\n\nconst NAValueOption = ref(settings.value.NAValueAs !== null ? 'custom' : settings.value.NAValueAs);\nconst customNA = ref(settings.value.NAValueAs ?? 0);\n\n</script>\n\n<template>\n <MultiselectButton\n label=\"Color Palette \"\n :title=\"PALETTE_MAP[palette].title\"\n :palette=\"palette\"\n @button-click=\"palettesOpen = true;\"\n />\n <FormWrapper\n v-if=\"palettesOpen\"\n title=\"Color Palette\"\n back-title=\"Color mapping\"\n @form:close=\"palettesOpen = false\"\n >\n <PalettesForm :selected=\"palette\" :categorical=\"false\" @select=\"onPaletteSelect\" />\n </FormWrapper>\n <div class=\"input-item\">\n <AesSelector\n label=\"Stroke color\"\n form-title=\"Stroke Color Settings\"\n form-back-title=\"Layers\"\n type=\"stroke\"\n :possible-aes-source-inputs=\"[]\"\n :selected=\"stroke\"\n @aes-update=\"(v:string) => stroke = v\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationDirection\"\n label=\"Normalize by\"\n :options=\"NORMALIZATION_DIRECTION\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationMethod\"\n label=\"Normalization method\"\n :options=\"NORMALIZATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByX\"/>\n <span>Aggregate X groups</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByY\"/>\n <span>Aggregate Y groups</span>\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.aggregationMethod\"\n label=\"Aggregation method\"\n :options=\"AGGREGATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\" :style=\"{display: 'flex', alignItems: 'end'}\">\n <PlBtnGroup\n v-model=\"NAValueOption\"\n label=\"Treat NA value as:\"\n :options=\"NA_VALUE_OPTIONS\"\n :compact=\"true\"\n @update:modelValue=\"(value:unknown) => {\n if (value === 'custom') {\n settings.NAValueAs = customNA;\n } else {\n settings.NAValueAs = value as number|null;\n }\n }\"\n />\n <PlNumberField\n v-model=\"customNA\"\n :style=\"{height: '33px', marginLeft: '16px', width: '75px'}\"\n :disabled=\"NAValueOption !== 'custom'\"\n label=\"NA value\"\n :useIncrementButtons=\"false\"\n @update:modelValue=\"(value:unknown) => {\n if (value !== undefined) {\n settings.NAValueAs = value as number;\n }\n }\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.showEmptyRows\"/>\n <span>Show empty rows</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.showEmptyColumns\"/>\n <span>Show empty columns</span>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"Bubble.vue.d.ts","sourceRoot":"","sources":["../../../../src/forms/LayersForm/Layer/Bubble.vue"],"names":[],"mappings":";AAmgBA,wBAKG"}
1
+ {"version":3,"file":"Bubble.vue.d.ts","sourceRoot":"","sources":["../../../../src/forms/LayersForm/Layer/Bubble.vue"],"names":[],"mappings":";AAuiBA,wBAKG"}
@@ -14,14 +14,14 @@ var C = { class: "input-item" }, w = { class: "button-group-item" }, T = { class
14
14
  display: "flex",
15
15
  alignItems: "end"
16
16
  }
17
- }, A = "bubble", j = /* @__PURE__ */ h({
17
+ }, A = { class: "checkbox-item" }, j = { class: "checkbox-item" }, M = "bubble", N = /* @__PURE__ */ h({
18
18
  __name: "Bubble",
19
19
  setup(h) {
20
- let j = s(), M = l(() => j.value.reactive.layersSettings[A]), N = l(() => j.value.reactive.optionsState), P = l(() => N.value.components.valueColor.selectorStates[0]?.selectedSource), F = l(() => P.value ? j.value.reactive.dataBindAes[P.value]?.palette : void 0), I = _(!1), L = _(F.value ?? j.value.defaultPalette.continuous);
21
- function R(e) {
22
- L.value = e, I.value = !1, P.value && (j.value.reactive.dataBindAes[P.value] = t(e));
20
+ let N = s(), P = l(() => N.value.reactive.layersSettings[M]), F = l(() => N.value.reactive.optionsState), I = l(() => F.value.components.valueColor.selectorStates[0]?.selectedSource), L = l(() => I.value ? N.value.reactive.dataBindAes[I.value]?.palette : void 0), R = _(!1), z = _(L.value ?? N.value.defaultPalette.continuous);
21
+ function B(e) {
22
+ z.value = e, R.value = !1, I.value && (N.value.reactive.dataBindAes[I.value] = t(e));
23
23
  }
24
- let z = [
24
+ let V = [
25
25
  {
26
26
  label: "None",
27
27
  value: null
@@ -34,43 +34,43 @@ var C = { class: "input-item" }, w = { class: "button-group-item" }, T = { class
34
34
  label: "Rows",
35
35
  value: "row"
36
36
  }
37
- ], B = [{
37
+ ], H = [{
38
38
  label: "z-score",
39
39
  value: "standardScaling"
40
40
  }, {
41
41
  label: "Min-max",
42
42
  value: "meanNormalization"
43
- }], V = n, H = l({
44
- get: () => M.value.strokeColor ?? "#110529",
43
+ }], U = n, W = l({
44
+ get: () => P.value.strokeColor ?? "#110529",
45
45
  set: (e) => {
46
- M.value.strokeColor = e;
46
+ P.value.strokeColor = e;
47
47
  }
48
- }), U = [{
48
+ }), G = [{
49
49
  label: "empty",
50
50
  value: null
51
51
  }, {
52
52
  label: "Special value",
53
53
  value: "custom"
54
- }], W = _(M.value.NAValueAs === null ? M.value.NAValueAs : "custom"), G = _(M.value.NAValueAs ?? 0);
54
+ }], K = _(P.value.NAValueAs === null ? P.value.NAValueAs : "custom"), q = _(P.value.NAValueAs ?? 0);
55
55
  return (t, n) => (g(), f(c, null, [
56
56
  m(a, {
57
57
  label: "Color Palette ",
58
- title: v(e)[L.value].title,
59
- palette: L.value,
58
+ title: v(e)[z.value].title,
59
+ palette: z.value,
60
60
  onButtonClick: n[0] ||= (e) => {
61
- I.value = !0;
61
+ R.value = !0;
62
62
  }
63
63
  }, null, 8, ["title", "palette"]),
64
- I.value ? (g(), u(r, {
64
+ R.value ? (g(), u(r, {
65
65
  key: 0,
66
66
  title: "Color Palette",
67
67
  "back-title": "Color mapping",
68
- "onForm:close": n[1] ||= (e) => I.value = !1
68
+ "onForm:close": n[1] ||= (e) => R.value = !1
69
69
  }, {
70
70
  default: y(() => [m(i, {
71
- selected: L.value,
71
+ selected: z.value,
72
72
  categorical: !1,
73
- onSelect: R
73
+ onSelect: B
74
74
  }, null, 8, ["selected"])]),
75
75
  _: 1
76
76
  })) : d("", !0),
@@ -80,63 +80,71 @@ var C = { class: "input-item" }, w = { class: "button-group-item" }, T = { class
80
80
  "form-back-title": "Layers",
81
81
  type: "stroke",
82
82
  "possible-aes-source-inputs": [],
83
- selected: H.value,
84
- onAesUpdate: n[2] ||= (e) => H.value = e
83
+ selected: W.value,
84
+ onAesUpdate: n[2] ||= (e) => W.value = e
85
85
  }, null, 8, ["selected"])]),
86
86
  p("div", w, [m(v(b), {
87
- modelValue: M.value.normalizationDirection,
88
- "onUpdate:modelValue": n[3] ||= (e) => M.value.normalizationDirection = e,
87
+ modelValue: P.value.normalizationDirection,
88
+ "onUpdate:modelValue": n[3] ||= (e) => P.value.normalizationDirection = e,
89
89
  label: "Normalize by",
90
- options: z,
90
+ options: V,
91
91
  compact: !0
92
92
  }, null, 8, ["modelValue"])]),
93
93
  p("div", T, [m(v(b), {
94
- modelValue: M.value.normalizationMethod,
95
- "onUpdate:modelValue": n[4] ||= (e) => M.value.normalizationMethod = e,
94
+ modelValue: P.value.normalizationMethod,
95
+ "onUpdate:modelValue": n[4] ||= (e) => P.value.normalizationMethod = e,
96
96
  label: "Normalization method",
97
- options: B,
97
+ options: H,
98
98
  compact: !0
99
99
  }, null, 8, ["modelValue"])]),
100
100
  p("div", E, [m(v(x), {
101
- modelValue: M.value.aggregateByX,
102
- "onUpdate:modelValue": n[5] ||= (e) => M.value.aggregateByX = e
103
- }, null, 8, ["modelValue"]), n[12] ||= p("span", null, "Aggregate X groups", -1)]),
101
+ modelValue: P.value.aggregateByX,
102
+ "onUpdate:modelValue": n[5] ||= (e) => P.value.aggregateByX = e
103
+ }, null, 8, ["modelValue"]), n[14] ||= p("span", null, "Aggregate X groups", -1)]),
104
104
  p("div", D, [m(v(x), {
105
- modelValue: M.value.aggregateByY,
106
- "onUpdate:modelValue": n[6] ||= (e) => M.value.aggregateByY = e
107
- }, null, 8, ["modelValue"]), n[13] ||= p("span", null, "Aggregate Y groups", -1)]),
105
+ modelValue: P.value.aggregateByY,
106
+ "onUpdate:modelValue": n[6] ||= (e) => P.value.aggregateByY = e
107
+ }, null, 8, ["modelValue"]), n[15] ||= p("span", null, "Aggregate Y groups", -1)]),
108
108
  p("div", O, [m(v(b), {
109
- modelValue: M.value.aggregationMethod,
110
- "onUpdate:modelValue": n[7] ||= (e) => M.value.aggregationMethod = e,
109
+ modelValue: P.value.aggregationMethod,
110
+ "onUpdate:modelValue": n[7] ||= (e) => P.value.aggregationMethod = e,
111
111
  label: "Aggregation method",
112
- options: v(V),
112
+ options: v(U),
113
113
  compact: !0
114
114
  }, null, 8, ["modelValue", "options"])]),
115
115
  p("div", k, [m(v(b), {
116
- modelValue: W.value,
117
- "onUpdate:modelValue": [n[8] ||= (e) => W.value = e, n[9] ||= (e) => {
118
- e === "custom" ? M.value.NAValueAs = G.value : M.value.NAValueAs = e;
116
+ modelValue: K.value,
117
+ "onUpdate:modelValue": [n[8] ||= (e) => K.value = e, n[9] ||= (e) => {
118
+ e === "custom" ? P.value.NAValueAs = q.value : P.value.NAValueAs = e;
119
119
  }],
120
120
  label: "Treat NA value as:",
121
- options: U,
121
+ options: G,
122
122
  compact: !0
123
123
  }, null, 8, ["modelValue"]), m(v(S), {
124
- modelValue: G.value,
125
- "onUpdate:modelValue": [n[10] ||= (e) => G.value = e, n[11] ||= (e) => {
126
- e !== void 0 && (M.value.NAValueAs = e);
124
+ modelValue: q.value,
125
+ "onUpdate:modelValue": [n[10] ||= (e) => q.value = e, n[11] ||= (e) => {
126
+ e !== void 0 && (P.value.NAValueAs = e);
127
127
  }],
128
128
  style: {
129
129
  height: "33px",
130
130
  marginLeft: "16px",
131
131
  width: "75px"
132
132
  },
133
- disabled: W.value !== "custom",
133
+ disabled: K.value !== "custom",
134
134
  label: "NA value",
135
135
  useIncrementButtons: !1
136
- }, null, 8, ["modelValue", "disabled"])])
136
+ }, null, 8, ["modelValue", "disabled"])]),
137
+ p("div", A, [m(v(x), {
138
+ modelValue: P.value.showEmptyRows,
139
+ "onUpdate:modelValue": n[12] ||= (e) => P.value.showEmptyRows = e
140
+ }, null, 8, ["modelValue"]), n[16] ||= p("span", null, "Show empty rows", -1)]),
141
+ p("div", j, [m(v(x), {
142
+ modelValue: P.value.showEmptyColumns,
143
+ "onUpdate:modelValue": n[13] ||= (e) => P.value.showEmptyColumns = e
144
+ }, null, 8, ["modelValue"]), n[17] ||= p("span", null, "Show empty columns", -1)])
137
145
  ], 64));
138
146
  }
139
147
  });
140
- export { j as default };
148
+ export { N as default };
141
149
 
142
150
  //# sourceMappingURL=Bubble.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bubble.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/forms/LayersForm/Layer/Bubble.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useStore } from '../../../store';\nimport type { BubbleLayer } from '../../../types';\nimport { computed, ref } from 'vue';\nimport {\n DEFAULT_BLACK,\n PALETTE_MAP,\n} from '../../../constantsAesthetic';\nimport type { ContinuousPalette } from '../../../components/AesSettings/types';\nimport { createContinuousMappingFromPalette } from '../../../dataBindAes';\nimport MultiselectButton from '../../../components/MultiselectButton.vue';\nimport PalettesForm from '../../../components/AesSettings/PalettesForm.vue';\nimport FormWrapper from '../../../components/AesSettings/FormWrapper.vue';\nimport type { BubbleUIState } from '@milaboratories/pf-plots';\nimport type { SimpleOption } from '@platforma-sdk/ui-vue';\nimport { PlBtnGroup, PlCheckbox, PlNumberField } from '@platforma-sdk/ui-vue';\nimport AesSelector from '../AesSelector.vue';\nimport { AGGREGATION_METHOD_OPTIONS } from '../../../constantsCommon';\n\nconst store = useStore();\nconst layer: BubbleLayer = 'bubble';\nconst settings = computed(() => store.value.reactive.layersSettings[layer]);\nconst optionsState = computed(() => store.value.reactive.optionsState as BubbleUIState);\n\nconst valueColor = computed(() => optionsState.value.components.valueColor.selectorStates[0]?.selectedSource);\nconst savedDataValuePalette = computed(() => valueColor.value ? store.value.reactive.dataBindAes[valueColor.value]?.palette : undefined);\n\nconst palettesOpen = ref(false);\nconst palette = ref<ContinuousPalette>(savedDataValuePalette.value as ContinuousPalette ?? store.value.defaultPalette.continuous);\n\nfunction onPaletteSelect(value: ContinuousPalette) {\n palette.value = value;\n palettesOpen.value = false;\n if (valueColor.value) {\n store.value.reactive.dataBindAes[valueColor.value] = createContinuousMappingFromPalette(value);\n }\n}\n\nconst NORMALIZATION_DIRECTION: SimpleOption[] = [\n { label: 'None', value: null },\n { label: 'Columns', value: 'column' },\n { label: 'Rows', value: 'row' },\n];\nconst NORMALIZATION_METHOD: SimpleOption[] = [\n { label: 'z-score', value: 'standardScaling' },\n { label: 'Min-max', value: 'meanNormalization' },\n];\nconst AGGREGATION_METHOD = AGGREGATION_METHOD_OPTIONS;\n\nconst stroke = computed({\n get: () => {\n return settings.value.strokeColor ?? DEFAULT_BLACK;\n },\n set: (v: string) => {\n settings.value.strokeColor = v;\n },\n});\n\nconst NA_VALUE_OPTIONS: SimpleOption[] = [\n { label: 'empty', value: null },\n { label: 'Special value', value: 'custom' },\n];\n\nconst NAValueOption = ref(settings.value.NAValueAs !== null ? 'custom' : settings.value.NAValueAs);\nconst customNA = ref(settings.value.NAValueAs ?? 0);\n\n</script>\n\n<template>\n <MultiselectButton\n label=\"Color Palette \"\n :title=\"PALETTE_MAP[palette].title\"\n :palette=\"palette\"\n @button-click=\"palettesOpen = true;\"\n />\n <FormWrapper\n v-if=\"palettesOpen\"\n title=\"Color Palette\"\n back-title=\"Color mapping\"\n @form:close=\"palettesOpen = false\"\n >\n <PalettesForm :selected=\"palette\" :categorical=\"false\" @select=\"onPaletteSelect\" />\n </FormWrapper>\n <div class=\"input-item\">\n <AesSelector\n label=\"Stroke color\"\n form-title=\"Stroke Color Settings\"\n form-back-title=\"Layers\"\n type=\"stroke\"\n :possible-aes-source-inputs=\"[]\"\n :selected=\"stroke\"\n @aes-update=\"(v:string) => stroke = v\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationDirection\"\n label=\"Normalize by\"\n :options=\"NORMALIZATION_DIRECTION\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationMethod\"\n label=\"Normalization method\"\n :options=\"NORMALIZATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByX\"/>\n <span>Aggregate X groups</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByY\"/>\n <span>Aggregate Y groups</span>\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.aggregationMethod\"\n label=\"Aggregation method\"\n :options=\"AGGREGATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\" :style=\"{display: 'flex', alignItems: 'end'}\">\n <PlBtnGroup\n v-model=\"NAValueOption\"\n label=\"Treat NA value as:\"\n :options=\"NA_VALUE_OPTIONS\"\n :compact=\"true\"\n @update:modelValue=\"(value:unknown) => {\n if (value === 'custom') {\n settings.NAValueAs = customNA;\n } else {\n settings.NAValueAs = value as number|null;\n }\n }\"\n />\n <PlNumberField\n v-model=\"customNA\"\n :style=\"{height: '33px', marginLeft: '16px', width: '75px'}\"\n :disabled=\"NAValueOption !== 'custom'\"\n label=\"NA value\"\n :useIncrementButtons=\"false\"\n @update:modelValue=\"(value:unknown) => {\n if (value !== undefined) {\n settings.NAValueAs = value as number;\n }\n }\"\n />\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"Bubble.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/forms/LayersForm/Layer/Bubble.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useStore } from '../../../store';\nimport type { BubbleLayer } from '../../../types';\nimport { computed, ref } from 'vue';\nimport {\n DEFAULT_BLACK,\n PALETTE_MAP,\n} from '../../../constantsAesthetic';\nimport type { ContinuousPalette } from '../../../components/AesSettings/types';\nimport { createContinuousMappingFromPalette } from '../../../dataBindAes';\nimport MultiselectButton from '../../../components/MultiselectButton.vue';\nimport PalettesForm from '../../../components/AesSettings/PalettesForm.vue';\nimport FormWrapper from '../../../components/AesSettings/FormWrapper.vue';\nimport type { BubbleUIState } from '@milaboratories/pf-plots';\nimport type { SimpleOption } from '@platforma-sdk/ui-vue';\nimport { PlBtnGroup, PlCheckbox, PlNumberField } from '@platforma-sdk/ui-vue';\nimport AesSelector from '../AesSelector.vue';\nimport { AGGREGATION_METHOD_OPTIONS } from '../../../constantsCommon';\n\nconst store = useStore();\nconst layer: BubbleLayer = 'bubble';\nconst settings = computed(() => store.value.reactive.layersSettings[layer]);\nconst optionsState = computed(() => store.value.reactive.optionsState as BubbleUIState);\n\nconst valueColor = computed(() => optionsState.value.components.valueColor.selectorStates[0]?.selectedSource);\nconst savedDataValuePalette = computed(() => valueColor.value ? store.value.reactive.dataBindAes[valueColor.value]?.palette : undefined);\n\nconst palettesOpen = ref(false);\nconst palette = ref<ContinuousPalette>(savedDataValuePalette.value as ContinuousPalette ?? store.value.defaultPalette.continuous);\n\nfunction onPaletteSelect(value: ContinuousPalette) {\n palette.value = value;\n palettesOpen.value = false;\n if (valueColor.value) {\n store.value.reactive.dataBindAes[valueColor.value] = createContinuousMappingFromPalette(value);\n }\n}\n\nconst NORMALIZATION_DIRECTION: SimpleOption[] = [\n { label: 'None', value: null },\n { label: 'Columns', value: 'column' },\n { label: 'Rows', value: 'row' },\n];\nconst NORMALIZATION_METHOD: SimpleOption[] = [\n { label: 'z-score', value: 'standardScaling' },\n { label: 'Min-max', value: 'meanNormalization' },\n];\nconst AGGREGATION_METHOD = AGGREGATION_METHOD_OPTIONS;\n\nconst stroke = computed({\n get: () => {\n return settings.value.strokeColor ?? DEFAULT_BLACK;\n },\n set: (v: string) => {\n settings.value.strokeColor = v;\n },\n});\n\nconst NA_VALUE_OPTIONS: SimpleOption[] = [\n { label: 'empty', value: null },\n { label: 'Special value', value: 'custom' },\n];\n\nconst NAValueOption = ref(settings.value.NAValueAs !== null ? 'custom' : settings.value.NAValueAs);\nconst customNA = ref(settings.value.NAValueAs ?? 0);\n\n</script>\n\n<template>\n <MultiselectButton\n label=\"Color Palette \"\n :title=\"PALETTE_MAP[palette].title\"\n :palette=\"palette\"\n @button-click=\"palettesOpen = true;\"\n />\n <FormWrapper\n v-if=\"palettesOpen\"\n title=\"Color Palette\"\n back-title=\"Color mapping\"\n @form:close=\"palettesOpen = false\"\n >\n <PalettesForm :selected=\"palette\" :categorical=\"false\" @select=\"onPaletteSelect\" />\n </FormWrapper>\n <div class=\"input-item\">\n <AesSelector\n label=\"Stroke color\"\n form-title=\"Stroke Color Settings\"\n form-back-title=\"Layers\"\n type=\"stroke\"\n :possible-aes-source-inputs=\"[]\"\n :selected=\"stroke\"\n @aes-update=\"(v:string) => stroke = v\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationDirection\"\n label=\"Normalize by\"\n :options=\"NORMALIZATION_DIRECTION\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationMethod\"\n label=\"Normalization method\"\n :options=\"NORMALIZATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByX\"/>\n <span>Aggregate X groups</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByY\"/>\n <span>Aggregate Y groups</span>\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.aggregationMethod\"\n label=\"Aggregation method\"\n :options=\"AGGREGATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\" :style=\"{display: 'flex', alignItems: 'end'}\">\n <PlBtnGroup\n v-model=\"NAValueOption\"\n label=\"Treat NA value as:\"\n :options=\"NA_VALUE_OPTIONS\"\n :compact=\"true\"\n @update:modelValue=\"(value:unknown) => {\n if (value === 'custom') {\n settings.NAValueAs = customNA;\n } else {\n settings.NAValueAs = value as number|null;\n }\n }\"\n />\n <PlNumberField\n v-model=\"customNA\"\n :style=\"{height: '33px', marginLeft: '16px', width: '75px'}\"\n :disabled=\"NAValueOption !== 'custom'\"\n label=\"NA value\"\n :useIncrementButtons=\"false\"\n @update:modelValue=\"(value:unknown) => {\n if (value !== undefined) {\n settings.NAValueAs = value as number;\n }\n }\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.showEmptyRows\"/>\n <span>Show empty rows</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.showEmptyColumns\"/>\n <span>Show empty columns</span>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Heatmap.js","names":[],"sources":["../../../../../src/forms/LayersForm/Layer/heatmap/Heatmap.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useStore } from '../../../../store';\nimport type { HeatmapLayer } from '../../../../types';\nimport { computed, ref } from 'vue';\nimport {\n PALETTE_MAP,\n} from '../../../../constantsAesthetic';\nimport type { ContinuousPalette } from '../../../../components/AesSettings/types';\nimport { createContinuousMappingFromPalette } from '../../../../dataBindAes';\nimport MultiselectButton from '../../../../components/MultiselectButton.vue';\nimport PalettesForm from '../../../../components/AesSettings/PalettesForm.vue';\nimport FormWrapper from '../../../../components/AesSettings/FormWrapper.vue';\nimport type { HeatmapUIState, InputGuide } from '@milaboratories/pf-plots';\nimport type { SimpleOption } from '@platforma-sdk/ui-vue';\nimport { PlBtnGroup, PlCheckbox, PlDropdown, PlNumberField } from '@platforma-sdk/ui-vue';\nimport { AGGREGATION_METHOD_OPTIONS } from '../../../../constantsCommon';\n\nconst store = useStore();\nconst layer: HeatmapLayer = 'heatmap';\nconst settings = computed(() => store.value.reactive.layersSettings[layer]);\nconst optionsState = computed(() => store.value.reactive.optionsState as HeatmapUIState);\nconst inputGuide = computed(() => store.value.inputGuide.value as InputGuide<HeatmapUIState>);\n\nconst dataSource = computed(() => optionsState.value.components.value.selectorStates[0]?.selectedSource);\nconst savedDataValuePalette = computed(() => dataSource.value ? store.value.reactive.dataBindAes[dataSource.value]?.palette : undefined);\n\nconst palettesOpen = ref(false);\nconst palette = ref<ContinuousPalette>(savedDataValuePalette.value as ContinuousPalette ?? store.value.defaultPalette.continuous);\n\nfunction onPaletteSelect(value: ContinuousPalette) {\n palette.value = value;\n palettesOpen.value = false;\n if (dataSource.value) {\n store.value.reactive.dataBindAes[dataSource.value] = createContinuousMappingFromPalette(value);\n }\n}\n\nconst NORMALIZATION_DIRECTION: SimpleOption[] = [\n { label: 'None', value: null },\n { label: 'Columns', value: 'column' },\n { label: 'Rows', value: 'row' },\n];\nconst NORMALIZATION_METHOD: SimpleOption[] = [\n { label: 'z-score', value: 'standardScaling' },\n { label: 'Min-max', value: 'meanNormalization' },\n];\nconst NA_VALUE_OPTIONS: SimpleOption[] = [\n { label: 'empty', value: null },\n { label: 'Special value', value: 'custom' },\n];\nconst AGGREGATION_METHOD = AGGREGATION_METHOD_OPTIONS;\n\nconst NAValueOption = ref(settings.value.NAValueAs === null ? null : 'custom');\nconst customNA = ref(settings.value.NAValueAs ?? 0);\n</script>\n\n<template>\n <MultiselectButton\n label=\"Color Palette \"\n :title=\"PALETTE_MAP[palette].title\"\n :palette=\"palette\"\n @button-click=\"palettesOpen = true;\"\n />\n <FormWrapper\n v-if=\"palettesOpen\"\n title=\"Color Palette\"\n back-title=\"Color mapping\"\n @form:close=\"palettesOpen = false\"\n >\n <PalettesForm\n :selected=\"palette\"\n :categorical=\"dataSource ? inputGuide.getSourceInfo(dataSource).type === 'String' : false\"\n @select=\"onPaletteSelect\"\n />\n </FormWrapper>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationDirection\"\n label=\"Normalize by\"\n :options=\"NORMALIZATION_DIRECTION\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationMethod\"\n label=\"Normalization method\"\n :options=\"NORMALIZATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByX\"/>\n <span>Aggregate X groups</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByY\"/>\n <span>Aggregate Y groups</span>\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.aggregationMethod\"\n label=\"Aggregation method\"\n :options=\"AGGREGATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\" :style=\"{display: 'flex', alignItems: 'end'}\">\n <PlBtnGroup\n v-model=\"NAValueOption\"\n label=\"Treat NA value as:\"\n :options=\"NA_VALUE_OPTIONS\"\n :compact=\"true\"\n @update:modelValue=\"(value:unknown) => {\n if (value === 'custom') {\n settings.NAValueAs = customNA;\n } else {\n settings.NAValueAs = value as number|null;\n }\n }\"\n />\n <PlNumberField\n v-model=\"customNA\"\n :style=\"{height: '33px', marginLeft: '16px', width: '75px'}\"\n :disabled=\"NAValueOption !== 'custom'\"\n label=\"NA value\"\n :useIncrementButtons=\"false\"\n @update:modelValue=\"(value:unknown) => {\n if (value !== undefined) {\n settings.NAValueAs = value as number;\n }\n }\"\n />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Heatmap.js","names":[],"sources":["../../../../../src/forms/LayersForm/Layer/heatmap/Heatmap.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useStore } from '../../../../store';\nimport type { HeatmapLayer } from '../../../../types';\nimport { computed, ref } from 'vue';\nimport {\n PALETTE_MAP,\n} from '../../../../constantsAesthetic';\nimport type { ContinuousPalette } from '../../../../components/AesSettings/types';\nimport { createContinuousMappingFromPalette } from '../../../../dataBindAes';\nimport MultiselectButton from '../../../../components/MultiselectButton.vue';\nimport PalettesForm from '../../../../components/AesSettings/PalettesForm.vue';\nimport FormWrapper from '../../../../components/AesSettings/FormWrapper.vue';\nimport type { HeatmapUIState, InputGuide } from '@milaboratories/pf-plots';\nimport type { SimpleOption } from '@platforma-sdk/ui-vue';\nimport { PlBtnGroup, PlCheckbox, PlNumberField } from '@platforma-sdk/ui-vue';\nimport { AGGREGATION_METHOD_OPTIONS } from '../../../../constantsCommon';\n\nconst store = useStore();\nconst layer: HeatmapLayer = 'heatmap';\nconst settings = computed(() => store.value.reactive.layersSettings[layer]);\nconst optionsState = computed(() => store.value.reactive.optionsState as HeatmapUIState);\nconst inputGuide = computed(() => store.value.inputGuide.value as InputGuide<HeatmapUIState>);\n\nconst dataSource = computed(() => optionsState.value.components.value.selectorStates[0]?.selectedSource);\nconst savedDataValuePalette = computed(() => dataSource.value ? store.value.reactive.dataBindAes[dataSource.value]?.palette : undefined);\n\nconst palettesOpen = ref(false);\nconst palette = ref<ContinuousPalette>(savedDataValuePalette.value as ContinuousPalette ?? store.value.defaultPalette.continuous);\n\nfunction onPaletteSelect(value: ContinuousPalette) {\n palette.value = value;\n palettesOpen.value = false;\n if (dataSource.value) {\n store.value.reactive.dataBindAes[dataSource.value] = createContinuousMappingFromPalette(value);\n }\n}\n\nconst NORMALIZATION_DIRECTION: SimpleOption[] = [\n { label: 'None', value: null },\n { label: 'Columns', value: 'column' },\n { label: 'Rows', value: 'row' },\n];\nconst NORMALIZATION_METHOD: SimpleOption[] = [\n { label: 'z-score', value: 'standardScaling' },\n { label: 'Min-max', value: 'meanNormalization' },\n];\nconst NA_VALUE_OPTIONS: SimpleOption[] = [\n { label: 'empty', value: null },\n { label: 'Special value', value: 'custom' },\n];\nconst AGGREGATION_METHOD = AGGREGATION_METHOD_OPTIONS;\n\nconst NAValueOption = ref(settings.value.NAValueAs === null ? null : 'custom');\nconst customNA = ref(settings.value.NAValueAs ?? 0);\n</script>\n\n<template>\n <MultiselectButton\n label=\"Color Palette \"\n :title=\"PALETTE_MAP[palette].title\"\n :palette=\"palette\"\n @button-click=\"palettesOpen = true;\"\n />\n <FormWrapper\n v-if=\"palettesOpen\"\n title=\"Color Palette\"\n back-title=\"Color mapping\"\n @form:close=\"palettesOpen = false\"\n >\n <PalettesForm\n :selected=\"palette\"\n :categorical=\"dataSource ? inputGuide.getSourceInfo(dataSource).type === 'String' : false\"\n @select=\"onPaletteSelect\"\n />\n </FormWrapper>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationDirection\"\n label=\"Normalize by\"\n :options=\"NORMALIZATION_DIRECTION\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.normalizationMethod\"\n label=\"Normalization method\"\n :options=\"NORMALIZATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByX\"/>\n <span>Aggregate X groups</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.aggregateByY\"/>\n <span>Aggregate Y groups</span>\n </div>\n <div class=\"button-group-item\">\n <PlBtnGroup\n v-model=\"settings.aggregationMethod\"\n label=\"Aggregation method\"\n :options=\"AGGREGATION_METHOD\"\n :compact=\"true\"\n />\n </div>\n <div class=\"button-group-item\" :style=\"{display: 'flex', alignItems: 'end'}\">\n <PlBtnGroup\n v-model=\"NAValueOption\"\n label=\"Treat NA value as:\"\n :options=\"NA_VALUE_OPTIONS\"\n :compact=\"true\"\n @update:modelValue=\"(value:unknown) => {\n if (value === 'custom') {\n settings.NAValueAs = customNA;\n } else {\n settings.NAValueAs = value as number|null;\n }\n }\"\n />\n <PlNumberField\n v-model=\"customNA\"\n :style=\"{height: '33px', marginLeft: '16px', width: '75px'}\"\n :disabled=\"NAValueOption !== 'custom'\"\n label=\"NA value\"\n :useIncrementButtons=\"false\"\n @update:modelValue=\"(value:unknown) => {\n if (value !== undefined) {\n settings.NAValueAs = value as number;\n }\n }\"\n />\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.showEmptyRows\"/>\n <span>Show empty rows</span>\n </div>\n <div class=\"checkbox-item\">\n <PlCheckbox v-model=\"settings.showEmptyColumns\"/>\n <span>Show empty columns</span>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"Heatmap.vue.d.ts","sourceRoot":"","sources":["../../../../../src/forms/LayersForm/Layer/heatmap/Heatmap.vue"],"names":[],"mappings":";AAscA,wBAKG"}
1
+ {"version":3,"file":"Heatmap.vue.d.ts","sourceRoot":"","sources":["../../../../../src/forms/LayersForm/Layer/heatmap/Heatmap.vue"],"names":[],"mappings":";AA0eA,wBAKG"}