@platforma-sdk/model 1.59.3 → 1.60.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/block_storage.cjs.map +1 -1
  2. package/dist/block_storage.d.ts +1 -11
  3. package/dist/block_storage.js.map +1 -1
  4. package/dist/block_storage_callbacks.cjs.map +1 -1
  5. package/dist/block_storage_callbacks.js.map +1 -1
  6. package/dist/columns/column_collection_builder.cjs +215 -0
  7. package/dist/columns/column_collection_builder.cjs.map +1 -0
  8. package/dist/columns/column_collection_builder.d.ts +112 -0
  9. package/dist/columns/column_collection_builder.js +214 -0
  10. package/dist/columns/column_collection_builder.js.map +1 -0
  11. package/dist/columns/column_selector.cjs +122 -0
  12. package/dist/columns/column_selector.cjs.map +1 -0
  13. package/dist/columns/column_selector.d.ts +41 -0
  14. package/dist/columns/column_selector.js +118 -0
  15. package/dist/columns/column_selector.js.map +1 -0
  16. package/dist/columns/column_snapshot.cjs +20 -0
  17. package/dist/columns/column_snapshot.cjs.map +1 -0
  18. package/dist/columns/column_snapshot.d.ts +39 -0
  19. package/dist/columns/column_snapshot.js +18 -0
  20. package/dist/columns/column_snapshot.js.map +1 -0
  21. package/dist/columns/column_snapshot_provider.cjs +112 -0
  22. package/dist/columns/column_snapshot_provider.cjs.map +1 -0
  23. package/dist/columns/column_snapshot_provider.d.ts +73 -0
  24. package/dist/columns/column_snapshot_provider.js +107 -0
  25. package/dist/columns/column_snapshot_provider.js.map +1 -0
  26. package/dist/columns/ctx_column_sources.cjs +84 -0
  27. package/dist/columns/ctx_column_sources.cjs.map +1 -0
  28. package/dist/columns/ctx_column_sources.d.ts +33 -0
  29. package/dist/columns/ctx_column_sources.js +82 -0
  30. package/dist/columns/ctx_column_sources.js.map +1 -0
  31. package/dist/columns/index.cjs +5 -0
  32. package/dist/columns/index.d.ts +5 -0
  33. package/dist/columns/index.js +5 -0
  34. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +111 -0
  35. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -0
  36. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +25 -0
  37. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +110 -0
  38. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -0
  39. package/dist/components/PlDataTable/{table.cjs → createPlDataTable/createPlDataTableV3.cjs} +54 -54
  40. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -0
  41. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +39 -0
  42. package/dist/components/PlDataTable/{table.js → createPlDataTable/createPlDataTableV3.js} +53 -53
  43. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -0
  44. package/dist/components/PlDataTable/createPlDataTable/index.cjs +12 -0
  45. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -0
  46. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +15 -0
  47. package/dist/components/PlDataTable/createPlDataTable/index.js +12 -0
  48. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -0
  49. package/dist/components/PlDataTable/createPlDataTableSheet.cjs +18 -0
  50. package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -0
  51. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +11 -0
  52. package/dist/components/PlDataTable/createPlDataTableSheet.js +17 -0
  53. package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -0
  54. package/dist/components/PlDataTable/index.cjs +4 -1
  55. package/dist/components/PlDataTable/index.d.ts +5 -2
  56. package/dist/components/PlDataTable/index.js +4 -1
  57. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  58. package/dist/components/PlDataTable/state-migration.d.ts +2 -2
  59. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  60. package/dist/components/PlDataTable/{v4.d.ts → typesV4.d.ts} +2 -2
  61. package/dist/components/PlDataTable/{v5.d.ts → typesV5.d.ts} +2 -2
  62. package/dist/components/index.cjs +4 -1
  63. package/dist/components/index.d.ts +5 -2
  64. package/dist/components/index.js +4 -1
  65. package/dist/index.cjs +44 -16
  66. package/dist/index.d.ts +17 -5
  67. package/dist/index.js +15 -3
  68. package/dist/labels/derive_distinct_labels.cjs +156 -0
  69. package/dist/labels/derive_distinct_labels.cjs.map +1 -0
  70. package/dist/labels/derive_distinct_labels.d.ts +29 -0
  71. package/dist/labels/derive_distinct_labels.js +155 -0
  72. package/dist/labels/derive_distinct_labels.js.map +1 -0
  73. package/dist/labels/index.cjs +2 -0
  74. package/dist/labels/index.d.ts +2 -0
  75. package/dist/labels/index.js +2 -0
  76. package/dist/labels/write_labels_to_specs.cjs +15 -0
  77. package/dist/labels/write_labels_to_specs.cjs.map +1 -0
  78. package/dist/labels/write_labels_to_specs.d.ts +9 -0
  79. package/dist/labels/write_labels_to_specs.js +14 -0
  80. package/dist/labels/write_labels_to_specs.js.map +1 -0
  81. package/dist/package.cjs +1 -1
  82. package/dist/package.js +1 -1
  83. package/dist/render/api.cjs +11 -2
  84. package/dist/render/api.cjs.map +1 -1
  85. package/dist/render/api.d.ts +9 -5
  86. package/dist/render/api.js +12 -3
  87. package/dist/render/api.js.map +1 -1
  88. package/dist/render/index.d.ts +2 -1
  89. package/dist/render/index.js +1 -1
  90. package/dist/render/internal.cjs.map +1 -1
  91. package/dist/render/internal.d.ts +5 -2
  92. package/dist/render/internal.js.map +1 -1
  93. package/dist/render/util/column_collection.cjs +3 -3
  94. package/dist/render/util/column_collection.cjs.map +1 -1
  95. package/dist/render/util/column_collection.d.ts +3 -2
  96. package/dist/render/util/column_collection.js +4 -4
  97. package/dist/render/util/column_collection.js.map +1 -1
  98. package/dist/render/util/index.d.ts +2 -1
  99. package/dist/render/util/index.js +1 -1
  100. package/dist/render/util/label.cjs +7 -134
  101. package/dist/render/util/label.cjs.map +1 -1
  102. package/dist/render/util/label.d.ts +5 -50
  103. package/dist/render/util/label.js +8 -132
  104. package/dist/render/util/label.js.map +1 -1
  105. package/dist/render/util/split_selectors.d.ts +2 -2
  106. package/package.json +9 -7
  107. package/src/block_storage.ts +0 -11
  108. package/src/block_storage_callbacks.ts +1 -1
  109. package/src/columns/column_collection_builder.test.ts +427 -0
  110. package/src/columns/column_collection_builder.ts +455 -0
  111. package/src/columns/column_selector.test.ts +472 -0
  112. package/src/columns/column_selector.ts +212 -0
  113. package/src/columns/column_snapshot.ts +55 -0
  114. package/src/columns/column_snapshot_provider.ts +177 -0
  115. package/src/columns/ctx_column_sources.ts +107 -0
  116. package/src/columns/expand_by_partition.test.ts +289 -0
  117. package/src/columns/expand_by_partition.ts +187 -0
  118. package/src/columns/index.ts +5 -0
  119. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +193 -0
  120. package/src/components/PlDataTable/{table.ts → createPlDataTable/createPlDataTableV3.ts} +134 -70
  121. package/src/components/PlDataTable/createPlDataTable/index.ts +27 -0
  122. package/src/components/PlDataTable/createPlDataTableSheet.ts +20 -0
  123. package/src/components/PlDataTable/index.ts +6 -4
  124. package/src/components/PlDataTable/state-migration.ts +2 -2
  125. package/src/index.ts +2 -1
  126. package/src/labels/derive_distinct_labels.test.ts +461 -0
  127. package/src/labels/derive_distinct_labels.ts +289 -0
  128. package/src/labels/index.ts +2 -0
  129. package/src/labels/write_labels_to_specs.ts +12 -0
  130. package/src/render/api.ts +25 -3
  131. package/src/render/internal.ts +20 -1
  132. package/src/render/util/column_collection.ts +9 -6
  133. package/src/render/util/label.test.ts +1 -1
  134. package/src/render/util/label.ts +19 -235
  135. package/src/render/util/split_selectors.ts +3 -3
  136. package/dist/components/PlDataTable/table.cjs.map +0 -1
  137. package/dist/components/PlDataTable/table.d.ts +0 -30
  138. package/dist/components/PlDataTable/table.js.map +0 -1
  139. /package/src/components/PlDataTable/{v4.ts → typesV4.ts} +0 -0
  140. /package/src/components/PlDataTable/{v5.ts → typesV5.ts} +0 -0
