@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 +1 @@
1
- {"version":3,"file":"PFrameForGraphs.js","names":[],"sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PFrameHandle } from \"@milaboratories/pl-model-common\";\nimport { Annotation, readAnnotationJson } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../render\";\nimport { getAllRelatedColumns, getRelatedColumns } from \"../pframe_utils/columns\";\nexport type { AxesVault } from \"../pframe_utils/axes\";\nexport { enrichCompatible, getAvailableWithLinkersAxes } from \"../pframe_utils/axes\";\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtxBase<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n const suitableSpec = (spec: PColumnSpec) =>\n !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n }\n\n return ctx.createPFrame(\n getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }),\n );\n}\n"],"mappings":";;;;AAOA,SAAgB,wBAAwB,QAA8B;CACpE,OAAO,CAAC,CAAC,mBAAmB,QAAQ,WAAW,kBAAkB;AACnE;AAEA,SAAgB,qBAAqB,QAA8B;CACjE,OAAO,CAAC,CAAC,mBAAmB,QAAQ,WAAW,cAAc;AAC/D;;;;;;;;;;;;;AAcA,SAAgB,sBACd,KACA,cAC0B;CAC1B,MAAM,gBAAgB,SACpB,CAAC,qBAAqB,IAAI,KAAK,CAAC,wBAAwB,IAAI;CAE9D,IAAI,CAAC,cACH,OAAO,IAAI,aAAa,qBAAqB,KAAK,YAAY,CAAC;CAGjE,OAAO,IAAI,aACT,kBAAkB,KAAK;EAAE,SAAS;EAAc,WAAW;CAAa,CAAC,CAC3E;AACF"}
1
+ {"version":3,"file":"PFrameForGraphs.js","names":[],"sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PFrameHandle } from \"@milaboratories/pl-model-common\";\nimport { Annotation, readAnnotationJson } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../render\";\nimport { getAllRelatedColumns, getRelatedColumns } from \"../pframe_utils/columns\";\nexport type { AxesVault } from \"../pframe_utils/axes\";\nexport { enrichCompatible, getAvailableWithLinkersAxes } from \"../pframe_utils/axes\";\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtxBase<A, U>,\n blockColumns?: PColumn<undefined | PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n if (blockColumns?.some((v) => v.data === undefined)) return undefined;\n\n const suitableSpec = (spec: PColumnSpec) =>\n !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n }\n\n return ctx.createPFrame(\n getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }),\n );\n}\n"],"mappings":";;;;AAOA,SAAgB,wBAAwB,QAA8B;CACpE,OAAO,CAAC,CAAC,mBAAmB,QAAQ,WAAW,kBAAkB;AACnE;AAEA,SAAgB,qBAAqB,QAA8B;CACjE,OAAO,CAAC,CAAC,mBAAmB,QAAQ,WAAW,cAAc;AAC/D;;;;;;;;;;;;;AAcA,SAAgB,sBACd,KACA,cAC0B;CAC1B,IAAI,cAAc,MAAM,MAAM,EAAE,SAAS,KAAA,CAAS,GAAG,OAAO,KAAA;CAE5D,MAAM,gBAAgB,SACpB,CAAC,qBAAqB,IAAI,KAAK,CAAC,wBAAwB,IAAI;CAE9D,IAAI,CAAC,cACH,OAAO,IAAI,aAAa,qBAAqB,KAAK,YAAY,CAAC;CAGjE,OAAO,IAAI,aACT,kBAAkB,KAAK;EAAE,SAAS;EAAc,WAAW;CAAa,CAAC,CAC3E;AACF"}
@@ -0,0 +1,28 @@
1
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
2
+ //#region src/components/PlDataTable/columnResolver.ts
3
+ function createColumnResolver(columns, deps) {
4
+ const axisIds = [];
5
+ for (const c of columns) for (const ax of c.getSpec().axesSpec) axisIds.push((0, _milaboratories_pl_model_common.getAxisId)(ax));
6
+ const byFullId = /* @__PURE__ */ new Map();
7
+ const byPObjectId = /* @__PURE__ */ new Map();
8
+ for (const c of columns) {
9
+ byFullId.set(c.id, c);
10
+ const pid = (0, _milaboratories_pl_model_common.extractPObjectId)(c.id);
11
+ const existing = byPObjectId.get(pid);
12
+ if (existing === void 0) byPObjectId.set(pid, c);
13
+ else if (existing.id !== c.id) deps?.warn?.(`Ambiguous PObjectId ${pid}: recipe ids ${existing.id} and ${c.id} both match — keeping first.`);
14
+ }
15
+ return (ref) => {
16
+ if (ref.type === "axis") return axisIds.some((a) => (0, _milaboratories_pl_model_common.matchAxisId)(ref.id, a)) ? ref : void 0;
17
+ const hit = byFullId.get(ref.id) ?? byPObjectId.get((0, _milaboratories_pl_model_common.extractPObjectId)(ref.id));
18
+ if (hit === void 0) return void 0;
19
+ return {
20
+ type: "column",
21
+ id: hit.id
22
+ };
23
+ };
24
+ }
25
+ //#endregion
26
+ exports.createColumnResolver = createColumnResolver;
27
+
28
+ //# sourceMappingURL=columnResolver.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnResolver.cjs","names":[],"sources":["../../../src/components/PlDataTable/columnResolver.ts"],"sourcesContent":["import type {\n AxisId,\n ColumnUniversalId,\n PObjectId,\n PTableColumnId,\n PTableColumnIdColumn,\n} from \"@milaboratories/pl-model-common\";\nimport { extractPObjectId, getAxisId, matchAxisId } from \"@milaboratories/pl-model-common\";\nimport type { ColumnRecipe } from \"../../columns\";\n\n/**\n * Resolves a user-supplied PTableColumnId against the discovered set of\n * columns and axes. For column refs, accepts either the full recipe id (rich\n * {@link ColumnUniversalId}) or the bare {@link PObjectId} and returns a ref\n * carrying the recipe's full id — the same id that appears as the leaf in the\n * emitted SpecQuery, so engine-side dedup is consistent with the resolver's\n * view. Axis refs are checked against the union of axes spanned by the\n * columns and pass through unchanged on hit.\n * Returns `undefined` when the reference cannot be matched.\n */\nexport type ColumnResolver = (ref: PTableColumnId) => PTableColumnId | undefined;\n\nexport function createColumnResolver(\n columns: ColumnRecipe[],\n deps?: { warn?: (msg: string) => void },\n): ColumnResolver {\n const axisIds: AxisId[] = [];\n for (const c of columns) {\n for (const ax of c.getSpec().axesSpec) {\n axisIds.push(getAxisId(ax));\n }\n }\n\n const byFullId = new Map<ColumnUniversalId, ColumnRecipe>();\n const byPObjectId = new Map<PObjectId, ColumnRecipe>();\n for (const c of columns) {\n byFullId.set(c.id, c);\n const pid = extractPObjectId(c.id);\n const existing = byPObjectId.get(pid);\n if (existing === undefined) {\n byPObjectId.set(pid, c);\n } else if (existing.id !== c.id) {\n deps?.warn?.(\n `Ambiguous PObjectId ${pid}: recipe ids ${existing.id} and ${c.id} both match — keeping first.`,\n );\n }\n }\n\n return (ref: PTableColumnId): PTableColumnId | undefined => {\n if (ref.type === \"axis\") {\n return axisIds.some((a) => matchAxisId(ref.id, a)) ? ref : undefined;\n }\n const hit = byFullId.get(ref.id) ?? byPObjectId.get(extractPObjectId(ref.id));\n if (hit === undefined) return undefined;\n return { type: \"column\", id: hit.id } satisfies PTableColumnIdColumn;\n };\n}\n"],"mappings":";;AAsBA,SAAgB,qBACd,SACA,MACgB;CAChB,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,KAAK,SACd,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC,UAC3B,QAAQ,MAAA,GAAA,gCAAA,UAAA,CAAe,EAAE,CAAC;CAI9B,MAAM,2BAAW,IAAI,IAAqC;CAC1D,MAAM,8BAAc,IAAI,IAA6B;CACrD,KAAK,MAAM,KAAK,SAAS;EACvB,SAAS,IAAI,EAAE,IAAI,CAAC;EACpB,MAAM,OAAA,GAAA,gCAAA,iBAAA,CAAuB,EAAE,EAAE;EACjC,MAAM,WAAW,YAAY,IAAI,GAAG;EACpC,IAAI,aAAa,KAAA,GACf,YAAY,IAAI,KAAK,CAAC;OACjB,IAAI,SAAS,OAAO,EAAE,IAC3B,MAAM,OACJ,uBAAuB,IAAI,eAAe,SAAS,GAAG,OAAO,EAAE,GAAG,6BACpE;CAEJ;CAEA,QAAQ,QAAoD;EAC1D,IAAI,IAAI,SAAS,QACf,OAAO,QAAQ,MAAM,OAAA,GAAA,gCAAA,YAAA,CAAkB,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,KAAA;EAE7D,MAAM,MAAM,SAAS,IAAI,IAAI,EAAE,KAAK,YAAY,KAAA,GAAA,gCAAA,iBAAA,CAAqB,IAAI,EAAE,CAAC;EAC5E,IAAI,QAAQ,KAAA,GAAW,OAAO,KAAA;EAC9B,OAAO;GAAE,MAAM;GAAU,IAAI,IAAI;EAAG;CACtC;AACF"}
@@ -0,0 +1,28 @@
1
+ import { extractPObjectId, getAxisId, matchAxisId } from "@milaboratories/pl-model-common";
2
+ //#region src/components/PlDataTable/columnResolver.ts
3
+ function createColumnResolver(columns, deps) {
4
+ const axisIds = [];
5
+ for (const c of columns) for (const ax of c.getSpec().axesSpec) axisIds.push(getAxisId(ax));
6
+ const byFullId = /* @__PURE__ */ new Map();
7
+ const byPObjectId = /* @__PURE__ */ new Map();
8
+ for (const c of columns) {
9
+ byFullId.set(c.id, c);
10
+ const pid = extractPObjectId(c.id);
11
+ const existing = byPObjectId.get(pid);
12
+ if (existing === void 0) byPObjectId.set(pid, c);
13
+ else if (existing.id !== c.id) deps?.warn?.(`Ambiguous PObjectId ${pid}: recipe ids ${existing.id} and ${c.id} both match — keeping first.`);
14
+ }
15
+ return (ref) => {
16
+ if (ref.type === "axis") return axisIds.some((a) => matchAxisId(ref.id, a)) ? ref : void 0;
17
+ const hit = byFullId.get(ref.id) ?? byPObjectId.get(extractPObjectId(ref.id));
18
+ if (hit === void 0) return void 0;
19
+ return {
20
+ type: "column",
21
+ id: hit.id
22
+ };
23
+ };
24
+ }
25
+ //#endregion
26
+ export { createColumnResolver };
27
+
28
+ //# sourceMappingURL=columnResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnResolver.js","names":[],"sources":["../../../src/components/PlDataTable/columnResolver.ts"],"sourcesContent":["import type {\n AxisId,\n ColumnUniversalId,\n PObjectId,\n PTableColumnId,\n PTableColumnIdColumn,\n} from \"@milaboratories/pl-model-common\";\nimport { extractPObjectId, getAxisId, matchAxisId } from \"@milaboratories/pl-model-common\";\nimport type { ColumnRecipe } from \"../../columns\";\n\n/**\n * Resolves a user-supplied PTableColumnId against the discovered set of\n * columns and axes. For column refs, accepts either the full recipe id (rich\n * {@link ColumnUniversalId}) or the bare {@link PObjectId} and returns a ref\n * carrying the recipe's full id — the same id that appears as the leaf in the\n * emitted SpecQuery, so engine-side dedup is consistent with the resolver's\n * view. Axis refs are checked against the union of axes spanned by the\n * columns and pass through unchanged on hit.\n * Returns `undefined` when the reference cannot be matched.\n */\nexport type ColumnResolver = (ref: PTableColumnId) => PTableColumnId | undefined;\n\nexport function createColumnResolver(\n columns: ColumnRecipe[],\n deps?: { warn?: (msg: string) => void },\n): ColumnResolver {\n const axisIds: AxisId[] = [];\n for (const c of columns) {\n for (const ax of c.getSpec().axesSpec) {\n axisIds.push(getAxisId(ax));\n }\n }\n\n const byFullId = new Map<ColumnUniversalId, ColumnRecipe>();\n const byPObjectId = new Map<PObjectId, ColumnRecipe>();\n for (const c of columns) {\n byFullId.set(c.id, c);\n const pid = extractPObjectId(c.id);\n const existing = byPObjectId.get(pid);\n if (existing === undefined) {\n byPObjectId.set(pid, c);\n } else if (existing.id !== c.id) {\n deps?.warn?.(\n `Ambiguous PObjectId ${pid}: recipe ids ${existing.id} and ${c.id} both match — keeping first.`,\n );\n }\n }\n\n return (ref: PTableColumnId): PTableColumnId | undefined => {\n if (ref.type === \"axis\") {\n return axisIds.some((a) => matchAxisId(ref.id, a)) ? ref : undefined;\n }\n const hit = byFullId.get(ref.id) ?? byPObjectId.get(extractPObjectId(ref.id));\n if (hit === undefined) return undefined;\n return { type: \"column\", id: hit.id } satisfies PTableColumnIdColumn;\n };\n}\n"],"mappings":";;AAsBA,SAAgB,qBACd,SACA,MACgB;CAChB,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,KAAK,SACd,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC,UAC3B,QAAQ,KAAK,UAAU,EAAE,CAAC;CAI9B,MAAM,2BAAW,IAAI,IAAqC;CAC1D,MAAM,8BAAc,IAAI,IAA6B;CACrD,KAAK,MAAM,KAAK,SAAS;EACvB,SAAS,IAAI,EAAE,IAAI,CAAC;EACpB,MAAM,MAAM,iBAAiB,EAAE,EAAE;EACjC,MAAM,WAAW,YAAY,IAAI,GAAG;EACpC,IAAI,aAAa,KAAA,GACf,YAAY,IAAI,KAAK,CAAC;OACjB,IAAI,SAAS,OAAO,EAAE,IAC3B,MAAM,OACJ,uBAAuB,IAAI,eAAe,SAAS,GAAG,OAAO,EAAE,GAAG,6BACpE;CAEJ;CAEA,QAAQ,QAAoD;EAC1D,IAAI,IAAI,SAAS,QACf,OAAO,QAAQ,MAAM,MAAM,YAAY,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,KAAA;EAE7D,MAAM,MAAM,SAAS,IAAI,IAAI,EAAE,KAAK,YAAY,IAAI,iBAAiB,IAAI,EAAE,CAAC;EAC5E,IAAI,QAAQ,KAAA,GAAW,OAAO,KAAA;EAC9B,OAAO;GAAE,MAAM;GAAU,IAAI,IAAI;EAAG;CACtC;AACF"}
@@ -1,3 +1,5 @@
1
+ const require_column_lazy = require("../../../columns/column_lazy.cjs");
2
+ require("../../../columns/index.cjs");
1
3
  const require_createPTableDefV3 = require("./createPTableDefV3.cjs");
