@platforma-sdk/model 1.79.27 → 1.80.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 (356) hide show
  1. package/dist/block_model.d.ts +2 -0
  2. package/dist/block_model.d.ts.map +1 -1
  3. package/dist/columns/column.cjs +28 -0
  4. package/dist/columns/column.cjs.map +1 -0
  5. package/dist/columns/column.d.ts +30 -0
  6. package/dist/columns/column.d.ts.map +1 -0
  7. package/dist/columns/column.js +27 -0
  8. package/dist/columns/column.js.map +1 -0
  9. package/dist/columns/column_lazy.cjs +248 -0
  10. package/dist/columns/column_lazy.cjs.map +1 -0
  11. package/dist/columns/column_lazy.d.ts +137 -0
  12. package/dist/columns/column_lazy.d.ts.map +1 -0
  13. package/dist/columns/column_lazy.js +245 -0
  14. package/dist/columns/column_lazy.js.map +1 -0
  15. package/dist/columns/column_providers/index.cjs +62 -0
  16. package/dist/columns/column_providers/index.cjs.map +1 -0
  17. package/dist/columns/column_providers/index.d.ts +30 -0
  18. package/dist/columns/column_providers/index.d.ts.map +1 -0
  19. package/dist/columns/column_providers/index.js +53 -0
  20. package/dist/columns/column_providers/index.js.map +1 -0
  21. package/dist/columns/column_providers/providers.cjs +123 -0
  22. package/dist/columns/column_providers/providers.cjs.map +1 -0
  23. package/dist/columns/column_providers/providers.d.ts +75 -0
  24. package/dist/columns/column_providers/providers.d.ts.map +1 -0
  25. package/dist/columns/column_providers/providers.js +118 -0
  26. package/dist/columns/column_providers/providers.js.map +1 -0
  27. package/dist/columns/column_providers/types.d.ts +23 -0
  28. package/dist/columns/column_providers/types.d.ts.map +1 -0
  29. package/dist/columns/column_recipes/column_discovered_recipe.cjs +180 -0
  30. package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -0
  31. package/dist/columns/column_recipes/column_discovered_recipe.d.ts +120 -0
  32. package/dist/columns/column_recipes/column_discovered_recipe.d.ts.map +1 -0
  33. package/dist/columns/column_recipes/column_discovered_recipe.js +180 -0
  34. package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -0
  35. package/dist/columns/column_recipes/column_filtered_recipe.cjs +133 -0
  36. package/dist/columns/column_recipes/column_filtered_recipe.cjs.map +1 -0
  37. package/dist/columns/column_recipes/column_filtered_recipe.d.ts +75 -0
  38. package/dist/columns/column_recipes/column_filtered_recipe.d.ts.map +1 -0
  39. package/dist/columns/column_recipes/column_filtered_recipe.js +133 -0
  40. package/dist/columns/column_recipes/column_filtered_recipe.js.map +1 -0
  41. package/dist/columns/column_recipes/column_overrided_recipe.cjs +101 -0
  42. package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -0
  43. package/dist/columns/column_recipes/column_overrided_recipe.d.ts +73 -0
  44. package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -0
  45. package/dist/columns/column_recipes/column_overrided_recipe.js +101 -0
  46. package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -0
  47. package/dist/columns/column_recipes/index.cjs +72 -0
  48. package/dist/columns/column_recipes/index.cjs.map +1 -0
  49. package/dist/columns/column_recipes/index.d.ts +52 -0
  50. package/dist/columns/column_recipes/index.d.ts.map +1 -0
  51. package/dist/columns/column_recipes/index.js +68 -0
  52. package/dist/columns/column_recipes/index.js.map +1 -0
  53. package/dist/columns/column_recipes/leaf_rebrand.cjs +22 -0
  54. package/dist/columns/column_recipes/leaf_rebrand.cjs.map +1 -0
  55. package/dist/columns/column_recipes/leaf_rebrand.js +22 -0
  56. package/dist/columns/column_recipes/leaf_rebrand.js.map +1 -0
  57. package/dist/columns/column_recipes/types.d.ts +101 -0
  58. package/dist/columns/column_recipes/types.d.ts.map +1 -0
  59. package/dist/columns/columns_collection.cjs +124 -0
  60. package/dist/columns/columns_collection.cjs.map +1 -0
  61. package/dist/columns/columns_collection.d.ts +64 -0
  62. package/dist/columns/columns_collection.d.ts.map +1 -0
  63. package/dist/columns/columns_collection.js +122 -0
  64. package/dist/columns/columns_collection.js.map +1 -0
  65. package/dist/columns/derive_axis_values_labels.cjs +76 -0
  66. package/dist/columns/derive_axis_values_labels.cjs.map +1 -0
  67. package/dist/columns/derive_axis_values_labels.d.ts +30 -0
  68. package/dist/columns/derive_axis_values_labels.d.ts.map +1 -0
  69. package/dist/columns/derive_axis_values_labels.js +76 -0
  70. package/dist/columns/derive_axis_values_labels.js.map +1 -0
  71. package/dist/columns/expand_by_partition.cjs +53 -56
  72. package/dist/columns/expand_by_partition.cjs.map +1 -1
  73. package/dist/columns/expand_by_partition.d.ts +22 -18
  74. package/dist/columns/expand_by_partition.d.ts.map +1 -1
  75. package/dist/columns/expand_by_partition.js +55 -58
  76. package/dist/columns/expand_by_partition.js.map +1 -1
  77. package/dist/columns/index.cjs +44 -18
  78. package/dist/columns/index.d.ts +15 -7
  79. package/dist/columns/index.js +12 -6
  80. package/dist/columns/utils.cjs +186 -0
  81. package/dist/columns/utils.cjs.map +1 -0
  82. package/dist/columns/utils.d.ts +96 -0
  83. package/dist/columns/utils.d.ts.map +1 -0
  84. package/dist/columns/utils.js +179 -0
  85. package/dist/columns/utils.js.map +1 -0
  86. package/dist/components/PFrameForGraphs.cjs +1 -0
  87. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  88. package/dist/components/PFrameForGraphs.d.ts +1 -1
  89. package/dist/components/PFrameForGraphs.d.ts.map +1 -1
  90. package/dist/components/PFrameForGraphs.js +1 -0
  91. package/dist/components/PFrameForGraphs.js.map +1 -1
  92. package/dist/components/PlDataTable/columnResolver.cjs +28 -0
  93. package/dist/components/PlDataTable/columnResolver.cjs.map +1 -0
  94. package/dist/components/PlDataTable/columnResolver.js +28 -0
  95. package/dist/components/PlDataTable/columnResolver.js.map +1 -0
  96. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +4 -2
  97. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
  98. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +4 -2
  99. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
  100. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +20 -25
  101. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
  102. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +20 -25
  103. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
  104. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +58 -26
  105. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
  106. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
  107. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
  108. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +60 -28
  109. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
  110. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +224 -194
  111. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
  112. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +13 -16
  113. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
  114. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +228 -198
  115. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
  116. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +40 -98
  117. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
  118. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -8
  119. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
  120. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +40 -98
  121. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
  122. package/dist/components/PlDataTable/createPlDataTable/index.cjs +1 -1
  123. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
  124. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
  125. package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
  126. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
  127. package/dist/components/PlDataTable/createPlDataTable/utils.cjs +51 -169
  128. package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
  129. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
  130. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
  131. package/dist/components/PlDataTable/createPlDataTable/utils.js +52 -166
  132. package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
  133. package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
  134. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
  135. package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
  136. package/dist/components/PlDataTable/index.cjs +1 -1
  137. package/dist/components/PlDataTable/index.d.ts +4 -4
  138. package/dist/components/PlDataTable/index.js +2 -2
  139. package/dist/components/PlDataTable/labels.cjs +0 -1
  140. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  141. package/dist/components/PlDataTable/labels.js +0 -1
  142. package/dist/components/PlDataTable/labels.js.map +1 -1
  143. package/dist/components/PlDataTable/state-migration.cjs +107 -10
  144. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  145. package/dist/components/PlDataTable/state-migration.d.ts +5 -4
  146. package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
  147. package/dist/components/PlDataTable/state-migration.js +107 -10
  148. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  149. package/dist/components/PlDataTable/typesV7.d.ts +1 -36
  150. package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
  151. package/dist/components/PlDataTable/typesV8.d.ts +123 -0
  152. package/dist/components/PlDataTable/typesV8.d.ts.map +1 -0
  153. package/dist/components/PlDatasetSelector/build_dataset_options.cjs +27 -34
  154. package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
  155. package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -1
  156. package/dist/components/PlDatasetSelector/build_dataset_options.js +27 -34
  157. package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
  158. package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +28 -33
  159. package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
  160. package/dist/components/PlDatasetSelector/enrichment_discovery.js +29 -34
  161. package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
  162. package/dist/components/PlDatasetSelector/filter_discovery.cjs +27 -17
  163. package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
  164. package/dist/components/PlDatasetSelector/filter_discovery.d.ts +24 -10
  165. package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
  166. package/dist/components/PlDatasetSelector/filter_discovery.js +28 -18
  167. package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
  168. package/dist/components/PlDatasetSelector/index.d.ts +2 -2
  169. package/dist/components/index.cjs +1 -1
  170. package/dist/components/index.d.ts +5 -5
  171. package/dist/components/index.js +2 -2
  172. package/dist/filters/converters/filterToQuery.cjs +5 -6
  173. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  174. package/dist/filters/converters/filterToQuery.d.ts +12 -3
  175. package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
  176. package/dist/filters/converters/filterToQuery.js +5 -6
  177. package/dist/filters/converters/filterToQuery.js.map +1 -1
  178. package/dist/filters/converters/index.d.ts +2 -2
  179. package/dist/filters/index.d.ts +2 -2
  180. package/dist/index.cjs +64 -35
  181. package/dist/index.d.ts +23 -15
  182. package/dist/index.js +15 -9
  183. package/dist/labels/derive_distinct_labels.cjs.map +1 -1
  184. package/dist/labels/derive_distinct_labels.d.ts +1 -2
  185. package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
  186. package/dist/labels/derive_distinct_labels.js.map +1 -1
  187. package/dist/labels/derive_distinct_tooltips.cjs +1 -1
  188. package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
  189. package/dist/labels/derive_distinct_tooltips.d.ts +6 -3
  190. package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
  191. package/dist/labels/derive_distinct_tooltips.js +1 -1
  192. package/dist/labels/derive_distinct_tooltips.js.map +1 -1
  193. package/dist/package.cjs +1 -1
  194. package/dist/package.js +1 -1
  195. package/dist/pframe_utils/axes.cjs.map +1 -1
  196. package/dist/pframe_utils/axes.d.ts +2 -2
  197. package/dist/pframe_utils/axes.d.ts.map +1 -1
  198. package/dist/pframe_utils/axes.js.map +1 -1
  199. package/dist/pframe_utils/columns.cjs +6 -10
  200. package/dist/pframe_utils/columns.cjs.map +1 -1
  201. package/dist/pframe_utils/columns.d.ts +4 -4
  202. package/dist/pframe_utils/columns.d.ts.map +1 -1
  203. package/dist/pframe_utils/columns.js +7 -11
  204. package/dist/pframe_utils/columns.js.map +1 -1
  205. package/dist/pframe_utils/index.cjs.map +1 -1
  206. package/dist/pframe_utils/index.d.ts +1 -1
  207. package/dist/pframe_utils/index.d.ts.map +1 -1
  208. package/dist/pframe_utils/index.js.map +1 -1
  209. package/dist/render/accessor.cjs +15 -16
  210. package/dist/render/accessor.cjs.map +1 -1
  211. package/dist/render/accessor.d.ts +7 -10
  212. package/dist/render/accessor.d.ts.map +1 -1
  213. package/dist/render/accessor.js +15 -16
  214. package/dist/render/accessor.js.map +1 -1
  215. package/dist/render/api.cjs +34 -36
  216. package/dist/render/api.cjs.map +1 -1
  217. package/dist/render/api.d.ts +30 -20
  218. package/dist/render/api.d.ts.map +1 -1
  219. package/dist/render/api.js +35 -38
  220. package/dist/render/api.js.map +1 -1
  221. package/dist/render/index.cjs +4 -0
  222. package/dist/render/index.d.ts +4 -4
  223. package/dist/render/index.js +3 -2
  224. package/dist/render/internal.cjs +3 -2
  225. package/dist/render/internal.cjs.map +1 -1
  226. package/dist/render/internal.d.ts +17 -9
  227. package/dist/render/internal.d.ts.map +1 -1
  228. package/dist/render/internal.js +3 -2
  229. package/dist/render/internal.js.map +1 -1
  230. package/dist/render/util/axis_filtering.cjs.map +1 -1
  231. package/dist/render/util/axis_filtering.js.map +1 -1
  232. package/dist/render/util/column_collection.cjs +6 -4
  233. package/dist/render/util/column_collection.cjs.map +1 -1
  234. package/dist/render/util/column_collection.d.ts +9 -9
  235. package/dist/render/util/column_collection.d.ts.map +1 -1
  236. package/dist/render/util/column_collection.js +6 -4
  237. package/dist/render/util/column_collection.js.map +1 -1
  238. package/dist/render/util/index.d.ts +2 -2
  239. package/dist/render/util/pcolumn_data.cjs +1 -1
  240. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  241. package/dist/render/util/pcolumn_data.d.ts +3 -3
  242. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  243. package/dist/render/util/pcolumn_data.js +1 -1
  244. package/dist/render/util/pcolumn_data.js.map +1 -1
  245. package/dist/services/block_services.cjs +2 -1
  246. package/dist/services/block_services.cjs.map +1 -1
  247. package/dist/services/block_services.d.ts +1 -0
  248. package/dist/services/block_services.d.ts.map +1 -1
  249. package/dist/services/block_services.js +2 -1
  250. package/dist/services/block_services.js.map +1 -1
  251. package/dist/services/get_services.cjs +2 -2
  252. package/dist/services/get_services.cjs.map +1 -1
  253. package/dist/services/get_services.d.ts +4 -1
  254. package/dist/services/get_services.d.ts.map +1 -1
  255. package/dist/services/get_services.js +2 -2
  256. package/dist/services/get_services.js.map +1 -1
  257. package/package.json +10 -8
  258. package/src/columns/__test_helpers__/collection_driver.ts +197 -0
  259. package/src/columns/__test_helpers__/stub_registry.ts +134 -0
  260. package/src/columns/column.ts +46 -0
  261. package/src/columns/column_lazy.test.ts +201 -0
  262. package/src/columns/column_lazy.ts +311 -0
  263. package/src/columns/column_providers/index.ts +78 -0
  264. package/src/columns/column_providers/providers.ts +193 -0
  265. package/src/columns/column_providers/types.ts +24 -0
  266. package/src/columns/column_recipes/column_discovered_recipe.ts +231 -0
  267. package/src/columns/column_recipes/column_filtered_recipe.ts +184 -0
  268. package/src/columns/column_recipes/column_overrided_recipe.ts +146 -0
  269. package/src/columns/column_recipes/column_recipes.test.ts +681 -0
  270. package/src/columns/column_recipes/index.ts +127 -0
  271. package/src/columns/column_recipes/leaf_rebrand.ts +28 -0
  272. package/src/columns/column_recipes/types.ts +113 -0
  273. package/src/columns/columns_collection.test.ts +164 -0
  274. package/src/columns/columns_collection.ts +170 -0
  275. package/src/columns/derive_axis_values_labels.ts +98 -0
  276. package/src/columns/expand_by_partition.test.ts +146 -110
  277. package/src/columns/expand_by_partition.ts +72 -84
  278. package/src/columns/index.ts +7 -5
  279. package/src/columns/utils.test.ts +249 -0
  280. package/src/columns/utils.ts +226 -0
  281. package/src/components/PFrameForGraphs.ts +3 -1
  282. package/src/components/PlAnnotations/filters_ui.test.ts +46 -47
  283. package/src/components/PlDataTable/columnResolver.test.ts +122 -0
  284. package/src/components/PlDataTable/columnResolver.ts +57 -0
  285. package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +9 -9
  286. package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +31 -63
  287. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +85 -58
  288. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +316 -354
  289. package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +48 -144
  290. package/src/components/PlDataTable/createPlDataTable/index.ts +2 -2
  291. package/src/components/PlDataTable/createPlDataTable/utils.test.ts +60 -69
  292. package/src/components/PlDataTable/createPlDataTable/utils.ts +65 -173
  293. package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
  294. package/src/components/PlDataTable/index.ts +4 -2
  295. package/src/components/PlDataTable/labels.ts +4 -33
  296. package/src/components/PlDataTable/state-migration.ts +151 -22
  297. package/src/components/PlDataTable/typesV8.ts +188 -0
  298. package/src/components/PlDatasetSelector/build_dataset_options.ts +35 -60
  299. package/src/components/PlDatasetSelector/enrichment_discovery.ts +65 -61
  300. package/src/components/PlDatasetSelector/filter_discovery.test.ts +110 -72
  301. package/src/components/PlDatasetSelector/filter_discovery.ts +51 -31
  302. package/src/filters/converters/filterToQuery.test.ts +15 -8
  303. package/src/filters/converters/filterToQuery.ts +22 -9
  304. package/src/filters/converters/filterUiToExpressionImpl.test.ts +35 -36
  305. package/src/labels/derive_distinct_labels.ts +1 -1
  306. package/src/labels/derive_distinct_tooltips.test.ts +7 -4
  307. package/src/labels/derive_distinct_tooltips.ts +3 -3
  308. package/src/pframe_utils/axes.ts +2 -2
  309. package/src/pframe_utils/columns.ts +14 -23
  310. package/src/pframe_utils/index.ts +1 -1
  311. package/src/render/accessor.ts +35 -38
  312. package/src/render/api.ts +45 -61
  313. package/src/render/index.ts +2 -1
  314. package/src/render/internal.ts +43 -10
  315. package/src/render/util/axis_filtering.ts +0 -1
  316. package/src/render/util/column_collection.ts +17 -17
  317. package/src/render/util/pcolumn_data.ts +5 -9
  318. package/src/services/block_services.ts +1 -0
  319. package/src/services/get_services.ts +5 -2
  320. package/dist/columns/column_collection_builder.cjs +0 -241
  321. package/dist/columns/column_collection_builder.cjs.map +0 -1
  322. package/dist/columns/column_collection_builder.d.ts +0 -119
  323. package/dist/columns/column_collection_builder.d.ts.map +0 -1
  324. package/dist/columns/column_collection_builder.js +0 -241
  325. package/dist/columns/column_collection_builder.js.map +0 -1
  326. package/dist/columns/column_selector.cjs +0 -49
  327. package/dist/columns/column_selector.cjs.map +0 -1
  328. package/dist/columns/column_selector.d.ts +0 -33
  329. package/dist/columns/column_selector.d.ts.map +0 -1
  330. package/dist/columns/column_selector.js +0 -47
  331. package/dist/columns/column_selector.js.map +0 -1
  332. package/dist/columns/column_snapshot.cjs +0 -19
  333. package/dist/columns/column_snapshot.cjs.map +0 -1
  334. package/dist/columns/column_snapshot.d.ts +0 -39
  335. package/dist/columns/column_snapshot.d.ts.map +0 -1
  336. package/dist/columns/column_snapshot.js +0 -18
  337. package/dist/columns/column_snapshot.js.map +0 -1
  338. package/dist/columns/column_snapshot_provider.cjs +0 -137
  339. package/dist/columns/column_snapshot_provider.cjs.map +0 -1
  340. package/dist/columns/column_snapshot_provider.d.ts +0 -74
  341. package/dist/columns/column_snapshot_provider.d.ts.map +0 -1
  342. package/dist/columns/column_snapshot_provider.js +0 -133
  343. package/dist/columns/column_snapshot_provider.js.map +0 -1
  344. package/dist/columns/ctx_column_sources.cjs +0 -80
  345. package/dist/columns/ctx_column_sources.cjs.map +0 -1
  346. package/dist/columns/ctx_column_sources.d.ts +0 -30
  347. package/dist/columns/ctx_column_sources.d.ts.map +0 -1
  348. package/dist/columns/ctx_column_sources.js +0 -79
  349. package/dist/columns/ctx_column_sources.js.map +0 -1
  350. package/src/columns/column_collection_builder.test.ts +0 -484
  351. package/src/columns/column_collection_builder.ts +0 -485
  352. package/src/columns/column_selector.test.ts +0 -90
  353. package/src/columns/column_selector.ts +0 -100
  354. package/src/columns/column_snapshot.ts +0 -58
  355. package/src/columns/column_snapshot_provider.ts +0 -194
  356. package/src/columns/ctx_column_sources.ts +0 -99