@@ -2,7 +2,10 @@ const require_axes = require('../pframe_utils/axes.cjs');
2
2
  const require_PFrameForGraphs = require('./PFrameForGraphs.cjs');
3
3
  const require_filters_ui = require('./PlAnnotations/filters_ui.cjs');
4
4
  const require_state_migration = require('./PlDataTable/state-migration.cjs');
5
- const require_table = require('./PlDataTable/table.cjs');
5
+ const require_createPlDataTableSheet = require('./PlDataTable/createPlDataTableSheet.cjs');
6
+ const require_createPlDataTableV3 = require('./PlDataTable/createPlDataTable/createPlDataTableV3.cjs');
7
+ const require_createPlDataTableV2 = require('./PlDataTable/createPlDataTable/createPlDataTableV2.cjs');
8
+ const require_index = require('./PlDataTable/createPlDataTable/index.cjs');
6
9
  require('./PlDataTable/index.cjs');
7
10
  const require_PlMultiSequenceAlignment = require('./PlMultiSequenceAlignment.cjs');
8
11
  const require_PlSelectionModel = require('./PlSelectionModel.cjs');
@@ -3,9 +3,12 @@ import { createPFrameForGraphs, isHiddenFromGraphColumn, isHiddenFromUIColumn }
3
3
  import { AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationStep, IsNA, Log10, NotFilter, NumericalComparisonFilter, OrFilter, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, SortedCumulativeSum, TransformedColumn, ValueRank } from "./PlAnnotations/filter.js";
4
4
  import { AnnotationScriptUi, AnnotationStepUi, AnyForm, FilterUi, FilterUiOfType, FilterUiType, FormField, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, compileAnnotationScript, compileFilter, compileFilters, unreachable } from "./PlAnnotations/filters_ui.js";
5
5
  import "./PlAnnotations/index.js";