2
4
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
3
5
  let es_toolkit = require("es-toolkit");
@@ -12,8 +14,8 @@ function createPTableDefV2(params) {
12
14
  }
13
15
  secondaryColumns.push(...params.labelColumns);
14
16
  return require_createPTableDefV3.createPTableDefV3({
15
- primary: coreColumns.map((column) => ({ column })),
16
- secondary: secondaryColumns.map((column) => ({ entries: [{ column }] })),
17
+ primary: coreColumns.map((column) => require_column_lazy.ColumnLazyImpl.fromColumn(column)),
18
+ secondary: secondaryColumns.map((column) => require_column_lazy.ColumnLazyImpl.fromColumn(column)),
17
19
  primaryJoinType: params.coreJoinType,
18
20
  filters: params.filters,
19
21
  sorting: params.sorting
@@ -1 +1 @@
1
- {"version":3,"file":"createPTableDefV2.cjs","names":["createPTableDefV3"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts"],"sourcesContent":["import type {\n PColumn,\n PColumnIdAndSpec,\n PTableSorting,\n PTableDefV2,\n DataInfo,\n PColumnValues,\n} from \"@milaboratories/pl-model-common\";\nimport { getColumnIdAndSpec } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, TreeNodeAccessor } from \"../../../render\";\nimport { isFunction } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\n\nexport function createPTableDefV2(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return createPTableDefV3({\n primary: coreColumns.map((column) => ({ column })),\n secondary: secondaryColumns.map((column) => ({ entries: [{ column }] })),\n primaryJoinType: params.coreJoinType,\n filters: params.filters,\n sorting: params.sorting,\n });\n}\n"],"mappings":";;;;AAcA,SAAgB,kBAAkB,QAOsD;CACtF,IAAI,cAAc,OAAO;CACzB,MAAM,mBAA0C,CAAC;CAEjD,KAAA,GAAA,WAAA,WAAA,CAAe,OAAO,mBAAmB,GAAG;EAC1C,cAAc,CAAC;EACf,KAAK,MAAM,KAAK,OAAO,SACrB,IAAI,OAAO,qBAAA,GAAA,gCAAA,mBAAA,CAAuC,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;OACpE,iBAAiB,KAAK,CAAC;CAChC;CAEA,iBAAiB,KAAK,GAAG,OAAO,YAAY;CAE5C,OAAOA,0BAAAA,kBAAkB;EACvB,SAAS,YAAY,KAAK,YAAY,EAAE,OAAO,EAAE;EACjD,WAAW,iBAAiB,KAAK,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE;EACvE,iBAAiB,OAAO;EACxB,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB,CAAC;AACH"}
1
+ {"version":3,"file":"createPTableDefV2.cjs","names":["createPTableDefV3","ColumnLazyImpl"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts"],"sourcesContent":["import type {\n ColumnUniversalId,\n PColumn,\n PColumnIdAndSpec,\n PTableSorting,\n PTableDefV2,\n} from \"@milaboratories/pl-model-common\";\nimport { getColumnIdAndSpec } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isFunction } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV8\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\nimport { ColumnLazyImpl } from \"../../../columns\";\n\nexport function createPTableDefV2(params: {\n columns: PColumn<undefined | PColumnDataUniversal>[];\n labelColumns: PColumn<undefined | PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<ColumnUniversalId> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return createPTableDefV3({\n primary: coreColumns.map((column) => ColumnLazyImpl.fromColumn(column)),\n secondary: secondaryColumns.map((column) => ColumnLazyImpl.fromColumn(column)),\n primaryJoinType: params.coreJoinType,\n filters: params.filters,\n sorting: params.sorting,\n });\n}\n"],"mappings":";;;;;;AAcA,SAAgB,kBAAkB,QAOC;CACjC,IAAI,cAAc,OAAO;CACzB,MAAM,mBAA0C,CAAC;CAEjD,KAAA,GAAA,WAAA,WAAA,CAAe,OAAO,mBAAmB,GAAG;EAC1C,cAAc,CAAC;EACf,KAAK,MAAM,KAAK,OAAO,SACrB,IAAI,OAAO,qBAAA,GAAA,gCAAA,mBAAA,CAAuC,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;OACpE,iBAAiB,KAAK,CAAC;CAChC;CAEA,iBAAiB,KAAK,GAAG,OAAO,YAAY;CAE5C,OAAOA,0BAAAA,kBAAkB;EACvB,SAAS,YAAY,KAAK,WAAWC,oBAAAA,eAAe,WAAW,MAAM,CAAC;EACtE,WAAW,iBAAiB,KAAK,WAAWA,oBAAAA,eAAe,WAAW,MAAM,CAAC;EAC7E,iBAAiB,OAAO;EACxB,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB,CAAC;AACH"}
@@ -1,3 +1,5 @@
1
+ import { ColumnLazyImpl } from "../../../columns/column_lazy.js";
2
+ import "../../../columns/index.js";
1
3
  import { createPTableDefV3 } from "./createPTableDefV3.js";
2
4
  import { getColumnIdAndSpec } from "@milaboratories/pl-model-common";
3
5
  import { isFunction } from "es-toolkit";
@@ -12,8 +14,8 @@ function createPTableDefV2(params) {
12
14
  }
13
15
  secondaryColumns.push(...params.labelColumns);
14
16
  return createPTableDefV3({
15
- primary: coreColumns.map((column) => ({ column })),
16
- secondary: secondaryColumns.map((column) => ({ entries: [{ column }] })),
17
+ primary: coreColumns.map((column) => ColumnLazyImpl.fromColumn(column)),
18
+ secondary: secondaryColumns.map((column) => ColumnLazyImpl.fromColumn(column)),
17
19
  primaryJoinType: params.coreJoinType,
18
20
  filters: params.filters,
19
21
  sorting: params.sorting
@@ -1 +1 @@
1
- {"version":3,"file":"createPTableDefV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts"],"sourcesContent":["import type {\n PColumn,\n PColumnIdAndSpec,\n PTableSorting,\n PTableDefV2,\n DataInfo,\n PColumnValues,\n} from \"@milaboratories/pl-model-common\";\nimport { getColumnIdAndSpec } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, TreeNodeAccessor } from \"../../../render\";\nimport { isFunction } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\n\nexport function createPTableDefV2(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return createPTableDefV3({\n primary: coreColumns.map((column) => ({ column })),\n secondary: secondaryColumns.map((column) => ({ entries: [{ column }] })),\n primaryJoinType: params.coreJoinType,\n filters: params.filters,\n sorting: params.sorting,\n });\n}\n"],"mappings":";;;;AAcA,SAAgB,kBAAkB,QAOsD;CACtF,IAAI,cAAc,OAAO;CACzB,MAAM,mBAA0C,CAAC;CAEjD,IAAI,WAAW,OAAO,mBAAmB,GAAG;EAC1C,cAAc,CAAC;EACf,KAAK,MAAM,KAAK,OAAO,SACrB,IAAI,OAAO,oBAAoB,mBAAmB,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;OACpE,iBAAiB,KAAK,CAAC;CAChC;CAEA,iBAAiB,KAAK,GAAG,OAAO,YAAY;CAE5C,OAAO,kBAAkB;EACvB,SAAS,YAAY,KAAK,YAAY,EAAE,OAAO,EAAE;EACjD,WAAW,iBAAiB,KAAK,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE;EACvE,iBAAiB,OAAO;EACxB,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB,CAAC;AACH"}
1
+ {"version":3,"file":"createPTableDefV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts"],"sourcesContent":["import type {\n ColumnUniversalId,\n PColumn,\n PColumnIdAndSpec,\n PTableSorting,\n PTableDefV2,\n} from \"@milaboratories/pl-model-common\";\nimport { getColumnIdAndSpec } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isFunction } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV8\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\nimport { ColumnLazyImpl } from \"../../../columns\";\n\nexport function createPTableDefV2(params: {\n columns: PColumn<undefined | PColumnDataUniversal>[];\n labelColumns: PColumn<undefined | PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<ColumnUniversalId> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return createPTableDefV3({\n primary: coreColumns.map((column) => ColumnLazyImpl.fromColumn(column)),\n secondary: secondaryColumns.map((column) => ColumnLazyImpl.fromColumn(column)),\n primaryJoinType: params.coreJoinType,\n filters: params.filters,\n sorting: params.sorting,\n });\n}\n"],"mappings":";;;;;;AAcA,SAAgB,kBAAkB,QAOC;CACjC,IAAI,cAAc,OAAO;CACzB,MAAM,mBAA0C,CAAC;CAEjD,IAAI,WAAW,OAAO,mBAAmB,GAAG;EAC1C,cAAc,CAAC;EACf,KAAK,MAAM,KAAK,OAAO,SACrB,IAAI,OAAO,oBAAoB,mBAAmB,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;OACpE,iBAAiB,KAAK,CAAC;CAChC;CAEA,iBAAiB,KAAK,GAAG,OAAO,YAAY;CAE5C,OAAO,kBAAkB;EACvB,SAAS,YAAY,KAAK,WAAW,eAAe,WAAW,MAAM,CAAC;EACtE,WAAW,iBAAiB,KAAK,WAAW,eAAe,WAAW,MAAM,CAAC;EAC7E,iBAAiB,OAAO;EACxB,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB,CAAC;AACH"}
@@ -1,21 +1,34 @@
1
+ const require_utils = require("../../../columns/utils.cjs");
2
+ require("../../../columns/index.cjs");
1
3
  const require_filterToQuery = require("../../../filters/converters/filterToQuery.cjs");
2
4
  const require_distill = require("../../../filters/distill.cjs");
3
5
  require("../../../filters/index.cjs");
4
6
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
5
7
  let es_toolkit = require("es-toolkit");
6
8
  //#region src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts
9
+ /**
10
+ * Assemble a ptable def directly from recipes. Each secondary recipe is its own
11
+ * outer-joined subtree: `getQuery()` encodes its linker chain, and its
12
+ * hit-/queries-qualifications are derived on the spot via {@link hitQualifications}
13
+ * / {@link queriesQualifications} — no pre-extracted DTO. Bare leaves yield empty
14
+ * qualifications, so plain {@link ColumnRecipe} arrays (e.g. label columns) work
15
+ * unchanged.
16
+ */
7
17
  function createPTableDefV3(params) {
8
18
  let query = {
9
19
  type: params.primaryJoinType === "inner" ? "innerJoin" : "fullJoin",
10
- entries: params.primary.map((a) => toLeaf(a.column, []))
20
+ entries: params.primary.map((c) => columnToJoinEntry(c, []))
11
21
  };
12
22
  if (params.secondary.length > 0) query = {
13
23
  type: "outerJoin",
14
24
  primary: {
15
25
  entry: query,
16
- qualifications: params.secondary.flatMap((g) => params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []))
26
+ qualifications: params.secondary.flatMap((s) => {
27
+ const quals = require_utils.queriesQualifications(s);
28
+ return params.primary.flatMap((p) => quals[p.id] ?? []);
29
+ })
17
30
  },
18
- secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e)))
31
+ secondary: params.secondary.map((c) => columnToJoinEntry(c, require_utils.hitQualifications(c)))
19
32
  };
