@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
@@ -1,162 +1,204 @@
1
- import { collectFilterSpecColumns, traverseFilterSpec } from "../../../filters/traverse.js";
1
+ import { collectLinkerColumns, hitQualifications, isLeafColumn, queriesQualifications } from "../../../columns/utils.js";
2
+ import "../../../columns/index.js";
3
+ import { collectFilterSpecColumns } from "../../../filters/traverse.js";
2
4
  import { upgradePlDataTableStateV2 } from "../state-migration.js";
3
5
  import { createPTableDefV3 } from "./createPTableDefV3.js";
4
- import { deriveAllLabels, deriveAllTooltips, evaluateRules, isColumnHidden, isColumnOptional, withDataStatusAnnotations, withHidenAxesAnnotations, withInfoAnnotations, withLabelAnnotations, withTableVisualAnnotations } from "./utils.js";
5
- import { discoverLabelColumnVariants, discoverTableColumnSnaphots } from "./discoverColumns.js";
6
- import { canonicalizeJson, getAxisId, parseJson, uniqueBy } from "@milaboratories/pl-model-common";
7
- import { getField, isNil, isPlainObject, throwError } from "@milaboratories/helpers";
8
- import { flow } from "es-toolkit";
9
- import { isEmpty } from "es-toolkit/compat";
6
+ import { buildDataStatusMap, deriveAllLabels, evaluateRules, getEffectiveVisibility, getOrderPriority, isColumnHidden, toRuleColumn } from "./utils.js";
7
+ import { createColumnResolver } from "../columnResolver.js";
8
+ import { discoverLabelColumns, discoverTableColumns } from "./discoverColumns.js";
9
+ import { canonicalizeAxisId, dedupColumns, extractPObjectId, uniqueBy } from "@milaboratories/pl-model-common";
10
+ import { isNil, isPlainObject } from "@milaboratories/helpers";
11
+ import { uniq } from "es-toolkit";
10
12
  //#region src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts
11
13
  function createPlDataTableV3(ctx, options) {
12
- const pframeSpec = ctx.getService("pframeSpec");
13
14
  const state = upgradePlDataTableStateV2(options.tableState);
14
15
  const primaryJoinType = options.primaryJoinType ?? "full";
15
- const discovered = isPlainObject(options.columns) ? discoverTableColumnSnaphots(ctx, options.columns) : isNil(options.columns) ? options.columns : uniqueBy([...options.columns, ...discoverLabelColumnVariants(ctx, options.columns)], (c) => c.column.id);
16
- if (isNil(discovered) || discovered.length === 0) return void 0;
17
- const splited = splitDiscoveredColumns(discovered);
16
+ const resolved = resolveInputColumns(ctx, options);
17
+ if (resolved === void 0) return void 0;
18
+ const { primary, secondary } = resolved;
19
+ if (primary.length === 0) return void 0;
20
+ const { direct, linked } = splitByTopology(secondary);
18
21
  const derivedLabels = deriveAllLabels({
19
- columns: discovered.map((dc) => ({
20
- id: dc.column.id,
21
- spec: dc.column.spec,
22
- linkerPath: dc.path,
23
- qualifications: dc.qualifications
24
- })).filter((v) => !isColumnHidden(v.spec)),
22
+ columns: [...primary, ...secondary].filter((c) => !isColumnHidden(c.getSpec())).map(toLabelableColumn),
25
23
  deriveLabelsOptions: {
26
24
  includeNativeLabel: true,
27
25
  ...options.labelsOptions
28
26
  }
29
27
  });
30
- const derivedTooltips = deriveAllTooltips({ columns: discovered.map((dc) => ({
31
- id: dc.column.id,
32
- originalId: getField(dc, "originalId"),
33
- spec: dc.column.spec,
34
- linkerPath: dc.path,
35
- qualifications: dc.qualifications
36
- })) });
37
- const annotated = annotateColumnGroups({
38
- pframeSpec,
39
- ...splited,
40
- derivedLabels,
41
- derivedTooltips,
42
- displayOptions: options.displayOptions
43
- });
44
- const primarySnapshots = annotated.direct.filter((c) => c.isPrimary);
45
- const secondarySnapshots = annotated.direct.filter((c) => !c.isPrimary);
46
- if (primarySnapshots.length === 0) return void 0;
47
- const columnIsAvailable = createColumnValidationById([...annotated.direct.map((v) => v.column), ...annotated.linked.flatMap((lc) => [...(lc.path ?? []).map((s) => s.linker), lc.column])]);
48
- const remapedDefaultFilters = remapFilterColumnIds(options.filters, discovered);
49
- const filters = filterFilters(concatFilters(state.pTableParams.filters, state.pTableParams.defaultFilters ?? remapedDefaultFilters), columnIsAvailable);
50
- const sorting = filterSorting(resolveSorting(state.pTableParams.sorting, remapSortingColumnIds(options.sorting, discovered)), columnIsAvailable);
51
- const primaryEntries = primarySnapshots.map((v) => ({ column: resolveSnapshot(v.column) }));
28
+ const allColumnsForRules = [
29
+ ...primary,
30
+ ...direct,
31
+ ...linked,
32
+ ...collectLinkerSnapshots(linked)
33
+ ];
34
+ const visibilityByColId = evaluateRules(options.displayOptions?.visibility ?? [], allColumnsForRules);
35
+ const orderByColId = evaluateRules(options.displayOptions?.ordering ?? [], allColumnsForRules);
36
+ const resolver = createColumnResolver([
37
+ ...primary,
38
+ ...direct,
39
+ ...linked.flatMap((lc) => [...collectLinkerColumns(lc), lc])
40
+ ], { warn: ctx.logWarn.bind(ctx) });
41
+ const remapedDefaultFilters = remapFilterColumnIds(options.filters, resolver);
42
+ const filters = filterFilters(concatFilters(state.pTableParams.filters, state.pTableParams.defaultFilters ?? remapedDefaultFilters), resolver);
43
+ const sorting = filterSorting(resolveSorting(state.pTableParams.sorting, remapSortingColumnIds(options.sorting, resolver)), resolver);
52
44
  const fullDef = createPTableDefV3({
53
45
  primaryJoinType,
54
- primary: primaryEntries,
55
- secondary: buildSecondaryGroups(secondarySnapshots, annotated.linked),
46
+ primary,
47
+ secondary: [...direct, ...linked],
56
48
  filters,
57
49
  sorting
58
50
  });
59
51
  const fullHandle = ctx.createPTableV2(fullDef);
60
- const pframeHandle = ctx.createPFrame([
61
- ...annotated.direct.map((v) => resolveSnapshot(v.column)),
62
- ...annotated.linked.map((v) => resolveSnapshot(v.column)),
63
- ...collectLinkerSnapshots(annotated.linked).map(resolveSnapshot)
64
- ]);
52
+ const pframeHandle = ctx.createPFrame(uniq([
53
+ ...primary.map((v) => extractPObjectId(v.id)),
54
+ ...direct.map((v) => extractPObjectId(v.id)),
55
+ ...linked.map((v) => extractPObjectId(v.id))
56
+ ]));
65
57
  const hiddenSpecs = state.pTableParams.hiddenColIds;
66
- const visible = buildVisibleColumns(annotated, computeHiddenColumns([...annotated.direct, ...annotated.linked].map((v) => v.column), sorting, filters, hiddenSpecs));
58
+ const hiddenColumnIds = computeHiddenColumns({
59
+ columns: [
60
+ ...primary,
61
+ ...direct,
62
+ ...linked
63
+ ],
64
+ visibilityByColId,
65
+ sorting,
66
+ filters,
67
+ hiddenSpecs
68
+ });
69
+ const visible = {
70
+ primary,
71
+ direct: direct.filter((c) => !hiddenColumnIds.has(c.id)),
72
+ linked: linked.filter((c) => !hiddenColumnIds.has(c.id))
73
+ };
67
74
  const visibleDef = createPTableDefV3({
68
75
  primaryJoinType,
69
- primary: primaryEntries,
70
- secondary: buildSecondaryGroups(visible.direct.filter((c) => !c.isPrimary), visible.linked),
76
+ primary,
77
+ secondary: [...visible.direct, ...visible.linked],
71
78
  filters,
72
79
  sorting
73
80
  });
74
81
  const visibleHandle = ctx.createPTableV2(visibleDef);
82
+ const columnsMeta = buildColumnsMeta({
83
+ fullColumns: [
84
+ ...primary,
85
+ ...direct,
86
+ ...linked
87
+ ],
88
+ visibleColumns: [
89
+ ...visible.primary,
90
+ ...visible.direct,
91
+ ...visible.linked
92
+ ],
93
+ primaryColumns: primary,
94
+ derivedLabels,
95
+ visibilityByColId,
96
+ orderByColId
97
+ });
75
98
  return {
76
99
  sourceId: state.pTableParams.sourceId,
77
100
  fullTableHandle: fullHandle,
78
101
  fullPframeHandle: pframeHandle,
79
102
  visibleTableHandle: visibleHandle,
80
- defaultFilters: remapedDefaultFilters
103
+ defaultFilters: remapedDefaultFilters,
104
+ columnsMeta
81
105
  };
82
106
  }