6
- import { PTableParamsV2, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnId, PlTableColumnIdJson } from "./PlDataTable/v5.js";
6
+ import { PTableParamsV2, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnId, PlTableColumnIdJson } from "./PlDataTable/typesV5.js";
7
7
  import { PlDataTableStateV2, createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./PlDataTable/state-migration.js";
8
- import { createPlDataTableSheet, createPlDataTableV2, isColumnHidden, isColumnOptional } from "./PlDataTable/table.js";
8
+ import { createPlDataTableSheet } from "./PlDataTable/createPlDataTableSheet.js";
9
+ import { createPlDataTableV2 } from "./PlDataTable/createPlDataTable/createPlDataTableV2.js";
10
+ import { createPlDataTableV3, isColumnHidden, isColumnOptional } from "./PlDataTable/createPlDataTable/createPlDataTableV3.js";
11
+ import { createPlDataTable } from "./PlDataTable/createPlDataTable/index.js";
9
12
  import "./PlDataTable/index.js";
10
13
  import { PTableKey, PlSelectionModel, createPlSelectionModel } from "./PlSelectionModel.js";
11
14
  import { PColumnPredicate, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, createRowSelectionColumn } from "./PlMultiSequenceAlignment.js";
@@ -2,7 +2,10 @@ import { enrichCompatible, getAvailableWithLinkersAxes } from "../pframe_utils/a
2
2
  import { createPFrameForGraphs, isHiddenFromGraphColumn, isHiddenFromUIColumn } from "./PFrameForGraphs.js";
3
3
  import { compileAnnotationScript, compileFilter, compileFilters, unreachable } from "./PlAnnotations/filters_ui.js";
4
4
  import { createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./PlDataTable/state-migration.js";
5
- import { createPlDataTableSheet, createPlDataTableV2, isColumnHidden, isColumnOptional } from "./PlDataTable/table.js";
5
+ import { createPlDataTableSheet } from "./PlDataTable/createPlDataTableSheet.js";
6
+ import { createPlDataTableV3, isColumnHidden, isColumnOptional } from "./PlDataTable/createPlDataTable/createPlDataTableV3.js";
7
+ import { createPlDataTableV2 } from "./PlDataTable/createPlDataTable/createPlDataTableV2.js";
8
+ import { createPlDataTable } from "./PlDataTable/createPlDataTable/index.js";
6
9
  import "./PlDataTable/index.js";
7
10
  import { createRowSelectionColumn } from "./PlMultiSequenceAlignment.js";
8
11
  import { createPlSelectionModel } from "./PlSelectionModel.js";
package/dist/index.cjs CHANGED
@@ -10,6 +10,7 @@ const require_future = require('./render/future.cjs');
10
10
  const require_accessor = require('./render/accessor.cjs');
11
11
  const require_internal = require('./render/internal.cjs');
12
12
  const require_axis_filtering = require('./render/util/axis_filtering.cjs');
13
+ const require_derive_distinct_labels = require('./labels/derive_distinct_labels.cjs');
13
14
  const require_label = require('./render/util/label.cjs');
14
15
  const require_pcolumn_data = require('./render/util/pcolumn_data.cjs');
15
16
  const require_column_collection = require('./render/util/column_collection.cjs');
@@ -31,25 +32,38 @@ const require_filterUiToExpressionImpl = require('./filters/converters/filterUiT
31
32
  const require_distill = require('./filters/distill.cjs');
32
33
  require('./filters/index.cjs');
33
34
  const require_state_migration = require('./components/PlDataTable/state-migration.cjs');
34
- const require_table = require('./components/PlDataTable/table.cjs');
35
+ const require_createPlDataTableSheet = require('./components/PlDataTable/createPlDataTableSheet.cjs');
36
+ const require_column_snapshot = require('./columns/column_snapshot.cjs');
37
+ const require_column_snapshot_provider = require('./columns/column_snapshot_provider.cjs');
38
+ const require_column_selector = require('./columns/column_selector.cjs');
39
+ const require_column_collection_builder = require('./columns/column_collection_builder.cjs');
40
+ const require_ctx_column_sources = require('./columns/ctx_column_sources.cjs');
41
+ require('./columns/index.cjs');
42
+ const require_createPlDataTableV3 = require('./components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs');
43
+ const require_createPlDataTableV2 = require('./components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs');
44
+ const require_index$5 = require('./components/PlDataTable/createPlDataTable/index.cjs');
35
45
  const require_PlMultiSequenceAlignment = require('./components/PlMultiSequenceAlignment.cjs');
36
46
  const require_PlSelectionModel = require('./components/PlSelectionModel.cjs');
37
47
  require('./components/index.cjs');
38
48
  const require_pframe = require('./pframe.cjs');
49
+ const require_write_labels_to_specs = require('./labels/write_labels_to_specs.cjs');
50
+ require('./labels/index.cjs');
39
51
  const require_ref_util = require('./ref_util.cjs');
40
52
  const require_raw_globals = require('./raw_globals.cjs');
41
53
  const require_converter = require('./annotations/converter.cjs');
42
54
  require('./annotations/index.cjs');
43
- const require_index$6 = require('./pframe_utils/index.cjs');
55
+ const require_index$9 = require('./pframe_utils/index.cjs');
44
56
  const require_env_value = require('./env_value.cjs');
45
57
 
46
58
  exports.Args = require_actions.Args;
59
+ exports.ArrayColumnProvider = require_column_snapshot_provider.ArrayColumnProvider;
47
60
  exports.BLOCK_STORAGE_FACADE_VERSION = require_block_storage_facade.BLOCK_STORAGE_FACADE_VERSION;
48
61
  exports.BlockModel = require_block_model_legacy.BlockModel;
49
62
  exports.BlockModelV3 = require_block_model.BlockModelV3;
50
63
  exports.BlockRenderCtx = require_api.BlockRenderCtx;
51
64
  exports.BlockStorageFacadeCallbacks = require_block_storage_facade.BlockStorageFacadeCallbacks;
52
65
  exports.BlockStorageFacadeHandles = require_block_storage_facade.BlockStorageFacadeHandles;
66
+ exports.ColumnCollectionBuilder = require_column_collection_builder.ColumnCollectionBuilder;
53
67
  exports.CurrentSdkInfo = require_version.CurrentSdkInfo;
54
68
  exports.DataModel = require_block_migrations.DataModel;
55
69
  exports.DataModelBuilder = require_block_migrations.DataModelBuilder;
@@ -62,6 +76,7 @@ Object.defineProperty(exports, 'JsRenderInternal', {
62
76
  }
63
77
  });
64
78
  exports.MainOutputs = require_actions.MainOutputs;
79
+ exports.OutputColumnProvider = require_column_snapshot_provider.OutputColumnProvider;
65
80
  exports.OutputError = require_block_state_util.OutputError;
66
81
  exports.PColumnCollection = require_column_collection.PColumnCollection;
67
82
  exports.PFrameImpl = require_pframe.PFrameImpl;
@@ -82,13 +97,15 @@ exports.RT_RESOURCE_MAP_PARTITIONED = require_pcolumn_data.RT_RESOURCE_MAP_PARTI
82
97
  exports.RenderCtxBase = require_api.RenderCtxBase;
83
98
  exports.RenderCtxLegacy = require_api.RenderCtxLegacy;
84
99
  exports.ResultPool = require_api.ResultPool;
100
+ exports.ResultPoolColumnSnapshotProvider = require_ctx_column_sources.ResultPoolColumnSnapshotProvider;
101
+ exports.SnapshotColumnProvider = require_column_snapshot_provider.SnapshotColumnProvider;
85
102
  exports.StagingOutputs = require_actions.StagingOutputs;
86
- exports.Trace = require_label.Trace;
87
- exports.TraceEntry = require_label.TraceEntry;
88
103
  exports.TreeNodeAccessor = require_accessor.TreeNodeAccessor;
89
104
  exports.UiState = require_actions.UiState;
90
105
  exports.allPColumnsReady = require_pcolumn_data.allPColumnsReady;
91
106
  exports.and = require_actions.and;
107
+ exports.collectCtxColumnSnapshotProviders = require_ctx_column_sources.collectCtxColumnSnapshotProviders;
108
+ exports.columnSelectorsToPredicate = require_column_selector.columnSelectorsToPredicate;
92
109
  exports.compileAnnotationScript = require_filters_ui.compileAnnotationScript;
93
110
  exports.compileFilter = require_filters_ui.compileFilter;
94
111
  exports.compileFilters = require_filters_ui.compileFilters;
@@ -97,14 +114,19 @@ exports.convertFilterUiToExpressionImpl = require_filterUiToExpressionImpl.conve
97
114
  exports.convertFilterUiToExpressions = require_filterUiToExpressionImpl.convertFilterUiToExpressions;
98
115
  exports.convertOrParsePColumnData = require_pcolumn_data.convertOrParsePColumnData;
99
116
  exports.createBlockStorage = require_block_storage.createBlockStorage;
117
+ exports.createColumnSnapshot = require_column_snapshot.createColumnSnapshot;
100
118
  exports.createDefaultPTableParams = require_state_migration.createDefaultPTableParams;
101
119
  exports.createPFrameForGraphs = require_PFrameForGraphs.createPFrameForGraphs;
102
- exports.createPlDataTableSheet = require_table.createPlDataTableSheet;
120
+ exports.createPlDataTable = require_index$5.createPlDataTable;
121
+ exports.createPlDataTableSheet = require_createPlDataTableSheet.createPlDataTableSheet;
103
122
  exports.createPlDataTableStateV2 = require_state_migration.createPlDataTableStateV2;
104
- exports.createPlDataTableV2 = require_table.createPlDataTableV2;
123
+ exports.createPlDataTableV2 = require_createPlDataTableV2.createPlDataTableV2;
124
+ exports.createPlDataTableV3 = require_createPlDataTableV3.createPlDataTableV3;
105
125
  exports.createPlSelectionModel = require_PlSelectionModel.createPlSelectionModel;
126
+ exports.createReadyColumnData = require_column_snapshot.createReadyColumnData;
106
127
  exports.createRowSelectionColumn = require_PlMultiSequenceAlignment.createRowSelectionColumn;
107
128
  exports.deriveDataFromStorage = require_block_storage.deriveDataFromStorage;
129
+ exports.deriveDistinctLabels = require_derive_distinct_labels.deriveDistinctLabels;
108
130
  exports.deriveLabels = require_label.deriveLabels;
109
131
  exports.distillFilterSpec = require_distill.distillFilterSpec;
110
132
  exports.downgradeCfgOrLambda = require_normalization.downgradeCfgOrLambda;
@@ -118,14 +140,14 @@ exports.fromPlOption = require_ref_util.fromPlOption;
118
140
  exports.fromPlRef = require_ref_util.fromPlRef;
119
141
  exports.getAllRelatedColumns = require_columns.getAllRelatedColumns;
120
142
  exports.getAvailableWithLinkersAxes = require_axes.getAvailableWithLinkersAxes;
121
- exports.getAxisUniqueValues = require_index$6.getAxisUniqueValues;
143
+ exports.getAxisUniqueValues = require_index$9.getAxisUniqueValues;
122
144
  exports.getBlobContent = require_actions.getBlobContent;
123
145
  exports.getBlobContentAsJson = require_actions.getBlobContentAsJson;
124
146
  exports.getBlobContentAsString = require_actions.getBlobContentAsString;
125
- exports.getColumnOrAxisValueLabelsId = require_index$6.getColumnOrAxisValueLabelsId;
126
- exports.getColumnSpecById = require_index$6.getColumnSpecById;
127
- exports.getColumnUniqueValues = require_index$6.getColumnUniqueValues;
128
- exports.getColumnsFull = require_index$6.getColumnsFull;
147
+ exports.getColumnOrAxisValueLabelsId = require_index$9.getColumnOrAxisValueLabelsId;
148
+ exports.getColumnSpecById = require_index$9.getColumnSpecById;
149
+ exports.getColumnUniqueValues = require_index$9.getColumnUniqueValues;
150
+ exports.getColumnsFull = require_index$9.getColumnsFull;
129
151
  exports.getDownloadedBlobContent = require_actions.getDownloadedBlobContent;
130
152
  exports.getEnvironmentValue = require_env_value.getEnvironmentValue;
131
153
  exports.getFromCfg = require_actions.getFromCfg;
@@ -142,17 +164,18 @@ exports.getProgressLog = require_actions.getProgressLog;
142
164
  exports.getProgressLogWithInfo = require_actions.getProgressLogWithInfo;
143
165
  exports.getRawPlatformaInstance = require_raw_globals.getRawPlatformaInstance;
144
166
  exports.getRelatedColumns = require_columns.getRelatedColumns;
145
- exports.getRequestColumnsFromSelectedSources = require_index$6.getRequestColumnsFromSelectedSources;
167
+ exports.getRequestColumnsFromSelectedSources = require_index$9.getRequestColumnsFromSelectedSources;
146
168
  exports.getResourceField = require_actions.getResourceField;
147
169
  exports.getResourceValueAsJson = require_actions.getResourceValueAsJson;
148
- exports.getSingleColumnData = require_index$6.getSingleColumnData;
170
+ exports.getSingleColumnData = require_index$9.getSingleColumnData;
149
171
  exports.getStorageData = require_block_storage.getStorageData;
150
172
  exports.getUniquePartitionKeys = require_pcolumn_data.getUniquePartitionKeys;
151
- exports.getUniqueSourceValuesWithLabels = require_index$6.getUniqueSourceValuesWithLabels;
173
+ exports.getUniqueSourceValuesWithLabels = require_index$9.getUniqueSourceValuesWithLabels;
152
174
  exports.ifDef = require_accessor.ifDef;
153
175
  exports.isBlockStorage = require_block_storage.isBlockStorage;
154
- exports.isColumnHidden = require_table.isColumnHidden;
155
- exports.isColumnOptional = require_table.isColumnOptional;
176
+ exports.isColumnHidden = require_createPlDataTableV3.isColumnHidden;
177
+ exports.isColumnOptional = require_createPlDataTableV3.isColumnOptional;
178
+ exports.isColumnSnapshotProvider = require_column_snapshot_provider.isColumnSnapshotProvider;
156
179
  exports.isConfigLambda = require_types.isConfigLambda;
157
180
  exports.isEmpty = require_actions.isEmpty;
158
181
  exports.isHiddenFromGraphColumn = require_PFrameForGraphs.isHiddenFromGraphColumn;
@@ -165,8 +188,11 @@ exports.makeObject = require_actions.makeObject;
165
188
  exports.mapArrayValues = require_actions.mapArrayValues;
166
189
  exports.mapRecordValues = require_actions.mapRecordValues;
167
190
  exports.mapResourceFields = require_actions.mapResourceFields;
191
+ exports.matchColumn = require_column_selector.matchColumn;
192
+ exports.matchColumnSelectors = require_column_selector.matchColumnSelectors;
168
193
  exports.migrateBlockStorage = require_block_storage.migrateBlockStorage;
169
194
  exports.normalizeBlockStorage = require_block_storage.normalizeBlockStorage;
195
+ exports.normalizeSelectors = require_column_selector.normalizeSelectors;
170
196
  exports.not = require_actions.not;
171
197
  exports.or = require_actions.or;
172
198
  exports.parsePColumnData = require_pcolumn_data.parsePColumnData;
@@ -175,10 +201,12 @@ exports.pluginOutputKey = require_plugin_handle.pluginOutputKey;
175
201
  exports.pluginOutputPrefix = require_plugin_handle.pluginOutputPrefix;
176
202
  exports.readOutput = require_block_state_util.readOutput;
177
203
  exports.registerFacadeCallbacks = require_block_storage_facade.registerFacadeCallbacks;
204
+ exports.toColumnSnapshotProvider = require_column_snapshot_provider.toColumnSnapshotProvider;
178
205
  exports.unreachable = require_filters_ui.unreachable;
179
206
  exports.updateStorageData = require_block_storage.updateStorageData;
180
207
  exports.upgradePlDataTableStateV2 = require_state_migration.upgradePlDataTableStateV2;
181
208
  exports.wrapOutputs = require_block_state_util.wrapOutputs;
209
+ exports.writeLabelsToSpecs = require_write_labels_to_specs.writeLabelsToSpecs;
182
210
  var _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
183
211
  Object.keys(_milaboratories_pl_model_common).forEach(function (k) {
184
212
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { BlockStatePatch, Patch, Unionize } from "./block_state_patch.js";
2
2
  import { OutputError, readOutput, wrapOutputs } from "./block_state_util.js";
3
3
  import { InferFactoryData, InferFactoryOutputs, InferFactoryParams, InferPluginHandle, PluginFactoryLike, PluginHandle, isPluginOutputKey, pluginOutputKey, pluginOutputPrefix } from "./plugin_handle.js";
4
4
  import { DataModel, DataModelBuilder } from "./block_migrations.js";
5
- import { BlockStorage, BlockStorageSchemaVersion, MigrateBlockStorageConfig, MigrationFailure, MigrationResult, MigrationSuccess, MutateStoragePayload, PluginName, PluginRegistry, StorageDebugView, VersionedData, createBlockStorage, deriveDataFromStorage, getPluginData, getStorageData, isBlockStorage, migrateBlockStorage, normalizeBlockStorage, updateStorageData } from "./block_storage.js";
5
+ import { BlockStorage, BlockStorageSchemaVersion, MigrateBlockStorageConfig, MigrationFailure, MigrationResult, MigrationSuccess, MutateStoragePayload, PluginName, PluginRegistry, VersionedData, createBlockStorage, deriveDataFromStorage, getPluginData, getStorageData, isBlockStorage, migrateBlockStorage, normalizeBlockStorage, updateStorageData } from "./block_storage.js";
6
6
  import { Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgResourceValueAsJson } from "./config/model.js";
7
7
  import { ActionResult, ConfAction, ConfigResult, ExtractAction, InferVarTypeSafe, OptionalPlResourceEntry, POCExtractAction, PlResourceEntry, PrimitiveOrConfig, PrimitiveToCfg, TypedConfig } from "./config/type_engine.js";
8
8
  import { Checked } from "./config/type_util.js";
@@ -24,7 +24,8 @@ import { CommonFieldTraverseOps, CommonTraversalOps, FieldTraversalStep, FieldTy
24
24
  import { PColumnDataUniversal, internal_d_exports } from "./render/internal.js";
25
25
  import { ExtractFutureRefType, FutureRef } from "./render/future.js";
26
26
  import { TreeNodeAccessor, ifDef } from "./render/accessor.js";
27
- import { LabelDerivationOps, RecordsWithLabel, Trace, TraceEntry, deriveLabels } from "./render/util/label.js";
27
+ import { DeriveLabelsOptions, Entry, Trace, WithLabel, deriveDistinctLabels } from "./labels/derive_distinct_labels.js";
28
+ import { deriveLabels } from "./render/util/label.js";
28
29
  import { AxisLabelProvider, ColumnProvider, PColumnCollection, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnLazyUniversal, PColumnLazyWithLabel } from "./render/util/column_collection.js";
29
30
  import { BlockRenderCtx, InferRenderFunctionReturn, PluginRenderCtx, RenderCtx, RenderCtxBase, RenderCtxLegacy, RenderFunction, RenderFunctionLegacy, ResultPool, UniversalColumnOption, UnwrapFutureRef } from "./render/api.js";
30
31
  import { PColumnKeyList, PColumnResourceMapData, PColumnResourceMapEntry, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, allPColumnsReady, convertOrParsePColumnData, getPartitionKeysList, getUniquePartitionKeys, isPColumnReady, parsePColumnData, parseResourceMap } from "./render/util/pcolumn_data.js";
@@ -46,13 +47,24 @@ import { AnnotationSpec, AnnotationSpecUi, ExpressionSpec, FilterSpecUi } from "
46
47
  import { convertFilterSpecsToExpressionSpecs } from "./annotations/converter.js";
47
48
  import "./annotations/index.js";
48
49
  import { AnnotationScriptUi, AnnotationStepUi, AnyForm, FilterUi, FilterUiOfType, FilterUiType, FormField, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, compileAnnotationScript, compileFilter, compileFilters, unreachable } from "./components/PlAnnotations/filters_ui.js";
49
- import { PTableParamsV2, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnId, PlTableColumnIdJson } from "./components/PlDataTable/v5.js";
50
+ import { PTableParamsV2, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnId, PlTableColumnIdJson } from "./components/PlDataTable/typesV5.js";
50
51
  import { PlDataTableStateV2, createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./components/PlDataTable/state-migration.js";
51
- import { createPlDataTableSheet, createPlDataTableV2, isColumnHidden, isColumnOptional } from "./components/PlDataTable/table.js";
52
+ import { createPlDataTableSheet } from "./components/PlDataTable/createPlDataTableSheet.js";
53
+ import { createPlDataTableV2 } from "./components/PlDataTable/createPlDataTable/createPlDataTableV2.js";
54
+ import { ColumnData, ColumnDataStatus, ColumnSnapshot, createColumnSnapshot, createReadyColumnData } from "./columns/column_snapshot.js";
55
+ import { ArrayColumnProvider, ColumnSnapshotProvider, ColumnSource, OutputColumnProvider, OutputColumnProviderOpts, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./columns/column_snapshot_provider.js";
56
+ import { ColumnSelectorInput, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, StringMatcher, columnSelectorsToPredicate, matchColumn, matchColumnSelectors, normalizeSelectors } from "./columns/column_selector.js";
57
+ import { AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, BuildOptions, ColumnCollection, ColumnCollectionBuilder, ColumnMatch, FindColumnsOptions, MatchQualifications, MatchVariant, MatchingMode } from "./columns/column_collection_builder.js";
58
+ import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./columns/ctx_column_sources.js";
59
+ import "./columns/index.js";
60
+ import { createPlDataTableV3, isColumnHidden, isColumnOptional } from "./components/PlDataTable/createPlDataTable/createPlDataTableV3.js";
61
+ import { createPlDataTable } from "./components/PlDataTable/createPlDataTable/index.js";
52
62
  import { PTableKey, PlSelectionModel, createPlSelectionModel } from "./components/PlSelectionModel.js";
53
63
  import { PColumnPredicate, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, createRowSelectionColumn } from "./components/PlMultiSequenceAlignment.js";
54
64
  import "./components/index.js";
55
65
  import { PFrameImpl } from "./pframe.js";
66
+ import { writeLabelsToSpecs } from "./labels/write_labels_to_specs.js";
67
+ import "./labels/index.js";
56
68
  import { fromPlOption, fromPlRef } from "./ref_util.js";
57
69
  import { getPlatformaApiVersion, getRawPlatformaInstance } from "./raw_globals.js";
58
70
  import { getAllRelatedColumns, getRelatedColumns } from "./pframe_utils/columns.js";
@@ -60,4 +72,4 @@ import { getAxisUniqueValues, getColumnOrAxisValueLabelsId, getColumnSpecById, g
60
72
  import { getEnvironmentValue } from "./env_value.js";
61
73
  export * from "@milaboratories/pl-model-common";
62
74
  export * from "@milaboratories/pl-error-like";
63
- export { ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, AxesVault, AxisLabelProvider, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, Checked, ColumnProvider, CommonFieldTraverseOps, CommonTraversalOps, ConfAction, ConfigRenderLambda, ConfigRenderLambdaFlags, ConfigResult, CurrentSdkInfo, DataModel, DataModelBuilder, DeriveHref, ExpressionSpec, ExtractAction, ExtractFunctionHandleReturn, ExtractFutureRefType, FieldTraversalStep, FieldType, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilterSpecUi, FilterUi, FilterUiOfType, FilterUiType, FormField, FutureRef, GetFieldStep, InferArgsType, InferBlockState, InferBlockStatePatch, InferDataType, InferFactoryData, InferFactoryOutputs, InferFactoryParams, InferHrefType, InferOutputType, InferOutputsFromConfigs, InferOutputsFromLambdas, InferOutputsType, InferPluginData, InferPluginHandle, InferPluginHandles, InferPluginNames, InferRenderFunctionReturn, InferUiState, InferVarTypeSafe, IsNA, It, internal_d_exports as JsRenderInternal, LabelDerivationOps, Log10, MainOutputs, type MigrateBlockStorageConfig, type MigrationFailure, type MigrationResult, type MigrationSuccess, type MutateStoragePayload, NotFilter, NumericalComparisonFilter, OptionalPlResourceEntry, OrFilter, OutputError, PColumnCollection, PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnKeyList, PColumnLazyUniversal, PColumnLazyWithLabel, PColumnPredicate, PColumnResourceMapData, PColumnResourceMapEntry, PFrameImpl, POCExtractAction, PTableKey, PTableParamsV2, type ParamsInput, Patch, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, PlResourceEntry, PlSelectionModel, PlTableColumnId, PlTableColumnIdJson, Platforma, PlatformaApiVersion, PlatformaExtended, PlatformaFactory, PlatformaSDKVersion, PlatformaV1, PlatformaV2, PlatformaV3, type PluginConfig, type PluginData, PluginDataModel, PluginDataModelBuilder, type PluginFactory, PluginFactoryLike, PluginHandle, PluginInstance, PluginModel, type PluginName, type PluginOutputs, type PluginParams, type PluginRecord, type PluginRegistry, PluginRenderCtx, PrimitiveOrConfig, PrimitiveToCfg, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RecordsWithLabel, RenderCtx, RenderCtxBase, RenderCtxLegacy, RenderFunction, RenderFunctionLegacy, ResolveCfgType, ResourceTraversalOps, ResourceType, ResultPool, SdkInfo, SimplifiedPColumnSpec, SimplifiedUniversalPColumnEntry, SortedCumulativeSum, StagingOutputs, StdCtx, StdCtxArgsOnly, type StorageDebugView, Trace, TraceEntry, TransformedColumn, TreeNodeAccessor, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, TypedConfig, TypedConfigOrConfigLambda, TypedConfigOrString, UiState, Unionize, UniversalColumnOption, UnwrapFutureRef, ValueRank, type VersionedData, allPColumnsReady, and, compileAnnotationScript, compileFilter, compileFilters, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, createBlockStorage, createDefaultPTableParams, createPFrameForGraphs, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlSelectionModel, createRowSelectionColumn, deriveDataFromStorage, deriveLabels, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterSpecToSpecQueryExpr, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
75
+ export { ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, ArrayColumnProvider, AxesVault, AxisLabelProvider, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, BuildOptions, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, Checked, ColumnCollection, ColumnCollectionBuilder, ColumnData, ColumnDataStatus, ColumnMatch, ColumnProvider, ColumnSelectorInput, ColumnSnapshot, ColumnSnapshotProvider, ColumnSource, CommonFieldTraverseOps, CommonTraversalOps, ConfAction, ConfigRenderLambda, ConfigRenderLambdaFlags, ConfigResult, CurrentSdkInfo, DataModel, DataModelBuilder, DeriveHref, DeriveLabelsOptions, Entry, ExpressionSpec, ExtractAction, ExtractFunctionHandleReturn, ExtractFutureRefType, FieldTraversalStep, FieldType, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilterSpecUi, FilterUi, FilterUiOfType, FilterUiType, FindColumnsOptions, FormField, FutureRef, GetFieldStep, InferArgsType, InferBlockState, InferBlockStatePatch, InferDataType, InferFactoryData, InferFactoryOutputs, InferFactoryParams, InferHrefType, InferOutputType, InferOutputsFromConfigs, InferOutputsFromLambdas, InferOutputsType, InferPluginData, InferPluginHandle, InferPluginHandles, InferPluginNames, InferRenderFunctionReturn, InferUiState, InferVarTypeSafe, IsNA, It, internal_d_exports as JsRenderInternal, DeriveLabelsOptions as LabelDerivationOps, Log10, MainOutputs, MatchQualifications, MatchVariant, MatchingMode, type MigrateBlockStorageConfig, type MigrationFailure, type MigrationResult, type MigrationSuccess, type MutateStoragePayload, NotFilter, NumericalComparisonFilter, OptionalPlResourceEntry, OrFilter, OutputColumnProvider, OutputColumnProviderOpts, OutputError, PColumnCollection, PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnKeyList, PColumnLazyUniversal, PColumnLazyWithLabel, PColumnPredicate, PColumnResourceMapData, PColumnResourceMapEntry, PFrameImpl, POCExtractAction, PTableKey, PTableParamsV2, type ParamsInput, Patch, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, PlResourceEntry, PlSelectionModel, PlTableColumnId, PlTableColumnIdJson, Platforma, PlatformaApiVersion, PlatformaExtended, PlatformaFactory, PlatformaSDKVersion, PlatformaV1, PlatformaV2, PlatformaV3, type PluginConfig, type PluginData, PluginDataModel, PluginDataModelBuilder, type PluginFactory, PluginFactoryLike, PluginHandle, PluginInstance, PluginModel, type PluginName, type PluginOutputs, type PluginParams, type PluginRecord, type PluginRegistry, PluginRenderCtx, PrimitiveOrConfig, PrimitiveToCfg, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, RenderCtx, RenderCtxBase, RenderCtxLegacy, RenderFunction, RenderFunctionLegacy, ResolveCfgType, ResourceTraversalOps, ResourceType, ResultPool, ResultPoolColumnSnapshotProvider, SdkInfo, SimplifiedPColumnSpec, SimplifiedUniversalPColumnEntry, SnapshotColumnProvider, SortedCumulativeSum, Entry as SpecExtractorResult, StagingOutputs, StdCtx, StdCtxArgsOnly, StringMatcher, Trace, TransformedColumn, TreeNodeAccessor, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, TypedConfig, TypedConfigOrConfigLambda, TypedConfigOrString, UiState, Unionize, UniversalColumnOption, UnwrapFutureRef, ValueRank, type VersionedData, WithLabel, allPColumnsReady, and, collectCtxColumnSnapshotProviders, columnSelectorsToPredicate, compileAnnotationScript, compileFilter, compileFilters, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, createBlockStorage, createColumnSnapshot, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createReadyColumnData, createRowSelectionColumn, deriveDataFromStorage, deriveDistinctLabels, deriveLabels, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterSpecToSpecQueryExpr, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isColumnSnapshotProvider, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, matchColumn, matchColumnSelectors, migrateBlockStorage, normalizeBlockStorage, normalizeSelectors, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, toColumnSnapshotProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs, writeLabelsToSpecs };
package/dist/index.js CHANGED
@@ -9,7 +9,8 @@ import { FutureRef } from "./render/future.js";
9
9
  import { TreeNodeAccessor, ifDef } from "./render/accessor.js";
10
10
  import { internal_exports } from "./render/internal.js";
11
11
  import { filterDataInfoEntries } from "./render/util/axis_filtering.js";
12
- import { Trace, TraceEntry, deriveLabels } from "./render/util/label.js";
12
+ import { deriveDistinctLabels } from "./labels/derive_distinct_labels.js";
13
+ import { deriveLabels } from "./render/util/label.js";
13
14
  import { RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, allPColumnsReady, convertOrParsePColumnData, getPartitionKeysList, getUniquePartitionKeys, isPColumnReady, parsePColumnData, parseResourceMap } from "./render/util/pcolumn_data.js";
14
15
  import { PColumnCollection } from "./render/util/column_collection.js";
15
16
  import { BlockRenderCtx, PluginRenderCtx, RenderCtxBase, RenderCtxLegacy, ResultPool } from "./render/api.js";
@@ -30,11 +31,22 @@ import { convertFilterUiToExpressionImpl, convertFilterUiToExpressions } from ".
30
31
  import { distillFilterSpec } from "./filters/distill.js";
31
32
  import "./filters/index.js";
32
33
  import { createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./components/PlDataTable/state-migration.js";
33
- import { createPlDataTableSheet, createPlDataTableV2, isColumnHidden, isColumnOptional } from "./components/PlDataTable/table.js";
34
+ import { createPlDataTableSheet } from "./components/PlDataTable/createPlDataTableSheet.js";
35
+ import { createColumnSnapshot, createReadyColumnData } from "./columns/column_snapshot.js";
36
+ import { ArrayColumnProvider, OutputColumnProvider, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./columns/column_snapshot_provider.js";
37
+ import { columnSelectorsToPredicate, matchColumn, matchColumnSelectors, normalizeSelectors } from "./columns/column_selector.js";
38
+ import { ColumnCollectionBuilder } from "./columns/column_collection_builder.js";
39
+ import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./columns/ctx_column_sources.js";
40
+ import "./columns/index.js";
41
+ import { createPlDataTableV3, isColumnHidden, isColumnOptional } from "./components/PlDataTable/createPlDataTable/createPlDataTableV3.js";
42
+ import { createPlDataTableV2 } from "./components/PlDataTable/createPlDataTable/createPlDataTableV2.js";
43
+ import { createPlDataTable } from "./components/PlDataTable/createPlDataTable/index.js";
34
44
  import { createRowSelectionColumn } from "./components/PlMultiSequenceAlignment.js";
35
45
  import { createPlSelectionModel } from "./components/PlSelectionModel.js";
36
46
  import "./components/index.js";
37
47
  import { PFrameImpl } from "./pframe.js";
48
+ import { writeLabelsToSpecs } from "./labels/write_labels_to_specs.js";
49
+ import "./labels/index.js";
38
50
  import { fromPlOption, fromPlRef } from "./ref_util.js";
39
51
  import { getPlatformaApiVersion, getRawPlatformaInstance } from "./raw_globals.js";
40
52
  import { convertFilterSpecsToExpressionSpecs } from "./annotations/converter.js";
@@ -46,4 +58,4 @@ export * from "@milaboratories/pl-model-common"
46
58
 
47
59
  export * from "@milaboratories/pl-error-like"
48
60
 
49
- export { Args, BLOCK_STORAGE_FACADE_VERSION, BlockModel, BlockModelV3, BlockRenderCtx, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, CurrentSdkInfo, DataModel, DataModelBuilder, FutureRef, It, internal_exports as JsRenderInternal, MainOutputs, OutputError, PColumnCollection, PFrameImpl, PlatformaSDKVersion, PluginDataModel, PluginDataModelBuilder, PluginInstance, PluginModel, PluginRenderCtx, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RenderCtxBase, RenderCtxLegacy, ResultPool, StagingOutputs, Trace, TraceEntry, TreeNodeAccessor, UiState, allPColumnsReady, and, compileAnnotationScript, compileFilter, compileFilters, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, createBlockStorage, createDefaultPTableParams, createPFrameForGraphs, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlSelectionModel, createRowSelectionColumn, deriveDataFromStorage, deriveLabels, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterSpecToSpecQueryExpr, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
61
+ export { Args, ArrayColumnProvider, BLOCK_STORAGE_FACADE_VERSION, BlockModel, BlockModelV3, BlockRenderCtx, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, ColumnCollectionBuilder, CurrentSdkInfo, DataModel, DataModelBuilder, FutureRef, It, internal_exports as JsRenderInternal, MainOutputs, OutputColumnProvider, OutputError, PColumnCollection, PFrameImpl, PlatformaSDKVersion, PluginDataModel, PluginDataModelBuilder, PluginInstance, PluginModel, PluginRenderCtx, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RenderCtxBase, RenderCtxLegacy, ResultPool, ResultPoolColumnSnapshotProvider, SnapshotColumnProvider, StagingOutputs, TreeNodeAccessor, UiState, allPColumnsReady, and, collectCtxColumnSnapshotProviders, columnSelectorsToPredicate, compileAnnotationScript, compileFilter, compileFilters, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, createBlockStorage, createColumnSnapshot, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createReadyColumnData, createRowSelectionColumn, deriveDataFromStorage, deriveDistinctLabels, deriveLabels, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterSpecToSpecQueryExpr, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isColumnSnapshotProvider, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, matchColumn, matchColumnSelectors, migrateBlockStorage, normalizeBlockStorage, normalizeSelectors, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, toColumnSnapshotProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs, writeLabelsToSpecs };
@@ -0,0 +1,156 @@
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
3
+ let _milaboratories_helpers = require("@milaboratories/helpers");
4
+
5
+ //#region src/labels/derive_distinct_labels.ts
6
+ const DISTANCE_PENALTY = .001;
7
+ const LABEL_TYPE = "__LABEL__";
8
+ const LABEL_TYPE_FULL = "__LABEL__@1";
9
+ function deriveDistinctLabels(values, options = {}) {
10
+ const forceTraceElements = options.forceTraceElements !== void 0 && options.forceTraceElements.length > 0 ? new Set(options.forceTraceElements) : void 0;
11
+ const separator = options.separator ?? " / ";
12
+ const records = values.map((v) => enrichRecord(v, options));
13
+ const stats = collectTypeStats(records);
14
+ const { mainTypes, secondaryTypes } = classifyTypes(stats, values.length);
15
+ const build = (typeSet, force) => buildLabels(records, typeSet, forceTraceElements, separator, force);
16
+ if (mainTypes.length === 0) {
17
+ if (secondaryTypes.length !== 0) throw new Error("Non-empty secondary types list while main types list is empty.");
18
+ return build(new Set(LABEL_TYPE_FULL), true);
19
+ }
20
+ let includedCount = 0;
21
+ let additionalType = -1;
22
+ while (includedCount < mainTypes.length) {
23
+ const currentSet = /* @__PURE__ */ new Set();
24
+ if (options.includeNativeLabel) currentSet.add(LABEL_TYPE_FULL);
25
+ for (let i = 0; i < includedCount; ++i) currentSet.add(mainTypes[i]);
26
+ if (additionalType >= 0) currentSet.add(mainTypes[additionalType]);
27
+ const candidateResult = build(currentSet, false);
28
+ if (candidateResult !== void 0 && countUniqueLabels(candidateResult) === values.length) return build(minimizeTypeSet(currentSet, records, stats, forceTraceElements, options, separator), false) ?? (0, _milaboratories_helpers.throwError)("Failed to derive unique labels");
29
+ additionalType++;
30
+ if (additionalType >= mainTypes.length) {
31
+ includedCount++;
32
+ additionalType = includedCount;
33
+ }
34
+ }
35
+ return build(minimizeTypeSet(new Set([...mainTypes, ...secondaryTypes]), records, stats, forceTraceElements, options, separator), true) ?? (0, _milaboratories_helpers.throwError)("Failed to derive unique labels");
36
+ }
37
+ function extractSpecAndTrace(entry) {
38
+ if ("spec" in entry && typeof entry.spec === "object") return {
39
+ spec: entry.spec,
40
+ prefixTrace: entry.prefixTrace,
41
+ suffixTrace: entry.suffixTrace
42
+ };
43
+ return {
44
+ spec: entry,
45
+ prefixTrace: void 0,
46
+ suffixTrace: void 0
47
+ };
48
+ }
49
+ function buildFullTrace(trace) {
50
+ const result = [];
51
+ const occurrences = /* @__PURE__ */ new Map();
52
+ for (let i = trace.length - 1; i >= 0; --i) {
53
+ const entry = trace[i];
54
+ const occurrenceIndex = (occurrences.get(entry.type) ?? 0) + 1;
55
+ occurrences.set(entry.type, occurrenceIndex);
56
+ result.push({
57
+ ...entry,
58
+ fullType: `${entry.type}@${occurrenceIndex}`,
59
+ occurrenceIndex
60
+ });
61
+ }
62
+ result.reverse();
63
+ return result;
64
+ }
65
+ function enrichRecord(value, options) {
66
+ const { spec, prefixTrace, suffixTrace } = extractSpecAndTrace(value);
67
+ const label = (0, _milaboratories_pl_model_common.readAnnotation)(spec, _milaboratories_pl_model_common.Annotation.Label);
68
+ const traceStr = (0, _milaboratories_pl_model_common.readAnnotation)(spec, _milaboratories_pl_model_common.Annotation.Trace);
69
+ const baseTrace = traceStr ? (0, _milaboratories_pl_model_common.parseJson)(traceStr) ?? [] : [];
70
+ const trace = [
71
+ ...prefixTrace ?? [],
72
+ ...baseTrace,
73
+ ...suffixTrace ?? []
74
+ ];
75
+ if (label !== void 0) {
76
+ const labelEntry = {
77
+ label,
78
+ type: LABEL_TYPE,
79
+ importance: -2
80
+ };
81
+ if (options.addLabelAsSuffix) trace.push(labelEntry);
82
+ else trace.splice(0, 0, labelEntry);
83
+ }
84
+ return {
85
+ value,
86
+ fullTrace: buildFullTrace(trace)
87
+ };
88
+ }
89
+ function collectTypeStats(records) {
90
+ const importances = /* @__PURE__ */ new Map();
91
+ const countByType = /* @__PURE__ */ new Map();
92
+ for (const record of records) for (let i = 0; i < record.fullTrace.length; i++) {
93
+ const { fullType, importance: rawImportance } = record.fullTrace[i];
94
+ const importance = rawImportance ?? 0;
95
+ const distance = (record.fullTrace.length - i) * DISTANCE_PENALTY;
96
+ countByType.set(fullType, (countByType.get(fullType) ?? 0) + 1);
97
+ importances.set(fullType, Math.max(importances.get(fullType) ?? Number.NEGATIVE_INFINITY, importance - distance));
98
+ }
99
+ return {
100
+ importances,
101
+ countByType
102
+ };
103
+ }
104
+ function classifyTypes(stats, totalRecords) {
105
+ const sorted = [...stats.importances].sort(([, i1], [, i2]) => i2 - i1);
106
+ const mainTypes = [];
107
+ const secondaryTypes = [];
108
+ for (const [typeName] of sorted) if (typeName.endsWith("@1") || stats.countByType.get(typeName) === totalRecords) mainTypes.push(typeName);
109
+ else secondaryTypes.push(typeName);
110
+ return {
111
+ mainTypes,
112
+ secondaryTypes
113
+ };
114
+ }
115
+ function buildLabels(records, includedTypes, forceTraceElements, separator, force) {
116
+ const result = [];
117
+ for (const r of records) {
118
+ const parts = [];
119
+ for (const ft of r.fullTrace) if (includedTypes.has(ft.fullType) || forceTraceElements?.has(ft.type)) parts.push(ft.label);
120
+ if (parts.length === 0) {
121
+ if (!force) return void 0;
122
+ result.push({
123
+ label: "Unlabeled",
124
+ value: r.value
125
+ });
126
+ continue;
127
+ }
128
+ result.push({
129
+ label: parts.join(separator),
130
+ value: r.value
131
+ });
132
+ }
133
+ return result;
134
+ }
135
+ function countUniqueLabels(result) {
136
+ if (result === void 0) return 0;
137
+ return new Set(result.map((c) => c.label)).size;
138
+ }
139
+ function minimizeTypeSet(typeSet, records, stats, forceTraceElements, options, separator) {
140
+ const initialResult = buildLabels(records, typeSet, forceTraceElements, separator, false);
141
+ if (initialResult === void 0) return typeSet;
142
+ const targetCardinality = countUniqueLabels(initialResult);
143
+ const result = new Set(typeSet);
144
+ const removable = [...result].filter((t) => !forceTraceElements?.has(t.split("@")[0]) && !(options.includeNativeLabel && t === LABEL_TYPE_FULL)).sort((a, b) => (stats.importances.get(a) ?? 0) - (stats.importances.get(b) ?? 0));
145
+ for (const typeToRemove of removable) {
146
+ const candidate = new Set(result);
147
+ candidate.delete(typeToRemove);
148
+ const candidateResult = buildLabels(records, candidate, forceTraceElements, separator, false);
149
+ if (candidateResult !== void 0 && countUniqueLabels(candidateResult) >= targetCardinality) result.delete(typeToRemove);
150
+ }
151
+ return result;
152
+ }
153
+
154
+ //#endregion
155
+ exports.deriveDistinctLabels = deriveDistinctLabels;
156
+ //# sourceMappingURL=derive_distinct_labels.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive_distinct_labels.cjs","names":["Annotation"],"sources":["../../src/labels/derive_distinct_labels.ts"],"sourcesContent":["import {\n Annotation,\n parseJson,\n readAnnotation,\n type CanonicalizedJson,\n type PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport { throwError } from \"@milaboratories/helpers\";\n\nconst DISTANCE_PENALTY = 0.001;\nconst LABEL_TYPE = \"__LABEL__\";\nconst LABEL_TYPE_FULL = \"__LABEL__@1\";\n\nexport type WithLabel<T> = {\n value: T;\n label: string;\n};\n\ntype TraceEntry = {\n id?: string;\n type: string;\n label: string;\n importance?: number;\n};\n\nexport type Trace = TraceEntry[];\n\nexport type Entry =\n | PObjectSpec\n | { spec: PObjectSpec; prefixTrace?: TraceEntry[]; suffixTrace?: TraceEntry[] };\n\nexport type DeriveLabelsOptions = {\n /** Separator to use between label parts (\" / \" by default) */\n separator?: string;\n /** If true, label will be added as suffix (at the end of the generated label). By default label added as a prefix. */\n addLabelAsSuffix?: boolean;\n /** Force inclusion of native column label */\n includeNativeLabel?: boolean;\n /** Trace elements list that will be forced to be included in the label. */\n forceTraceElements?: string[];\n};\n\nexport function deriveDistinctLabels<T extends Entry>(\n values: T[],\n options: DeriveLabelsOptions = {},\n): WithLabel<T>[] {\n const forceTraceElements =\n options.forceTraceElements !== undefined && options.forceTraceElements.length > 0\n ? new Set(options.forceTraceElements)\n : undefined;\n const separator = options.separator ?? \" / \";\n\n // Phase 1: enrich each value with parsed trace\n const records = values.map((v) => enrichRecord(v, options));\n\n // Phase 2: collect global type statistics\n const stats = collectTypeStats(records);\n\n // Phase 3: classify types into main (present everywhere) and secondary\n const { mainTypes, secondaryTypes } = classifyTypes(stats, values.length);\n\n const build = (typeSet: Set<string>, force: boolean) =>\n buildLabels(records, typeSet, forceTraceElements, separator, force);\n\n if (mainTypes.length === 0) {\n if (secondaryTypes.length !== 0)\n throw new Error(\"Non-empty secondary types list while main types list is empty.\");\n return build(new Set(LABEL_TYPE_FULL), true)!;\n }\n\n // Phase 4: search for minimal type set that produces unique labels\n //\n // includedCount = 2\n // * *\n // T0 T1 T2 T3 T4 T5\n // *\n // additionalType = 3\n //\n // Resulting set: T0, T1, T3\n //\n let includedCount = 0;\n let additionalType = -1;\n while (includedCount < mainTypes.length) {\n const currentSet = new Set<string>();\n if (options.includeNativeLabel) currentSet.add(LABEL_TYPE_FULL);\n for (let i = 0; i < includedCount; ++i) currentSet.add(mainTypes[i]);\n if (additionalType >= 0) currentSet.add(mainTypes[additionalType]);\n\n const candidateResult = build(currentSet, false);\n if (candidateResult !== undefined && countUniqueLabels(candidateResult) === values.length) {\n const minimized = minimizeTypeSet(\n currentSet,\n records,\n stats,\n forceTraceElements,\n options,\n separator,\n );\n return build(minimized, false) ?? throwError(\"Failed to derive unique labels\");\n }\n\n additionalType++;\n if (additionalType >= mainTypes.length) {\n includedCount++;\n additionalType = includedCount;\n }\n }\n\n // Fallback: include all types, then minimize\n const fallbackSet = new Set([...mainTypes, ...secondaryTypes]);\n const minimized = minimizeTypeSet(\n fallbackSet,\n records,\n stats,\n forceTraceElements,\n options,\n separator,\n );\n return build(minimized, true) ?? throwError(\"Failed to derive unique labels\");\n}\n\n// --- Pure helpers ---\ntype FullTraceEntry = TraceEntry & { fullType: string; occurrenceIndex: number };\n\ntype EnrichedRecord<T> = {\n value: T;\n fullTrace: FullTraceEntry[];\n};\n\nfunction extractSpecAndTrace(entry: Entry): {\n spec: PObjectSpec;\n prefixTrace: TraceEntry[] | undefined;\n suffixTrace: TraceEntry[] | undefined;\n} {\n if (\"spec\" in entry && typeof entry.spec === \"object\") {\n return { spec: entry.spec, prefixTrace: entry.prefixTrace, suffixTrace: entry.suffixTrace };\n }\n return { spec: entry as PObjectSpec, prefixTrace: undefined, suffixTrace: undefined };\n}\n\nfunction buildFullTrace(trace: TraceEntry[]): FullTraceEntry[] {\n const result: FullTraceEntry[] = [];\n const occurrences = new Map<string, number>();\n\n for (let i = trace.length - 1; i >= 0; --i) {\n const entry = trace[i];\n const occurrenceIndex = (occurrences.get(entry.type) ?? 0) + 1;\n occurrences.set(entry.type, occurrenceIndex);\n result.push({\n ...entry,\n fullType: `${entry.type}@${occurrenceIndex}`,\n occurrenceIndex,\n });\n }\n\n result.reverse();\n return result;\n}\n\nfunction enrichRecord<T extends Entry>(value: T, options: DeriveLabelsOptions): EnrichedRecord<T> {\n const { spec, prefixTrace, suffixTrace } = extractSpecAndTrace(value);\n\n const label = readAnnotation(spec, Annotation.Label);\n const traceStr = readAnnotation(spec, Annotation.Trace) as\n | CanonicalizedJson<TraceEntry[]>\n | undefined;\n const baseTrace: Trace = traceStr ? (parseJson<Trace>(traceStr) ?? []) : [];\n const trace = [...(prefixTrace ?? []), ...baseTrace, ...(suffixTrace ?? [])];\n\n if (label !== undefined) {\n const labelEntry = { label, type: LABEL_TYPE, importance: -2 };\n if (options.addLabelAsSuffix) trace.push(labelEntry);\n else trace.splice(0, 0, labelEntry);\n }\n\n return { value, fullTrace: buildFullTrace(trace) };\n}\n\ntype TypeStats = {\n importances: Map<string, number>;\n countByType: Map<string, number>;\n};\n\nfunction collectTypeStats<T>(records: EnrichedRecord<T>[]): TypeStats {\n const importances = new Map<string, number>();\n const countByType = new Map<string, number>();\n\n for (const record of records) {\n for (let i = 0; i < record.fullTrace.length; i++) {\n const { fullType, importance: rawImportance } = record.fullTrace[i];\n const importance = rawImportance ?? 0;\n const distance = (record.fullTrace.length - i) * DISTANCE_PENALTY;\n\n countByType.set(fullType, (countByType.get(fullType) ?? 0) + 1);\n importances.set(\n fullType,\n Math.max(importances.get(fullType) ?? Number.NEGATIVE_INFINITY, importance - distance),\n );\n }\n }\n\n return { importances, countByType };\n}\n\nfunction classifyTypes(\n stats: TypeStats,\n totalRecords: number,\n): { mainTypes: string[]; secondaryTypes: string[] } {\n const sorted = [...stats.importances].sort(([, i1], [, i2]) => i2 - i1);\n\n const mainTypes: string[] = [];\n const secondaryTypes: string[] = [];\n\n for (const [typeName] of sorted) {\n if (typeName.endsWith(\"@1\") || stats.countByType.get(typeName) === totalRecords)\n mainTypes.push(typeName);\n else secondaryTypes.push(typeName);\n }\n\n return { mainTypes, secondaryTypes };\n}\n\nfunction buildLabels<T>(\n records: EnrichedRecord<T>[],\n includedTypes: Set<string>,\n forceTraceElements: Set<string> | undefined,\n separator: string,\n force: boolean,\n): WithLabel<T>[] | undefined {\n const result: WithLabel<T>[] = [];\n\n for (const r of records) {\n const parts: string[] = [];\n for (const ft of r.fullTrace) {\n if (includedTypes.has(ft.fullType) || forceTraceElements?.has(ft.type)) {\n parts.push(ft.label);\n }\n }\n\n if (parts.length === 0) {\n if (!force) return undefined;\n result.push({ label: \"Unlabeled\", value: r.value });\n continue;\n }\n\n result.push({ label: parts.join(separator), value: r.value });\n }\n\n return result;\n}\n\nfunction countUniqueLabels<T>(result: WithLabel<T>[] | undefined): number {\n if (result === undefined) return 0;\n return new Set(result.map((c) => c.label)).size;\n}\n\nfunction minimizeTypeSet<T>(\n typeSet: Set<string>,\n records: EnrichedRecord<T>[],\n stats: TypeStats,\n forceTraceElements: Set<string> | undefined,\n options: DeriveLabelsOptions,\n separator: string,\n): Set<string> {\n const initialResult = buildLabels(records, typeSet, forceTraceElements, separator, false);\n if (initialResult === undefined) return typeSet;\n\n const targetCardinality = countUniqueLabels(initialResult);\n const result = new Set(typeSet);\n\n const removable = [...result]\n .filter(\n (t) =>\n !forceTraceElements?.has(t.split(\"@\")[0]) &&\n !(options.includeNativeLabel && t === LABEL_TYPE_FULL),\n )\n .sort((a, b) => (stats.importances.get(a) ?? 0) - (stats.importances.get(b) ?? 0));\n\n for (const typeToRemove of removable) {\n const candidate = new Set(result);\n candidate.delete(typeToRemove);\n const candidateResult = buildLabels(records, candidate, forceTraceElements, separator, false);\n if (candidateResult !== undefined && countUniqueLabels(candidateResult) >= targetCardinality) {\n result.delete(typeToRemove);\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { PObjectSpec } from "@milaboratories/pl-model-common";
2
+
3
+ //#region src/labels/derive_distinct_labels.d.ts
4
+ type WithLabel<T> = {
5
+ value: T;
6
+ label: string;
7
+ };
8
+ type TraceEntry = {
9
+ id?: string;
10
+ type: string;
11
+ label: string;
12
+ importance?: number;
13
+ };
14
+ type Trace = TraceEntry[];
15
+ type Entry = PObjectSpec | {
16
+ spec: PObjectSpec;
17
+ prefixTrace?: TraceEntry[];
18
+ suffixTrace?: TraceEntry[];
19
+ };
20
+ type DeriveLabelsOptions = {
21
+ /** Separator to use between label parts (" / " by default) */separator?: string; /** If true, label will be added as suffix (at the end of the generated label). By default label added as a prefix. */
22
+ addLabelAsSuffix?: boolean; /** Force inclusion of native column label */
23
+ includeNativeLabel?: boolean; /** Trace elements list that will be forced to be included in the label. */
24
+ forceTraceElements?: string[];
25
+ };
26
+ declare function deriveDistinctLabels<T extends Entry>(values: T[], options?: DeriveLabelsOptions): WithLabel<T>[];
27
+ //#endregion
28
+ export { DeriveLabelsOptions, Entry, Trace, WithLabel, deriveDistinctLabels };
29
+ //# sourceMappingURL=derive_distinct_labels.d.ts.map