@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":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV7\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options:\n | ({ version: \"v2\" } & createPlDataTableOptionsV2)\n | ({ version?: \"v3\" } & createPlDataTableOptionsV3),\n): PlDataTableModel | undefined {\n if (options.version === \"v2\") {\n return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);\n } else {\n // default version is last (v3 at the moment)\n return createPlDataTableV3(ctx, options);\n }\n}\n\nexport { discoverTableColumnSnaphots } from \"./discoverColumns\";\n"],"mappings":";;;;AAcA,SAAgB,kBACd,KACA,SAG8B;CAC9B,IAAI,QAAQ,YAAY,MACtB,OAAO,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,OAAO;MAGpF,OAAO,oBAAoB,KAAK,OAAO;AAE3C"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV8\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options:\n | ({ version: \"v2\" } & createPlDataTableOptionsV2)\n | ({ version?: \"v3\" } & createPlDataTableOptionsV3),\n): PlDataTableModel | undefined {\n if (options.version === \"v2\") {\n return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);\n } else {\n // default version is last (v3 at the moment)\n return createPlDataTableV3(ctx, options);\n }\n}\n\nexport { discoverTableColumns as discoverTableColumnSnaphots } from \"./discoverColumns\";\n"],"mappings":";;;;AAcA,SAAgB,kBACd,KACA,SAG8B;CAC9B,IAAI,QAAQ,YAAY,MACtB,OAAO,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,OAAO;MAGpF,OAAO,oBAAoB,KAAK,OAAO;AAE3C"}
@@ -1,12 +1,19 @@
1
1
  const require_derive_distinct_labels = require("../../../labels/derive_distinct_labels.cjs");
2
- const require_column_snapshot_provider = require("../../../columns/column_snapshot_provider.cjs");
3
- const require_column_collection_builder = require("../../../columns/column_collection_builder.cjs");
2
+ const require_columns_collection = require("../../../columns/columns_collection.cjs");
3
+ const require_utils = require("../../../columns/utils.cjs");
4
4
  require("../../../columns/index.cjs");
5
- const require_derive_distinct_tooltips = require("../../../labels/derive_distinct_tooltips.cjs");
5
+ require("../../../labels/derive_distinct_tooltips.cjs");
6
6
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
7
- let _milaboratories_helpers = require("@milaboratories/helpers");
7
+ require("@milaboratories/helpers");
8
8
  let es_toolkit = require("es-toolkit");
9
9
  //#region src/components/PlDataTable/createPlDataTable/utils.ts
10
+ /** Adapt a {@link ColumnRecipe} to the plain {@link RuleColumn} shape. */
11
+ function toRuleColumn(col) {
12
+ return {
13
+ id: (0, _milaboratories_pl_model_common.extractPObjectId)(col.id),
14
+ spec: col.getSpec()
15
+ };
16
+ }
10
17
  /** Check if column should be omitted from the table */