@@ -13,12 +13,13 @@ function upgradePlDataTableStateV2(state) {
13
13
  ...entry,
14
14
  filtersState: []
15
15
  })),
16
- pTableParams: createDefaultPTableParams()
16
+ pTableParams: createDefaultPTableParamsV7()
17
17
  };
18
18
  if (state.version === 3) state = createPlDataTableStateV2();
19
19
  if (state.version === 4) state = migrateV4toV6(state);
20
20
  if (state.version === 5) state = migrateV5toV6(state);
21
21
  if (state.version === 6) state = migrateV6toV7(state);
22
+ if (state.version === 7) state = migrateV7toV8(state);
22
23
  return state;
23
24
  }
24
25
  /** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */
@@ -29,7 +30,7 @@ function migrateV5toV6(state) {
29
30
  ...entry,
30
31
  gridState: unwrapV5GridState(entry.gridState)
31
32
  })),
32
- pTableParams: createDefaultPTableParams()
33
+ pTableParams: createDefaultPTableParamsV7()
33
34
  };
34
35
  }
35
36
  /** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`.
@@ -86,10 +87,7 @@ function migrateV4toV6(state) {
86
87
  const nextId = () => ++idCounter;
87
88
  const migratedCache = state.stateCache.map((entry) => {
88
89
  const leaves = [];
89
- for (const f of entry.filtersState) if (f.filter !== null && !f.filter.disabled) {
90
- const column = canonicalizeJson(f.id);
91
- leaves.push(migrateTableFilter(column, f.filter.value, nextId));
92
- }
90
+ for (const f of entry.filtersState) if (f.filter !== null && !f.filter.disabled) leaves.push(migrateTableFilter(canonicalizeJson(f.id), f.filter.value, nextId));
93
91
  const filtersState = leaves.length > 0 ? {
94
92
  id: nextId(),
95
93
  type: "and",
@@ -117,10 +115,11 @@ function migrateV4toV6(state) {
117
115
  filters: distillFilterSpec(currentCache.filtersState),
118
116
  defaultFilters: null,
119
117
  sorting: state.pTableParams.sorting
120
- } : createDefaultPTableParams()
118
+ } : createDefaultPTableParamsV7()
121
119
  };
122
120
  }
123
- /** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */
121
+ /** Migrate a single per-column PlTableFilter to a v7-form tree node (legacy
122
+ * string column ids). v7 → v8 later converts these to object form. */
124
123
  function migrateTableFilter(column, filter, nextId) {
125
124
  const id = nextId();
126
125
  switch (filter.type) {
@@ -246,7 +245,9 @@ function migrateTableFilter(column, filter, nextId) {
246
245
  };
247
246
  }
248
247
  }