20
33
  if (!(0, es_toolkit.isNil)(params.filters)) {
21
34
  const nonEmpty = require_distill.distillFilterSpec(params.filters);
@@ -35,7 +48,7 @@ function createPTableDefV3(params) {
35
48
  sortBy: params.sorting.map((s) => ({
36
49
  expression: columnIdToExpr(s.column),
37
50
  ascending: s.ascending,
38
- nullsFirst: !s.naAndAbsentAreLeastValues
51
+ nullsFirst: s.naAndAbsentAreLeastValues
39
52
  }))
40
53
  };
41
54
  return { query };
@@ -49,28 +62,10 @@ function columnIdToExpr(col) {
49
62
  value: col.id
50
63
  };
51
64
  }
52
- function toLeaf(col, qs) {
65
+ function columnToJoinEntry(col, qualifications) {
53
66
  return {
54
- entry: {
55
- type: "column",
56
- column: col
57
- },
58
- qualifications: qs
59
- };
60
- }
61
- function toJoinEntry(e) {
62
- const qs = e.qualifications ?? [];
63
- if ((0, es_toolkit.isNil)(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);
64
- return {
65
- ...e.linkers.reduceRight((inner, linker) => ({
66
- entry: {
67
- type: "linkerJoin",
68
- linker: { column: linker },
69
- secondary: [inner]
70
- },
71
- qualifications: []
72
- }), toLeaf(e.column, [])),
73
- qualifications: qs
67
+ entry: col.getQuery(),
68
+ qualifications
74
69
  };
75
70
  }
76
71
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"createPTableDefV3.cjs","names":["distillFilterSpec","filterSpecToSpecQueryExpr"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n PColumn,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\n\n/** Primary side — base row grid. */\nexport type PrimaryEntry<Data> = {\n column: PColumn<Data>;\n};\n\n/** Secondary side leaf — the hit column or a label column, optionally reached via a linker chain. */\nexport type SecondaryEntry<Data> = {\n column: PColumn<Data>;\n /** For hit: `forHit`. For label/direct: omit. Applied to the outermost emitted join entry. */\n qualifications?: AxisQualification[];\n /**\n * Linker chain leading to `column`, ordered from outermost to innermost.\n * When present, the entry is emitted as nested `linkerJoin` operators —\n * one per linker — wrapping the hit column. Binds this hit to this exact\n * chain so the engine cannot reuse a sibling chain that happens to share\n * axis name + domain.\n */\n linkers?: PColumn<Data>[];\n};\n\n/** Secondary group — one join subtree outer-joined onto primary. */\nexport type SecondaryGroup<Data> = {\n entries: SecondaryEntry<Data>[];\n /** Per-variant qualifications applied to the cloned primary anchors on this group's side.\n * Keyed by `PrimaryEntry.column.id`. Omit → base primary used unqualified (labels, non-variant columns). */\n primaryQualifications?: Record<PObjectId, AxisQualification[]>;\n};\n\nexport function createPTableDefV3<Data = PColumnDataUniversal>(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: PrimaryEntry<Data>[];\n secondary: SecondaryGroup<Data>[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<PColumn<Data>> {\n let query: SpecQuery<PColumn<Data>> = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((a) => toLeaf(a.column, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((g) =>\n params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []),\n ),\n },\n secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction toLeaf<Data>(\n col: PColumn<Data>,\n qs: AxisQualification[],\n): SpecQueryJoinEntry<PColumn<Data>> {\n return {\n entry: { type: \"column\", column: col },\n qualifications: qs,\n };\n}\n\nfunction toJoinEntry<Data>(e: SecondaryEntry<Data>): SpecQueryJoinEntry<PColumn<Data>> {\n const qs = e.qualifications ?? [];\n if (isNil(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);\n\n const folded = e.linkers.reduceRight<SpecQueryJoinEntry<PColumn<Data>>>(\n (inner, linker) => ({\n entry: { type: \"linkerJoin\", linker: { column: linker }, secondary: [inner] },\n qualifications: [],\n }),\n toLeaf(e.column, []),\n );\n return { ...folded, qualifications: qs };\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,kBAA+C,QAMhC;CAC7B,IAAI,QAAkC;EACpC,MAAM,OAAO,oBAAoB,UAAU,cAAc;EACzD,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;CACzD;CAEA,IAAI,OAAO,UAAU,SAAS,GAC5B,QAAQ;EACN,MAAM;EACN,SAAS;GACP,OAAO;GACP,gBAAgB,OAAO,UAAU,SAAS,MACxC,OAAO,QAAQ,SAAS,MAAM,EAAE,wBAAwB,EAAE,OAAO,OAAO,CAAC,CAAC,CAC5E;EACF;EACA,WAAW,OAAO,UAAU,SAAS,MAAM,EAAE,QAAQ,KAAK,MAAM,YAAY,CAAC,CAAC,CAAC;CACjF;CAGF,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,OAAO,OAAO,GAAG;EAC1B,MAAM,WAAWA,gBAAAA,kBAAkB,OAAO,OAAO;EAEjD,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,QAAQ,GAAG;GACpB,MAAM,YAAYC,sBAAAA,0BAA0B,QAAQ;GACpD,IAAI,EAAA,GAAA,gCAAA,oBAAA,CAAqB,SAAS,GAChC,MAAM,IAAI,MACR,kEAAkE,UAAU,KAAK,qDACnF;GAEF,QAAQ;IACN,MAAM;IACN,OAAO;IACP,WAAW;GACb;EACF;CACF;CAEA,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,OAAO,OAAO,KAAK,OAAO,QAAQ,SAAS,GACpD,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ,OAAO,QAAQ,KAAK,OAAO;GACjC,YAAY,eAAe,EAAE,MAAM;GACnC,WAAW,EAAE;GACb,YAAY,CAAC,EAAE;EACjB,EAAE;CACJ;CAGF,OAAO,EAAE,MAAM;AACjB;AAEA,SAAS,eAAe,KAA0C;CAChE,OAAO,IAAI,SAAS,SAChB;EAAE,MAAM;EAAW,OAAO,IAAI;CAAyB,IACvD;EAAE,MAAM;EAAa,OAAO,IAAI;CAAG;AACzC;AAEA,SAAS,OACP,KACA,IACmC;CACnC,OAAO;EACL,OAAO;GAAE,MAAM;GAAU,QAAQ;EAAI;EACrC,gBAAgB;CAClB;AACF;AAEA,SAAS,YAAkB,GAA4D;CACrF,MAAM,KAAK,EAAE,kBAAkB,CAAC;CAChC,KAAA,GAAA,WAAA,MAAA,CAAU,EAAE,OAAO,KAAK,EAAE,QAAQ,WAAW,GAAG,OAAO,OAAO,EAAE,QAAQ,EAAE;CAS1E,OAAO;EAAE,GAPM,EAAE,QAAQ,aACtB,OAAO,YAAY;GAClB,OAAO;IAAE,MAAM;IAAc,QAAQ,EAAE,QAAQ,OAAO;IAAG,WAAW,CAAC,KAAK;GAAE;GAC5E,gBAAgB,CAAC;EACnB,IACA,OAAO,EAAE,QAAQ,CAAC,CAAC,CAEJ;EAAG,gBAAgB;CAAG;AACzC"}
1
+ {"version":3,"file":"createPTableDefV3.cjs","names":["queriesQualifications","hitQualifications","distillFilterSpec","filterSpecToSpecQueryExpr"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n ColumnUniversalId,\n PObjectId,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV8\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\nimport type { ColumnRecipe } from \"../../..\";\nimport { hitQualifications, queriesQualifications } from \"../../../columns\";\n\n/**\n * Assemble a ptable def directly from recipes. Each secondary recipe is its own\n * outer-joined subtree: `getQuery()` encodes its linker chain, and its\n * hit-/queries-qualifications are derived on the spot via {@link hitQualifications}\n * / {@link queriesQualifications} — no pre-extracted DTO. Bare leaves yield empty\n * qualifications, so plain {@link ColumnRecipe} arrays (e.g. label columns) work\n * unchanged.\n */\nexport function createPTableDefV3(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: ColumnRecipe[];\n secondary: ColumnRecipe[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<ColumnUniversalId> {\n let query: SpecQuery = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((c) => columnToJoinEntry(c, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((s) => {\n const quals = queriesQualifications(s);\n return params.primary.flatMap((p) => quals[p.id as PObjectId] ?? []);\n }),\n },\n secondary: params.secondary.map((c) => columnToJoinEntry(c, hitQualifications(c))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction columnToJoinEntry(\n col: ColumnRecipe,\n qualifications: readonly AxisQualification[],\n): SpecQueryJoinEntry {\n return {\n entry: col.getQuery(),\n qualifications,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA4BA,SAAgB,kBAAkB,QAMC;CACjC,IAAI,QAAmB;EACrB,MAAM,OAAO,oBAAoB,UAAU,cAAc;EACzD,SAAS,OAAO,QAAQ,KAAK,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAAC;CAC7D;CAEA,IAAI,OAAO,UAAU,SAAS,GAC5B,QAAQ;EACN,MAAM;EACN,SAAS;GACP,OAAO;GACP,gBAAgB,OAAO,UAAU,SAAS,MAAM;IAC9C,MAAM,QAAQA,cAAAA,sBAAsB,CAAC;IACrC,OAAO,OAAO,QAAQ,SAAS,MAAM,MAAM,EAAE,OAAoB,CAAC,CAAC;GACrE,CAAC;EACH;EACA,WAAW,OAAO,UAAU,KAAK,MAAM,kBAAkB,GAAGC,cAAAA,kBAAkB,CAAC,CAAC,CAAC;CACnF;CAGF,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,OAAO,OAAO,GAAG;EAC1B,MAAM,WAAWC,gBAAAA,kBAAkB,OAAO,OAAO;EAEjD,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,QAAQ,GAAG;GACpB,MAAM,YAAYC,sBAAAA,0BAA0B,QAAQ;GACpD,IAAI,EAAA,GAAA,gCAAA,oBAAA,CAAqB,SAAS,GAChC,MAAM,IAAI,MACR,kEAAkE,UAAU,KAAK,qDACnF;GAEF,QAAQ;IACN,MAAM;IACN,OAAO;IACP,WAAW;GACb;EACF;CACF;CAEA,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,OAAO,OAAO,KAAK,OAAO,QAAQ,SAAS,GACpD,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ,OAAO,QAAQ,KAAK,OAAO;GACjC,YAAY,eAAe,EAAE,MAAM;GACnC,WAAW,EAAE;GACb,YAAY,EAAE;EAChB,EAAE;CACJ;CAGF,OAAO,EAAE,MAAM;AACjB;AAEA,SAAS,eAAe,KAA0C;CAChE,OAAO,IAAI,SAAS,SAChB;EAAE,MAAM;EAAW,OAAO,IAAI;CAAyB,IACvD;EAAE,MAAM;EAAa,OAAO,IAAI;CAAG;AACzC;AAEA,SAAS,kBACP,KACA,gBACoB;CACpB,OAAO;EACL,OAAO,IAAI,SAAS;EACpB;CACF;AACF"}
@@ -1,21 +1,34 @@
1
+ import { hitQualifications, queriesQualifications } from "../../../columns/utils.js";
2
+ import "../../../columns/index.js";
1
3
  import { filterSpecToSpecQueryExpr } from "../../../filters/converters/filterToQuery.js";
2
4
  import { distillFilterSpec } from "../../../filters/distill.js";
3
5
  import "../../../filters/index.js";
4
6
  import { isBooleanExpression } from "@milaboratories/pl-model-common";
5
7
  import { isNil } from "es-toolkit";
6
8
  //#region src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts
9
+ /**
10
+ * Assemble a ptable def directly from recipes. Each secondary recipe is its own
11
+ * outer-joined subtree: `getQuery()` encodes its linker chain, and its
12
+ * hit-/queries-qualifications are derived on the spot via {@link hitQualifications}
13
+ * / {@link queriesQualifications} — no pre-extracted DTO. Bare leaves yield empty
14
+ * qualifications, so plain {@link ColumnRecipe} arrays (e.g. label columns) work
15
+ * unchanged.
16
+ */
7
17
  function createPTableDefV3(params) {
8
18
  let query = {
9
19
  type: params.primaryJoinType === "inner" ? "innerJoin" : "fullJoin",
10
- entries: params.primary.map((a) => toLeaf(a.column, []))
20
+ entries: params.primary.map((c) => columnToJoinEntry(c, []))
11
21
  };
12
22
  if (params.secondary.length > 0) query = {
13
23
  type: "outerJoin",
14
24
  primary: {
15
25
  entry: query,
16
- qualifications: params.secondary.flatMap((g) => params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []))
26
+ qualifications: params.secondary.flatMap((s) => {
27
+ const quals = queriesQualifications(s);
28
+ return params.primary.flatMap((p) => quals[p.id] ?? []);
29
+ })
17
30
  },
18
- secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e)))
31
+ secondary: params.secondary.map((c) => columnToJoinEntry(c, hitQualifications(c)))
19
32
  };
20
33
  if (!isNil(params.filters)) {
21
34
  const nonEmpty = distillFilterSpec(params.filters);
@@ -35,7 +48,7 @@ function createPTableDefV3(params) {
35
48
  sortBy: params.sorting.map((s) => ({
36
49
  expression: columnIdToExpr(s.column),
37
50
  ascending: s.ascending,
38
- nullsFirst: !s.naAndAbsentAreLeastValues
51
+ nullsFirst: s.naAndAbsentAreLeastValues
39
52
  }))
40
53
  };
41
54
  return { query };
@@ -49,28 +62,10 @@ function columnIdToExpr(col) {
49
62
  value: col.id
50
63
  };
51
64
  }
52
- function toLeaf(col, qs) {
65
+ function columnToJoinEntry(col, qualifications) {
53
66
  return {
54
- entry: {
55
- type: "column",
56
- column: col
57
- },
58
- qualifications: qs
59
- };
60
- }
61
- function toJoinEntry(e) {
62
- const qs = e.qualifications ?? [];
63
- if (isNil(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);
64
- return {
65
- ...e.linkers.reduceRight((inner, linker) => ({
66
- entry: {
67
- type: "linkerJoin",
68
- linker: { column: linker },
69
- secondary: [inner]
70
- },
71
- qualifications: []
72
- }), toLeaf(e.column, [])),
73
- qualifications: qs
67
+ entry: col.getQuery(),
68
+ qualifications
74
69
  };
75
70
  }
76
71
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"createPTableDefV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n PColumn,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\n\n/** Primary side — base row grid. */\nexport type PrimaryEntry<Data> = {\n column: PColumn<Data>;\n};\n\n/** Secondary side leaf — the hit column or a label column, optionally reached via a linker chain. */\nexport type SecondaryEntry<Data> = {\n column: PColumn<Data>;\n /** For hit: `forHit`. For label/direct: omit. Applied to the outermost emitted join entry. */\n qualifications?: AxisQualification[];\n /**\n * Linker chain leading to `column`, ordered from outermost to innermost.\n * When present, the entry is emitted as nested `linkerJoin` operators —\n * one per linker — wrapping the hit column. Binds this hit to this exact\n * chain so the engine cannot reuse a sibling chain that happens to share\n * axis name + domain.\n */\n linkers?: PColumn<Data>[];\n};\n\n/** Secondary group — one join subtree outer-joined onto primary. */\nexport type SecondaryGroup<Data> = {\n entries: SecondaryEntry<Data>[];\n /** Per-variant qualifications applied to the cloned primary anchors on this group's side.\n * Keyed by `PrimaryEntry.column.id`. Omit → base primary used unqualified (labels, non-variant columns). */\n primaryQualifications?: Record<PObjectId, AxisQualification[]>;\n};\n\nexport function createPTableDefV3<Data = PColumnDataUniversal>(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: PrimaryEntry<Data>[];\n secondary: SecondaryGroup<Data>[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<PColumn<Data>> {\n let query: SpecQuery<PColumn<Data>> = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((a) => toLeaf(a.column, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((g) =>\n params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []),\n ),\n },\n secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction toLeaf<Data>(\n col: PColumn<Data>,\n qs: AxisQualification[],\n): SpecQueryJoinEntry<PColumn<Data>> {\n return {\n entry: { type: \"column\", column: col },\n qualifications: qs,\n };\n}\n\nfunction toJoinEntry<Data>(e: SecondaryEntry<Data>): SpecQueryJoinEntry<PColumn<Data>> {\n const qs = e.qualifications ?? [];\n if (isNil(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);\n\n const folded = e.linkers.reduceRight<SpecQueryJoinEntry<PColumn<Data>>>(\n (inner, linker) => ({\n entry: { type: \"linkerJoin\", linker: { column: linker }, secondary: [inner] },\n qualifications: [],\n }),\n toLeaf(e.column, []),\n );\n return { ...folded, qualifications: qs };\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,kBAA+C,QAMhC;CAC7B,IAAI,QAAkC;EACpC,MAAM,OAAO,oBAAoB,UAAU,cAAc;EACzD,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;CACzD;CAEA,IAAI,OAAO,UAAU,SAAS,GAC5B,QAAQ;EACN,MAAM;EACN,SAAS;GACP,OAAO;GACP,gBAAgB,OAAO,UAAU,SAAS,MACxC,OAAO,QAAQ,SAAS,MAAM,EAAE,wBAAwB,EAAE,OAAO,OAAO,CAAC,CAAC,CAC5E;EACF;EACA,WAAW,OAAO,UAAU,SAAS,MAAM,EAAE,QAAQ,KAAK,MAAM,YAAY,CAAC,CAAC,CAAC;CACjF;CAGF,IAAI,CAAC,MAAM,OAAO,OAAO,GAAG;EAC1B,MAAM,WAAW,kBAAkB,OAAO,OAAO;EAEjD,IAAI,CAAC,MAAM,QAAQ,GAAG;GACpB,MAAM,YAAY,0BAA0B,QAAQ;GACpD,IAAI,CAAC,oBAAoB,SAAS,GAChC,MAAM,IAAI,MACR,kEAAkE,UAAU,KAAK,qDACnF;GAEF,QAAQ;IACN,MAAM;IACN,OAAO;IACP,WAAW;GACb;EACF;CACF;CAEA,IAAI,CAAC,MAAM,OAAO,OAAO,KAAK,OAAO,QAAQ,SAAS,GACpD,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ,OAAO,QAAQ,KAAK,OAAO;GACjC,YAAY,eAAe,EAAE,MAAM;GACnC,WAAW,EAAE;GACb,YAAY,CAAC,EAAE;EACjB,EAAE;CACJ;CAGF,OAAO,EAAE,MAAM;AACjB;AAEA,SAAS,eAAe,KAA0C;CAChE,OAAO,IAAI,SAAS,SAChB;EAAE,MAAM;EAAW,OAAO,IAAI;CAAyB,IACvD;EAAE,MAAM;EAAa,OAAO,IAAI;CAAG;AACzC;AAEA,SAAS,OACP,KACA,IACmC;CACnC,OAAO;EACL,OAAO;GAAE,MAAM;GAAU,QAAQ;EAAI;EACrC,gBAAgB;CAClB;AACF;AAEA,SAAS,YAAkB,GAA4D;CACrF,MAAM,KAAK,EAAE,kBAAkB,CAAC;CAChC,IAAI,MAAM,EAAE,OAAO,KAAK,EAAE,QAAQ,WAAW,GAAG,OAAO,OAAO,EAAE,QAAQ,EAAE;CAS1E,OAAO;EAAE,GAPM,EAAE,QAAQ,aACtB,OAAO,YAAY;GAClB,OAAO;IAAE,MAAM;IAAc,QAAQ,EAAE,QAAQ,OAAO;IAAG,WAAW,CAAC,KAAK;GAAE;GAC5E,gBAAgB,CAAC;EACnB,IACA,OAAO,EAAE,QAAQ,CAAC,CAAC,CAEJ;EAAG,gBAAgB;CAAG;AACzC"}
1
+ {"version":3,"file":"createPTableDefV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n ColumnUniversalId,\n PObjectId,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV8\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\nimport type { ColumnRecipe } from \"../../..\";\nimport { hitQualifications, queriesQualifications } from \"../../../columns\";\n\n/**\n * Assemble a ptable def directly from recipes. Each secondary recipe is its own\n * outer-joined subtree: `getQuery()` encodes its linker chain, and its\n * hit-/queries-qualifications are derived on the spot via {@link hitQualifications}\n * / {@link queriesQualifications} — no pre-extracted DTO. Bare leaves yield empty\n * qualifications, so plain {@link ColumnRecipe} arrays (e.g. label columns) work\n * unchanged.\n */\nexport function createPTableDefV3(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: ColumnRecipe[];\n secondary: ColumnRecipe[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<ColumnUniversalId> {\n let query: SpecQuery = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((c) => columnToJoinEntry(c, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((s) => {\n const quals = queriesQualifications(s);\n return params.primary.flatMap((p) => quals[p.id as PObjectId] ?? []);\n }),\n },\n secondary: params.secondary.map((c) => columnToJoinEntry(c, hitQualifications(c))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction columnToJoinEntry(\n col: ColumnRecipe,\n qualifications: readonly AxisQualification[],\n): SpecQueryJoinEntry {\n return {\n entry: col.getQuery(),\n qualifications,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA4BA,SAAgB,kBAAkB,QAMC;CACjC,IAAI,QAAmB;EACrB,MAAM,OAAO,oBAAoB,UAAU,cAAc;EACzD,SAAS,OAAO,QAAQ,KAAK,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAAC;CAC7D;CAEA,IAAI,OAAO,UAAU,SAAS,GAC5B,QAAQ;EACN,MAAM;EACN,SAAS;GACP,OAAO;GACP,gBAAgB,OAAO,UAAU,SAAS,MAAM;IAC9C,MAAM,QAAQ,sBAAsB,CAAC;IACrC,OAAO,OAAO,QAAQ,SAAS,MAAM,MAAM,EAAE,OAAoB,CAAC,CAAC;GACrE,CAAC;EACH;EACA,WAAW,OAAO,UAAU,KAAK,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAC;CACnF;CAGF,IAAI,CAAC,MAAM,OAAO,OAAO,GAAG;EAC1B,MAAM,WAAW,kBAAkB,OAAO,OAAO;EAEjD,IAAI,CAAC,MAAM,QAAQ,GAAG;GACpB,MAAM,YAAY,0BAA0B,QAAQ;GACpD,IAAI,CAAC,oBAAoB,SAAS,GAChC,MAAM,IAAI,MACR,kEAAkE,UAAU,KAAK,qDACnF;GAEF,QAAQ;IACN,MAAM;IACN,OAAO;IACP,WAAW;GACb;EACF;CACF;CAEA,IAAI,CAAC,MAAM,OAAO,OAAO,KAAK,OAAO,QAAQ,SAAS,GACpD,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ,OAAO,QAAQ,KAAK,OAAO;GACjC,YAAY,eAAe,EAAE,MAAM;GACnC,WAAW,EAAE;GACb,YAAY,EAAE;EAChB,EAAE;CACJ;CAGF,OAAO,EAAE,MAAM;AACjB;AAEA,SAAS,eAAe,KAA0C;CAChE,OAAO,IAAI,SAAS,SAChB;EAAE,MAAM;EAAW,OAAO,IAAI;CAAyB,IACvD;EAAE,MAAM;EAAa,OAAO,IAAI;CAAG;AACzC;AAEA,SAAS,kBACP,KACA,gBACoB;CACpB,OAAO;EACL,OAAO,IAAI,SAAS;EACpB;CACF;AACF"}
@@ -2,14 +2,17 @@ const require_label = require("../../../render/util/label.cjs");
2
2
  const require_pcolumn_data = require("../../../render/util/pcolumn_data.cjs");
3
3
  const require_column_collection = require("../../../render/util/column_collection.cjs");
4
4
  require("../../../render/index.cjs");
5
+ const require_column_lazy = require("../../../columns/column_lazy.cjs");
6
+ require("../../../columns/index.cjs");
5
7
  const require_traverse = require("../../../filters/traverse.cjs");
6
8
  const require_state_migration = require("../state-migration.cjs");
7
9
  const require_labels = require("../labels.cjs");
8
10
  const require_createPTableDefV2 = require("./createPTableDefV2.cjs");
9
11
  const require_utils = require("./utils.cjs");
12
+ const require_columnResolver = require("../columnResolver.cjs");
10
13
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
14
+ let _milaboratories_helpers = require("@milaboratories/helpers");
11
15
  let es_toolkit = require("es-toolkit");
12
- let es_toolkit_compat = require("es-toolkit/compat");
13
16
  //#region src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts
14
17
  /**
15
18
  * Create p-table spec and handle given ui table state
@@ -38,31 +41,19 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
38
41
  };
39
42
  });
40
43
  const fullColumns = [...columns, ...fullLabelColumns];
41
- const fullColumnsIds = [...(0, _milaboratories_pl_model_common.uniqueBy)(fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => (0, _milaboratories_pl_model_common.getAxisId)(a))), (a) => (0, _milaboratories_pl_model_common.canonicalizeJson)(a)).map((a) => ({
42
- type: "axis",
43
- id: a
44
- })), ...fullColumns.map((c) => ({
45
- type: "column",
46
- id: c.id
47
- }))];
48
- const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => (0, _milaboratories_pl_model_common.canonicalizeJson)(c)));
49
- const isValidColumnId = (id) => fullColumnsIdsSet.has(id);
50
- const filters = tableStateNormalized.pTableParams.filters;
51
- const defaultFilters = options?.filters ?? void 0;
52
- const firstInvalidFilterColumn = (filters !== null ? require_traverse.collectFilterSpecColumns(filters) : []).find((col) => !isValidColumnId(col));
53
- if (firstInvalidFilterColumn) throw new Error(`Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`);
54
- const firstInvalidDefaultFilterColumn = (defaultFilters !== void 0 ? require_traverse.collectFilterSpecColumns(defaultFilters) : []).find((col) => !isValidColumnId(col));
55
- if (firstInvalidDefaultFilterColumn) throw new Error(`Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`);
44
+ const resolver = require_columnResolver.createColumnResolver(fullColumns.map((c) => require_column_lazy.ColumnLazyImpl.fromColumn(c)), { warn: ctx.logWarn.bind(ctx) });
45
+ const rawFilters = tableStateNormalized.pTableParams.filters;
46
+ const rawDefaultFilters = options?.filters ?? void 0;
47
+ const filters = remapFiltersThrowing(rawFilters, resolver, "filter");
48
+ const defaultFilters = remapFiltersThrowing(rawDefaultFilters ?? null, resolver, "default filter");
56
49
  const userSorting = tableStateNormalized.pTableParams.sorting;
57
- const sorting = ((0, es_toolkit_compat.isEmpty)(userSorting) ? options?.sorting : userSorting) ?? [];
58
- const firstInvalidSortingColumn = sorting.find((s) => !isValidColumnId((0, _milaboratories_pl_model_common.canonicalizeJson)(s.column)));
59
- if (firstInvalidSortingColumn) throw new Error(`Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`);
50
+ const sorting = remapSortingThrowing(((0, _milaboratories_helpers.isNil)(userSorting) ? options?.sorting : userSorting) ?? [], resolver);
60
51
  const coreJoinType = options?.coreJoinType ?? "full";
61
52
  const fullDef = require_createPTableDefV2.createPTableDefV2({
62
53
  columns,
63
54
  labelColumns: fullLabelColumns,
64
55
  coreJoinType,
65
- filters,
56
+ filters: filters ?? null,
66
57
  sorting,
67
58
  coreColumnPredicate: options?.coreColumnPredicate
68
59
  });
@@ -79,10 +70,7 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
79
70
  const coreColumnPredicate = options?.coreColumnPredicate;
80
71
  if (coreColumnPredicate) columns.flatMap((c) => coreColumnPredicate((0, _milaboratories_pl_model_common.getColumnIdAndSpec)(c)) ? [c.id] : []).forEach((c) => hiddenColumns.delete(c));
81
72
  sorting.map((s) => s.column).filter((c) => c.type === "column").forEach((c) => hiddenColumns.delete(c.id));
82
- if (filters) require_traverse.collectFilterSpecColumns(filters).flatMap((c) => {
83
- const obj = (0, _milaboratories_pl_model_common.parseJson)(c);
84
- return obj.type === "column" ? [obj.id] : [];
85
- }).forEach((c) => hiddenColumns.delete(c));
73
+ if (filters) require_traverse.collectFilterSpecColumns(filters).flatMap((c) => c.type === "column" ? [c.id] : []).forEach((c) => hiddenColumns.delete(c));
86
74
  const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));
87
75
  const visibleLabelColumns = require_labels.getMatchingLabelColumns(visibleColumns.map(_milaboratories_pl_model_common.getColumnIdAndSpec), allLabelColumns);
88
76
  if (!require_pcolumn_data.allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return void 0;
@@ -90,7 +78,7 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
90
78
  columns: visibleColumns,
91
79
  labelColumns: visibleLabelColumns,
92
80
  coreJoinType,
93
- filters,
81
+ filters: filters ?? null,
94
82
  sorting,
95
83
  coreColumnPredicate
96
84
  });
@@ -101,9 +89,53 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
101
89
  fullTableHandle: fullHandle,
102
90
  fullPframeHandle: pframeHandle,
103
91
  visibleTableHandle: visibleHandle,
104
- defaultFilters
92
+ defaultFilters: defaultFilters ?? void 0
105
93
  };
106
94
  }
95
+ /** Rewrite filter column refs through the resolver; throw on any unresolved ref. */
96
+ function remapFiltersThrowing(filters, resolver, label) {
97
+ if ((0, _milaboratories_helpers.isNil)(filters)) return filters;
98
+ return require_traverse.traverseFilterSpec(filters, {
99
+ leaf: (leaf) => {
100
+ if (leaf.type === void 0) return leaf;
101
+ const result = { ...leaf };
102
+ if ("column" in result) {
103
+ const c = resolver(result.column);
104
+ if ((0, _milaboratories_helpers.isNil)(c)) throw new Error(`Invalid ${label} column ${JSON.stringify(result.column)}: column reference does not match the table columns`);
105
+ result.column = c;
106
+ }
107
+ if ("rhs" in result) {
108
+ const c = resolver(result.rhs);
109
+ if ((0, _milaboratories_helpers.isNil)(c)) throw new Error(`Invalid ${label} column ${JSON.stringify(result.rhs)}: column reference does not match the table columns`);
110
+ result.rhs = c;
111
+ }
112
+ return result;
113
+ },
114
+ and: (results) => ({
115
+ type: "and",
116
+ filters: results
117
+ }),
118
+ or: (results) => ({
119
+ type: "or",
120
+ filters: results
121
+ }),
122
+ not: (result) => ({
123
+ type: "not",
124
+ filter: result
125
+ })
126
+ });
127
+ }
128
+ /** Rewrite sorting column refs through the resolver; throw on any unresolved ref. */
129
+ function remapSortingThrowing(sorting, resolver) {
130
+ return sorting.map((s) => {
131
+ const c = resolver(s.column);
132
+ if ((0, _milaboratories_helpers.isNil)(c)) throw new Error(`Invalid sorting column ${JSON.stringify(s.column)}: column reference does not match the table columns`);
133
+ return {
134
+ ...s,
135
+ column: c
136
+ };
137
+ });
138
+ }
107
139
  function getAllLabelColumns(resultPool) {
108
140
  return new require_column_collection.PColumnCollection().addAxisLabelProvider(resultPool).addColumnProvider(resultPool).getColumns({
109
141
  name: _milaboratories_pl_model_common.PColumnName.Label,
@@ -1 +1 @@
1
- {"version":3,"file":"createPlDataTableV2.cjs","names":["upgradePlDataTableStateV2","getMatchingLabelColumns","deriveLabels","identity","Annotation","collectFilterSpecColumns","createPTableDefV2","isColumnOptional","getColumnIdAndSpec","allPColumnsReady","PColumnCollection","PColumnName"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n} from \"../../../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDefV2 } from \"./createPTableDefV2\";\nimport { isColumnOptional } from \"./utils\";\n\n/**\n * @deprecated This function is deprecated and will be removed in future. Please migrate to createPlDataTable with v3 options for improved column discovery and display configuration. See createPlDataTableOptionsV3 for details on the new options format and migration guidance.\n */\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];\n\n let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const filters = tableStateNormalized.pTableParams.filters;\n const defaultFilters = options?.filters ?? undefined;\n const filterColumns = filters !== null ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n const defaultFilterColumns =\n defaultFilters !== undefined ? collectFilterSpecColumns(defaultFilters) : [];\n const firstInvalidDefaultFilterColumn = defaultFilterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidDefaultFilterColumn)\n throw new Error(\n `Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDefV2({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds !== null) {\n return hiddenColIds\n .filter((s): s is PTableColumnIdColumn => s.type === \"column\")\n .map((s) => s.id);\n }\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDefV2({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters,\n } satisfies PlDataTableModel;\n}\n\nfunction getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"createPlDataTableV2.cjs","names":["upgradePlDataTableStateV2","getMatchingLabelColumns","deriveLabels","identity","Annotation","createColumnResolver","ColumnLazyImpl","createPTableDefV2","isColumnOptional","getColumnIdAndSpec","allPColumnsReady","traverseFilterSpec","PColumnCollection","PColumnName"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n ColumnUniversalId,\n FilterSpecNode,\n PColumn,\n PTableColumnIdColumn,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n getColumnIdAndSpec,\n isLinkerColumn,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n} from \"../../../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type {\n CreatePlDataTableOps,\n PlDataTableFilters,\n PlDataTableFilterSpecLeaf,\n PlDataTableModel,\n} from \"../typesV8\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns, traverseFilterSpec } from \"../../../filters/traverse\";\nimport { createPTableDefV2 } from \"./createPTableDefV2\";\nimport { isColumnOptional } from \"./utils\";\nimport { ColumnLazyImpl } from \"../../../columns\";\nimport { createColumnResolver, type ColumnResolver } from \"../columnResolver\";\nimport { isNil, type Nil } from \"@milaboratories/helpers\";\n\n/**\n * @deprecated This function is deprecated and will be removed in future. Please migrate to createPlDataTable with v3 options for improved column discovery and display configuration. See createPlDataTableOptionsV3 for details on the new options format and migration guidance.\n */\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];\n\n let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const resolver = createColumnResolver(\n fullColumns.map((c) => ColumnLazyImpl.fromColumn(c)),\n { warn: ctx.logWarn.bind(ctx) },\n );\n\n // -- Filtering: rewrite via resolver, throw if any reference is unresolved --\n const rawFilters = tableStateNormalized.pTableParams.filters;\n const rawDefaultFilters = options?.filters ?? undefined;\n const filters = remapFiltersThrowing(rawFilters, resolver, \"filter\");\n const defaultFilters = remapFiltersThrowing(\n rawDefaultFilters ?? null,\n resolver,\n \"default filter\",\n );\n\n // -- Sorting: rewrite via resolver, throw if any reference is unresolved --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const rawSorting = (isNil(userSorting) ? options?.sorting : userSorting) ?? [];\n const sorting = remapSortingThrowing(rawSorting, resolver);\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDefV2({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters: filters ?? null,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<ColumnUniversalId>(\n ((): ColumnUniversalId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds !== null) {\n return hiddenColIds\n .filter((s): s is PTableColumnIdColumn => s.type === \"column\")\n .map((s) => s.id);\n }\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => (c.type === \"column\" ? [c.id] : []))\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDefV2({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters: filters ?? null,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters: defaultFilters ?? undefined,\n } satisfies PlDataTableModel;\n}\n\n/** Rewrite filter column refs through the resolver; throw on any unresolved ref. */\nfunction remapFiltersThrowing(\n filters: Nil | PlDataTableFilters,\n resolver: ColumnResolver,\n label: string,\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n type Node = FilterSpecNode<PlDataTableFilterSpecLeaf>;\n return traverseFilterSpec(filters, {\n leaf: (leaf): Node => {\n if (leaf.type === undefined) return leaf;\n const result = { ...leaf };\n if (\"column\" in result) {\n const c = resolver(result.column);\n if (isNil(c))\n throw new Error(\n `Invalid ${label} column ${JSON.stringify(result.column)}: column reference does not match the table columns`,\n );\n result.column = c;\n }\n if (\"rhs\" in result) {\n const c = resolver(result.rhs);\n if (isNil(c))\n throw new Error(\n `Invalid ${label} column ${JSON.stringify(result.rhs)}: column reference does not match the table columns`,\n );\n result.rhs = c;\n }\n return result;\n },\n and: (results): Node => ({ type: \"and\", filters: results }),\n or: (results): Node => ({ type: \"or\", filters: results }),\n not: (result): Node => ({ type: \"not\", filter: result }),\n }) as PlDataTableFilters;\n}\n\n/** Rewrite sorting column refs through the resolver; throw on any unresolved ref. */\nfunction remapSortingThrowing(sorting: PTableSorting[], resolver: ColumnResolver): PTableSorting[] {\n return sorting.map((s) => {\n const c = resolver(s.column);\n if (isNil(c))\n throw new Error(\n `Invalid sorting column ${JSON.stringify(s.column)}: column reference does not match the table columns`,\n );\n return { ...s, column: c };\n });\n}\n\nfunction getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): undefined | PColumn<undefined | PColumnDataUniversal>[] {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { PColumnDataUniversal } from "../../../render/internal.js";
2
2
  import { RenderCtxBase } from "../../../render/api.js";
3
- import { CreatePlDataTableOps, PlDataTableModel } from "../typesV7.js";
3
+ import { CreatePlDataTableOps, PlDataTableModel } from "../typesV8.js";
4
4
  import { PlDataTableStateV2 } from "../state-migration.js";
5
5
  import { PColumn } from "@milaboratories/pl-model-common";
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"createPlDataTableV2.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"mappings":";;;;;;;;;;KAuCY,0BAAA;EACV,OAAA,EAAS,OAAA,CAAQ,oBAAA;EACjB,UAAA,GAAa,kBAAA;EACb,OAAA,GAAU,oBAAA;AAAA;;;;;;;;;;iBAYI,mBAAA,OACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,OAAA,EAAS,0BAAA,aACT,UAAA,GAAa,0BAAA,gBACb,OAAA,GAAU,0BAAA,cACT,gBAAA"}
1
+ {"version":3,"file":"createPlDataTableV2.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"mappings":";;;;;;;;;;KAwCY,0BAAA;EACV,OAAA,EAAS,OAAA,CAAQ,oBAAA;EACjB,UAAA,GAAa,kBAAA;EACb,OAAA,GAAU,oBAAA;AAAA;;;;;;;;;;iBAYI,mBAAA,OACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,OAAA,EAAS,0BAAA,aACT,UAAA,GAAa,0BAAA,gBACb,OAAA,GAAU,0BAAA,cACT,gBAAA"}