@milaboratories/graph-maker 1.2.7 → 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/components/ChartTruncationWarningAlert.js.map +1 -1
- package/dist/components/ChartTruncationWarningAlert.style.js.map +1 -1
- package/dist/components/ChartTruncationWarningAlert.vue.d.ts.map +1 -1
- package/dist/components/ChartTruncationWarningAlert.vue2.js +30 -17
- package/dist/components/ChartTruncationWarningAlert.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/ui.d.ts +0 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +1 -2
- package/dist/ui.vue2.js +1 -1
- package/dist/ui.vue2.js.map +1 -1
- package/dist/ui2.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/composeChartSettings.d.ts +5 -1
- package/dist/utils/createChartSettingsForRender/composeChartSettings.d.ts.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeChartSettings.js +5 -1
- package/dist/utils/createChartSettingsForRender/composeChartSettings.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
- package/dist/GraphMakerPlugin.js +0 -5
- package/dist/GraphMakerPlugin.js.map +0 -1
- package/dist/GraphMakerPlugin.vue.d.ts +0 -37
- package/dist/GraphMakerPlugin.vue.d.ts.map +0 -1
- package/dist/GraphMakerPlugin.vue2.js +0 -61
- package/dist/GraphMakerPlugin.vue2.js.map +0 -1
|
@@ -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
|
});
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;;EAsCA,IAAM,IAAQ,GAAU,EAClB,IAAQ,EAAM,MAAM,SAAS,cAC7B,IAAW,EAAM,EAAM,MAAM,UAAU,eAAe,EAEtD,IAAa,QACX,EAAM,MAAM,WAAW,MAC9B,EACK,IAAa,QAAe,EAAM,MAAM,iBAAiB,MAAM;EAGrE,SAAS,EAAgB,GAA2C;AAClE,UAAO,EACL,GACA,GACA,EAAM,MAAM,YACZ,EAAM,MAAM,iBAAiB,MAC9B;;EAEH,SAAS,EAAe,GAA2C;AACjE,UAAO,EACL,GACA,GACA,EAAM,MAAM,YACZ,EAAM,MAAM,iBAAiB,MAC9B;;EAEH,SAAS,EAAgB,GAA2C;AAClE,UAAO,EACL,GACA,GACA,EAAM,MAAM,YACZ,EAAM,MAAM,iBAAiB,OAC7B,EACD;;EAGH,IAAM,IAAmB,EAAI;GAC3B,OAAO,EAAgB,QAAQ;GAC/B,cAAc,EAAe,eAAe;GAC5C,mBAAmB,EAAe,oBAAoB;GACtD,oBAAoB,EAAe,qBAAqB;GACxD,SAAS,EAAgB,UAAU;GACnC,OAAO,EAAgB,QAAQ;GAC/B,QAAQ,EAAe,SAAS;GAChC,QAAQ,EAAe,SAAS;GAChC,WAAW,EAAe,YAAY;GACtC,WAAW,EAAe,YAAY;GACtC,UAAU,EAAe,WAAW;GACpC,WAAW,EAAe,YAAY;GACtC,aAAa,EAAe,cAAc;GAC1C,cAAc,EAAe,eAAe;GAC7C,CAAC;AAiBF,EAhBA,QACQ,EAAiB,MAAM,YAC5B,MAAU;AACT,KAAM,MAAM,SAAS,eAAe,OAAO,WAAW,EAAM,SACxD;IAAE,MAAM;IAAa,OAAO,EAAM;IAAG,GAAA;IAG5C,EACD,QACQ,EAAiB,MAAM,YAC5B,MAAU;AACT,KAAM,MAAM,SAAS,eAAe,OAAO,UAAU,EAAM,SACvD;IAAE,MAAM;IAAa,OAAO,EAAM;IAAG,GACrC;IAEP,EACD,QACQ,EAAiB,MAAM,YAC5B,MAAU;AACT,KAAM,MAAM,SAAS,eAAe,OAAO,YAAY,EAAM,SACzD;IAAE,MAAM;IAAa,OAAO,EAAM;IAAG,GACrC;IAEP;EAED,IAAM,IAAU,QACP,EACL,GACA,EACD,CACD,EAEI,IAAc,QAClB,EAAe,GAA2C,EAAQ,CACnE,EACK,IAAuB,QAC3B,EAAY,MAAM,QAAQ,MAAS,EAAK,KAAK,SAAS,OAAO,CAC9D,EACK,IAAuB;GAC3B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,EAEK,IAA2C;GAC/C,QAAQ;GACR,cAAc;GACd,QAAQ;GACR,mBAAmB;GACnB,aAAa;GACb,cAAc;GACd,oBAAoB;GACpB,WAAW;GACX,WAAW;GACX,UAAU;GACV,WAAW;GACZ,EAEK,IAAY,EAAmB,KAAK,EAEpC,IAAW,QAAyC;GACxD,IAAM,oBAAqB,IAAI,KAAa;AAS5C,UARA,EAAQ,SAAS,MAAS;AAIxB,IAHA,EAAQ,MAAM,GAAM,SAAS,MAAW;AACtC,OAAmB,IAAI,EAAO,MAAM;MACpC,EACF,EAAM,WAAW,GAAM,eAAe,SAAS,MAAkB;AAC/D,OAAmB,IAAI,EAAc,eAAe;MACpD;KACF,EACK,EAAY,EAAW,OAAO,EAAM,YAAY,EAAW,OAAO,CAAC,GAAG,EAAmB,CAAC;IACjG;EAEF,SAAS,EAAsB,GAAiC;AAK9D,GAJA,EAAiB,MAAM,EAAM,MAAM,CACjC,GAAG,EAAiB,MAAM,EAAM,KAChC,EAAM,UACP,EACD,EAAU,QAAQ;;EAGpB,SAAS,EAAc,GAAwB,GAAiB;AAC9D,KAAiB,MAAM,KAAQ;;EAGjC,SAAS,GAAiB,GAAmC;AAC3D,KAAiB,MAAM,EAAM,YAAY,EAAiB,MACxD,EAAM,UACN,QAAQ,MAAO,MAAO,EAAM,OAAO;;EAGvC,SAAS,GAAe,GAAqB;AAC3C,UAAO,EAAW,MAAM,WAAW,GAAU;;EAG/C,SAAS,GAAY,GAAqB;AACxC,UACE,CAAC,EAAW,MAAM,aACf,EAAQ,MAAM,GAAU,WAAW,KAClC,EAAU,UAAU,QACnB,CAAC,EAAS,MAAM,EAAU,OAAO,mBAAmB,IAAI,EAAS;;EAI1E,eAAe,GAAoB,GAAkB,GAAgE;AAInH,UAHK,EAAM,MAAM,iBAAiB,SAG1B,MAAM,EAAM,MAAM,WAAW,gCAAgC;IAAE,OAAO,EAAM,MAAM,iBAAiB;IAAO,YAAY,EAAW;IAAO,gBAAgB;IAAU,OAAA;IAAuC,aAAa;IAAW,CAAC,EAAE,SAFnO,QAAQ,QAAQ,EAAE,CAAC;;EAI9B,eAAe,GAAiC,GAAkB,GAAoE;AAKpI,UAJK,EAAM,MAAM,iBAAiB,QAI3B,CAAC;IAAE,OAAO;IAAe,OADlB,MAAM,EAAM,MAAM,WAAW,iBAAiB;KAAE,OAAO,EAAM,MAAM,iBAAiB;KAAO,YAAY,EAAW;KAAO,gBAAgB;KAAU,OAAO;KAAe,CAAC;IACjJ,CAAC,GAH/B,QAAQ,QAAQ,EAAE,CAAC;;EAK9B,eAAe,GAAY,GAAkB;AAI3C,UAHK,EAAM,MAAM,iBAAiB,QAG3B,EAAM,MAAM,WAAW,gCAAgC;IAAE,OAAO,EAAM,MAAM,iBAAiB;IAAO,YAAY,EAAW;IAAO,gBAAgB;IAAU,OAAA;IAAuC,CAAC,GAFlM,QAAQ,QAAQ;IAAE,QAAQ,EAAE;IAAE,UAAU;IAAO,CAAC;;EAK3D,IAAM,KAAc,QAClB,EAAQ,KAAK,MAAS;GACpB,IAAM,IAAQ,EAAW,MAAM,WAAW;AA0B1C,UAxBiC;IAC/B,IAAI;IACJ,OAAO,EAAc;IACrB,UAAU;IACV,UAAU,MAAS;IACnB,UAAU,EAAM;IAChB,UAAU,EAAM;IAChB,UAAU,GAAY,EAAK;IAC3B,UAAU,EAAM,MAAM,gBAAgB,SAAS,EAAK,IAAI;IACxD,aAAa,GAAe,EAAK;IACjC,WAAW,EAAU;IACrB,YAAY,EAAiB,MAAM;IACnC,MAAM,EAAS;IAEf,UAAU;IACV,uBAAuB;IACvB,eAAe;IAEf,WAAW;KACT,aAAa;KACb,eAAe;KACf,UAAY,MAA2B,EAAc,GAAM,EAAK;KACjE;IACF;IAED,CACH;EAED,SAAS,GAAW,GAA6B;AAI/C,UAHI,MAAa,iBAAiB,MAAa,iBACtC,EAAiB,MAAM,sBAAsB,OAE/C;;EAGT,SAAS,IAAiB;AACxB,KAAU,QAAQ;;AAG4C,GAAC,QAAQ,CAE1D,SAAS,MAAc;AACpC,KACE,OAAO,EAAiB,MAAM,UAAkB,EAAQ,MAAM,GAC7D,CAAC,GAAG,OAAc;AACjB,KACU,MAAM,UACT,GAAc,SAAS,EAAW,MAAM,KAC1C,EAAS,MACT,EAAS,GAAW,UAEvB,EAAM,MAAM,WAAW,eACrB,GACA,EAAM,MAAM,iBAAiB,OAC7B,EAAM,MAAM,SAAS,cACrB,CAAC,EAAE,gBAAgB,EAAS,GAAW,GAAG,OAAO,CAAC,CAEnD;MAGL,EAAE,WAAW,IAAM,CACpB;IACD;EAEF,IAAM,KAAgB,QAAe,EAAM,MAAM,gBAAgB,SAAS,QAAQ,IAAI,GAAM;yBAK1F,EA4Ca,GAAA,MAAA;GA3CA,YAAU,QASb;IARN,EAQM,OARN,IAQM,CAPJ,EAME,EAAA,EAAA,EAAA;iBALS,EAAA,MAAiB;8CAAjB,MAAiB,QAAK;KAC/B,OAAM;KACL,SAAS,EAAA,MAAQ;KACjB,UAAU,GAAA;KACV,OAAO,EAAA,EAAqB,CAAA,SAAU,EAAA,MAAU;;;;;;;IAG1C,EAAA,MAAqB,SAAM,KAAA,GAAA,EAAtC,EAWM,OAXN,GAWM,CAAA,AAAA,EAAA,OAVJ,EAAgD,OAAA,EAA3C,OAAM,SAAO,EAAC,2BAAuB,GAAA,EAC1C,EAQM,OARN,GAQM,EAAA,EAAA,GAAA,EAPJ,EAME,GAAA,MAAA,EALiB,EAAA,QAAoB,EAA5B,kBADX,EAME,GAAA;KAJC,KAAK;KACL,MAAM,EAAA,MAAS;KACf,aAAS,AAAA,EAAA,QAAA,MAAE,EAAA,QAAY;KACvB,WAAS;;IAIL,EAAA,MAAY,SAAM,KAAA,GAAA,EAA7B,EAWM,OAXN,GAWM,CAAA,AAAA,EAAA,OAVJ,EAAiC,OAAA,EAA5B,OAAM,SAAO,EAAC,YAAQ,GAAA,EAC3B,EAQM,OARN,GAQM,EAAA,EAAA,GAAA,EAPJ,EAME,GAAA,MAAA,EALiB,EAAA,QAAW,EAAnB,kBADX,EAME,GAAA;KAJC,KAAK;KACL,MAAM,EAAA,MAAS;KACf,aAAS,AAAA,EAAA,QAAA,MAAE,EAAA,QAAY;KACvB,WAAS;;;GAMP,UAAQ,QAC0B,EAAA,EAAA,GAAA,EAA3C,EAIW,GAAA,MAAA,EAJoB,GAAA,QAAd,wBAAiC,EAAW,IAAA,EAAA,CAChD,GAAW,EAAW,GAAE,IAAA,GAAA,EAAnC,EAEM,OAFN,GAEM,CADJ,EAA6D,GAA7D,EAA6D,EAAA,SAAA,IAAA,EAA1C,GAAY,EAAM,EAAW,UAAS,CAAA,EAAA,MAAA,GAAA,CAAA,CAAA,IAAA,EAAA,IAAA,GAAA,CAAA,EAAA,GAAA"}
|
|
@@ -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,
|
|
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(
|
|
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 ?
|
|
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(
|
|
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":";;AA2BA,SAAgB,EAKd,GACA,GACA,GACA,GACA,GACA,GAUE;CACF,IAAM,IAAQ,EAAM,MAAM,SAAS,cAC7B,IAAW,EAAM,EAAM,MAAM,UAAU,eAAe,EAEtD,IAAa,QAAe,EAAM,MAAM,WAAW,MAAM;CAE/D,SAAS,EAAgB,GAA2C;AAClE,SAAO,EACL,GACA,GACA,EAAM,MAAM,YACZ,EAAM,MAAM,iBAAiB,MAC9B;;CAGH,SAAS,EAAe,GAA2C;AACjE,SAAO,EACL,GACA,GACA,EAAM,MAAM,YACZ,EAAM,MAAM,iBAAiB,MAC9B;;CAGH,SAAS,EAAgB,GAA2C;AAClE,SAAO,EACL,GACA,GACA,EAAM,MAAM,YACZ,EAAM,MAAM,iBAAiB,OAC7B,EACD;;CAGH,IAAM,IAAkB,EAAW,EACjC,GAAG,EAAS,QAAQ,GAA+C,OACjE,EAAI,KAAO,EAAgB,EAAsC,EAC1D,IACN,EAAE,CAA6C,EACnD,CAAC,EAIE,IAAmB,EAAsB;EAC7C,GAAG,EAAiB,QAAQ,GAAuB,OACjD,EAAI,KAAO,EAAgB,EAAsC,EAC1D,IACN,EAAE,CAAqB;EAC1B,GAAG,EAAiB,QAAQ,GAAuB,OACjD,EAAI,KAAO,EAAe,EAAsC,EACzD,IACN,EAAE,CAAqB;EAC3B,CAAC,EAEI,IAAU,QACP,EAAoB,GAAO,EAAW,CAC7C,EAEI,IAAkB,QACtB,EAAmB,GAAY,EAAQ,CACxC,EACK,IAAuB,QAC3B,EAAwB,GAAY,EAAQ,CAC7C,EAEK,IAAY,EAAmB,KAAK,EACpC,IAAW,QAAyC;EACxD,IAAM,oBAAqB,IAAI,KAAa;AAS5C,SARA,EAAQ,SAAS,MAAS;AAIxB,GAHA,EAAQ,MAAM,GAAM,SAAS,MAAW;AACtC,MAAmB,IAAI,EAAO,MAAM;KACpC,EACF,EAAM,WAAW,GAAM,eAAe,SAAS,MAAkB;AAC/D,MAAmB,IAAI,EAAc,eAAe;KACpD;IACF,EACK,EAAY,EAAW,OAAO,EAAM,YAAY,EAAM,MAAM,iBAAiB,OAAO,CAAC,GAAG,EAAmB,CAAC;GACnH;CAEF,SAAS,EAAiB,GAAiB;AACzC,SAAQ,EAAM,WAAW,GAA+B,eAAe,QACpE,GAA+B,OAC1B,EAAY,SAAS,YACvB,EAAI,EAAY,kBAAkB,EAAY,wBAAwB,EAAE,GAEnE,IAET,EAAE,CACH;;CAGH,SAAS,EAAiB,GAAiB;AACzC,SAAQ,EAAM,WAAW,GAA+B,eAAe,QACpE,GAAuC,OACtC,EAAI,EAAY,kBAAkB,EAAY,sBAC1C,CAAC,EAAY,oBAAoB,KAAK,EAAY,oBAAoB,IAAI,GAC1E,CAAC,GAAG,EAAE,EACH,IAET,EAAE,CACH;;CAGH,SAAS,EAAsB,GAAiC;AAK9D,EAJA,EAAiB,MAAM,EAAM,MAAM,CACjC,GAAG,EAAiB,MAAM,EAAM,KAChC,EAAM,UACP,EACD,EAAU,QAAQ;;CAGpB,SAAS,EAAiB,GAAmC;AAC3D,IAAiB,MAAM,EAAM,YACvB,EAAiB,MAAM,EAAM,UAAU,QAAQ,MAAe,MAAO,EAAM,OAAO;;CAG1F,SAAS,EAAc,GAAwB,GAAiB;AAC9D,IAAiB,MAAM,KAAQ;;CAGjC,SAAS,EAAe,GAAqB;AAC3C,SAAO,EAAW,MAAM,WAAW,GAAU;;CAG/C,SAAS,EAAY,GAAqB;AACxC,SACE,CAAC,EAAW,MAAM,aACf,EAAQ,MAAM,GAAU,WAAW,KAClC,EAAU,UAAU,QACnB,CAAC,EAAS,MAAM,EAAU,OAAO,mBAAmB,IAAI,EAAS;;CAI1E,eAAe,EAAoB,GAAkB,GAAgE;AAInH,SAHK,EAAM,MAAM,iBAAiB,SAG1B,MAAM,EAAM,MAAM,WAAW,gCAAgC,EAAM,MAAM,iBAAiB,OAAO,EAAW,OAAO,GAAA,KAA0C,KAAa,KAAA,EAAU,EAAE,SAFrL,QAAQ,QAAQ,EAAE,CAAC;;CAK9B,eAAe,EAAiC,GAAkB,GAAoE;AAIpI,SAHK,EAAM,MAAM,iBAAiB,SAG1B,MAAM,EAAM,MAAM,WAAW,gCAAgC,EAAM,MAAM,iBAAiB,OAAO,EAAW,OAAO,GAAU,GAAG,KAAA,GAAW,EAAc,EAAE,SAF1J,QAAQ,QAAQ,EAAE,CAAC;;CAK9B,eAAe,EAAY,GAAkB;AAI3C,SAHK,EAAM,MAAM,iBAAiB,QAG3B,EAAM,MAAM,WAAW,gCAAgC,EAAM,MAAM,iBAAiB,OAAO,EAAW,OAAO,GAAA,IAAyC,GAFpJ,QAAQ,QAAQ;GAAE,QAAQ,EAAE;GAAE,UAAU;GAAO,CAAC;;CAK3D,IAAM,IAAc,QAClB,EAAQ,KAAK,MAAS;EACpB,IAAM,IAAQ,EAAW,MAAM,WAAW,IACpC,IAAW,MAAS,aAAa,MAAS,aAE1C,IAA2B;GAC/B,IAAI;GACJ,OAAO,EAAc;GACrB;GACA,UAAU,MAAS;GACnB,UAAU,EAAM;GAChB,UAAU,EAAM;GAChB,UAAU,EAAY,EAAK;GAC3B,UAAU,EAAM,MAAM,gBAAgB,SAAS,EAAK,IAAI;GACxD,aAAa,EAAe,EAAK;GACjC,WAAW,EAAU;GACrB,YAAY,EAAiB,MAAM;GACnC,MAAM,EAAS;GAEf,UAAU;GACV,uBAAuB;GACvB,eAAe;GAEf,WAAW;IACT,aAAa;IACb,eAAe;IACf,UAAY,MAA2B,EAAc,GAAM,EAAK;IACjE;GACF;AAeD,SAdI,MACF,EAAY,kBAAkB,EAAiB,EAAK,EACpD,EAAY,iBAAiB,EAAiB,EAAK,EACnD,EAAY,UAAU,0BAA0B,MAAS;GACvD,IAAM,IAAgB,EAAM,WAAW,GAAM,eAAe,EAAK;AAEjE,GADA,EAAc,OAAO,UACrB,EAAc,uBAAuB,EAAK;KAE5C,EAAY,UAAU,0BAA0B,MAAS;GACvD,IAAM,IAAgB,EAAM,WAAW,GAAM,eAAe,EAAK;AAEjE,GADA,EAAc,OAAO,SACrB,EAAc,sBAAsB,EAAK;MAGtC;GACP,CACH;CAED,SAAS,IAAiB;AACxB,IAAU,QAAQ;;AAGpB,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa;EACd"}
|
|
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":";
|
|
1
|
+
{"version":3,"file":"Bubble.vue.d.ts","sourceRoot":"","sources":["../../../../src/forms/LayersForm/Layer/Bubble.vue"],"names":[],"mappings":";AAuiBA,wBAKG"}
|