249
- function createDefaultPTableParams() {
248
+ /** Default pTableParams in the v7 shape (sorting: []). Used by intermediate
249
+ * migration steps that produce v6/v7 state before the v7 → v8 conversion. */
250
+ function createDefaultPTableParamsV7() {
250
251
  return {
251
252
  sourceId: null,
252
253
  hiddenColIds: null,
@@ -255,13 +256,109 @@ function createDefaultPTableParams() {
255
256
  sorting: []
256
257
  };
257
258
  }
259
+ function createDefaultPTableParams() {
260
+ return {
261
+ sourceId: null,
262
+ hiddenColIds: null,
263
+ filters: null,
264
+ defaultFilters: null,
265
+ sorting: null
266
+ };
267
+ }
258
268
  function createPlDataTableStateV2() {
259
269
  return {
260
- version: 7,
270
+ version: 8,
261
271
  stateCache: [],
262
272
  pTableParams: createDefaultPTableParams()
263
273
  };
264
274
  }
275
+ function migrateV7toV8(state) {
276
+ const newCache = state.stateCache.map((entry) => ({
277
+ sourceId: entry.sourceId,
278
+ gridState: entry.gridState,
279
+ sheetsState: entry.sheetsState,
280
+ filtersState: convertFiltersWithMeta(entry.filtersState),
281
+ defaultFiltersState: convertFiltersWithMeta(entry.defaultFiltersState),
282
+ searchString: entry.searchString
283
+ }));
284
+ const params = state.pTableParams;
285
+ let pTableParams;
286
+ if (params.sourceId === null) pTableParams = createDefaultPTableParams();
287
+ else pTableParams = {
288
+ sourceId: params.sourceId,
289
+ hiddenColIds: params.hiddenColIds,
290
+ sorting: params.sorting.length === 0 ? null : params.sorting,
291
+ filters: convertFiltersPlain(params.filters),
292
+ defaultFilters: convertFiltersPlain(params.defaultFilters)
293
+ };
294
+ return {
295
+ version: 8,
296
+ stateCache: newCache,
297
+ pTableParams
298
+ };
299
+ }
300
+ function convertFiltersWithMeta(node) {
301
+ if (node === null) return null;
302
+ const result = pruneFilterNode(node);
303
+ if (result === void 0) return null;
304
+ return result;
305
+ }
306
+ function convertFiltersPlain(node) {
307
+ if (node === null) return null;
308
+ const result = pruneFilterNode(node);
309
+ if (result === void 0) return null;
310
+ return result;
311
+ }
312
+ /** Recursively converts and prunes a legacy v7 filter tree. Preserves meta
313
+ * fields (id/isExpanded/source/isSuppressed) on non-leaf nodes. Returns
314
+ * `undefined` when the subtree is empty after pruning. */
315
+ function pruneFilterNode(node) {
316
+ if (!node || typeof node !== "object") return void 0;
317
+ const n = node;
318
+ if (n.type === "and" || n.type === "or") {
319
+ const kept = (n.filters ?? []).map((f) => pruneFilterNode(f)).filter((f) => f !== void 0);
320
+ if (kept.length === 0) return void 0;
321
+ return {
322
+ ...n,
323
+ type: n.type,
324
+ filters: kept
325
+ };
326
+ }
327
+ if (n.type === "not") {
328
+ const inner = pruneFilterNode(n.filter);
329
+ if (inner === void 0) return void 0;
330
+ return {
331
+ ...n,
332
+ type: "not",
333
+ filter: inner
334
+ };
335
+ }
336
+ return convertLegacyLeaf(n);
337
+ }
338
+ function convertLegacyLeaf(leaf) {
339
+ if (leaf.type === void 0) return leaf;
340
+ const result = { ...leaf };
341
+ if ("column" in result) {
342
+ const c = parseLegacyLeafColumn(result.column);
343
+ if (c === void 0) return void 0;
344
+ result.column = c;
345
+ }
346
+ if ("rhs" in result) {
347
+ const c = parseLegacyLeafColumn(result.rhs);
348
+ if (c === void 0) return void 0;
349
+ result.rhs = c;
350
+ }
351
+ return result;
352
+ }
353
+ function parseLegacyLeafColumn(s) {
354
+ if (typeof s !== "string") return void 0;
355
+ const parsed = parseJsonSafely(s);
356
+ if (!parsed || typeof parsed !== "object") return void 0;
357
+ if (!("type" in parsed) || !("id" in parsed)) return void 0;
358
+ const t = parsed.type;
359
+ if (t !== "axis" && t !== "column") return void 0;
360
+ return parsed;
361
+ }
265
362
  //#endregion
266
363
  export { createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 };
267
364
 
@@ -1 +1 @@
1
- {"version":3,"file":"state-migration.js","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n canonicalizeJson,\n getPTableColumnId,\n parseJsonSafely,\n} from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFiltersWithMeta,\n PlDataTableGridStateCore,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PlTableColumnIdJson,\n PTableParamsV2,\n} from \"./typesV7\";\nimport type {\n PlDataTableGridStateV6,\n PlDataTableStateV2V6,\n PlDataTableStateV2V6CacheEntry,\n PlDataTableV6ColIdJson,\n} from \"./typesV6\";\nimport type {\n PlDataTableGridStateV5,\n PlDataTableV5ColIdJson,\n PlDataTableV5ColIdWrapper,\n} from \"./typesV5\";\nimport { isNil } from \"es-toolkit\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV6;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // v5 stored colIds as `{source, labeled}` wrappers; only the gridState shape differs.\n | {\n version: 5;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV5;\n sheetsState: PlDataTableSheetState[];\n filtersState: null | PlDataTableFiltersWithMeta;\n defaultFiltersState: null | PlDataTableFiltersWithMeta;\n searchString?: string;\n }[];\n pTableParams: PTableParamsV2;\n }\n // v6 stored colIds as canonicalized full `PTableColumnSpec` (including\n // annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.\n | PlDataTableStateV2V6\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v6: migrate per-column filters to tree-based format (skips v5).\n // v4 gridState already used bare PTableColumnSpec colIds, so we jump\n // straight to v6 without going through the v5 wrapper format.\n if (state.version === 4) {\n state = migrateV4toV6(state);\n }\n // v5 -> v6: unwrap `{source, labeled}` colIds in gridState back to bare PTableColumnSpec.\n if (state.version === 5) {\n state = migrateV5toV6(state);\n }\n // v6 -> v7: shrink colIds from full PTableColumnSpec to PTableColumnId.\n if (state.version === 6) {\n state = migrateV6toV7(state);\n }\n return state;\n}\n\n/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */\nfunction migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {\n // pTableParams reset: v5 stored DiscoveredPColumnId-based hiddenColIds with\n // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).\n // v6 distills empty fields, so the same logical column serialises differently\n // and lookups would silently miss every previously-hidden discovered column.\n // gridState colIds are derived from PTableColumnSpec and unaffected.\n return {\n version: 6,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n gridState: unwrapV5GridState(entry.gridState),\n })),\n pTableParams: createDefaultPTableParams(),\n };\n}\n\n/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`.\n * gridState colIds may include the row-number sentinel (a JSON-stringified\n * literal, not a wrapped spec) — those pass through unchanged. */\nfunction unwrapV5ColId(json: string): string {\n const parsed: unknown = parseJsonSafely(json as CanonicalizedJson<unknown>);\n return !isNil(parsed) && typeof parsed === \"object\" && \"source\" in parsed\n ? canonicalizeJson((parsed as PlDataTableV5ColIdWrapper).source)\n : json;\n}\n\nfunction unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridStateV6 {\n const unwrapAs = (json: PlDataTableV5ColIdJson) => unwrapV5ColId(json) as PlDataTableV6ColIdJson;\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapAs) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: unwrapAs(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapAs) }\n : undefined,\n };\n}\n\n/** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its\n * compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */\nfunction migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: state.stateCache.map(\n (entry): PlDataTableStateV2CacheEntry => ({\n ...entry,\n gridState: shrinkV6GridState(entry.gridState),\n }),\n ),\n pTableParams: state.pTableParams,\n };\n}\n\n/** Convert a v6 fat colId (canonicalized PTableColumnSpec) to a v7 compact colId\n * (canonicalized PTableColumnId). The row-number sentinel is a string literal,\n * not a spec — pass it through unchanged. */\nfunction shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {\n const parsed: unknown = parseJsonSafely(json);\n if (!isNil(parsed) && typeof parsed === \"object\" && \"type\" in parsed && \"id\" in parsed) {\n return canonicalizeJson(getPTableColumnId(parsed as PTableColumnSpec));\n }\n return json as unknown as PlTableColumnIdJson;\n}\n\nfunction shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCore {\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: shrinkV6ColId(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(shrinkV6ColId) }\n : undefined,\n };\n}\n\n/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */\nfunction migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDataTableStateV2V6 {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMeta[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n const column = canonicalizeJson(f.id);\n leaves.push(migrateTableFilter(column, f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMeta | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 6,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParams(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMeta[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"state-migration.js","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n canonicalizeJson,\n getPTableColumnId,\n parseJsonSafely,\n} from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFilters,\n PlDataTableFiltersWithMeta,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PTableParamsV2,\n} from \"./typesV8\";\nimport type {\n PlDataTableFilters as PlDataTableFiltersV7,\n PlDataTableFiltersWithMeta as PlDataTableFiltersWithMetaV7,\n PlDataTableGridStateCore as PlDataTableGridStateCoreV7,\n PlDataTableStateV2CacheEntry as PlDataTableStateV2V7CacheEntry,\n PlDataTableStateV2Normalized as PlDataTableStateV2V7,\n PlTableColumnIdJson,\n PTableParamsV2 as PTableParamsV2V7,\n} from \"./typesV7\";\nimport type {\n PlDataTableGridStateV6,\n PlDataTableStateV2V6,\n PlDataTableStateV2V6CacheEntry,\n PlDataTableV6ColIdJson,\n} from \"./typesV6\";\nimport type {\n PlDataTableGridStateV5,\n PlDataTableV5ColIdJson,\n PlDataTableV5ColIdWrapper,\n} from \"./typesV5\";\nimport { isNil } from \"es-toolkit\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2V7;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV6;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // v5 stored colIds as `{source, labeled}` wrappers; only the gridState shape differs.\n | {\n version: 5;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV5;\n sheetsState: PlDataTableSheetState[];\n filtersState: null | PlDataTableFiltersWithMetaV7;\n defaultFiltersState: null | PlDataTableFiltersWithMetaV7;\n searchString?: string;\n }[];\n pTableParams: PTableParamsV2V7;\n }\n // v6 stored colIds as canonicalized full `PTableColumnSpec` (including\n // annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.\n | PlDataTableStateV2V6\n // v7 still had filter leaves serialised as `CanonicalizedJson<PTableColumnId>`\n // strings and `sorting: []` for the \"untouched\" case.\n | PlDataTableStateV2V7\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParamsV7(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v6: migrate per-column filters to tree-based format (skips v5).\n // v4 gridState already used bare PTableColumnSpec colIds, so we jump\n // straight to v6 without going through the v5 wrapper format.\n if (state.version === 4) {\n state = migrateV4toV6(state);\n }\n // v5 -> v6: unwrap `{source, labeled}` colIds in gridState.\n if (state.version === 5) {\n state = migrateV5toV6(state);\n }\n // v6 -> v7: shrink colIds from full PTableColumnSpec to PTableColumnId.\n if (state.version === 6) {\n state = migrateV6toV7(state);\n }\n // v7 -> v8: parse CanonicalizedJson<PTableColumnId> filter leaves into object\n // form; translate `sorting: []` into `sorting: null`.\n if (state.version === 7) {\n state = migrateV7toV8(state);\n }\n return state;\n}\n\n/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */\nfunction migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {\n // pTableParams reset: v5 stored ColumnDiscoveredId-based hiddenColIds with\n // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).\n // v6 distills empty fields, so the same logical column serialises differently\n // and lookups would silently miss every previously-hidden discovered column.\n // gridState colIds are derived from PTableColumnSpec and unaffected.\n return {\n version: 6,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n gridState: unwrapV5GridState(entry.gridState),\n })),\n pTableParams: createDefaultPTableParamsV7(),\n };\n}\n\n/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`.\n * gridState colIds may include the row-number sentinel (a JSON-stringified\n * literal, not a wrapped spec) — those pass through unchanged. */\nfunction unwrapV5ColId(json: string): string {\n const parsed: unknown = parseJsonSafely(json as CanonicalizedJson<unknown>);\n return !isNil(parsed) && typeof parsed === \"object\" && \"source\" in parsed\n ? canonicalizeJson((parsed as PlDataTableV5ColIdWrapper).source)\n : json;\n}\n\nfunction unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridStateV6 {\n const unwrapAs = (json: PlDataTableV5ColIdJson) => unwrapV5ColId(json) as PlDataTableV6ColIdJson;\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapAs) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: unwrapAs(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapAs) }\n : undefined,\n };\n}\n\n/** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its\n * compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */\nfunction migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2V7 {\n return {\n version: 7,\n stateCache: state.stateCache.map(\n (entry): PlDataTableStateV2V7CacheEntry => ({\n ...entry,\n gridState: shrinkV6GridState(entry.gridState),\n }),\n ),\n pTableParams: state.pTableParams,\n };\n}\n\n/** Convert a v6 fat colId (canonicalized PTableColumnSpec) to a v7 compact colId\n * (canonicalized PTableColumnId). The row-number sentinel is a string literal,\n * not a spec — pass it through unchanged. */\nfunction shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {\n const parsed: unknown = parseJsonSafely(json);\n if (!isNil(parsed) && typeof parsed === \"object\" && \"type\" in parsed && \"id\" in parsed) {\n return canonicalizeJson(getPTableColumnId(parsed as PTableColumnSpec));\n }\n return json as unknown as PlTableColumnIdJson;\n}\n\nfunction shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCoreV7 {\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: shrinkV6ColId(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(shrinkV6ColId) }\n : undefined,\n };\n}\n\n/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */\nfunction migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDataTableStateV2V6 {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMetaV7[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n leaves.push(migrateTableFilter(canonicalizeJson(f.id), f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMetaV7 | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 6,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParamsV7(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a v7-form tree node (legacy\n * string column ids). v7 → v8 later converts these to object form. */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMetaV7[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\n/** Default pTableParams in the v7 shape (sorting: []). Used by intermediate\n * migration steps that produce v6/v7 state before the v7 → v8 conversion. */\nfunction createDefaultPTableParamsV7(): PTableParamsV2V7 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: null,\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 8,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n\n// --- v7 -> v8 migration ----------------------------------------------------\n// Parses CanonicalizedJson<PTableColumnId> filter leaves into the new object\n// form. Malformed leaves are dropped; groups that become empty after pruning\n// are dropped; cache entries whose tree fully prunes get filtersState: null.\n// Also translates `sorting: []` (legacy \"untouched\") into `sorting: null`.\n\nfunction migrateV7toV8(state: PlDataTableStateV2V7): PlDataTableStateV2Normalized {\n const newCache: PlDataTableStateV2CacheEntry[] = state.stateCache.map((entry) => ({\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState: convertFiltersWithMeta(entry.filtersState),\n defaultFiltersState: convertFiltersWithMeta(entry.defaultFiltersState),\n searchString: entry.searchString,\n }));\n\n const params = state.pTableParams;\n let pTableParams: PTableParamsV2;\n if (params.sourceId === null) {\n pTableParams = createDefaultPTableParams();\n } else {\n pTableParams = {\n sourceId: params.sourceId,\n hiddenColIds: params.hiddenColIds,\n // Empty array in legacy state means \"not touched\" — translate to null so the\n // model falls back to default sorting; non-empty stays as user's explicit value.\n sorting: params.sorting.length === 0 ? null : params.sorting,\n filters: convertFiltersPlain(params.filters),\n defaultFilters: convertFiltersPlain(params.defaultFilters),\n };\n }\n\n return { version: 8, stateCache: newCache, pTableParams };\n}\n\nfunction convertFiltersWithMeta(\n node: null | PlDataTableFiltersWithMetaV7,\n): null | PlDataTableFiltersWithMeta {\n if (node === null) return null;\n const result = pruneFilterNode(node as unknown);\n if (result === undefined) return null;\n return result as PlDataTableFiltersWithMeta;\n}\n\nfunction convertFiltersPlain(node: null | PlDataTableFiltersV7): null | PlDataTableFilters {\n if (node === null) return null;\n const result = pruneFilterNode(node as unknown);\n if (result === undefined) return null;\n return result as PlDataTableFilters;\n}\n\n/** Recursively converts and prunes a legacy v7 filter tree. Preserves meta\n * fields (id/isExpanded/source/isSuppressed) on non-leaf nodes. Returns\n * `undefined` when the subtree is empty after pruning. */\nfunction pruneFilterNode(node: unknown): unknown | undefined {\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as { type?: unknown };\n if (n.type === \"and\" || n.type === \"or\") {\n const filters = (n as { filters?: unknown[] }).filters ?? [];\n const kept = filters.map((f) => pruneFilterNode(f)).filter((f): f is object => f !== undefined);\n if (kept.length === 0) return undefined;\n return { ...(n as object), type: n.type, filters: kept };\n }\n if (n.type === \"not\") {\n const inner = pruneFilterNode((n as { filter?: unknown }).filter);\n if (inner === undefined) return undefined;\n return { ...(n as object), type: \"not\", filter: inner };\n }\n return convertLegacyLeaf(n);\n}\n\nfunction convertLegacyLeaf(leaf: {\n type?: unknown;\n column?: unknown;\n rhs?: unknown;\n}): unknown | undefined {\n if (leaf.type === undefined) return leaf;\n const result: Record<string, unknown> = { ...leaf };\n if (\"column\" in result) {\n const c = parseLegacyLeafColumn(result.column);\n if (c === undefined) return undefined;\n result.column = c;\n }\n if (\"rhs\" in result) {\n const c = parseLegacyLeafColumn(result.rhs);\n if (c === undefined) return undefined;\n result.rhs = c;\n }\n return result;\n}\n\nfunction parseLegacyLeafColumn(s: unknown): PTableColumnId | undefined {\n if (typeof s !== \"string\") return undefined;\n const parsed = parseJsonSafely(s as CanonicalizedJson<PTableColumnId>);\n if (!parsed || typeof parsed !== \"object\") return undefined;\n if (!(\"type\" in parsed) || !(\"id\" in parsed)) return undefined;\n const t = (parsed as { type: unknown }).type;\n if (t !== \"axis\" && t !== \"column\") return undefined;\n return parsed as PTableColumnId;\n}\n"],"mappings":"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"}
@@ -18,11 +18,6 @@ type PlDataTableGridStateCore = {
18
18
  /** All colIds which were hidden */hiddenColIds: PlTableColumnIdJson[];
19
19
  };