83
- /** Split discovered columns into direct (no linker path) and linked (with linker path). */
84
- function splitDiscoveredColumns(columns) {
107
+ /** Normalize either option branch into a {primary, secondary} pair of recipes. */
108
+ function resolveInputColumns(ctx, options) {
109
+ if ("primaryColumns" in options) {
110
+ const primary = options.primaryColumns;
111
+ const secondary = options.columns ?? [];
112
+ const labels = discoverLabelColumns(ctx, primary, [...primary, ...secondary]);
113
+ const primaryIds = new Set(primary.map((c) => c.id));
114
+ return {
115
+ primary,
116
+ secondary: dedupColumns([...secondary, ...labels].filter((c) => !primaryIds.has(c.id)), (c) => c.id, (c) => c.getSpec())
117
+ };
118
+ }
119
+ if (isPlainObject(options.columns)) return discoverTableColumns(ctx, options.columns);
120
+ }
121
+ /** Split secondary recipes by query topology: leaves (no linker chain) vs joined. */
122
+ function splitByTopology(columns) {
123
+ const direct = [];
124
+ const linked = [];
125
+ for (const c of columns) if (isLeafColumn(c)) direct.push(c);
126
+ else linked.push(c);
85
127
  return {
86
- direct: columns.filter((dc) => (dc.path?.length ?? 0) === 0),
87
- linked: columns.filter((dc) => (dc.path?.length ?? 0) > 0)
128
+ direct,
129
+ linked
88
130
  };
89
131
  }
90
- /** All linker snapshots across the given linked columns, deduped by id. */
132
+ /** All linker recipes across the given linked columns, deduped by id. */
91
133
  function collectLinkerSnapshots(linked) {
92
- return uniqueBy(linked.flatMap((lc) => (lc.path ?? []).map((s) => s.linker)), (c) => c.id);
134
+ return uniqueBy(linked.flatMap((c) => collectLinkerColumns(c)), (c) => c.id);
93
135
  }
94
- /**
95
- * Annotate all column groups with derived labels and display-rule annotations.
96
- * Evaluates `displayOptions` rules against all discovered columns (direct,
97
- * linked, labels, linkers) and writes the winning visibility/priority into
98
- * column annotations via `withTableVisualAnnotations`.
99
- */
100
- function annotateColumnGroups(params) {
101
- const { direct, linked, derivedLabels, derivedTooltips, displayOptions, pframeSpec } = params;
102
- const allColumnsForRules = [
103
- ...direct.map((v) => v.column),
104
- ...linked.map((v) => v.column),
105
- ...collectLinkerSnapshots(linked)
106
- ];
107
- const visibilityByColId = evaluateRules(displayOptions?.visibility ?? [], allColumnsForRules, pframeSpec);
108
- const orderByColId = evaluateRules(displayOptions?.ordering ?? [], allColumnsForRules, pframeSpec);
136
+ function toLabelableColumn(col) {
109
137
  return {
110
- direct: liftToVariantColumns(direct, flow((cols) => withDataStatusAnnotations(cols), (cols) => withLabelAnnotations(derivedLabels, cols), (cols) => withInfoAnnotations(derivedTooltips, cols), (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols))),
111
- linked: liftToVariantColumns(linked, flow((cols) => withDataStatusAnnotations(cols), (cols) => withHidenAxesAnnotations(cols), (cols) => withLabelAnnotations(derivedLabels, cols), (cols) => withInfoAnnotations(derivedTooltips, cols), (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols))).map((lc) => ({
112
- ...lc,
113
- path: annotateLinkerPath(derivedLabels, lc.path)
114
- }))
138
+ id: col.id,
139
+ spec: col.getSpec(),
140
+ linkerPath: collectLinkerColumns(col).map((linker) => ({ linker: { spec: linker.getSpec() } })),
141
+ qualifications: {
142
+ forHit: [...hitQualifications(col)],
143
+ forQueries: queriesQualifications(col)
144
+ }
115
145
  };
116
146
  }
117
- /** Lift a snapshot-array transform so it runs on the inner `column` of each variant. */
118
- function liftToVariantColumns(variants, fn) {
119
- const cols = fn(variants.map((v) => v.column));
120
- if (cols.length !== variants.length) throw new Error(`liftToVariantColumns: fn must preserve array length (got ${cols.length}, expected ${variants.length})`);
121
- return variants.map((v, i) => ({
122
- ...v,
123
- column: cols[i]
124
- }));
125
- }
126
- function annotateLinkerPath(derivedLabels, path) {
127
- if (isNil(path) || path.length === 0) return path;
128
- const annotatedLinkers = withHidenAxesAnnotations(withLabelAnnotations(derivedLabels, path.map((s) => s.linker)));
129
- return path.map((s, i) => ({
130
- ...s,
131
- linker: annotatedLinkers[i]
132
- }));
133
- }
134
- /** Build an index of all valid column IDs (axes + columns) for filter/sorting validation. */
135
- function createColumnValidationById(fullColumns) {
136
- const allIds = [...uniqueBy(fullColumns.flatMap((c) => c.spec.axesSpec.map(getAxisId)), (a) => canonicalizeJson(a)).map((a) => ({
137
- type: "axis",
138
- id: a
139
- })), ...fullColumns.map((c) => ({
140
- type: "column",
141
- id: c.id
142
- }))];
143
- const validIdSet = new Set(allIds.map((c) => canonicalizeJson(c)));
144
- return (id) => {
145
- return validIdSet.has(id);
147
+ /**
148
+ * Compute display metadata as a sidecar keyed by each emitted column's
149
+ * `ColumnUniversalId` (and axis `AxisId`), instead of baking it into the specs
150
+ * via `withSpecs`. Spec overrides change a recipe's id, so the same physical
151
+ * column reached two ways would diverge into two ids and render twice; keeping
152
+ * meta out of the spec preserves identity and lets dedup collapse such cases.
153
+ * The UI overlays this onto the engine-emitted specs at render time.
154
+ */
155
+ function buildColumnsMeta(params) {
156
+ const { fullColumns, visibleColumns, primaryColumns, derivedLabels } = params;
157
+ const { visibilityByColId, orderByColId } = params;
158
+ const visibleStatus = buildDataStatusMap(visibleColumns);
159
+ const columns = fullColumns.reduce((acc, c) => {
160
+ const rc = toRuleColumn(c);
161
+ acc[c.id] = {
162
+ label: derivedLabels[c.id],
163
+ visibility: getEffectiveVisibility(rc, visibilityByColId),
164
+ order: getOrderPriority(rc, orderByColId),
165
+ status: visibleStatus[c.id]
166
+ };
167
+ return acc;
168
+ }, {});
169
+ const primaryAxisKeys = new Set(primaryColumns.flatMap((c) => c.getSpec().axesSpec.map((a) => canonicalizeAxisId(a))));
170
+ return {
171
+ columns,
172
+ axes: fullColumns.reduce((acc, c) => c.getSpec().axesSpec.reduce((inner, ax) => {
173
+ const key = canonicalizeAxisId(ax);
174
+ if (inner[key] === void 0) inner[key] = { hidden: !primaryAxisKeys.has(key) };
175
+ return inner;
176
+ }, acc), {})
146
177
  };
147
178
  }
148
- /** Drop filter leaves whose column references are not available in the table. */
149
- function filterFilters(filters, isValidColumnId) {
179
+ /** Drop filter leaves whose column references cannot be resolved; rewrite the
180
+ * resolvable ones through the resolver. Prune empty and/or/not groups. */
181
+ function filterFilters(filters, resolver) {
150
182
  if (isNil(filters)) return filters;
151
- const isLeafValid = (leaf) => {
152
- if (leaf.type === void 0) return true;
153
- if ("column" in leaf && !isValidColumnId(leaf.column)) return false;
154
- if ("rhs" in leaf && !isValidColumnId(leaf.rhs)) return false;
155
- return true;
183
+ const rewriteLeaf = (leaf) => {
184
+ if (leaf.type === void 0) return leaf;
185
+ const result = { ...leaf };
186
+ if ("column" in result) {
187
+ const c = resolver(result.column);
188
+ if (isNil(c)) return void 0;
189
+ result.column = c;
190
+ }
191
+ if ("rhs" in result) {
192
+ const c = resolver(result.rhs);
193
+ if (isNil(c)) return void 0;
194
+ result.rhs = c;
195
+ }
196
+ return result;
156
197
  };
157
198
  const prune = (node) => {
158
199
  if (node.type === "and" || node.type === "or") {
159
200
  const kept = node.filters.map((f) => prune(f)).filter((f) => !isNil(f));
201
+ if (kept.length === 0) return void 0;
160
202
  return {
161
203
  type: node.type,
162
204
  filters: kept
@@ -169,7 +211,7 @@ function filterFilters(filters, isValidColumnId) {
169
211
  filter: inner
170
212
  };
171
213
  }
172
- return isLeafValid(node) ? node : void 0;
214
+ return rewriteLeaf(node);
173
215
  };
174
216
  return prune(filters);
175
217
  }
@@ -182,34 +224,30 @@ function concatFilters(a, b) {
182
224
  filters: [...a.filters, ...b.filters]
183
225
  };
184
226
  }
185
- /** Pick user sorting from state if non-empty, otherwise fall back to options default. */
227
+ /** Pick user sorting from state if set, otherwise fall back to options default.
228
+ * null = user has not touched sorting → use default;
229
+ * [] = user has explicitly cleared sorting → no sorting (default ignored). */
186
230
  function resolveSorting(userSorting, defaultSorting) {
187
- return (isEmpty(userSorting) ? defaultSorting : userSorting) ?? [];
231
+ return (isNil(userSorting) ? defaultSorting : userSorting) ?? [];
188
232
  }
189
- /** Drop sorting entries whose column is not available in the table. */
190
- function filterSorting(sorting, isValidColumnId) {
191
- return sorting.filter((s) => isValidColumnId(canonicalizeJson(s.column)));
192
- }
193
- function buildSecondaryGroups(direct, linked) {
194
- return [...direct.map((c) => ({
195
- entries: [{
196
- column: resolveSnapshot(c.column),
197
- qualifications: c.qualifications?.forHit
198
- }],
199
- primaryQualifications: c.qualifications?.forQueries
200
- })), ...linked.map((lc) => ({
201
- entries: [{
202
- column: resolveSnapshot(lc.column),
203
- linkers: lc.path?.map((s) => resolveSnapshot(s.linker)),
204
- qualifications: lc.qualifications?.forHit
205
- }],
206
- primaryQualifications: lc.qualifications?.forQueries
207
- }))];
233
+ /** Rewrite sorting entries through the resolver; drop those that fail to resolve. */
234
+ function filterSorting(sorting, resolver) {
235
+ return sorting.flatMap((s) => {
236
+ const col = resolver(s.column);
237
+ return isNil(col) ? [] : [{
238
+ ...s,
239
+ column: col
240
+ }];
241
+ });
208
242
  }
209
- /** Determine which columns should be hidden based on state or optional-column defaults. */
210
- function computeHiddenColumns(columns, sorting, filters, hiddenSpecs) {
211
- const alwaysHidden = columns.filter((c) => isColumnHidden(c.spec)).map((c) => c.id);
212
- const optionalHidden = !isNil(hiddenSpecs) ? hiddenSpecs.filter((s) => s.type === "column").map((s) => s.id) : columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);
243
+ /** Determine which columns should be hidden based on state or optional-column defaults.
244
+ * Keyed by the recipe's logical {@link ColumnUniversalId} (rich) — variants of
245
+ * the same physical column are independently visible/hidden. */
246
+ function computeHiddenColumns(params) {
247
+ const { columns, visibilityByColId, sorting, filters, hiddenSpecs } = params;
248
+ const visibilityOf = (c) => getEffectiveVisibility(toRuleColumn(c), visibilityByColId);
249
+ const alwaysHidden = columns.filter((c) => visibilityOf(c) === "hidden").map((c) => c.id);
250
+ const optionalHidden = !isNil(hiddenSpecs) ? hiddenSpecs.filter((s) => s.type === "column").map((s) => s.id) : columns.filter((c) => visibilityOf(c) === "optional").map((c) => c.id);
213
251
  const initial = [...alwaysHidden, ...optionalHidden];
214
252
  const preserved = collectPreservedColumnIds(sorting, filters);
215
253
  return new Set(initial.filter((id) => !preserved.has(id)));
@@ -217,76 +255,68 @@ function computeHiddenColumns(columns, sorting, filters, hiddenSpecs) {
217
255
  /** Collect IDs of columns that must remain visible (sorted, filtered). */
218
256
  function collectPreservedColumnIds(sorting, filters) {
219
257
  const sortedIds = (sorting ?? []).map((s) => s.column).filter((c) => c.type === "column").map((c) => c.id);
220
- const filterIds = !isNil(filters) ? collectFilterSpecColumns(filters).flatMap((c) => {
221
- const obj = parseJson(c);
222
- return obj.type === "column" ? [obj.id] : [];
223
- }) : [];
258
+ const filterIds = !isNil(filters) ? collectFilterSpecColumns(filters).flatMap((c) => c.type === "column" ? [c.id] : []) : [];
224
259
  return /* @__PURE__ */ new Set([...sortedIds, ...filterIds]);
225
260
  }
226
- /** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */
227
- function buildVisibleColumns(annotated, hiddenColumns) {
228
- return {
229
- direct: annotated.direct.filter((c) => !hiddenColumns.has(c.column.id)),
230
- linked: annotated.linked.filter((c) => !hiddenColumns.has(c.column.id))
231
- };
232
- }
233
- /** Resolve a ColumnSnapshot to a PColumn with lazily-evaluated data. */
234
- function resolveSnapshot(snap) {
235
- return {
236
- id: snap.id,
237
- spec: snap.spec,
238
- data: snap.data?.get()
239
- };
240
- }
241
- /** Remap column references in sorting entries. */
242
- function remapSortingColumnIds(sorting, columns) {
261
+ /** Remap column references in sorting entries through the resolver.
262
+ * Unresolved entries are dropped with a warning (best-effort contract). */
263
+ function remapSortingColumnIds(sorting, resolver) {
243
264
  return sorting?.flatMap((s) => {
244
- if (s.column.type === "axis") return [s];
245
- const id = s.column.id;
246
- const column = columns.find((c) => (getField(c, "originalId") ?? c.column.id) === id);
247
- if (column === void 0) return [];
265
+ const col = resolver(s.column);
266
+ if (isNil(col)) {
267
+ console.warn(`Sorting column ${JSON.stringify(s.column)} does not match any discovered column — dropped.`);
268
+ return [];
269
+ }
248
270
  return [{
249
271
  ...s,
250
- column: {
251
- type: "column",
252
- id: column.column.id
253
- }
272
+ column: col
254
273
  }];
255
274
  });
256
275
  }
257
- /** Remap column references in a filter tree. */
258
- function remapFilterColumnIds(filters, columns) {
276
+ /** Remap column references in a filter tree through the resolver.
277
+ * Unresolved leaves are dropped with a warning; empty groups are pruned. */
278
+ function remapFilterColumnIds(filters, resolver) {
259
279
  if (isNil(filters)) return filters;
260
- const map = (tableColumnId) => {
261
- const parsed = parseJson(tableColumnId);
262
- if (parsed.type === "axis") return tableColumnId;
263
- const originalId = parsed.id;
264
- return canonicalizeJson({
265
- type: "column",
266
- id: (columns.find((c) => (getField(c, "originalId") ?? c.column.id) === originalId) ?? throwError(`Column ID "${parsed.id}" in filters does not match any discovered column`)).column.id
267
- });
280
+ const mapLeaf = (leaf) => {
281
+ if (leaf.type === void 0) return leaf;
282
+ const result = { ...leaf };
283
+ if ("column" in result) {
284
+ const c = resolver(result.column);
285
+ if (isNil(c)) {
286
+ console.warn(`Filter column ${JSON.stringify(result.column)} does not match any discovered column — dropped.`);
287
+ return;
288
+ }
289
+ result.column = c;
290
+ }
291
+ if ("rhs" in result) {
292
+ const c = resolver(result.rhs);
293
+ if (isNil(c)) {
294
+ console.warn(`Filter rhs ${JSON.stringify(result.rhs)} does not match any discovered column — dropped.`);
295
+ return;
296
+ }
297
+ result.rhs = c;
298
+ }
299
+ return result;
268
300
  };
269
- return traverseFilterSpec(filters, {
270
- leaf: (leaf) => {
271
- if (leaf.type === void 0) return leaf;
272
- const result = { ...leaf };
273
- if ("column" in result) result.column = map(result.column);
274
- if ("rhs" in result) result.rhs = map(result.rhs);
275
- return result;
276
- },
277
- and: (results) => ({
278
- type: "and",
279
- filters: results
280
- }),
281
- or: (results) => ({
282
- type: "or",
283
- filters: results
284
- }),
285
- not: (result) => ({
286
- type: "not",
287
- filter: result
288
- })
289
- });
301
+ const prune = (node) => {
302
+ if (node.type === "and" || node.type === "or") {
303
+ const kept = node.filters.map((f) => prune(f)).filter((f) => !isNil(f));
304
+ if (kept.length === 0) return void 0;
305
+ return {
306
+ type: node.type,
307
+ filters: kept
308
+ };
309
+ }
310
+ if (node.type === "not") {
311
+ const inner = prune(node.filter);
312
+ return isNil(inner) ? void 0 : {
313
+ type: "not",
314
+ filter: inner
315
+ };
316
+ }
317
+ return mapLeaf(node);
318
+ };
319
+ return prune(filters);
290
320
  }
291
321
  //#endregion
292
322
  export { createPlDataTableV3 };