11
18
  function isColumnHidden(spec) {
12
19
  return (0, _milaboratories_pl_model_common.readAnnotation)(spec, _milaboratories_pl_model_common.Annotation.Table.Visibility) === "hidden";
@@ -34,151 +41,58 @@ function getOrderPriority(col, orderByColId) {
34
41
  * (first-match-wins, preserving original rule order).
35
42
  *
36
43
  * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.
37
- * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`
38
- * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.
44
+ * Selector-based rules (`ColumnSelector`) are matched via the
45
+ * `columnsCollection` service — the inline column ids must be resolvable in
46
+ * the active render ctx for the host to read their specs.
39
47
  */
40
- function evaluateRules(rules, columns, pframeSpec) {
48
+ function evaluateRules(rules, columns) {
41
49
  const result = /* @__PURE__ */ new Map();
42
50
  if (rules.length === 0 || columns.length === 0) return result;
43
- const hasSelectorRules = rules.some((rule) => typeof rule.match !== "function");
51
+ const selectorRules = rules.filter((rule) => typeof rule.match !== "function");
44
52
  const selectorHitsByRule = /* @__PURE__ */ new Map();
45
- if (hasSelectorRules) {
46
- const pColumns = dedupeById(columns).map((c) => ({
47
- id: c.id,
48
- spec: c.spec,
49
- data: void 0
50
- }));
51
- const collection = new require_column_collection_builder.ColumnCollectionBuilder(pframeSpec).addSource(new require_column_snapshot_provider.ArrayColumnProvider(pColumns)).build();
52
- if (collection === void 0) return result;
53
- try {
54
- for (const rule of rules) {
55
- if (typeof rule.match === "function") continue;
56
- const hits = collection.findColumns({ include: rule.match });
57
- selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));
58
- }
59
- } finally {
60
- collection.dispose();
53
+ if (selectorRules.length > 0) {
54
+ const baseCollection = require_columns_collection.ColumnsCollection([{
55
+ columns: (0, es_toolkit.uniqBy)(columns, (col) => col.id),
56
+ isFinal: true
57
+ }]);
58
+ for (const rule of selectorRules) {
59
+ const hitIds = baseCollection.filter({ include: rule.match }).getColumnIds();
60
+ if (hitIds.length === 0) return result;
61
+ selectorHitsByRule.set(rule, new Set(hitIds.map((id) => (0, _milaboratories_pl_model_common.extractPObjectId)(id))));
61
62
  }
62
63
  }
63
- for (const col of columns) for (const rule of rules) if (typeof rule.match === "function" ? rule.match(col.spec) : selectorHitsByRule.get(rule)?.has(col.id) ?? false) {
64
- result.set(col.id, rule);
65
- break;
66
- }
67
- return result;
68
- }
69
- function dedupeById(columns) {
70
- const seen = /* @__PURE__ */ new Set();
71
- const result = [];
72
64
  for (const col of columns) {
73
- if (seen.has(col.id)) continue;
74
- seen.add(col.id);
75
- result.push(col);
65
+ const colKey = (0, _milaboratories_pl_model_common.extractPObjectId)(col.id);
66
+ for (const rule of rules) if (selectorHitsByRule.get(rule)?.has(colKey) ?? false) {
67
+ result.set(colKey, rule);
68
+ break;
69
+ }
76
70
  }
77
71
  return result;
78
72
  }
79
73
  /**
80
- * Writes derived labels into column and axis annotations.
81
- * Returns new column objects with modified specs — original columns are not mutated.
74
+ * Build a sidecar map `columnId → AnnotationDataStatus` derived from each
75
+ * recipe's own status. This is *rendering* metadata — kept out of the spec
76
+ * so it cannot perturb column identity (id-bearing spec overrides would
77
+ * diverge the visible PTable's column ids from the full table / pframe).
82
78
  *
83
- * For each column: writes derived label into Annotation.Label (if present in derivedLabels).
84
- * For each axis in column specs: writes derived axis label into AxisSpec annotations.
85
- */
86
- function withLabelAnnotations(derivedLabels, columns) {
87
- if (derivedLabels === void 0) return columns;
88
- return columns.map((col) => {
89
- const colLabel = derivedLabels[col.id];
90
- return {
91
- ...col,
92
- spec: {
93
- ...col.spec,
94
- ...(0, es_toolkit.isNil)(colLabel) ? {} : { annotations: {
95
- ...col.spec.annotations,
96
- [_milaboratories_pl_model_common.Annotation.Label]: colLabel
97
- } },
98
- axesSpec: col.spec.axesSpec.map((axis) => {
99
- const label = derivedLabels[(0, _milaboratories_pl_model_common.canonicalizeAxisId)(axis)];
100
- return (0, es_toolkit.isNil)(label) ? axis : {
101
- ...axis,
102
- annotations: {
103
- ...axis.annotations,
104
- [_milaboratories_pl_model_common.Annotation.Label]: label
105
- }
106
- };
107
- })
108
- }
109
- };
110
- });
111
- }
112
- function withDataStatusAnnotations(columns) {
113
- return columns.map((col) => {
114
- return {
115
- ...col,
116
- spec: {
117
- ...col.spec,
118
- annotations: {
119
- ...col.spec.annotations,
120
- [_milaboratories_pl_model_common.Annotation.DataStatus]: col.dataStatus
121
- }
122
- }
123
- };
124
- });
125
- }
126
- /**
127
- * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps
128
- * into column annotations. Returns new column objects — originals are not mutated.
129
- */
130
- function withTableVisualAnnotations(visibilityByColId, orderByColId, columns) {
131
- if (visibilityByColId === void 0 && orderByColId === void 0) return columns;
132
- return columns.map((col) => {
133
- const annotations = { ...col.spec.annotations };
134
- const visibility = getEffectiveVisibility(col, visibilityByColId);
135
- if (!(0, es_toolkit.isNil)(visibility)) annotations[_milaboratories_pl_model_common.Annotation.Table.Visibility] = visibility;
136
- const orderPriority = getOrderPriority(col, orderByColId);
137
- if (!(0, es_toolkit.isNil)(orderPriority)) annotations[_milaboratories_pl_model_common.Annotation.Table.OrderPriority] = String(orderPriority);
138
- return {
139
- ...col,
140
- spec: {
141
- ...col.spec,
142
- annotations
143
- }
144
- };
145
- });
146
- }
147
- /**
148
- * Writes derived info annotations into column annotations.
149
- * Columns without an info entry are passed through unchanged.
79
+ * Mapping `ColumnFieldStatus` × actual byte-presence → `AnnotationDataStatus`:
80
+ * - `absent` → `"absent"`
81
+ * - `resolving` → `"computing"`
82
+ * - `present` + `hasColumnData()` → `"ready"`
83
+ * - `present` + no bytes yet → `"computing"`
84
+ *
85
+ * Intentionally scoped to visible columns — the probe is meaningful only for
86
+ * what the user will actually see.
150
87
  */
151
- function withInfoAnnotations(infoById, columns) {
152
- if ((0, es_toolkit.isNil)(infoById)) return columns;
153
- return columns.map((col) => {
154
- const info = infoById[col.id];
155
- if ((0, es_toolkit.isNil)(info)) return col;
156
- return {
157
- ...col,
158
- spec: {
159
- ...col.spec,
160
- annotations: {
161
- ...col.spec.annotations,
162
- [_milaboratories_pl_model_common.Annotation.Table.Info]: info
163
- }
164
- }
165
- };
166
- });
88
+ function buildDataStatusMap(columns, opts = {}) {
89
+ return columns.reduce((acc, c) => (acc[c.id] = deriveDataStatus(c, opts), acc), {});
167
90
  }
168
- function withHidenAxesAnnotations(columns) {
169
- return columns.map((col) => ({
170
- ...col,
171
- spec: {
172
- ...col.spec,
173
- axesSpec: col.spec.axesSpec.map((axis) => ({
174
- ...axis,
175
- annotations: {
176
- ...axis.annotations,
177
- [_milaboratories_pl_model_common.Annotation.Table.Visibility]: "hidden"
178
- }
179
- }))
180
- }
181
- }));
91
+ function deriveDataStatus(column, opts) {
92
+ const field = column.getDataStatus();
93
+ if (field === "absent") return "absent";
94
+ if (field === "resolving") return "computing";
95
+ return require_utils.hasColumnData(column, opts) ? "ready" : "computing";
182
96
  }
183
97
  /** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */
184
98
  function deriveAllLabels(options) {
@@ -189,46 +103,14 @@ function deriveAllLabels(options) {
189
103
  qualifications: c.qualifications
190
104
  })), deriveLabelsOptions).reduce((acc, label, index) => (acc[columns[index].id] = label, acc), {});
191
105
  }
192
- /** Derive origin tooltips for columns whose qualifications or linker path carry info. */
193
- function deriveAllTooltips(options) {
194
- const { columns } = options;
195
- const variantCountByOriginal = columns.reduce((acc, c) => {
196
- return acc.set((0, _milaboratories_helpers.getField)(c, "originalId") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);
197
- }, /* @__PURE__ */ new Map());
198
- const { entries } = columns.reduce(({ entries, variantSeen }, c) => {
199
- const id = (0, _milaboratories_helpers.getField)(c, "originalId") ?? c.id;
200
- const variantCount = variantCountByOriginal.get(id);
201
- const variantIndex = (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));
202
- entries.push({
203
- spec: c.spec,
204
- linkerPath: c.linkerPath,
205
- qualifications: c.qualifications,
206
- variantIndex,
207
- variantCount
208
- });
209
- return {
210
- entries,
211
- variantSeen
212
- };
213
- }, {
214
- entries: [],
215
- variantSeen: /* @__PURE__ */ new Map()
216
- });
217
- const tooltips = require_derive_distinct_tooltips.deriveDistinctTooltips(entries);
218
- return Object.fromEntries(tooltips.flatMap((t, i) => (0, es_toolkit.isNil)(t) ? [] : [[columns[i].id, t]]));
219
- }
220
106
  //#endregion
107
+ exports.buildDataStatusMap = buildDataStatusMap;
221
108
  exports.deriveAllLabels = deriveAllLabels;
222
- exports.deriveAllTooltips = deriveAllTooltips;
223
109
  exports.evaluateRules = evaluateRules;
224
110
  exports.getEffectiveVisibility = getEffectiveVisibility;
225
111
  exports.getOrderPriority = getOrderPriority;
226
112
  exports.isColumnHidden = isColumnHidden;
227
113
  exports.isColumnOptional = isColumnOptional;
228
- exports.withDataStatusAnnotations = withDataStatusAnnotations;
229
- exports.withHidenAxesAnnotations = withHidenAxesAnnotations;
230
- exports.withInfoAnnotations = withInfoAnnotations;
231
- exports.withLabelAnnotations = withLabelAnnotations;
232
- exports.withTableVisualAnnotations = withTableVisualAnnotations;
114
+ exports.toRuleColumn = toRuleColumn;
233
115
 
234
116
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":["Annotation","ColumnCollectionBuilder","ArrayColumnProvider","deriveDistinctLabels","deriveDistinctTooltips"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type PColumn,\n type PColumnSpec,\n type PFrameSpecDriver,\n type PObjectId,\n Annotation,\n canonicalizeAxisId,\n DiscoveredPColumnId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnDataStatus, MatchQualifications, MatchVariant } from \"../../../columns\";\nimport type { ColumnMatcher, ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector } from \"../../../columns\";\nimport { ArrayColumnProvider, ColumnCollectionBuilder } from \"../../../columns\";\nimport { isNil } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`\n * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.\n */\nexport function evaluateRules<R extends { match: ColumnMatcher | ColumnSelector }>(\n rules: R[],\n columns: RuleColumn[],\n pframeSpec: PFrameSpecDriver,\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const hasSelectorRules = rules.some((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (hasSelectorRules) {\n const dedupedColumns = dedupeById(columns);\n const pColumns = dedupedColumns.map((c) => ({ id: c.id, spec: c.spec, data: undefined }));\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(new ArrayColumnProvider(pColumns))\n .build();\n if (collection === undefined) return result;\n\n try {\n for (const rule of rules) {\n if (typeof rule.match === \"function\") continue;\n const hits = collection.findColumns({ include: rule.match });\n selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));\n }\n } finally {\n collection.dispose();\n }\n }\n\n for (const col of columns) {\n for (const rule of rules) {\n const matches =\n typeof rule.match === \"function\"\n ? rule.match(col.spec)\n : (selectorHitsByRule.get(rule)?.has(col.id) ?? false);\n if (matches) {\n result.set(col.id, rule);\n break;\n }\n }\n }\n return result;\n}\n\nfunction dedupeById(columns: RuleColumn[]): RuleColumn[] {\n const seen = new Set<PObjectId>();\n const result: RuleColumn[] = [];\n for (const col of columns) {\n if (seen.has(col.id)) continue;\n seen.add(col.id);\n result.push(col);\n }\n return result;\n}\n\n/**\n * Writes derived labels into column and axis annotations.\n * Returns new column objects with modified specs — original columns are not mutated.\n *\n * For each column: writes derived label into Annotation.Label (if present in derivedLabels).\n * For each axis in column specs: writes derived axis label into AxisSpec annotations.\n */\nexport function withLabelAnnotations<\n T extends {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n },\n>(derivedLabels: undefined | Record<string, string>, columns: T[]): T[] {\n if (derivedLabels === undefined) return columns;\n return columns.map((col) => {\n const colLabel = derivedLabels[col.id];\n return {\n ...col,\n spec: {\n ...col.spec,\n ...(isNil(colLabel)\n ? {}\n : { annotations: { ...col.spec.annotations, [Annotation.Label]: colLabel } }),\n axesSpec: col.spec.axesSpec.map((axis) => {\n const label = derivedLabels[canonicalizeAxisId(axis)];\n return isNil(label)\n ? axis\n : { ...axis, annotations: { ...axis.annotations, [Annotation.Label]: label } };\n }),\n },\n } as T;\n });\n}\n\nexport function withDataStatusAnnotations<\n T extends {\n readonly spec: PColumnSpec;\n readonly dataStatus: ColumnDataStatus;\n },\n>(columns: T[]): T[] {\n return columns.map((col) => {\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: {\n ...col.spec.annotations,\n [Annotation.DataStatus]: col.dataStatus,\n },\n },\n } as T;\n });\n}\n\n/**\n * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps\n * into column annotations. Returns new column objects — originals are not mutated.\n */\nexport function withTableVisualAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(\n visibilityByColId: undefined | Map<PObjectId, ColumnVisibilityRule>,\n orderByColId: undefined | Map<PObjectId, ColumnOrderRule>,\n columns: T[],\n): T[] {\n if (visibilityByColId === undefined && orderByColId === undefined) return columns;\n return columns.map((col) => {\n const annotations = { ...col.spec.annotations };\n\n const visibility = getEffectiveVisibility(col, visibilityByColId);\n if (!isNil(visibility)) annotations[Annotation.Table.Visibility] = visibility;\n\n const orderPriority = getOrderPriority(col, orderByColId);\n if (!isNil(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);\n\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: annotations,\n },\n } as T;\n });\n}\n\n/**\n * Writes derived info annotations into column annotations.\n * Columns without an info entry are passed through unchanged.\n */\nexport function withInfoAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(infoById: undefined | Record<string, string>, columns: T[]): T[] {\n if (isNil(infoById)) return columns;\n return columns.map((col) => {\n const info = infoById[col.id];\n if (isNil(info)) return col;\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: { ...col.spec.annotations, [Annotation.Table.Info]: info },\n },\n } as T;\n });\n}\n\nexport function withHidenAxesAnnotations<T extends { readonly spec: PColumnSpec }>(\n columns: T[],\n): T[] {\n return columns.map(\n (col) =>\n ({\n ...col,\n spec: {\n ...col.spec,\n axesSpec: col.spec.axesSpec.map((axis) => ({\n ...axis,\n annotations: { ...axis.annotations, [Annotation.Table.Visibility]: \"hidden\" },\n })),\n },\n }) as T,\n );\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({\n spec: step.linker.spec,\n })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: PObjectId | DiscoveredPColumnId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<DiscoveredPColumnId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<PObjectId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<PObjectId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs","names":["Annotation","ColumnsCollection","hasColumnData","deriveDistinctLabels"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type AnnotationDataStatus,\n type ColumnUniversalId,\n type PColumn,\n type PColumnSpec,\n type PObjectId,\n Annotation,\n extractPObjectId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector, MatchQualifications } from \"@milaboratories/pl-model-common\";\nimport { ColumnsCollection, hasColumnData, type ColumnRecipe } from \"../../../columns\";\nimport type { GlobalCfgRenderCtx } from \"../../../render/internal\";\nimport { isNil, uniqBy } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\n\n/** Adapt a {@link ColumnRecipe} to the plain {@link RuleColumn} shape. */\nexport function toRuleColumn(col: ColumnRecipe): RuleColumn {\n return { id: extractPObjectId(col.id), spec: col.getSpec() };\n}\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via the\n * `columnsCollection` service — the inline column ids must be resolvable in\n * the active render ctx for the host to read their specs.\n */\nexport function evaluateRules<R extends { match: ColumnSelector }>(\n rules: R[],\n columns: ColumnRecipe[],\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const selectorRules = rules.filter((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (selectorRules.length > 0) {\n const baseColumns = uniqBy(columns, (col) => col.id);\n const baseCollection = ColumnsCollection([{ columns: baseColumns, isFinal: true }]);\n for (const rule of selectorRules) {\n const hitIds = baseCollection.filter({ include: rule.match }).getColumnIds();\n if (hitIds.length === 0) return result;\n selectorHitsByRule.set(rule, new Set(hitIds.map((id) => extractPObjectId(id))));\n }\n }\n\n for (const col of columns) {\n const colKey = extractPObjectId(col.id);\n for (const rule of rules) {\n const matches = selectorHitsByRule.get(rule)?.has(colKey) ?? false;\n if (matches) {\n result.set(colKey, rule);\n break;\n }\n }\n }\n return result;\n}\n\n/**\n * Build a sidecar map `columnId → AnnotationDataStatus` derived from each\n * recipe's own status. This is *rendering* metadata — kept out of the spec\n * so it cannot perturb column identity (id-bearing spec overrides would\n * diverge the visible PTable's column ids from the full table / pframe).\n *\n * Mapping `ColumnFieldStatus` × actual byte-presence → `AnnotationDataStatus`:\n * - `absent` → `\"absent\"`\n * - `resolving` → `\"computing\"`\n * - `present` + `hasColumnData()` → `\"ready\"`\n * - `present` + no bytes yet → `\"computing\"`\n *\n * Intentionally scoped to visible columns — the probe is meaningful only for\n * what the user will actually see.\n */\nexport function buildDataStatusMap(\n columns: ColumnRecipe[],\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): Record<ColumnUniversalId, AnnotationDataStatus> {\n return columns.reduce(\n (acc, c) => ((acc[c.id] = deriveDataStatus(c, opts)), acc),\n {} as Record<ColumnUniversalId, AnnotationDataStatus>,\n );\n}\n\nfunction deriveDataStatus(\n column: ColumnRecipe,\n opts: { ctx?: GlobalCfgRenderCtx },\n): AnnotationDataStatus {\n const field = column.getDataStatus();\n if (field === \"absent\") return \"absent\";\n if (field === \"resolving\") return \"computing\";\n return hasColumnData(column, opts) ? \"ready\" : \"computing\";\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: ColumnUniversalId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: ReadonlyArray<{ readonly linker: { readonly spec: PColumnSpec } }>;\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({ spec: step.linker.spec })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: ColumnUniversalId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: ReadonlyArray<{ readonly linker: { readonly spec: PColumnSpec } }>;\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<ColumnUniversalId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<ColumnUniversalId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<ColumnUniversalId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":";;;;;;;;;;AA0BA,SAAgB,aAAa,KAA+B;CAC1D,OAAO;EAAE,KAAA,GAAA,gCAAA,iBAAA,CAAqB,IAAI,EAAE;EAAG,MAAM,IAAI,QAAQ;CAAE;AAC7D;;AAGA,SAAgB,eAAe,MAA6C;CAC1E,QAAA,GAAA,gCAAA,eAAA,CAAsB,MAAMA,gCAAAA,WAAW,MAAM,UAAU,MAAM;AAC/D;;AAGA,SAAgB,iBAAiB,MAA6C;CAC5E,QAAA,GAAA,gCAAA,eAAA,CAAsB,MAAMA,gCAAAA,WAAW,MAAM,UAAU,MAAM;AAC/D;;AAMA,SAAgB,uBACd,KACA,mBAC+C;CAC/C,MAAM,OAAO,mBAAmB,IAAI,IAAI,EAAE;CAC1C,IAAI,SAAS,KAAA,GAAW,OAAO,KAAK;CACpC,IAAI,eAAe,IAAI,IAAI,GAAG,OAAO;CACrC,IAAI,iBAAiB,IAAI,IAAI,GAAG,OAAO;AAEzC;;AAGA,SAAgB,iBACd,KACA,cACoB;CACpB,MAAM,OAAO,cAAc,IAAI,IAAI,EAAE;CACrC,IAAI,SAAS,KAAA,GAAW,OAAO,KAAK;CACpC,MAAM,aAAa,QAAA,GAAA,gCAAA,eAAA,CAAsB,IAAI,MAAMA,gCAAAA,WAAW,MAAM,aAAa,CAAC;CAClF,OAAO,MAAM,UAAU,IAAI,KAAA,IAAY;AACzC;;;;;;;;;;AAWA,SAAgB,cACd,OACA,SACmB;CACnB,MAAM,yBAAS,IAAI,IAAkB;CACrC,IAAI,MAAM,WAAW,KAAK,QAAQ,WAAW,GAAG,OAAO;CAEvD,MAAM,gBAAgB,MAAM,QAAQ,SAAS,OAAO,KAAK,UAAU,UAAU;CAC7E,MAAM,qCAAqB,IAAI,IAAuB;CAEtD,IAAI,cAAc,SAAS,GAAG;EAE5B,MAAM,iBAAiBC,2BAAAA,kBAAkB,CAAC;GAAE,UAAA,GAAA,WAAA,OAAA,CADjB,UAAU,QAAQ,IAAI,EACc;GAAG,SAAS;EAAK,CAAC,CAAC;EAClF,KAAK,MAAM,QAAQ,eAAe;GAChC,MAAM,SAAS,eAAe,OAAO,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa;GAC3E,IAAI,OAAO,WAAW,GAAG,OAAO;GAChC,mBAAmB,IAAI,MAAM,IAAI,IAAI,OAAO,KAAK,QAAA,GAAA,gCAAA,iBAAA,CAAwB,EAAE,CAAC,CAAC,CAAC;EAChF;CACF;CAEA,KAAK,MAAM,OAAO,SAAS;EACzB,MAAM,UAAA,GAAA,gCAAA,iBAAA,CAA0B,IAAI,EAAE;EACtC,KAAK,MAAM,QAAQ,OAEjB,IADgB,mBAAmB,IAAI,IAAI,CAAC,EAAE,IAAI,MAAM,KAAK,OAChD;GACX,OAAO,IAAI,QAAQ,IAAI;GACvB;EACF;CAEJ;CACA,OAAO;AACT;;;;;;;;;;;;;;;;AAiBA,SAAgB,mBACd,SACA,OAAqC,CAAC,GACW;CACjD,OAAO,QAAQ,QACZ,KAAK,OAAQ,IAAI,EAAE,MAAM,iBAAiB,GAAG,IAAI,GAAI,MACtD,CAAC,CACH;AACF;AAEA,SAAS,iBACP,QACA,MACsB;CACtB,MAAM,QAAQ,OAAO,cAAc;CACnC,IAAI,UAAU,UAAU,OAAO;CAC/B,IAAI,UAAU,aAAa,OAAO;CAClC,OAAOC,cAAAA,cAAc,QAAQ,IAAI,IAAI,UAAU;AACjD;;AAWA,SAAgB,gBAAgB,SAGL;CACzB,MAAM,EAAE,SAAS,wBAAwB;CAUzC,OAJqBC,+BAAAA,qBALL,QAAQ,KAAK,OAAO;EAClC,MAAM,EAAE;EACR,YAAY,EAAE,YAAY,KAAK,UAAU,EAAE,MAAM,KAAK,OAAO,KAAK,EAAE;EACpE,gBAAgB,EAAE;CACpB,EACgD,GAAG,mBAAmB,CAAC,CAAC,QACrE,KAAK,OAAO,WAAY,IAAI,QAAQ,MAAM,CAAC,MAAM,OAAQ,MAC1D,CAAC,CAEe;AACpB"}
@@ -1,5 +1,5 @@
1
1
  import { ColumnOrderRule, ColumnVisibilityRule } from "./createPlDataTableV3.js";
2
- import { Annotation, DiscoveredPColumnId, PColumn, PColumnSpec, PFrameSpecDriver, PObjectId } from "@milaboratories/pl-model-common";
2
+ import { Annotation, AnnotationDataStatus, ColumnSelector, ColumnUniversalId, MatchQualifications, PColumn, PColumnSpec, PObjectId } from "@milaboratories/pl-model-common";
3
3
 
4
4
  //#region src/components/PlDataTable/createPlDataTable/utils.d.ts
5
5
  /** Check if column should be omitted from the table */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"mappings":";;;;;iBA0BgB,cAAA,CAAe,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;;iBAK/C,gBAAA,CAAiB,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;;KAKrD,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,SAAA;AALtC;AAAA,iBAQgB,sBAAA,CACd,GAAA,EAAK,UAAA,EACL,iBAAA,GAAoB,GAAA,CAAI,SAAA,EAAW,oBAAA;;iBAUrB,gBAAA,CACd,GAAA,EAAK,UAAA,EACL,YAAA,GAAe,GAAA,CAAI,SAAA,EAAW,eAAA"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"mappings":";;;;;iBA+BgB,cAAA,CAAe,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;;iBAK/C,gBAAA,CAAiB,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;AAAjE;AAAA,KAKY,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,SAAA;;iBAGtB,sBAAA,CACd,GAAA,EAAK,UAAA,EACL,iBAAA,GAAoB,GAAA,CAAI,SAAA,EAAW,oBAAA;;iBAUrB,gBAAA,CACd,GAAA,EAAK,UAAA,EACL,YAAA,GAAe,GAAA,CAAI,SAAA,EAAW,eAAA"}
@@ -1,12 +1,19 @@
1
1
  import { deriveDistinctLabels } from "../../../labels/derive_distinct_labels.js";
2
- import { ArrayColumnProvider } from "../../../columns/column_snapshot_provider.js";
3
- import { ColumnCollectionBuilder } from "../../../columns/column_collection_builder.js";
2
+ import { ColumnsCollection } from "../../../columns/columns_collection.js";
3
+ import { hasColumnData } from "../../../columns/utils.js";
4
4
  import "../../../columns/index.js";
5
- import { deriveDistinctTooltips } from "../../../labels/derive_distinct_tooltips.js";
6
- import { Annotation, canonicalizeAxisId, readAnnotation } from "@milaboratories/pl-model-common";
7
- import { getField } from "@milaboratories/helpers";
8
- import { isNil as isNil$1 } from "es-toolkit";
5
+ import "../../../labels/derive_distinct_tooltips.js";
6
+ import { Annotation, extractPObjectId, readAnnotation } from "@milaboratories/pl-model-common";
7
+ import "@milaboratories/helpers";
8
+ import { uniqBy } from "es-toolkit";
9
9
  //#region src/components/PlDataTable/createPlDataTable/utils.ts
10
+ /** Adapt a {@link ColumnRecipe} to the plain {@link RuleColumn} shape. */
11
+ function toRuleColumn(col) {
12
+ return {
13
+ id: extractPObjectId(col.id),
14
+ spec: col.getSpec()
15
+ };
16
+ }
10
17
  /** Check if column should be omitted from the table */
11
18
  function isColumnHidden(spec) {
12
19
  return readAnnotation(spec, Annotation.Table.Visibility) === "hidden";
@@ -34,151 +41,58 @@ function getOrderPriority(col, orderByColId) {
34
41
  * (first-match-wins, preserving original rule order).
35
42
  *
36
43
  * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.
37
- * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`
38
- * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.
44
+ * Selector-based rules (`ColumnSelector`) are matched via the
45
+ * `columnsCollection` service — the inline column ids must be resolvable in
46
+ * the active render ctx for the host to read their specs.
39
47
  */
40
- function evaluateRules(rules, columns, pframeSpec) {
48
+ function evaluateRules(rules, columns) {
41
49
  const result = /* @__PURE__ */ new Map();
42
50
  if (rules.length === 0 || columns.length === 0) return result;
43
- const hasSelectorRules = rules.some((rule) => typeof rule.match !== "function");
51
+ const selectorRules = rules.filter((rule) => typeof rule.match !== "function");
44
52
  const selectorHitsByRule = /* @__PURE__ */ new Map();
45
- if (hasSelectorRules) {
46
- const pColumns = dedupeById(columns).map((c) => ({
47
- id: c.id,
48
- spec: c.spec,
49
- data: void 0
50
- }));
51
- const collection = new ColumnCollectionBuilder(pframeSpec).addSource(new ArrayColumnProvider(pColumns)).build();
52
- if (collection === void 0) return result;
53
- try {
54
- for (const rule of rules) {
55
- if (typeof rule.match === "function") continue;
56
- const hits = collection.findColumns({ include: rule.match });
57
- selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));
58
- }
59
- } finally {
60
- collection.dispose();
53
+ if (selectorRules.length > 0) {
54
+ const baseCollection = ColumnsCollection([{
55
+ columns: uniqBy(columns, (col) => col.id),
56
+ isFinal: true
57
+ }]);
58
+ for (const rule of selectorRules) {
59
+ const hitIds = baseCollection.filter({ include: rule.match }).getColumnIds();
60
+ if (hitIds.length === 0) return result;
61
+ selectorHitsByRule.set(rule, new Set(hitIds.map((id) => extractPObjectId(id))));
61
62
  }
62
63
  }
63
- for (const col of columns) for (const rule of rules) if (typeof rule.match === "function" ? rule.match(col.spec) : selectorHitsByRule.get(rule)?.has(col.id) ?? false) {
64
- result.set(col.id, rule);
65
- break;
66
- }
67
- return result;
68
- }
69
- function dedupeById(columns) {
70
- const seen = /* @__PURE__ */ new Set();
71
- const result = [];
72
64
  for (const col of columns) {
73
- if (seen.has(col.id)) continue;
74
- seen.add(col.id);
75
- result.push(col);
65
+ const colKey = extractPObjectId(col.id);
66
+ for (const rule of rules) if (selectorHitsByRule.get(rule)?.has(colKey) ?? false) {
67
+ result.set(colKey, rule);
68
+ break;
69
+ }
76
70
  }
77
71
  return result;
78
72
  }
79
73
  /**
80
- * Writes derived labels into column and axis annotations.
81
- * Returns new column objects with modified specs — original columns are not mutated.
74
+ * Build a sidecar map `columnId → AnnotationDataStatus` derived from each
75
+ * recipe's own status. This is *rendering* metadata — kept out of the spec
76
+ * so it cannot perturb column identity (id-bearing spec overrides would
77
+ * diverge the visible PTable's column ids from the full table / pframe).
82
78
  *
83
- * For each column: writes derived label into Annotation.Label (if present in derivedLabels).
84
- * For each axis in column specs: writes derived axis label into AxisSpec annotations.
85
- */
86
- function withLabelAnnotations(derivedLabels, columns) {
87
- if (derivedLabels === void 0) return columns;
88
- return columns.map((col) => {
89
- const colLabel = derivedLabels[col.id];
90
- return {
91
- ...col,
92
- spec: {
93
- ...col.spec,
94
- ...isNil$1(colLabel) ? {} : { annotations: {
95
- ...col.spec.annotations,
96
- [Annotation.Label]: colLabel
97
- } },
98
- axesSpec: col.spec.axesSpec.map((axis) => {
99
- const label = derivedLabels[canonicalizeAxisId(axis)];
100
- return isNil$1(label) ? axis : {
101
- ...axis,
102
- annotations: {
103
- ...axis.annotations,
104
- [Annotation.Label]: label
105
- }
106
- };
107
- })
108
- }
109
- };
110
- });
111
- }
112
- function withDataStatusAnnotations(columns) {
113
- return columns.map((col) => {
114
- return {
115
- ...col,
116
- spec: {
117
- ...col.spec,
118
- annotations: {
119
- ...col.spec.annotations,
120
- [Annotation.DataStatus]: col.dataStatus
121
- }
122
- }
123
- };
124
- });
125
- }
126
- /**
127
- * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps
128
- * into column annotations. Returns new column objects — originals are not mutated.
129
- */
130
- function withTableVisualAnnotations(visibilityByColId, orderByColId, columns) {
131
- if (visibilityByColId === void 0 && orderByColId === void 0) return columns;
132
- return columns.map((col) => {
133
- const annotations = { ...col.spec.annotations };
134
- const visibility = getEffectiveVisibility(col, visibilityByColId);
135
- if (!isNil$1(visibility)) annotations[Annotation.Table.Visibility] = visibility;
136
- const orderPriority = getOrderPriority(col, orderByColId);
137
- if (!isNil$1(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);
138
- return {
139
- ...col,
140
- spec: {
141
- ...col.spec,
142
- annotations
143
- }
144
- };
145
- });
146
- }
147
- /**
148
- * Writes derived info annotations into column annotations.
149
- * Columns without an info entry are passed through unchanged.
79
+ * Mapping `ColumnFieldStatus` × actual byte-presence → `AnnotationDataStatus`:
80
+ * - `absent` → `"absent"`
81
+ * - `resolving` → `"computing"`
82
+ * - `present` + `hasColumnData()` → `"ready"`
83
+ * - `present` + no bytes yet → `"computing"`
84
+ *
85
+ * Intentionally scoped to visible columns — the probe is meaningful only for
86
+ * what the user will actually see.
150
87
  */
151
- function withInfoAnnotations(infoById, columns) {
152
- if (isNil$1(infoById)) return columns;
153
- return columns.map((col) => {
154
- const info = infoById[col.id];
155
- if (isNil$1(info)) return col;
156
- return {
157
- ...col,
158
- spec: {
159
- ...col.spec,
160
- annotations: {
161
- ...col.spec.annotations,
162
- [Annotation.Table.Info]: info
163
- }
164
- }
165
- };
166
- });
88
+ function buildDataStatusMap(columns, opts = {}) {
89
+ return columns.reduce((acc, c) => (acc[c.id] = deriveDataStatus(c, opts), acc), {});
167
90
  }
168
- function withHidenAxesAnnotations(columns) {
169
- return columns.map((col) => ({
170
- ...col,
171
- spec: {
172
- ...col.spec,
173
- axesSpec: col.spec.axesSpec.map((axis) => ({
174
- ...axis,
175
- annotations: {
176
- ...axis.annotations,
177
- [Annotation.Table.Visibility]: "hidden"
178
- }
179
- }))
180
- }
181
- }));
91
+ function deriveDataStatus(column, opts) {
92
+ const field = column.getDataStatus();
93
+ if (field === "absent") return "absent";
94
+ if (field === "resolving") return "computing";
95
+ return hasColumnData(column, opts) ? "ready" : "computing";
182
96
  }
183
97
  /** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */
184
98
  function deriveAllLabels(options) {
@@ -189,35 +103,7 @@ function deriveAllLabels(options) {
189
103
  qualifications: c.qualifications
190
104
  })), deriveLabelsOptions).reduce((acc, label, index) => (acc[columns[index].id] = label, acc), {});
191
105
  }
192
- /** Derive origin tooltips for columns whose qualifications or linker path carry info. */
193
- function deriveAllTooltips(options) {
194
- const { columns } = options;
195
- const variantCountByOriginal = columns.reduce((acc, c) => {
196
- return acc.set(getField(c, "originalId") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);
197
- }, /* @__PURE__ */ new Map());
198
- const { entries } = columns.reduce(({ entries, variantSeen }, c) => {
199
- const id = getField(c, "originalId") ?? c.id;
200
- const variantCount = variantCountByOriginal.get(id);
201
- const variantIndex = (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));
202
- entries.push({
203
- spec: c.spec,
204
- linkerPath: c.linkerPath,
205
- qualifications: c.qualifications,
206
- variantIndex,
207
- variantCount
208
- });
209
- return {
210
- entries,
211
- variantSeen
212
- };
213
- }, {
214
- entries: [],
215
- variantSeen: /* @__PURE__ */ new Map()
216
- });
217
- const tooltips = deriveDistinctTooltips(entries);
218
- return Object.fromEntries(tooltips.flatMap((t, i) => isNil$1(t) ? [] : [[columns[i].id, t]]));
219
- }
220
106
  //#endregion
221
- export { deriveAllLabels, deriveAllTooltips, evaluateRules, getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional, withDataStatusAnnotations, withHidenAxesAnnotations, withInfoAnnotations, withLabelAnnotations, withTableVisualAnnotations };
107
+ export { buildDataStatusMap, deriveAllLabels, evaluateRules, getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional, toRuleColumn };
222
108
 
223
109
  //# sourceMappingURL=utils.js.map