20
20
  };
21
- type PlDataTableSheet = {
22
- /** spec of the axis to use */axis: AxisSpec; /** options to show in the filter dropdown */
23
- options: ListOptionBase<string | number>[]; /** default (selected) value */
24
- defaultValue?: string | number;
25
- };
26
21
  type PlDataTableSheetState = {
27
22
  /** id of the axis */axisId: AxisId; /** selected value */
28
23
  value: string | number;
@@ -63,36 +58,6 @@ type PlDataTableStateV2Normalized = {
63
58
  stateCache: PlDataTableStateV2CacheEntry[]; /** PTable params derived from the cache state for the current sourceId */
64
59
  pTableParams: PTableParamsV2;
65
60
  };
66
- /** PlAgDataTable model */
67
- type PlDataTableModel = {
68
- /** DataSource identifier for state management */sourceId: null | string; /** p-table including all columns, used to show the full specification of the table */
69
- fullTableHandle?: PTableHandle; /** p-frame handle */
70
- fullPframeHandle?: PFrameHandle; /** p-table including only visible columns, used to get the data */
71
- visibleTableHandle?: PTableHandle; /** Default filters from model options, surfaced for UI display */
72
- defaultFilters?: Nil | PlDataTableFilters;
73
- };
74
- type CreatePlDataTableOps = {
75
- /** Filters for columns and non-partitioned axes */filters?: PlDataTableFilters; /** Sorting to columns hidden from user */
76
- sorting?: PTableSorting[];
77
- /**
78
- * Selects columns for which will be inner-joined to the table.
79
- *
80
- * Default behaviour: all columns are considered to be core
81
- */
82
- coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;
83
- /**
84
- * Determines how core columns should be joined together:
85
- * inner - so user will only see records present in all core columns
86
- * full - so user will only see records present in any of the core columns
87
- *
88
- * All non-core columns will be left joined to the table produced by the core
89
- * columns, in other words records form the pool of non-core columns will only
90
- * make their way into the final table if core table contains corresponding key.
91
- *
92
- * Default: 'full'
93
- */
94
- coreJoinType?: "inner" | "full";
95
- };
96
61
  //#endregion
97
- export { CreatePlDataTableOps, PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnIdJson };
62
+ export { PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnIdJson };
98
63
  //# sourceMappingURL=typesV7.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typesV7.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV7.ts"],"mappings":";;;;;KAeY,mBAAA,GAAsB,iBAAiB,CAAC,cAAA;AAAA,KAExC,wBAAA;iCAEV,WAAA;IAJ6B,0BAM3B,aAAA,EAAe,mBAAA;EAAA,GAN+C;EAShE,IAAA;IAPkC,6CAShC,SAAA;MALe,sCAOb,KAAA,EAAO,mBAAA,EAQK;MANZ,IAAA;IAAA;EAAA,GATF;EAaF,gBAAA;IAVA,mCAYE,YAAA,EAAc,mBAAA;EAAA;AAAA;AAAA,KAIN,gBAAA;EANV,8BAQA,IAAA,EAAM,QAAA,EANU;EAQhB,OAAA,EAAS,cAAc,qBARY;EAUnC,YAAA;AAAA;AAAA,KAGU,qBAAA;EALa,qBAOvB,MAAA,EAAQ,MAAM,EATR;EAWN,KAAA;AAAA;;KAIU,qBAAA;EACV,EAAA;EACA,MAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,KAEU,yBAAA,GAA4B,gBAAA,CAAe,iBAAA,CAAkB,cAAA;AAAA,KAC7D,kBAAA,GAAqB,cAAc,CAAC,yBAAA;AAAA,KACpC,0BAAA,GAA6B,cAAA,CACvC,yBAAA,EACA,qBAAA;AAAA,KAGU,4BAAA;EAjBL,iDAmBL,QAAA,UAf+B;EAiB/B,SAAA,EAAW,wBAAA,EAjBoB;EAmB/B,WAAA,EAAa,qBAAA,IAjBb;EAmBA,YAAA,SAAqB,0BAAA,EAjBrB;EAmBA,mBAAA,SAA4B,0BAAA,EAnBhB;EAqBZ,YAAA;AAAA;AAAA,KAGU,cAAA;EAEN,QAAA;EACA,YAAA;EACA,OAAA;EACA,OAAA;EACA,cAAA;AAAA;EAGA,QAAA;EACA,YAAA,SAAqB,cAAA;EACrB,OAAA,EAAS,aAAA;EACT,OAAA,SAAgB,kBAAA;EAChB,cAAA,SAAuB,kBAAA;AAAA;AAAA,KAGjB,4BAAA;EArCqB,2BAuC/B,OAAA,KAtCU;EAwCV,UAAA,EAAY,4BAAA;EAEZ,YAAA,EAAc,cAAc;AAAA;;KAIlB,gBAAA;EA9C2C,iDAgDrD,QAAA,iBA/CA;EAiDA,eAAA,GAAkB,YAAA,EAhDG;EAkDrB,gBAAA,GAAmB,YAAA,EA/CT;EAiDV,kBAAA,GAAqB,YAAA;EAErB,cAAA,GAAiB,GAAA,GAAM,kBAAA;AAAA;AAAA,KAGb,oBAAA;EA5CkB,mDA8C5B,OAAA,GAAU,kBAAA,EA9C4C;EAiDtD,OAAA,GAAU,aAAA;EAvDV;;;;;EA8DA,mBAAA,IAAuB,IAAA,EAAM,gBAAA;EAxD7B;;;;AAEY;AAGd;;;;;;EAgEE,YAAA;AAAA"}
1
+ {"version":3,"file":"typesV7.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV7.ts"],"mappings":";;;;;KAeY,mBAAA,GAAsB,iBAAiB,CAAC,cAAA;AAAA,KAExC,wBAAA;iCAEV,WAAA;IAJ6B,0BAM3B,aAAA,EAAe,mBAAA;EAAA,GAN+C;EAShE,IAAA;IAPkC,6CAShC,SAAA;MALe,sCAOb,KAAA,EAAO,mBAAA,EAQK;MANZ,IAAA;IAAA;EAAA,GATF;EAaF,gBAAA;IAVA,mCAYE,YAAA,EAAc,mBAAA;EAAA;AAAA;AAAA,KAaN,qBAAA;EAEI,qBAAd,MAAA,EAAQ,MAAM,EAAN;EAER,KAAA;AAAA;AAAK;AAAA,KAIK,qBAAA;EACV,EAAA;EACA,MAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,KAEU,yBAAA,GAA4B,gBAAA,CAAe,iBAAA,CAAkB,cAAA;AAAA,KAC7D,kBAAA,GAAqB,cAAc,CAAC,yBAAA;AAAA,KACpC,0BAAA,GAA6B,cAAA,CACvC,yBAAA,EACA,qBAAA;AAAA,KAGU,4BAAA;EAPA,iDASV,QAAA;EAEA,SAAA,EAAW,wBAAA,EAX0C;EAarD,WAAA,EAAa,qBAAA,IAbuC;EAepD,YAAA,SAAqB,0BAAA,EAfiB;EAiBtC,mBAAA,SAA4B,0BAAA,EAjB2C;EAmBvE,YAAA;AAAA;AAAA,KAGU,cAAA;EAEN,QAAA;EACA,YAAA;EACA,OAAA;EACA,OAAA;EACA,cAAA;AAAA;EAGA,QAAA;EACA,YAAA,SAAqB,cAAA;EACrB,OAAA,EAAS,aAAA;EACT,OAAA,SAAgB,kBAAA;EAChB,cAAA,SAAuB,kBAAA;AAAA;AAAA,KAGjB,4BAAA;EAnCV,2BAqCA,OAAA,KApCqB;EAsCrB,UAAA,EAAY,4BAAA,IAnCF;EAqCV,YAAA,EAAc,cAAc;AAAA"}
@@ -0,0 +1,123 @@
1
+ import { FilterSpecLeaf as FilterSpecLeaf$1 } from "../../filters/types.js";
2
+ import { AnnotationDataStatus, AxisId, AxisSpec, CanonicalizedJson, ColumnUniversalId, ListOptionBase, PColumnIdAndSpec, PFrameHandle, PTableColumnId, PTableHandle, PTableSorting, RootFilterSpec } from "@milaboratories/pl-model-common";
3
+ import { Nil } from "@milaboratories/helpers";
4
+
5
+ //#region src/components/PlDataTable/typesV8.d.ts
6
+ type PlTableColumnIdJson = CanonicalizedJson<PTableColumnId>;
7
+ type PlDataTableGridStateCore = {
8
+ /** Includes column ordering */columnOrder?: {
9
+ /** All colIds in order */orderedColIds: PlTableColumnIdJson[];
10
+ }; /** Includes current sort columns and direction */
11
+ sort?: {
12
+ /** Sorted columns and directions in order */sortModel: {
13
+ /** Column Id to apply the sort to. */colId: PlTableColumnIdJson; /** Sort direction */
14
+ sort: "asc" | "desc";
15
+ }[];
16
+ }; /** Includes column visibility */
17
+ columnVisibility?: {
18
+ /** All colIds which were hidden */hiddenColIds: PlTableColumnIdJson[];
19
+ };
20
+ };
21
+ type PlDataTableSheet = {
22
+ /** spec of the axis to use */axis: AxisSpec; /** options to show in the filter dropdown */
23
+ options: ListOptionBase<string | number>[]; /** default (selected) value */
24
+ defaultValue?: string | number;
25
+ };
26
+ type PlDataTableSheetState = {
27
+ /** id of the axis */axisId: AxisId; /** selected value */
28
+ value: string | number;
29
+ };
30
+ /** Tree-based filter state compatible with PlAdvancedFilter's RootFilter */
31
+ type PlDataTableFilterMeta = {
32
+ id: number;
33
+ source?: "table-filter" | "table-search";
34
+ isExpanded?: boolean;
35
+ isSuppressed?: boolean;
36
+ };
37
+ type PlDataTableFilterSpecLeaf = FilterSpecLeaf$1<PTableColumnId>;
38
+ type PlDataTableFilters = RootFilterSpec<PlDataTableFilterSpecLeaf>;
39
+ type PlDataTableFiltersWithMeta = RootFilterSpec<PlDataTableFilterSpecLeaf, PlDataTableFilterMeta>;
40
+ type PlDataTableStateV2CacheEntry = {
41
+ /** DataSource identifier for state management */sourceId: string; /** Internal ag-grid state */
42
+ gridState: PlDataTableGridStateCore; /** Sheets state */
43
+ sheetsState: PlDataTableSheetState[]; /** User filters state (tree-based, compatible with PlAdvancedFilter) */
44
+ filtersState: null | PlDataTableFiltersWithMeta; /** Default filters state from model (snapshot of defaults) */
45
+ defaultFiltersState: null | PlDataTableFiltersWithMeta; /** Fast search string */
46
+ searchString?: string;
47
+ };
48
+ type PTableParamsV2 = {
49
+ sourceId: null;
50
+ hiddenColIds: null;
51
+ sorting: null;
52
+ filters: null;
53
+ defaultFilters: null;
54
+ } | {
55
+ sourceId: string;
56
+ hiddenColIds: null | PTableColumnId[];
57
+ sorting: null | PTableSorting[];
58
+ filters: null | PlDataTableFilters;
59
+ defaultFilters: null | PlDataTableFilters;
60
+ };
61
+ type PlDataTableStateV2Normalized = {
62
+ /** Version for upgrades */version: 8; /** Internal states, LRU cache for 5 sourceId-s */
63
+ stateCache: PlDataTableStateV2CacheEntry[]; /** PTable params derived from the cache state for the current sourceId */
64
+ pTableParams: PTableParamsV2;
65
+ };
66
+ /** PlAgDataTable model */
67
+ type PlDataTableModel = {
68
+ /** DataSource identifier for state management */sourceId: null | string; /** p-table including all columns, used to show the full specification of the table */
69
+ fullTableHandle?: PTableHandle; /** p-frame handle */
70
+ fullPframeHandle?: PFrameHandle; /** p-table including only visible columns, used to get the data */
71
+ visibleTableHandle?: PTableHandle; /** Default filters from model options, surfaced for UI display */
72
+ defaultFilters?: Nil | PlDataTableFilters;
73
+ /**
74
+ * Sidecar rendering metadata kept out of the column specs: baking
75
+ * label/visibility/order/status into a spec via overrides changes the
76
+ * recipe's `ColumnUniversalId`, so the same physical column reached two ways
77
+ * (e.g. as a primary column and as a discovered axis label) would diverge
78
+ * into two ids and render twice. The UI overlays this onto the
79
+ * engine-emitted specs at render time.
80
+ */
81
+ columnsMeta?: PlDataTableColumnsMeta;
82
+ };
83
+ /** Display metadata for one column, applied by the UI over the emitted spec. */
84
+ type PlDataTableColumnMeta = {
85
+ /** Disambiguated label (overrides the spec's intrinsic `pl7.app/label`). */label?: string; /** Effective visibility from rules + intrinsic annotations. */
86
+ visibility?: "default" | "optional" | "hidden"; /** Effective order priority (higher = further left). */
87
+ order?: number; /** Per-column data status (set for visible columns only). */
88
+ status?: AnnotationDataStatus;
89
+ };
90
+ /** Display metadata for one axis, applied by the UI over the emitted spec. */
91
+ type PlDataTableAxisMeta = {
92
+ /** Whether the UI must hide this axis (axes introduced only by secondary columns). */hidden: boolean;
93
+ };
94
+ /** Sidecar display metadata for a table, keyed by emitted column/axis identity. */
95
+ type PlDataTableColumnsMeta = {
96
+ /** Per-column metadata keyed by the emitted `ColumnUniversalId`. */columns: Record<ColumnUniversalId, PlDataTableColumnMeta>; /** Per-axis metadata keyed by the canonicalized `AxisId`. */
97
+ axes: Record<CanonicalizedJson<AxisId>, PlDataTableAxisMeta>;
98
+ };
99
+ type CreatePlDataTableOps = {
100
+ /** Filters for columns and non-partitioned axes */filters?: PlDataTableFilters; /** Sorting to columns hidden from user */
101
+ sorting?: PTableSorting[];
102
+ /**
103
+ * Selects columns for which will be inner-joined to the table.
104
+ *
105
+ * Default behaviour: all columns are considered to be core
106
+ */
107
+ coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;
108
+ /**
109
+ * Determines how core columns should be joined together:
110
+ * inner - so user will only see records present in all core columns
111
+ * full - so user will only see records present in any of the core columns
112
+ *
113
+ * All non-core columns will be left joined to the table produced by the core
114
+ * columns, in other words records form the pool of non-core columns will only
115
+ * make their way into the final table if core table contains corresponding key.
116
+ *
117
+ * Default: 'full'
118
+ */
119
+ coreJoinType?: "inner" | "full";
120
+ };
121
+ //#endregion
122
+ export { CreatePlDataTableOps, PTableParamsV2, PlDataTableAxisMeta, PlDataTableColumnMeta, PlDataTableColumnsMeta, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnIdJson };
123
+ //# sourceMappingURL=typesV8.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typesV8.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV8.ts"],"mappings":";;;;;KAiBY,mBAAA,GAAsB,iBAAiB,CAAC,cAAA;AAAA,KAExC,wBAAA;iCAEV,WAAA;IAJ6B,0BAM3B,aAAA,EAAe,mBAAA;EAAA,GAN+C;EAShE,IAAA;IAPkC,6CAShC,SAAA;MALe,sCAOb,KAAA,EAAO,mBAAA,EAQK;MANZ,IAAA;IAAA;EAAA,GATF;EAaF,gBAAA;IAVA,mCAYE,YAAA,EAAc,mBAAA;EAAA;AAAA;AAAA,KAIN,gBAAA;EANV,8BAQA,IAAA,EAAM,QAAA,EANU;EAQhB,OAAA,EAAS,cAAc,qBARY;EAUnC,YAAA;AAAA;AAAA,KAGU,qBAAA;EALa,qBAOvB,MAAA,EAAQ,MAAM,EATR;EAWN,KAAA;AAAA;;KAIU,qBAAA;EACV,EAAA;EACA,MAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,KAEU,yBAAA,GAA4B,gBAAc,CAAC,cAAA;AAAA,KAC3C,kBAAA,GAAqB,cAAc,CAAC,yBAAA;AAAA,KACpC,0BAAA,GAA6B,cAAA,CACvC,yBAAA,EACA,qBAAA;AAAA,KAGU,4BAAA;EAjBL,iDAmBL,QAAA,UAf+B;EAiB/B,SAAA,EAAW,wBAAA,EAjBoB;EAmB/B,WAAA,EAAa,qBAAA,IAjBb;EAmBA,YAAA,SAAqB,0BAAA,EAjBrB;EAmBA,mBAAA,SAA4B,0BAAA,EAnBhB;EAqBZ,YAAA;AAAA;AAAA,KAGU,cAAA;EAEN,QAAA;EACA,YAAA;EACA,OAAA;EACA,OAAA;EACA,cAAA;AAAA;EAGA,QAAA;EACA,YAAA,SAAqB,cAAA;EACrB,OAAA,SAAgB,aAAA;EAChB,OAAA,SAAgB,kBAAA;EAChB,cAAA,SAAuB,kBAAA;AAAA;AAAA,KAGjB,4BAAA;EApC2C,2BAsCrD,OAAA,KAtCuC;EAwCvC,UAAA,EAAY,4BAAA,IAtCZ;EAwCA,YAAA,EAAc,cAAc;AAAA;AArC9B;AAAA,KAyCY,gBAAA;mDAEV,QAAA,iBArCa;EAuCb,eAAA,GAAkB,YAAA,EAnCU;EAqC5B,gBAAA,GAAmB,YAAA,EArCmC;EAuCtD,kBAAA,GAAqB,YAAA,EA7CrB;EA+CA,cAAA,GAAiB,GAAA,GAAM,kBAAA;EA7CvB;;;;;;;;EAsDA,WAAA,GAAc,sBAAA;AAAA;;KAIJ,qBAAA;EAvCe,4EAyCzB,KAAA,WAvCoB;EAyCpB,UAAA,sCAxC6C;EA0C7C,KAAA,WArDI;EAuDJ,MAAA,GAAS,oBAAoB;AAAA;;KAInB,mBAAA;EApDN,sFAsDJ,MAAM;AAAA;;KAII,sBAAA;EAvDN,oEAyDJ,OAAA,EAAS,MAAA,CAAO,iBAAA,EAAmB,qBAAA,GAxD/B;EA0DJ,IAAA,EAAM,MAAA,CAAO,iBAAA,CAAkB,MAAA,GAAS,mBAAA;AAAA;AAAA,KAG9B,oBAAA;EA1DA,mDA4DV,OAAA,GAAU,kBAAA;EAGV,OAAA,GAAU,aAAA;EA7DV;;;;;EAoEA,mBAAA,IAAuB,IAAA,EAAM,gBAAA;EAhED;AAI9B;;;;;;;;;;EAyEE,YAAA;AAAA"}
@@ -1,5 +1,6 @@
1
- const require_column_collection_builder = require("../../columns/column_collection_builder.cjs");
2
- const require_ctx_column_sources = require("../../columns/ctx_column_sources.cjs");
1
+ const require_providers = require("../../columns/column_providers/providers.cjs");
2
+ const require_index = require("../../columns/column_providers/index.cjs");
3
+ require("../../columns/index.cjs");
3
4
  const require_filter_discovery = require("./filter_discovery.cjs");
4
5
  const require_enrichment_discovery = require("./enrichment_discovery.cjs");
5
6
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
@@ -20,44 +21,36 @@ function buildDatasetOptions(ctx, opts) {
20
21
  const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });
21
22
  if (options.length === 0) return [];
22
23
  const refMap = require_filter_discovery.buildRefMap(ctx.resultPool.getSpecs().entries);
23
- const pframeSpec = ctx.getService("pframeSpec");
24
24
  const withEnrichments = opts?.withEnrichments ?? false;
25
- const filterSource = new require_ctx_column_sources.ResultPoolColumnSnapshotProvider(ctx.resultPool);
26
- const enrichmentSources = withEnrichments ? require_ctx_column_sources.collectCtxColumnSnapshotProviders(ctx) : void 0;
25
+ const filterSource = require_providers.ColumnsProvider(ctx.ctx.getUpstreamBlockCtx());
26
+ const enrichmentSources = withEnrichments ? require_index.getCtxProviders(ctx) : void 0;
27
27
  return options.map((primary) => {
28
28
  const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);
29
29
  if (!datasetSpec) return { primary };
30
- let filterCollection;
31
- let enrichmentCollection;
32
- try {
33
- filterCollection = new require_column_collection_builder.ColumnCollectionBuilder(pframeSpec).addSource(filterSource).build({
34
- anchors: { main: datasetSpec },
35
- allowPartialColumnList: true
30
+ const filterMatches = require_filter_discovery.findFilterColumns({
31
+ sources: [filterSource],
32
+ anchorSpec: datasetSpec
33
+ }).filter((m) => filterPredicate(m.getSpec()));
34
+ const filters = filterMatches.length === 0 ? void 0 : require_filter_discovery.filterMatchesToOptions(filterMatches, {
35
+ refsByObjectId: refMap,
36
+ datasetSpec,
37
+ labelOptions: opts?.labelOptions
38
+ });
39
+ let enrichments;
40
+ if (enrichmentSources && withEnrichments) {
41
+ const enrichmentVariants = require_enrichment_discovery.findEnrichmentColumns({
42
+ sources: enrichmentSources,
43
+ anchorSpec: datasetSpec,
44
+ maxHops: opts?.enrichmentMaxHops,
45
+ ...typeof withEnrichments === "function" ? { predicate: withEnrichments } : { include: withEnrichments }
36
46
  });
37
- enrichmentCollection = enrichmentSources !== void 0 ? new require_column_collection_builder.ColumnCollectionBuilder(pframeSpec).addSources(enrichmentSources).build({ anchors: { main: datasetSpec } }) : void 0;
38
- const filterMatches = require_filter_discovery.findFilterColumns(filterCollection).filter((m) => filterPredicate(m.column.spec));
39
- const filters = filterMatches.length === 0 ? void 0 : require_filter_discovery.filterMatchesToOptions(filterMatches, {
40
- refsByObjectId: refMap,
41
- datasetSpec,
42
- labelOptions: opts?.labelOptions
43
- });
44
- let enrichments;
45
- if (enrichmentCollection && withEnrichments) {
46
- const enrichmentVariants = require_enrichment_discovery.findEnrichmentColumns(enrichmentCollection, {
47
- maxHops: opts?.enrichmentMaxHops,
48
- ...typeof withEnrichments === "function" ? { predicate: withEnrichments } : { include: withEnrichments }
49
- });
50
- if (enrichmentVariants.length > 0) enrichments = require_enrichment_discovery.enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
51
- }
52
- return {
53
- primary,
54
- ...filters !== void 0 && filters.length > 0 ? { filters } : {},
55
- ...enrichments !== void 0 && enrichments.length > 0 ? { enrichments } : {}
56
- };
57
- } finally {
58
- filterCollection?.dispose();
59
- enrichmentCollection?.dispose();
47
+ if (enrichmentVariants.length > 0) enrichments = require_enrichment_discovery.enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
60
48
  }
49
+ return {
50
+ primary,
51
+ ...filters !== void 0 && filters.length > 0 ? { filters } : {},
52
+ ...enrichments !== void 0 && enrichments.length > 0 ? { enrichments } : {}
53
+ };
61
54
  });
62
55
  }
63
56
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"build_dataset_options.cjs","names":["buildRefMap","ResultPoolColumnSnapshotProvider","collectCtxColumnSnapshotProviders","ColumnCollectionBuilder","findFilterColumns","filterMatchesToOptions","findEnrichmentColumns","enrichmentVariantsToRefs"],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { AnchoredColumnCollection } from \"../../columns/column_collection_builder\";\nimport { ColumnCollectionBuilder } from \"../../columns/column_collection_builder\";\nimport {\n ResultPoolColumnSnapshotProvider,\n collectCtxColumnSnapshotProviders,\n} from \"../../columns/ctx_column_sources\";\nimport type { DatasetOption } from \"./dataset_selection\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\nimport { enrichmentVariantsToRefs, findEnrichmentColumns } from \"./enrichment_discovery\";\n\ntype SpecPredicateOption =\n | MultiColumnSelector\n | MultiColumnSelector[]\n | ((spec: PObjectSpec) => boolean);\n\nfunction toPredicate(opt: SpecPredicateOption | undefined): (spec: PObjectSpec) => boolean {\n if (opt === undefined) return () => true;\n return typeof opt === \"function\" ? opt : multiColumnSelectorsToPredicate(opt);\n}\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n primary?: SpecPredicateOption;\n /**\n * Restricts which result pool columns are considered as filters. Intersected\n * with the built-in `pl7.app/isSubset: \"true\"` constraint. Defaults to\n * accept-all.\n */\n filter?: SpecPredicateOption;\n /**\n * Formatting options forwarded to label derivation for both filter and\n * enrichment rows. `formatters.native` on the filter path is overridden\n * — see `FilterMatchOptions.labelOptions`.\n */\n labelOptions?: DeriveLabelsOptions;\n /**\n * Enables enrichment discovery and filters hits attached to\n * `DatasetOption.enrichments`. Use `() => true` to accept all; omit to disable.\n */\n withEnrichments?: SpecPredicateOption;\n /** Maximum linker hops considered. Only used when `withEnrichments` is set. */\n enrichmentMaxHops?: number;\n};\n\n/**\n * Usage:\n * ```ts\n * .output(\"datasetOptions\", (ctx) => buildDatasetOptions(ctx))\n * ```\n */\nexport function buildDatasetOptions(\n ctx: RenderCtxBase,\n opts?: BuildDatasetOptions,\n): DatasetOption[] | undefined {\n const primaryPredicate = toPredicate(opts?.primary);\n const filterPredicate = toPredicate(opts?.filter);\n\n const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n const pframeSpec = ctx.getService(\"pframeSpec\");\n\n const withEnrichments = opts?.withEnrichments ?? false;\n const filterSource = new ResultPoolColumnSnapshotProvider(ctx.resultPool);\n // Hoisted out of the per-option loop: collectCtxColumnSnapshotProviders\n // walks the entire output tree, so calling it once per dataset option would\n // be O(N × tree).\n const enrichmentSources = withEnrichments ? collectCtxColumnSnapshotProviders(ctx) : undefined;\n\n return options.map((primary: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);\n if (!datasetSpec) return { primary };\n\n // Allocations happen inside try so a throw on the second build()\n // still disposes the first collection.\n let filterCollection: AnchoredColumnCollection | undefined;\n let enrichmentCollection: AnchoredColumnCollection | undefined;\n try {\n // ResultPoolColumnSnapshotProvider is always complete;\n // allowPartialColumnList narrows the return type to non-undefined.\n filterCollection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(filterSource)\n .build({ anchors: { main: datasetSpec }, allowPartialColumnList: true });\n\n enrichmentCollection =\n enrichmentSources !== undefined\n ? new ColumnCollectionBuilder(pframeSpec)\n .addSources(enrichmentSources)\n .build({ anchors: { main: datasetSpec } })\n : undefined;\n\n const filterMatches = findFilterColumns(filterCollection).filter((m) =>\n filterPredicate(m.column.spec),\n );\n const filters =\n filterMatches.length === 0\n ? undefined\n : filterMatchesToOptions(filterMatches, {\n refsByObjectId: refMap,\n datasetSpec,\n labelOptions: opts?.labelOptions,\n });\n\n let enrichments;\n if (enrichmentCollection && withEnrichments) {\n const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {\n maxHops: opts?.enrichmentMaxHops,\n ...(typeof withEnrichments === \"function\"\n ? { predicate: withEnrichments }\n : { include: withEnrichments }),\n });\n if (enrichmentVariants.length > 0) {\n enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);\n }\n }\n\n return {\n primary,\n ...(filters !== undefined && filters.length > 0 ? { filters } : {}),\n ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),\n };\n } finally {\n filterCollection?.dispose();\n enrichmentCollection?.dispose();\n }\n });\n}\n"],"mappings":";;;;;;AAmBA,SAAS,YAAY,KAAsE;CACzF,IAAI,QAAQ,KAAA,GAAW,aAAa;CACpC,OAAO,OAAO,QAAQ,aAAa,OAAA,GAAA,gCAAA,gCAAA,CAAsC,GAAG;AAC9E;;;;;;;AAgCA,SAAgB,oBACd,KACA,MAC6B;CAC7B,MAAM,mBAAmB,YAAY,MAAM,OAAO;CAClD,MAAM,kBAAkB,YAAY,MAAM,MAAM;CAEhD,MAAM,UAAU,IAAI,WAAW,WAAW,kBAAkB,EAAE,qBAAqB,KAAK,CAAC;CACzF,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAElC,MAAM,SAASA,yBAAAA,YAAY,IAAI,WAAW,SAAS,CAAC,CAAC,OAAO;CAC5D,MAAM,aAAa,IAAI,WAAW,YAAY;CAE9C,MAAM,kBAAkB,MAAM,mBAAmB;CACjD,MAAM,eAAe,IAAIC,2BAAAA,iCAAiC,IAAI,UAAU;CAIxE,MAAM,oBAAoB,kBAAkBC,2BAAAA,kCAAkC,GAAG,IAAI,KAAA;CAErF,OAAO,QAAQ,KAAK,YAAmC;EACrD,MAAM,cAAc,IAAI,WAAW,oBAAoB,QAAQ,GAAG;EAClE,IAAI,CAAC,aAAa,OAAO,EAAE,QAAQ;EAInC,IAAI;EACJ,IAAI;EACJ,IAAI;GAGF,mBAAmB,IAAIC,kCAAAA,wBAAwB,UAAU,CAAC,CACvD,UAAU,YAAY,CAAC,CACvB,MAAM;IAAE,SAAS,EAAE,MAAM,YAAY;IAAG,wBAAwB;GAAK,CAAC;GAEzE,uBACE,sBAAsB,KAAA,IAClB,IAAIA,kCAAAA,wBAAwB,UAAU,CAAC,CACpC,WAAW,iBAAiB,CAAC,CAC7B,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,EAAE,CAAC,IAC3C,KAAA;GAEN,MAAM,gBAAgBC,yBAAAA,kBAAkB,gBAAgB,CAAC,CAAC,QAAQ,MAChE,gBAAgB,EAAE,OAAO,IAAI,CAC/B;GACA,MAAM,UACJ,cAAc,WAAW,IACrB,KAAA,IACAC,yBAAAA,uBAAuB,eAAe;IACpC,gBAAgB;IAChB;IACA,cAAc,MAAM;GACtB,CAAC;GAEP,IAAI;GACJ,IAAI,wBAAwB,iBAAiB;IAC3C,MAAM,qBAAqBC,6BAAAA,sBAAsB,sBAAsB;KACrE,SAAS,MAAM;KACf,GAAI,OAAO,oBAAoB,aAC3B,EAAE,WAAW,gBAAgB,IAC7B,EAAE,SAAS,gBAAgB;IACjC,CAAC;IACD,IAAI,mBAAmB,SAAS,GAC9B,cAAcC,6BAAAA,yBAAyB,oBAAoB,MAAM,YAAY;GAEjF;GAEA,OAAO;IACL;IACA,GAAI,YAAY,KAAA,KAAa,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;IACjE,GAAI,gBAAgB,KAAA,KAAa,YAAY,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;GAC/E;EACF,UAAU;GACR,kBAAkB,QAAQ;GAC1B,sBAAsB,QAAQ;EAChC;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"build_dataset_options.cjs","names":["buildRefMap","ColumnsProvider","getCtxProviders","findFilterColumns","filterMatchesToOptions","findEnrichmentColumns","enrichmentVariantsToRefs"],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { DatasetOption } from \"./dataset_selection\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\nimport { enrichmentVariantsToRefs, findEnrichmentColumns } from \"./enrichment_discovery\";\nimport { ColumnsProvider, getCtxProviders } from \"../../columns\";\n\ntype SpecPredicateOption =\n | MultiColumnSelector\n | MultiColumnSelector[]\n | ((spec: PObjectSpec) => boolean);\n\nfunction toPredicate(opt: SpecPredicateOption | undefined): (spec: PObjectSpec) => boolean {\n if (opt === undefined) return () => true;\n return typeof opt === \"function\" ? opt : multiColumnSelectorsToPredicate(opt);\n}\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n primary?: SpecPredicateOption;\n /**\n * Restricts which result pool columns are considered as filters. Intersected\n * with the built-in `pl7.app/isSubset: \"true\"` constraint. Defaults to\n * accept-all.\n */\n filter?: SpecPredicateOption;\n /**\n * Formatting options forwarded to label derivation for both filter and\n * enrichment rows. `formatters.native` on the filter path is overridden\n * — see `FilterMatchOptions.labelOptions`.\n */\n labelOptions?: DeriveLabelsOptions;\n /**\n * Enables enrichment discovery and filters hits attached to\n * `DatasetOption.enrichments`. Use `() => true` to accept all; omit to disable.\n */\n withEnrichments?: SpecPredicateOption;\n /** Maximum linker hops considered. Only used when `withEnrichments` is set. */\n enrichmentMaxHops?: number;\n};\n\n/**\n * Usage:\n * ```ts\n * .output(\"datasetOptions\", (ctx) => buildDatasetOptions(ctx))\n * ```\n */\nexport function buildDatasetOptions(\n ctx: RenderCtxBase,\n opts?: BuildDatasetOptions,\n): DatasetOption[] | undefined {\n const primaryPredicate = toPredicate(opts?.primary);\n const filterPredicate = toPredicate(opts?.filter);\n\n const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n\n const withEnrichments = opts?.withEnrichments ?? false;\n const filterSource = ColumnsProvider(ctx.ctx.getUpstreamBlockCtx());\n // Hoist providers once: getCtxProviders walks the full output tree, so\n // calling it per dataset option would be O(N × tree).\n const enrichmentSources = withEnrichments ? getCtxProviders(ctx) : undefined;\n\n return options.map((primary: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);\n if (!datasetSpec) return { primary };\n\n const filterMatches = findFilterColumns({\n sources: [filterSource],\n anchorSpec: datasetSpec,\n }).filter((m) => filterPredicate(m.getSpec()!));\n\n const filters =\n filterMatches.length === 0\n ? undefined\n : filterMatchesToOptions(filterMatches, {\n refsByObjectId: refMap,\n datasetSpec,\n labelOptions: opts?.labelOptions,\n });\n\n let enrichments;\n if (enrichmentSources && withEnrichments) {\n const enrichmentVariants = findEnrichmentColumns({\n sources: enrichmentSources,\n anchorSpec: datasetSpec,\n maxHops: opts?.enrichmentMaxHops,\n ...(typeof withEnrichments === \"function\"\n ? { predicate: withEnrichments }\n : { include: withEnrichments }),\n });\n if (enrichmentVariants.length > 0) {\n enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);\n }\n }\n\n return {\n primary,\n ...(filters !== undefined && filters.length > 0 ? { filters } : {}),\n ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),\n };\n });\n}\n"],"mappings":";;;;;;;AAcA,SAAS,YAAY,KAAsE;CACzF,IAAI,QAAQ,KAAA,GAAW,aAAa;CACpC,OAAO,OAAO,QAAQ,aAAa,OAAA,GAAA,gCAAA,gCAAA,CAAsC,GAAG;AAC9E;;;;;;;AAgCA,SAAgB,oBACd,KACA,MAC6B;CAC7B,MAAM,mBAAmB,YAAY,MAAM,OAAO;CAClD,MAAM,kBAAkB,YAAY,MAAM,MAAM;CAEhD,MAAM,UAAU,IAAI,WAAW,WAAW,kBAAkB,EAAE,qBAAqB,KAAK,CAAC;CACzF,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAElC,MAAM,SAASA,yBAAAA,YAAY,IAAI,WAAW,SAAS,CAAC,CAAC,OAAO;CAE5D,MAAM,kBAAkB,MAAM,mBAAmB;CACjD,MAAM,eAAeC,kBAAAA,gBAAgB,IAAI,IAAI,oBAAoB,CAAC;CAGlE,MAAM,oBAAoB,kBAAkBC,cAAAA,gBAAgB,GAAG,IAAI,KAAA;CAEnE,OAAO,QAAQ,KAAK,YAAmC;EACrD,MAAM,cAAc,IAAI,WAAW,oBAAoB,QAAQ,GAAG;EAClE,IAAI,CAAC,aAAa,OAAO,EAAE,QAAQ;EAEnC,MAAM,gBAAgBC,yBAAAA,kBAAkB;GACtC,SAAS,CAAC,YAAY;GACtB,YAAY;EACd,CAAC,CAAC,CAAC,QAAQ,MAAM,gBAAgB,EAAE,QAAQ,CAAE,CAAC;EAE9C,MAAM,UACJ,cAAc,WAAW,IACrB,KAAA,IACAC,yBAAAA,uBAAuB,eAAe;GACpC,gBAAgB;GAChB;GACA,cAAc,MAAM;EACtB,CAAC;EAEP,IAAI;EACJ,IAAI,qBAAqB,iBAAiB;GACxC,MAAM,qBAAqBC,6BAAAA,sBAAsB;IAC/C,SAAS;IACT,YAAY;IACZ,SAAS,MAAM;IACf,GAAI,OAAO,oBAAoB,aAC3B,EAAE,WAAW,gBAAgB,IAC7B,EAAE,SAAS,gBAAgB;GACjC,CAAC;GACD,IAAI,mBAAmB,SAAS,GAC9B,cAAcC,6BAAAA,yBAAyB,oBAAoB,MAAM,YAAY;EAEjF;EAEA,OAAO;GACL;GACA,GAAI,YAAY,KAAA,KAAa,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;GACjE,GAAI,gBAAgB,KAAA,KAAa,YAAY,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;EAC/E;CACF,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"build_dataset_options.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"mappings":";;;;;;KAcK,mBAAA,GACD,mBAAA,GACA,mBAAA,OACE,IAAA,EAAM,WAAA;AAAA,KAOA,mBAAA;wEAEV,OAAA,GAAU,mBAAA;EAZY;;;;;EAkBtB,MAAA,GAAS,mBAAA;EAfY;;;;;EAqBrB,YAAA,GAAe,mBAAA;EArBM;AAOvB;;;EAmBE,eAAA,GAAkB,mBAAA,EAXT;EAaT,iBAAA;AAAA;;;;;;;iBASc,mBAAA,CACd,GAAA,EAAK,aAAA,EACL,IAAA,GAAO,mBAAA,GACN,aAAA"}
1
+ {"version":3,"file":"build_dataset_options.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"mappings":";;;;;;KASK,mBAAA,GACD,mBAAA,GACA,mBAAA,OACE,IAAA,EAAM,WAAA;AAAA,KAOA,mBAAA;wEAEV,OAAA,GAAU,mBAAA;EAZY;;;;;EAkBtB,MAAA,GAAS,mBAAA;EAfY;;;;;EAqBrB,YAAA,GAAe,mBAAA;EArBM;AAOvB;;;EAmBE,eAAA,GAAkB,mBAAA,EAXT;EAaT,iBAAA;AAAA;;;;;;;iBASc,mBAAA,CACd,GAAA,EAAK,aAAA,EACL,IAAA,GAAO,mBAAA,GACN,aAAA"}