@platforma-sdk/model 1.63.1 → 1.64.0

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 (399) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +12 -22
  2. package/dist/_virtual/_rolldown/runtime.js +6 -11
  3. package/dist/annotations/converter.cjs +4 -5
  4. package/dist/annotations/converter.cjs.map +1 -1
  5. package/dist/annotations/converter.d.ts.map +1 -0
  6. package/dist/annotations/converter.js +1 -2
  7. package/dist/annotations/converter.js.map +1 -1
  8. package/dist/annotations/index.cjs +1 -1
  9. package/dist/annotations/index.js +1 -1
  10. package/dist/annotations/types.d.ts +0 -1
  11. package/dist/annotations/types.d.ts.map +1 -0
  12. package/dist/bconfig/index.cjs +2 -2
  13. package/dist/bconfig/index.js +2 -2
  14. package/dist/bconfig/lambdas.d.ts +0 -1
  15. package/dist/bconfig/lambdas.d.ts.map +1 -0
  16. package/dist/bconfig/normalization.cjs +4 -5
  17. package/dist/bconfig/normalization.cjs.map +1 -1
  18. package/dist/bconfig/normalization.d.ts.map +1 -0
  19. package/dist/bconfig/normalization.js +1 -2
  20. package/dist/bconfig/normalization.js.map +1 -1
  21. package/dist/bconfig/types.cjs +1 -2
  22. package/dist/bconfig/types.cjs.map +1 -1
  23. package/dist/bconfig/types.d.ts +0 -1
  24. package/dist/bconfig/types.d.ts.map +1 -0
  25. package/dist/bconfig/types.js +1 -1
  26. package/dist/bconfig/util.d.ts.map +1 -0
  27. package/dist/bconfig/v3.d.ts.map +1 -0
  28. package/dist/block_api_v1.d.ts.map +1 -0
  29. package/dist/block_api_v2.d.ts.map +1 -0
  30. package/dist/block_api_v3.d.ts.map +1 -0
  31. package/dist/block_migrations.cjs +2 -3
  32. package/dist/block_migrations.cjs.map +1 -1
  33. package/dist/block_migrations.d.ts.map +1 -0
  34. package/dist/block_migrations.js +1 -2
  35. package/dist/block_migrations.js.map +1 -1
  36. package/dist/block_model.cjs +16 -17
  37. package/dist/block_model.cjs.map +1 -1
  38. package/dist/block_model.d.ts +0 -2
  39. package/dist/block_model.d.ts.map +1 -0
  40. package/dist/block_model.js +4 -5
  41. package/dist/block_model.js.map +1 -1
  42. package/dist/block_model_legacy.cjs +10 -11
  43. package/dist/block_model_legacy.cjs.map +1 -1
  44. package/dist/block_model_legacy.d.ts +0 -3
  45. package/dist/block_model_legacy.d.ts.map +1 -0
  46. package/dist/block_model_legacy.js +1 -2
  47. package/dist/block_model_legacy.js.map +1 -1
  48. package/dist/block_state_patch.d.ts.map +1 -0
  49. package/dist/block_state_util.cjs +1 -2
  50. package/dist/block_state_util.cjs.map +1 -1
  51. package/dist/block_state_util.d.ts.map +1 -0
  52. package/dist/block_state_util.js +1 -1
  53. package/dist/block_state_util.js.map +1 -1
  54. package/dist/block_storage.cjs +5 -12
  55. package/dist/block_storage.cjs.map +1 -1
  56. package/dist/block_storage.d.ts.map +1 -0
  57. package/dist/block_storage.js +5 -11
  58. package/dist/block_storage.js.map +1 -1
  59. package/dist/block_storage_callbacks.cjs +4 -5
  60. package/dist/block_storage_callbacks.cjs.map +1 -1
  61. package/dist/block_storage_callbacks.js +3 -4
  62. package/dist/block_storage_callbacks.js.map +1 -1
  63. package/dist/block_storage_facade.cjs +2 -3
  64. package/dist/block_storage_facade.cjs.map +1 -1
  65. package/dist/block_storage_facade.d.ts +0 -1
  66. package/dist/block_storage_facade.d.ts.map +1 -0
  67. package/dist/block_storage_facade.js +1 -2
  68. package/dist/block_storage_facade.js.map +1 -1
  69. package/dist/columns/column_collection_builder.cjs +111 -99
  70. package/dist/columns/column_collection_builder.cjs.map +1 -1
  71. package/dist/columns/column_collection_builder.d.ts +13 -12
  72. package/dist/columns/column_collection_builder.d.ts.map +1 -0
  73. package/dist/columns/column_collection_builder.js +108 -96
  74. package/dist/columns/column_collection_builder.js.map +1 -1
  75. package/dist/columns/column_selector.cjs +9 -82
  76. package/dist/columns/column_selector.cjs.map +1 -1
  77. package/dist/columns/column_selector.d.ts +6 -14
  78. package/dist/columns/column_selector.d.ts.map +1 -0
  79. package/dist/columns/column_selector.js +7 -78
  80. package/dist/columns/column_selector.js.map +1 -1
  81. package/dist/columns/column_snapshot.cjs +4 -5
  82. package/dist/columns/column_snapshot.cjs.map +1 -1
  83. package/dist/columns/column_snapshot.d.ts +3 -3
  84. package/dist/columns/column_snapshot.d.ts.map +1 -0
  85. package/dist/columns/column_snapshot.js +4 -4
  86. package/dist/columns/column_snapshot.js.map +1 -1
  87. package/dist/columns/column_snapshot_provider.cjs +2 -3
  88. package/dist/columns/column_snapshot_provider.cjs.map +1 -1
  89. package/dist/columns/column_snapshot_provider.d.ts +8 -8
  90. package/dist/columns/column_snapshot_provider.d.ts.map +1 -0
  91. package/dist/columns/column_snapshot_provider.js +2 -2
  92. package/dist/columns/column_snapshot_provider.js.map +1 -1
  93. package/dist/columns/ctx_column_sources.cjs +3 -4
  94. package/dist/columns/ctx_column_sources.cjs.map +1 -1
  95. package/dist/columns/ctx_column_sources.d.ts +2 -2
  96. package/dist/columns/ctx_column_sources.d.ts.map +1 -0
  97. package/dist/columns/ctx_column_sources.js +1 -2
  98. package/dist/columns/ctx_column_sources.js.map +1 -1
  99. package/dist/columns/expand_by_partition.cjs +106 -0
  100. package/dist/columns/expand_by_partition.cjs.map +1 -0
  101. package/dist/columns/expand_by_partition.d.ts +33 -0
  102. package/dist/columns/expand_by_partition.d.ts.map +1 -0
  103. package/dist/columns/expand_by_partition.js +105 -0
  104. package/dist/columns/expand_by_partition.js.map +1 -0
  105. package/dist/columns/index.cjs +6 -5
  106. package/dist/columns/index.d.ts +4 -3
  107. package/dist/columns/index.js +6 -5
  108. package/dist/components/PFrameForGraphs.cjs +4 -5
  109. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  110. package/dist/components/PFrameForGraphs.d.ts +0 -1
  111. package/dist/components/PFrameForGraphs.d.ts.map +1 -0
  112. package/dist/components/PFrameForGraphs.js +2 -3
  113. package/dist/components/PFrameForGraphs.js.map +1 -1
  114. package/dist/components/PlAnnotations/filter.d.ts.map +1 -0
  115. package/dist/components/PlAnnotations/filters_ui.cjs +1 -2
  116. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
  117. package/dist/components/PlAnnotations/filters_ui.d.ts +0 -2
  118. package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -0
  119. package/dist/components/PlAnnotations/filters_ui.js +1 -1
  120. package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
  121. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +26 -0
  122. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -0
  123. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +25 -0
  124. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -0
  125. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +68 -0
  126. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -0
  127. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +67 -0
  128. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -0
  129. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +28 -18
  130. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
  131. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +4 -1
  132. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -0
  133. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +22 -12
  134. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
  135. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +262 -181
  136. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
  137. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +37 -23
  138. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -0
  139. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +261 -177
  140. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
  141. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +64 -0
  142. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -0
  143. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -0
  144. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -0
  145. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +63 -0
  146. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -0
  147. package/dist/components/PlDataTable/createPlDataTable/index.cjs +4 -4
  148. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
  149. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
  150. package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -0
  151. package/dist/components/PlDataTable/createPlDataTable/index.js +3 -3
  152. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
  153. package/dist/components/PlDataTable/createPlDataTable/utils.cjs +109 -0
  154. package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -0
  155. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +19 -0
  156. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -0
  157. package/dist/components/PlDataTable/createPlDataTable/utils.js +102 -0
  158. package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -0
  159. package/dist/components/PlDataTable/createPlDataTableSheet.cjs +1 -2
  160. package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
  161. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +0 -1
  162. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts.map +1 -0
  163. package/dist/components/PlDataTable/createPlDataTableSheet.js +1 -1
  164. package/dist/components/PlDataTable/index.cjs +7 -5
  165. package/dist/components/PlDataTable/index.d.ts +4 -2
  166. package/dist/components/PlDataTable/index.js +7 -5
  167. package/dist/components/PlDataTable/labels.cjs +27 -14
  168. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  169. package/dist/components/PlDataTable/labels.js +26 -13
  170. package/dist/components/PlDataTable/labels.js.map +1 -1
  171. package/dist/components/PlDataTable/state-migration.cjs +8 -6
  172. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  173. package/dist/components/PlDataTable/state-migration.d.ts.map +1 -0
  174. package/dist/components/PlDataTable/state-migration.js +5 -3
  175. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  176. package/dist/components/PlDataTable/typesV4.d.ts.map +1 -0
  177. package/dist/components/PlDataTable/typesV5.d.ts +5 -5
  178. package/dist/components/PlDataTable/typesV5.d.ts.map +1 -0
  179. package/dist/components/PlMultiSequenceAlignment.cjs +2 -3
  180. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
  181. package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -0
  182. package/dist/components/PlMultiSequenceAlignment.js +1 -2
  183. package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
  184. package/dist/components/PlSelectionModel.cjs +1 -2
  185. package/dist/components/PlSelectionModel.cjs.map +1 -1
  186. package/dist/components/PlSelectionModel.d.ts.map +1 -0
  187. package/dist/components/PlSelectionModel.js +1 -1
  188. package/dist/components/index.cjs +13 -11
  189. package/dist/components/index.d.ts +3 -3
  190. package/dist/components/index.js +12 -10
  191. package/dist/config/actions.cjs +1 -2
  192. package/dist/config/actions.cjs.map +1 -1
  193. package/dist/config/actions.d.ts.map +1 -0
  194. package/dist/config/actions.js +1 -1
  195. package/dist/config/actions_kinds.d.ts.map +1 -0
  196. package/dist/config/index.cjs +1 -1
  197. package/dist/config/index.js +1 -1
  198. package/dist/config/model.d.ts.map +1 -0
  199. package/dist/config/model_meta.d.ts.map +1 -0
  200. package/dist/config/type_engine.d.ts.map +1 -0
  201. package/dist/config/type_util.d.ts.map +1 -0
  202. package/dist/env_value.cjs +1 -2
  203. package/dist/env_value.cjs.map +1 -1
  204. package/dist/env_value.d.ts.map +1 -0
  205. package/dist/env_value.js +1 -1
  206. package/dist/env_value.js.map +1 -1
  207. package/dist/filters/converters/filterToQuery.cjs +3 -4
  208. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  209. package/dist/filters/converters/filterToQuery.d.ts.map +1 -0
  210. package/dist/filters/converters/filterToQuery.js +1 -2
  211. package/dist/filters/converters/filterToQuery.js.map +1 -1
  212. package/dist/filters/converters/filterUiToExpressionImpl.cjs +3 -4
  213. package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
  214. package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -0
  215. package/dist/filters/converters/filterUiToExpressionImpl.js +1 -2
  216. package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
  217. package/dist/filters/converters/index.cjs +2 -2
  218. package/dist/filters/converters/index.js +2 -2
  219. package/dist/filters/distill.cjs +3 -4
  220. package/dist/filters/distill.cjs.map +1 -1
  221. package/dist/filters/distill.d.ts.map +1 -0
  222. package/dist/filters/distill.js +1 -2
  223. package/dist/filters/distill.js.map +1 -1
  224. package/dist/filters/index.cjs +4 -4
  225. package/dist/filters/index.d.ts +0 -1
  226. package/dist/filters/index.js +3 -3
  227. package/dist/filters/traverse.cjs +1 -2
  228. package/dist/filters/traverse.cjs.map +1 -1
  229. package/dist/filters/traverse.js +1 -1
  230. package/dist/filters/traverse.js.map +1 -1
  231. package/dist/filters/types.d.ts.map +1 -0
  232. package/dist/index.cjs +89 -83
  233. package/dist/index.d.ts +8 -15
  234. package/dist/index.js +8 -9
  235. package/dist/internal.cjs +1 -2
  236. package/dist/internal.cjs.map +1 -1
  237. package/dist/internal.js +1 -1
  238. package/dist/internal.js.map +1 -1
  239. package/dist/labels/derive_distinct_labels.cjs +41 -30
  240. package/dist/labels/derive_distinct_labels.cjs.map +1 -1
  241. package/dist/labels/derive_distinct_labels.d.ts +15 -15
  242. package/dist/labels/derive_distinct_labels.d.ts.map +1 -0
  243. package/dist/labels/derive_distinct_labels.js +40 -29
  244. package/dist/labels/derive_distinct_labels.js.map +1 -1
  245. package/dist/labels/index.cjs +1 -2
  246. package/dist/labels/index.d.ts +1 -2
  247. package/dist/labels/index.js +1 -2
  248. package/dist/package.cjs +7 -8
  249. package/dist/package.js +2 -2
  250. package/dist/pframe.cjs +2 -3
  251. package/dist/pframe.cjs.map +1 -1
  252. package/dist/pframe.d.ts.map +1 -0
  253. package/dist/pframe.js +1 -2
  254. package/dist/pframe.js.map +1 -1
  255. package/dist/pframe_utils/axes.cjs +2 -3
  256. package/dist/pframe_utils/axes.cjs.map +1 -1
  257. package/dist/pframe_utils/axes.d.ts +0 -1
  258. package/dist/pframe_utils/axes.d.ts.map +1 -0
  259. package/dist/pframe_utils/axes.js +1 -2
  260. package/dist/pframe_utils/axes.js.map +1 -1
  261. package/dist/pframe_utils/columns.cjs +5 -6
  262. package/dist/pframe_utils/columns.cjs.map +1 -1
  263. package/dist/pframe_utils/columns.d.ts +0 -1
  264. package/dist/pframe_utils/columns.d.ts.map +1 -0
  265. package/dist/pframe_utils/columns.js +1 -2
  266. package/dist/pframe_utils/columns.js.map +1 -1
  267. package/dist/pframe_utils/index.cjs +3 -4
  268. package/dist/pframe_utils/index.cjs.map +1 -1
  269. package/dist/pframe_utils/index.d.ts.map +1 -0
  270. package/dist/pframe_utils/index.js +2 -3
  271. package/dist/pframe_utils/index.js.map +1 -1
  272. package/dist/platforma.d.ts.map +1 -0
  273. package/dist/plugin_handle.cjs +1 -2
  274. package/dist/plugin_handle.cjs.map +1 -1
  275. package/dist/plugin_handle.d.ts.map +1 -0
  276. package/dist/plugin_handle.js +1 -1
  277. package/dist/plugin_model.cjs +3 -4
  278. package/dist/plugin_model.cjs.map +1 -1
  279. package/dist/plugin_model.d.ts +0 -1
  280. package/dist/plugin_model.d.ts.map +1 -0
  281. package/dist/plugin_model.js +1 -2
  282. package/dist/plugin_model.js.map +1 -1
  283. package/dist/raw_globals.cjs +3 -4
  284. package/dist/raw_globals.cjs.map +1 -1
  285. package/dist/raw_globals.d.ts.map +1 -0
  286. package/dist/raw_globals.js +1 -2
  287. package/dist/raw_globals.js.map +1 -1
  288. package/dist/ref_util.cjs +3 -4
  289. package/dist/ref_util.cjs.map +1 -1
  290. package/dist/ref_util.d.ts +0 -2
  291. package/dist/ref_util.d.ts.map +1 -0
  292. package/dist/ref_util.js +1 -2
  293. package/dist/ref_util.js.map +1 -1
  294. package/dist/render/accessor.cjs +4 -5
  295. package/dist/render/accessor.cjs.map +1 -1
  296. package/dist/render/accessor.d.ts.map +1 -0
  297. package/dist/render/accessor.js +1 -2
  298. package/dist/render/accessor.js.map +1 -1
  299. package/dist/render/api.cjs +20 -14
  300. package/dist/render/api.cjs.map +1 -1
  301. package/dist/render/api.d.ts +2 -3
  302. package/dist/render/api.d.ts.map +1 -0
  303. package/dist/render/api.js +11 -5
  304. package/dist/render/api.js.map +1 -1
  305. package/dist/render/future.cjs +2 -3
  306. package/dist/render/future.cjs.map +1 -1
  307. package/dist/render/future.d.ts.map +1 -0
  308. package/dist/render/future.js +1 -2
  309. package/dist/render/future.js.map +1 -1
  310. package/dist/render/index.cjs +8 -8
  311. package/dist/render/index.d.ts +1 -2
  312. package/dist/render/index.js +7 -7
  313. package/dist/render/internal.cjs +7 -9
  314. package/dist/render/internal.cjs.map +1 -1
  315. package/dist/render/internal.d.ts.map +1 -0
  316. package/dist/render/internal.js +1 -2
  317. package/dist/render/internal.js.map +1 -1
  318. package/dist/render/traversal_ops.d.ts.map +1 -0
  319. package/dist/render/util/axis_filtering.cjs +1 -2
  320. package/dist/render/util/axis_filtering.cjs.map +1 -1
  321. package/dist/render/util/axis_filtering.d.ts.map +1 -0
  322. package/dist/render/util/axis_filtering.js +1 -1
  323. package/dist/render/util/column_collection.cjs +8 -9
  324. package/dist/render/util/column_collection.cjs.map +1 -1
  325. package/dist/render/util/column_collection.d.ts +0 -1
  326. package/dist/render/util/column_collection.d.ts.map +1 -0
  327. package/dist/render/util/column_collection.js +4 -5
  328. package/dist/render/util/column_collection.js.map +1 -1
  329. package/dist/render/util/index.cjs +4 -4
  330. package/dist/render/util/index.js +4 -4
  331. package/dist/render/util/label.cjs +4 -5
  332. package/dist/render/util/label.cjs.map +1 -1
  333. package/dist/render/util/label.d.ts.map +1 -0
  334. package/dist/render/util/label.js +3 -4
  335. package/dist/render/util/label.js.map +1 -1
  336. package/dist/render/util/pcolumn_data.cjs +9 -10
  337. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  338. package/dist/render/util/pcolumn_data.d.ts +2 -2
  339. package/dist/render/util/pcolumn_data.d.ts.map +1 -0
  340. package/dist/render/util/pcolumn_data.js +7 -8
  341. package/dist/render/util/pcolumn_data.js.map +1 -1
  342. package/dist/render/util/pframe_upgraders.cjs +1 -2
  343. package/dist/render/util/pframe_upgraders.cjs.map +1 -1
  344. package/dist/render/util/pframe_upgraders.js +1 -1
  345. package/dist/render/util/split_selectors.d.ts.map +1 -0
  346. package/dist/services/block_services.cjs +2 -3
  347. package/dist/services/block_services.cjs.map +1 -1
  348. package/dist/services/block_services.d.ts +2 -2
  349. package/dist/services/block_services.d.ts.map +1 -0
  350. package/dist/services/block_services.js +1 -2
  351. package/dist/services/block_services.js.map +1 -1
  352. package/dist/services/index.cjs +2 -2
  353. package/dist/services/index.js +2 -2
  354. package/dist/services/service_bridge.cjs +1 -2
  355. package/dist/services/service_bridge.cjs.map +1 -1
  356. package/dist/services/service_bridge.d.ts.map +1 -0
  357. package/dist/services/service_bridge.js +1 -1
  358. package/dist/services/service_resolve.d.ts.map +1 -0
  359. package/dist/version.cjs +2 -4
  360. package/dist/version.cjs.map +1 -1
  361. package/dist/version.d.ts.map +1 -0
  362. package/dist/version.js +1 -2
  363. package/dist/version.js.map +1 -1
  364. package/package.json +13 -13
  365. package/src/columns/column_collection_builder.test.ts +40 -27
  366. package/src/columns/column_collection_builder.ts +176 -131
  367. package/src/columns/column_selector.test.ts +17 -399
  368. package/src/columns/column_selector.ts +14 -127
  369. package/src/columns/column_snapshot.ts +5 -5
  370. package/src/columns/column_snapshot_provider.ts +11 -10
  371. package/src/columns/ctx_column_sources.ts +2 -2
  372. package/src/columns/expand_by_partition.test.ts +4 -4
  373. package/src/columns/expand_by_partition.ts +4 -3
  374. package/src/columns/index.ts +1 -0
  375. package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +42 -0
  376. package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +89 -0
  377. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +39 -11
  378. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +502 -313
  379. package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +122 -0
  380. package/src/components/PlDataTable/createPlDataTable/index.ts +4 -2
  381. package/src/components/PlDataTable/createPlDataTable/utils.test.ts +257 -0
  382. package/src/components/PlDataTable/createPlDataTable/utils.ts +160 -0
  383. package/src/components/PlDataTable/index.ts +13 -2
  384. package/src/components/PlDataTable/labels.ts +29 -18
  385. package/src/components/PlDataTable/state-migration.ts +3 -1
  386. package/src/components/PlDataTable/typesV5.ts +4 -4
  387. package/src/labels/derive_distinct_labels.test.ts +143 -45
  388. package/src/labels/derive_distinct_labels.ts +102 -49
  389. package/src/labels/index.ts +0 -1
  390. package/src/render/api.ts +15 -5
  391. package/src/render/util/column_collection.ts +4 -3
  392. package/src/render/util/label.ts +2 -2
  393. package/src/render/util/pcolumn_data.ts +5 -3
  394. package/dist/labels/write_labels_to_specs.cjs +0 -15
  395. package/dist/labels/write_labels_to_specs.cjs.map +0 -1
  396. package/dist/labels/write_labels_to_specs.d.ts +0 -9
  397. package/dist/labels/write_labels_to_specs.js +0 -14
  398. package/dist/labels/write_labels_to_specs.js.map +0 -1
  399. package/src/labels/write_labels_to_specs.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"createPlDataTableV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n DataInfo,\n PColumn,\n PColumnIdAndSpec,\n PColumnValues,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableDefV2,\n PTableSorting,\n SpecQuery,\n SingleAxisSelector,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PColumnSpec,\n PlRef,\n MultiColumnSelector,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n readAnnotation,\n isBooleanExpression,\n parseJson,\n uniqueBy,\n} from \"@milaboratories/pl-model-common\";\nimport { filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, TreeNodeAccessor, PColumnDataUniversal } from \"../../../render\";\nimport { allPColumnsReady } from \"../../../render\";\nimport { isFunction, isNil } from \"es-toolkit\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { distillFilterSpec } from \"../../../filters/distill\";\nimport type { PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnSource, MatchingMode } from \"../../../columns\";\nimport { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { isColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\n\n/** Convert a PTableColumnId to a SpecQueryExpression reference. */\nexport function columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n if (col.type === \"axis\") {\n return { type: \"axisRef\", value: col.id as SingleAxisSelector };\n }\n return { type: \"columnRef\", value: col.id };\n}\n\n/** Wrap a SpecQuery as a SpecQueryJoinEntry with empty qualifications. */\nexport function joinEntry<C>(input: SpecQuery<C>): SpecQueryJoinEntry<C> {\n return { entry: input, qualifications: [] };\n}\n\nexport function createPTableDef(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 // Build SpecQuery directly from columns\n const coreJoinQuery: SpecQuery<\n PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>\n > = {\n type: params.coreJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: coreColumns.map((c) => joinEntry({ type: \"column\", column: c })),\n };\n\n let query: SpecQuery<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> = {\n type: \"outerJoin\",\n primary: joinEntry(coreJoinQuery),\n secondary: secondaryColumns.map((c) => joinEntry({ type: \"column\", column: c })),\n };\n\n // Apply filters\n if (params.filters !== null) {\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 // Apply sorting\n if (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\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/** Structured source config — selectors/anchors instead of raw ColumnSource. */\ntype ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n anchors?: Record<string, PlRef | PObjectId | PColumnSpec>;\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type createPlDataTableOptionsV3 = {\n source?: ColumnSource | ColumnSource[];\n columns: ColumnsSelectorConfig;\n\n // Existing from V2\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n coreJoinType?: \"inner\" | \"full\";\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n\n state?: PlDataTableStateV2;\n};\n\n// interface ColumnDisplayConfig {\n// /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n// ordering?: ColumnOrderRule[];\n// /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n// visibility?: ColumnVisibilityRule[];\n// }\n\n// interface ColumnOrderRule {\n// match: ColumnMatcher;\n// /** Higher number = further left in table */\n// priority: number;\n// }\n\n// interface ColumnVisibilityRule {\n// match: ColumnMatcher;\n// visibility: \"default\" | \"optional\" | \"hidden\";\n// }\n\n// type ColumnMatcher =\n// | ((spec: PColumnSpec) => boolean)\n// | { name: string | string[] }\n// | { annotation: Record<string, string> }\n// | { ids: Set<string> };\n\nexport function createPlDataTableV3<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const providers = options.source\n ? normalizeSourceList(options.source).filter(isColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n\n if (providers.length === 0) return undefined;\n\n // Step 1: Build collection from sources\n const builder = new ColumnCollectionBuilder(ctx.services.pframeSpec).addSources(providers);\n const anchors = options.columns.anchors;\n const collection = isNil(anchors) ? builder.build() : builder.build({ anchors });\n\n if (!collection) return undefined;\n try {\n // Step 2: Get data columns, excluding annotation-hidden ones\n const findOptions = options.columns\n ? {\n include: options.columns.include,\n exclude: options.columns.exclude,\n mode: options.columns.mode,\n maxHops: options.columns.maxHops,\n }\n : undefined;\n const findResult = collection.findColumns(findOptions);\n const snapshots = findResult.map((v) => (\"column\" in v ? v.column : v));\n const dataSnapshots = snapshots.filter((s) => !isColumnHidden(s.spec));\n if (dataSnapshots.length === 0) return undefined;\n\n // Convert snapshots to PColumn<PColumnDataUniversal>[]\n const columns: PColumn<PColumnDataUniversal>[] = [];\n for (const snap of dataSnapshots) {\n if (!snap.data) return undefined;\n const data = snap.data.get();\n if (data === undefined) return undefined;\n columns.push({ id: snap.id, spec: snap.spec, data });\n }\n\n // Step 3: Normalize table state\n const tableStateNormalized = upgradePlDataTableStateV2(options.state);\n\n // Step 4: Get label columns from result pool and match to data columns\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n const fullLabelColumns = getMatchingLabelColumns(\n columns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n // Step 5: Build column ID set for filter/sorting validation\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(\n fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)),\n );\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // Step 6: Filtering validation\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? 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\n // Step 7: 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 // Step 8: Build full table definition and handles\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\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 // Step 9: Determine hidden columns\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) return hiddenColIds;\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 // Step 10: Build visible table definition\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\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 } satisfies PlDataTableModel;\n } finally {\n collection.dispose();\n }\n}\n\n/** Normalize raw ColumnSource | ColumnSource[] into a flat list of sources. */\nfunction normalizeSourceList(source: ColumnSource | ColumnSource[]): ColumnSource[] {\n if (\n Array.isArray(source) &&\n source.length > 0 &&\n (Array.isArray(source[0]) || isColumnSnapshotProvider(source[0]))\n ) {\n return source as ColumnSource[];\n }\n return [source as ColumnSource];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"createPlDataTableV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n FilterSpecNode,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableSorting,\n PColumnSpec,\n MultiColumnSelector,\n SUniversalPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport {\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n parseJson,\n uniqueBy,\n} from \"@milaboratories/pl-model-common\";\nimport { collectFilterSpecColumns, traverseFilterSpec } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, PColumnDataUniversal } from \"../../../render\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport type { PlDataTableFilters, PlDataTableFilterSpecLeaf, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnMatch, ColumnSnapshot, MatchingMode } from \"../../../columns\";\nimport { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport type { DeriveLabelsOptions } from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveAllLabels,\n isColumnHidden,\n isColumnOptional,\n withLabelAnnotations,\n withTableVisualAnnotations,\n} from \"./utils\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\nimport { discoverTableColumnSnaphots, type DiscoveredTableColumnOptions } from \"./discoverColumns\";\nimport { isNil, RequiredBy, throwError, type Nil } from \"@milaboratories/helpers\";\n\nexport type createPlDataTableOptionsV3 = (\n | {\n discoverColumnOptions: DiscoveredTableColumnOptions;\n }\n | {\n columns: Nil | TableColumnSnapshot<SUniversalPColumnId>[];\n }\n) & {\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n primaryJoinType?: \"inner\" | \"full\";\n\n tableState?: PlDataTableStateV2;\n labelsOptions?: DeriveLabelsOptions;\n columnsDisplayOptions?: ColumnsDisplayOptions;\n};\n\n/** Structured source config — selectors/anchors instead of raw ColumnSource. */\nexport type ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type ColumnsDisplayOptions = {\n /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n ordering?: ColumnOrderRule[];\n /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n visibility?: ColumnVisibilityRule[];\n};\n\nexport type ColumnOrderRule = {\n match: ColumnMatcher;\n /** Higher number = further left in table */\n priority: number;\n};\n\nexport type ColumnVisibilityRule = {\n match: ColumnMatcher;\n visibility: \"default\" | \"optional\" | \"hidden\";\n};\n\nexport type ColumnMatcher = (spec: PColumnSpec) => boolean;\n\n// Main Function\n\nexport function createPlDataTableV3<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const state = upgradePlDataTableStateV2(options.tableState);\n const primaryJoinType = options.primaryJoinType ?? \"full\";\n\n const discovered =\n \"discoverColumnOptions\" in options\n ? discoverTableColumnSnaphots(ctx, options.discoverColumnOptions)\n : options.columns;\n if (isNil(discovered) || discovered.length === 0) return undefined;\n\n const splited = splitDiscoveredColumns(discovered);\n const resolved = resolveDiscoveredColumns(splited, discovered);\n\n const labelColumns = getMatchingLabelColumns(resolved.all, getAllLabelColumns(ctx));\n\n const derivedLabels = deriveAllLabels({\n columns: discovered.map((dc) => ({\n id: dc.id,\n spec: dc.spec,\n linkerPath: dc.linkerPath?.map((lp) => ({ spec: lp.linker.spec })),\n })),\n labelColumns,\n deriveLabelsOptions: {\n includeNativeLabel: true,\n ...options.labelsOptions,\n },\n });\n\n const annotated = annotateColumnGroups(\n resolved,\n labelColumns,\n derivedLabels,\n options.columnsDisplayOptions,\n );\n\n const columnIsAvailable = createColumnValidationById([\n ...annotated.direct,\n ...annotated.linked.flatMap((lc) => [...(annotated.linkers.get(lc.id) ?? []), lc]),\n ...annotated.labels,\n ]);\n\n const filters = mergeFilters(\n state.pTableParams.filters,\n remapFilterColumnIds(options.filters, discovered),\n );\n validateFilters(filters, columnIsAvailable);\n\n const sorting = resolveSorting(\n state.pTableParams.sorting,\n remapSortingColumnIds(options.sorting, discovered),\n );\n validateSorting(sorting, columnIsAvailable);\n\n const primaryColumnIds = new Set<PObjectId>(\n discovered.filter((dc) => dc.isPrimary).map((dc) => dc.id),\n );\n const primaryColumns = annotated.direct.filter((c) => primaryColumnIds.has(c.id));\n const secondaryColumns = annotated.direct.filter((c) => !primaryColumnIds.has(c.id));\n\n if (primaryColumns.length === 0) return undefined;\n\n const fullDef = createPTableDefV3({\n primaryJoinType,\n primaryColumns,\n secondaryGroups: [\n ...secondaryColumns.map((c) => [c]),\n ...annotated.linked.map((lc) => [...(annotated.linkers.get(lc.id) ?? []), lc]),\n ...annotated.labels.map((c) => [c]),\n ],\n filters,\n sorting,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame([\n ...annotated.direct,\n ...annotated.linked,\n ...annotated.labels,\n ...uniqueBy([...annotated.linkers.values()].flat(), (c) => c.id),\n ]);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenSpecs = state.pTableParams.hiddenColIds;\n\n const hiddenColumnIds = computeHiddenColumns(\n [...annotated.direct, ...annotated.linked],\n sorting,\n filters,\n hiddenSpecs,\n );\n\n const visible = buildVisibleColumns(annotated, hiddenColumnIds, labelColumns);\n const visibleNonCoreDirect = secondaryColumns.filter((c) => !hiddenColumnIds.has(c.id));\n const visibleLinkedGroups = buildVisibleLinkedGroups(\n visible.direct,\n visible.linked,\n annotated.linkers,\n hiddenSpecs,\n );\n\n const visibleDef = createPTableDefV3({\n primaryJoinType,\n primaryColumns,\n secondaryGroups: [\n ...visibleNonCoreDirect.map((c) => [c]),\n ...visibleLinkedGroups,\n ...visible.labels.map((c) => [c]),\n ],\n filters,\n sorting,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: state.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n\n/** A single column discovered from sources — normalized from raw ColumnSnapshot/ColumnMatch. */\nexport type TableColumnSnapshot<Id extends PObjectId | SUniversalPColumnId> = ColumnSnapshot<Id> & {\n readonly isPrimary?: boolean;\n readonly originalId?: PObjectId;\n readonly linkerPath?: ColumnMatch[\"path\"];\n};\n\ntype TableColumn = PColumn<undefined | PColumnDataUniversal>;\n\ntype SplitDiscoveredColumns = {\n readonly direct: TableColumnSnapshot<SUniversalPColumnId>[];\n readonly linked: TableColumnSnapshot<SUniversalPColumnId>[];\n};\n\ntype ResolvedColumns = {\n readonly direct: TableColumn[];\n readonly linked: TableColumn[];\n readonly linkers: Map<PObjectId, TableColumn[]>;\n readonly all: TableColumn[];\n};\n\ntype AnnotatedColumnGroups = {\n readonly direct: TableColumn[];\n readonly linked: TableColumn[];\n readonly linkers: Map<PObjectId, TableColumn[]>;\n readonly labels: TableColumn[];\n};\n\ntype VisibleColumns = {\n readonly direct: TableColumn[];\n readonly linked: TableColumn[];\n readonly labels: PColumn<PColumnDataUniversal>[];\n};\n\n/** Split discovered columns into direct (no linker path) and linked (with linker path). */\nfunction splitDiscoveredColumns(\n columns: TableColumnSnapshot<SUniversalPColumnId>[],\n): SplitDiscoveredColumns {\n return {\n direct: columns.filter((dc) => isNil(dc.linkerPath) || dc.linkerPath.length === 0),\n linked: columns.filter((dc) => !isNil(dc.linkerPath) && dc.linkerPath.length > 0),\n };\n}\n\n/** Resolve DiscoveredColumn snapshots into PColumn objects with lazily-evaluated data. */\nfunction resolveDiscoveredColumns(\n split: SplitDiscoveredColumns,\n allDiscovered: TableColumnSnapshot<SUniversalPColumnId>[],\n): ResolvedColumns {\n const linked = split.linked.map(resolveSnapshot);\n const linkers = new Map<PObjectId, TableColumn[]>(\n split.linked\n .filter(\n (dc): dc is RequiredBy<TableColumnSnapshot<SUniversalPColumnId>, \"linkerPath\"> =>\n !isNil(dc.linkerPath),\n )\n .map((dc, i) => [linked[i].id, dc.linkerPath.map((s) => resolveSnapshot(s.linker))]),\n );\n\n return {\n all: allDiscovered.map(resolveSnapshot),\n direct: split.direct.map(resolveSnapshot),\n linked,\n linkers,\n };\n}\n\n/** Annotate all column groups with derived labels and display options. */\nfunction annotateColumnGroups(\n resolved: ResolvedColumns,\n labelColumns: PColumn<PColumnDataUniversal>[],\n derivedLabels: Record<string, string>,\n displayOptions: ColumnsDisplayOptions | undefined,\n): AnnotatedColumnGroups {\n const direct = withTableVisualAnnotations(\n displayOptions,\n withLabelAnnotations(derivedLabels, resolved.direct),\n );\n const linked = withTableVisualAnnotations(\n displayOptions,\n withLabelAnnotations(derivedLabels, resolved.linked),\n );\n const linkers = new Map<PObjectId, TableColumn[]>(\n [...resolved.linkers].map(([id, cols]) => [id, withLabelAnnotations(derivedLabels, cols)]),\n );\n const labels = withLabelAnnotations(derivedLabels, labelColumns);\n\n return { direct, linked, linkers, labels };\n}\n\n/** Build an index of all valid column IDs (axes + columns) for filter/sorting validation. */\nfunction createColumnValidationById(fullColumns: TableColumn[]) {\n const axisIds = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map(getAxisId)),\n (a) => canonicalizeJson<AxisId>(a),\n );\n\n const allIds: PTableColumnId[] = [\n ...axisIds.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n\n const validIdSet = new Set(allIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n\n return (id: string): boolean => {\n return validIdSet.has(id as CanonicalizedJson<PTableColumnId>);\n };\n}\n\n/** Merge filters from table state and options into a single filter spec. */\nfunction mergeFilters(\n stateFilters: PlDataTableFilters | null,\n optionsFilters: PlDataTableFilters | null | undefined,\n): Nil | PlDataTableFilters {\n const normalized = optionsFilters ?? null;\n return stateFilters !== null && normalized !== null\n ? { type: \"and\", filters: [stateFilters, normalized] }\n : (stateFilters ?? normalized);\n}\n\n/** Validate that all column references in filters exist in the table. */\nfunction validateFilters(\n filters: Nil | PlDataTableFilters,\n isValidColumnId: (id: string) => boolean,\n): void {\n if (filters == null) return;\n const filterColumns = collectFilterSpecColumns(filters);\n const firstInvalid = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalid !== undefined) {\n throw new Error(\n `Invalid filter column ${firstInvalid}: column reference does not match the table columns`,\n );\n }\n}\n\n/** Pick user sorting from state if non-empty, otherwise fall back to options default. */\nfunction resolveSorting(\n userSorting: PTableSorting[],\n defaultSorting: Nil | PTableSorting[],\n): PTableSorting[] {\n return (isEmpty(userSorting) ? defaultSorting : userSorting) ?? [];\n}\n\n/** Validate that all column references in sorting exist in the table. */\nfunction validateSorting(sorting: PTableSorting[], isValidColumnId: (id: string) => boolean): void {\n const firstInvalid = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalid !== undefined) {\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalid.column)}: column reference does not match the table columns`,\n );\n }\n}\n\n/** Determine which columns should be hidden based on state or optional-column defaults. */\nfunction computeHiddenColumns(\n columns: TableColumn[],\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n hiddenSpecs: Nil | PTableColumnId[],\n): Set<PObjectId> {\n const alwaysHidden = columns.filter((c) => isColumnHidden(c.spec)).map((c) => c.id);\n const optionalHidden = !isNil(hiddenSpecs)\n ? hiddenSpecs.filter((s): s is PTableColumnIdColumn => s.type === \"column\").map((s) => s.id)\n : columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n const initial = [...alwaysHidden, ...optionalHidden];\n const preserved = collectPreservedColumnIds(sorting, filters);\n\n return new Set(initial.filter((id) => !preserved.has(id)));\n}\n\n/**\n * Build visible linked column groups. Non-hidden groups are included fully;\n * hidden groups are trimmed to only the prefix that brings axes not yet\n * covered by earlier groups (visible or previously trimmed).\n */\nfunction buildVisibleLinkedGroups(\n direct: TableColumn[],\n linked: TableColumn[],\n linkers: Map<PObjectId, TableColumn[]>,\n hiddenSpecs: PTableColumnId[] | null,\n): TableColumn[][] {\n const result: TableColumn[][] = [];\n const coveredAxisIds = new Set<CanonicalizedJson<AxisId>>();\n\n const collectAxes = (group: TableColumn[]) => {\n for (const col of group) {\n for (const as of col.spec.axesSpec) {\n coveredAxisIds.add(canonicalizeJson(getAxisId(as)));\n }\n }\n };\n\n collectAxes(direct);\n\n for (const lc of linked) {\n const group = [...(linkers.get(lc.id) ?? []), lc];\n result.push(group);\n collectAxes(group);\n }\n\n for (const group of linkers.values()) {\n const trimmed = trimGroupByVisibleAxes(group, hiddenSpecs, coveredAxisIds);\n if (trimmed.length > 0) {\n result.push(trimmed);\n collectAxes(trimmed);\n }\n }\n\n return result;\n}\n\n/**\n * For a linked column group [linker1, ..., linkerN, column], find the rightmost\n * element that has at least one non-hidden and not-yet-covered axis.\n * Return the prefix up to and including that element.\n * If no element has such an axis, return empty array.\n */\nfunction trimGroupByVisibleAxes(\n group: TableColumn[],\n hiddenSpecs: PTableColumnId[] | null,\n coveredAxisIds: Set<CanonicalizedJson<AxisId>>,\n): TableColumn[] {\n if (hiddenSpecs === null) return group;\n\n const hiddenAxisIds = new Set(\n hiddenSpecs\n .filter((s): s is PTableColumnIdAxis => s.type === \"axis\")\n .map((s) => canonicalizeJson(s.id)),\n );\n\n const uncoveredAxisIds = new Set(\n group\n .flatMap((c) => c.spec.axesSpec.map((as) => canonicalizeJson(getAxisId(as))))\n .filter((id) => !hiddenAxisIds.has(id) && !coveredAxisIds.has(id)),\n );\n\n let lastNeeded = -1;\n for (let i = 0; i < group.length; i++) {\n const newAxes = group[i].spec.axesSpec\n .map((as) => canonicalizeJson(getAxisId(as)))\n .filter((id) => uncoveredAxisIds.has(id));\n if (newAxes.length > 0) {\n for (const id of newAxes) uncoveredAxisIds.delete(id);\n lastNeeded = i;\n }\n }\n return lastNeeded === -1 ? [] : group.slice(0, lastNeeded + 1);\n}\n\n/** Collect IDs of columns that must remain visible (sorted, filtered). */\nfunction collectPreservedColumnIds(\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n): Set<PObjectId> {\n const sortedIds = (sorting ?? [])\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .map((c) => c.id);\n\n const filterIds = !isNil(filters)\n ? collectFilterSpecColumns(filters).flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n : [];\n\n return new Set<PObjectId>([...sortedIds, ...filterIds]);\n}\n\n/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */\nfunction buildVisibleColumns(\n annotated: AnnotatedColumnGroups,\n hiddenColumns: Set<PObjectId>,\n originalLabelColumns: PColumn<PColumnDataUniversal>[],\n): VisibleColumns {\n const direct = annotated.direct.filter((c) => !hiddenColumns.has(c.id));\n const linked = annotated.linked.filter((c) => !hiddenColumns.has(c.id));\n const labels = getMatchingLabelColumns(\n [...direct, ...linked].map(getColumnIdAndSpec),\n originalLabelColumns,\n );\n return { direct, linked, labels };\n}\n\n/** Resolve a ColumnSnapshot to a PColumn with lazily-evaluated data. */\nfunction resolveSnapshot(\n snap: ColumnSnapshot<PObjectId>,\n): PColumn<undefined | PColumnDataUniversal> {\n return { id: snap.id, spec: snap.spec, data: snap.data?.get() };\n}\n\n/** Remap column references in sorting entries. */\nfunction remapSortingColumnIds(\n sorting: Nil | PTableSorting[],\n columns: TableColumnSnapshot<PObjectId | SUniversalPColumnId>[],\n): Nil | PTableSorting[] {\n return sorting?.map((s) => {\n if (s.column.type === \"axis\") return s; // Axis references are unaffected by column ID remapping\n\n const id = s.column.id;\n const column =\n columns.find((c) => (c.originalId ?? c.id) === id) ??\n throwError(`Column ID \"${id}\" in sorting does not match any discovered column`);\n\n return {\n ...s,\n column: {\n type: \"column\",\n id: column.id,\n },\n };\n });\n}\n\ntype PlDataTableFilterNode = FilterSpecNode<PlDataTableFilterSpecLeaf>;\n\n/** Remap column references in a filter tree. */\nfunction remapFilterColumnIds(\n filters: Nil | PlDataTableFilters,\n columns: TableColumnSnapshot<PObjectId | SUniversalPColumnId>[],\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const map = (\n tableColumnId: CanonicalizedJson<PTableColumnId>,\n ): CanonicalizedJson<PTableColumnId> => {\n const parsed = parseJson<PTableColumnId>(tableColumnId);\n if (parsed.type === \"axis\") return tableColumnId; // Axis references are unaffected by column ID remapping\n\n const originalId = parsed.id;\n const column =\n columns.find((c) => (c.originalId ?? c.id) === originalId) ??\n throwError(`Column ID \"${parsed.id}\" in filters does not match any discovered column`);\n\n return canonicalizeJson<PTableColumnId>({\n type: \"column\",\n id: column.id,\n });\n };\n\n return traverseFilterSpec(filters, {\n leaf: (leaf): PlDataTableFilterNode => {\n if (leaf.type === undefined) return leaf;\n const result = { ...leaf };\n if (\"column\" in result) result.column = map(result.column);\n if (\"rhs\" in result) result.rhs = map(result.rhs);\n return result;\n },\n and: (results): PlDataTableFilterNode => ({ type: \"and\", filters: results }),\n or: (results): PlDataTableFilterNode => ({ type: \"or\", filters: results }),\n not: (result): PlDataTableFilterNode => ({ type: \"not\", filter: result }),\n }) as PlDataTableFilters;\n}\n"],"mappings":";;;;;;;;;;AAyFA,SAAgB,oBACd,KACA,SAC8B;CAC9B,MAAM,QAAQ,0BAA0B,QAAQ,WAAW;CAC3D,MAAM,kBAAkB,QAAQ,mBAAmB;CAEnD,MAAM,aACJ,2BAA2B,UACvB,4BAA4B,KAAK,QAAQ,sBAAsB,GAC/D,QAAQ;AACd,KAAI,MAAM,WAAW,IAAI,WAAW,WAAW,EAAG,QAAO,KAAA;CAGzD,MAAM,WAAW,yBADD,uBAAuB,WAAW,EACC,WAAW;CAE9D,MAAM,eAAe,wBAAwB,SAAS,KAAK,mBAAmB,IAAI,CAAC;CAenF,MAAM,YAAY,qBAChB,UACA,cAfoB,gBAAgB;EACpC,SAAS,WAAW,KAAK,QAAQ;GAC/B,IAAI,GAAG;GACP,MAAM,GAAG;GACT,YAAY,GAAG,YAAY,KAAK,QAAQ,EAAE,MAAM,GAAG,OAAO,MAAM,EAAE;GACnE,EAAE;EACH;EACA,qBAAqB;GACnB,oBAAoB;GACpB,GAAG,QAAQ;GACZ;EACF,CAAC,EAMA,QAAQ,sBACT;CAED,MAAM,oBAAoB,2BAA2B;EACnD,GAAG,UAAU;EACb,GAAG,UAAU,OAAO,SAAS,OAAO,CAAC,GAAI,UAAU,QAAQ,IAAI,GAAG,GAAG,IAAI,EAAE,EAAG,GAAG,CAAC;EAClF,GAAG,UAAU;EACd,CAAC;CAEF,MAAM,UAAU,aACd,MAAM,aAAa,SACnB,qBAAqB,QAAQ,SAAS,WAAW,CAClD;AACD,iBAAgB,SAAS,kBAAkB;CAE3C,MAAM,UAAU,eACd,MAAM,aAAa,SACnB,sBAAsB,QAAQ,SAAS,WAAW,CACnD;AACD,iBAAgB,SAAS,kBAAkB;CAE3C,MAAM,mBAAmB,IAAI,IAC3B,WAAW,QAAQ,OAAO,GAAG,UAAU,CAAC,KAAK,OAAO,GAAG,GAAG,CAC3D;CACD,MAAM,iBAAiB,UAAU,OAAO,QAAQ,MAAM,iBAAiB,IAAI,EAAE,GAAG,CAAC;CACjF,MAAM,mBAAmB,UAAU,OAAO,QAAQ,MAAM,CAAC,iBAAiB,IAAI,EAAE,GAAG,CAAC;AAEpF,KAAI,eAAe,WAAW,EAAG,QAAO,KAAA;CAExC,MAAM,UAAU,kBAAkB;EAChC;EACA;EACA,iBAAiB;GACf,GAAG,iBAAiB,KAAK,MAAM,CAAC,EAAE,CAAC;GACnC,GAAG,UAAU,OAAO,KAAK,OAAO,CAAC,GAAI,UAAU,QAAQ,IAAI,GAAG,GAAG,IAAI,EAAE,EAAG,GAAG,CAAC;GAC9E,GAAG,UAAU,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC;GACpC;EACD;EACA;EACD,CAAC;CAEF,MAAM,aAAa,IAAI,eAAe,QAAQ;CAC9C,MAAM,eAAe,IAAI,aAAa;EACpC,GAAG,UAAU;EACb,GAAG,UAAU;EACb,GAAG,UAAU;EACb,GAAG,SAAS,CAAC,GAAG,UAAU,QAAQ,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG;EACjE,CAAC;AACF,KAAI,CAAC,cAAc,CAAC,aAAc,QAAO,KAAA;CAEzC,MAAM,cAAc,MAAM,aAAa;CAEvC,MAAM,kBAAkB,qBACtB,CAAC,GAAG,UAAU,QAAQ,GAAG,UAAU,OAAO,EAC1C,SACA,SACA,YACD;CAED,MAAM,UAAU,oBAAoB,WAAW,iBAAiB,aAAa;CAC7E,MAAM,uBAAuB,iBAAiB,QAAQ,MAAM,CAAC,gBAAgB,IAAI,EAAE,GAAG,CAAC;CACvF,MAAM,sBAAsB,yBAC1B,QAAQ,QACR,QAAQ,QACR,UAAU,SACV,YACD;CAED,MAAM,aAAa,kBAAkB;EACnC;EACA;EACA,iBAAiB;GACf,GAAG,qBAAqB,KAAK,MAAM,CAAC,EAAE,CAAC;GACvC,GAAG;GACH,GAAG,QAAQ,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC;GAClC;EACD;EACA;EACD,CAAC;CACF,MAAM,gBAAgB,IAAI,eAAe,WAAW;AACpD,KAAI,CAAC,cAAe,QAAO,KAAA;AAE3B,QAAO;EACL,UAAU,MAAM,aAAa;EAC7B,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB;EACrB;;;AAsCH,SAAS,uBACP,SACwB;AACxB,QAAO;EACL,QAAQ,QAAQ,QAAQ,OAAO,MAAM,GAAG,WAAW,IAAI,GAAG,WAAW,WAAW,EAAE;EAClF,QAAQ,QAAQ,QAAQ,OAAO,CAAC,MAAM,GAAG,WAAW,IAAI,GAAG,WAAW,SAAS,EAAE;EAClF;;;AAIH,SAAS,yBACP,OACA,eACiB;CACjB,MAAM,SAAS,MAAM,OAAO,IAAI,gBAAgB;CAChD,MAAM,UAAU,IAAI,IAClB,MAAM,OACH,QACE,OACC,CAAC,MAAM,GAAG,WAAW,CACxB,CACA,KAAK,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,WAAW,KAAK,MAAM,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CACvF;AAED,QAAO;EACL,KAAK,cAAc,IAAI,gBAAgB;EACvC,QAAQ,MAAM,OAAO,IAAI,gBAAgB;EACzC;EACA;EACD;;;AAIH,SAAS,qBACP,UACA,cACA,eACA,gBACuB;AAcvB,QAAO;EAAE,QAbM,2BACb,gBACA,qBAAqB,eAAe,SAAS,OAAO,CACrD;EAUgB,QATF,2BACb,gBACA,qBAAqB,eAAe,SAAS,OAAO,CACrD;EAMwB,SALT,IAAI,IAClB,CAAC,GAAG,SAAS,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,qBAAqB,eAAe,KAAK,CAAC,CAAC,CAC3F;EAGiC,QAFnB,qBAAqB,eAAe,aAAa;EAEtB;;;AAI5C,SAAS,2BAA2B,aAA4B;CAM9D,MAAM,SAA2B,CAC/B,GANc,SACd,YAAY,SAAS,MAAM,EAAE,KAAK,SAAS,IAAI,UAAU,CAAC,GACzD,MAAM,iBAAyB,EAAE,CACnC,CAGY,KAAK,OAAO;EAAE,MAAM;EAAQ,IAAI;EAAG,EAA+B,EAC7E,GAAG,YAAY,KAAK,OAAO;EAAE,MAAM;EAAU,IAAI,EAAE;EAAI,EAAiC,CACzF;CAED,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,MAAM,iBAAiC,EAAE,CAAC,CAAC;AAElF,SAAQ,OAAwB;AAC9B,SAAO,WAAW,IAAI,GAAwC;;;;AAKlE,SAAS,aACP,cACA,gBAC0B;CAC1B,MAAM,aAAa,kBAAkB;AACrC,QAAO,iBAAiB,QAAQ,eAAe,OAC3C;EAAE,MAAM;EAAO,SAAS,CAAC,cAAc,WAAW;EAAE,GACnD,gBAAgB;;;AAIvB,SAAS,gBACP,SACA,iBACM;AACN,KAAI,WAAW,KAAM;CAErB,MAAM,eADgB,yBAAyB,QAAQ,CACpB,MAAM,QAAQ,CAAC,gBAAgB,IAAI,CAAC;AACvE,KAAI,iBAAiB,KAAA,EACnB,OAAM,IAAI,MACR,yBAAyB,aAAa,qDACvC;;;AAKL,SAAS,eACP,aACA,gBACiB;AACjB,SAAQ,QAAQ,YAAY,GAAG,iBAAiB,gBAAgB,EAAE;;;AAIpE,SAAS,gBAAgB,SAA0B,iBAAgD;CACjG,MAAM,eAAe,QAAQ,MAC1B,MAAM,CAAC,gBAAgB,iBAAiC,EAAE,OAAO,CAAC,CACpE;AACD,KAAI,iBAAiB,KAAA,EACnB,OAAM,IAAI,MACR,0BAA0B,KAAK,UAAU,aAAa,OAAO,CAAC,qDAC/D;;;AAKL,SAAS,qBACP,SACA,SACA,SACA,aACgB;CAChB,MAAM,eAAe,QAAQ,QAAQ,MAAM,eAAe,EAAE,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG;CACnF,MAAM,iBAAiB,CAAC,MAAM,YAAY,GACtC,YAAY,QAAQ,MAAiC,EAAE,SAAS,SAAS,CAAC,KAAK,MAAM,EAAE,GAAG,GAC1F,QAAQ,QAAQ,MAAM,iBAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG;CACpE,MAAM,UAAU,CAAC,GAAG,cAAc,GAAG,eAAe;CACpD,MAAM,YAAY,0BAA0B,SAAS,QAAQ;AAE7D,QAAO,IAAI,IAAI,QAAQ,QAAQ,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;;;;;;;AAQ5D,SAAS,yBACP,QACA,QACA,SACA,aACiB;CACjB,MAAM,SAA0B,EAAE;CAClC,MAAM,iCAAiB,IAAI,KAAgC;CAE3D,MAAM,eAAe,UAAyB;AAC5C,OAAK,MAAM,OAAO,MAChB,MAAK,MAAM,MAAM,IAAI,KAAK,SACxB,gBAAe,IAAI,iBAAiB,UAAU,GAAG,CAAC,CAAC;;AAKzD,aAAY,OAAO;AAEnB,MAAK,MAAM,MAAM,QAAQ;EACvB,MAAM,QAAQ,CAAC,GAAI,QAAQ,IAAI,GAAG,GAAG,IAAI,EAAE,EAAG,GAAG;AACjD,SAAO,KAAK,MAAM;AAClB,cAAY,MAAM;;AAGpB,MAAK,MAAM,SAAS,QAAQ,QAAQ,EAAE;EACpC,MAAM,UAAU,uBAAuB,OAAO,aAAa,eAAe;AAC1E,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAO,KAAK,QAAQ;AACpB,eAAY,QAAQ;;;AAIxB,QAAO;;;;;;;;AAST,SAAS,uBACP,OACA,aACA,gBACe;AACf,KAAI,gBAAgB,KAAM,QAAO;CAEjC,MAAM,gBAAgB,IAAI,IACxB,YACG,QAAQ,MAA+B,EAAE,SAAS,OAAO,CACzD,KAAK,MAAM,iBAAiB,EAAE,GAAG,CAAC,CACtC;CAED,MAAM,mBAAmB,IAAI,IAC3B,MACG,SAAS,MAAM,EAAE,KAAK,SAAS,KAAK,OAAO,iBAAiB,UAAU,GAAG,CAAC,CAAC,CAAC,CAC5E,QAAQ,OAAO,CAAC,cAAc,IAAI,GAAG,IAAI,CAAC,eAAe,IAAI,GAAG,CAAC,CACrE;CAED,IAAI,aAAa;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,MAAM,UAAU,MAAM,GAAG,KAAK,SAC3B,KAAK,OAAO,iBAAiB,UAAU,GAAG,CAAC,CAAC,CAC5C,QAAQ,OAAO,iBAAiB,IAAI,GAAG,CAAC;AAC3C,MAAI,QAAQ,SAAS,GAAG;AACtB,QAAK,MAAM,MAAM,QAAS,kBAAiB,OAAO,GAAG;AACrD,gBAAa;;;AAGjB,QAAO,eAAe,KAAK,EAAE,GAAG,MAAM,MAAM,GAAG,aAAa,EAAE;;;AAIhE,SAAS,0BACP,SACA,SACgB;CAChB,MAAM,aAAa,WAAW,EAAE,EAC7B,KAAK,MAAM,EAAE,OAAO,CACpB,QAAQ,MAAiC,EAAE,SAAS,SAAS,CAC7D,KAAK,MAAM,EAAE,GAAG;CAEnB,MAAM,YAAY,CAAC,MAAM,QAAQ,GAC7B,yBAAyB,QAAQ,CAAC,SAAS,MAAM;EAC/C,MAAM,MAAM,UAAU,EAAE;AACxB,SAAO,IAAI,SAAS,WAAW,CAAC,IAAI,GAAG,GAAG,EAAE;GAC5C,GACF,EAAE;AAEN,QAAO,IAAI,IAAe,CAAC,GAAG,WAAW,GAAG,UAAU,CAAC;;;AAIzD,SAAS,oBACP,WACA,eACA,sBACgB;CAChB,MAAM,SAAS,UAAU,OAAO,QAAQ,MAAM,CAAC,cAAc,IAAI,EAAE,GAAG,CAAC;CACvE,MAAM,SAAS,UAAU,OAAO,QAAQ,MAAM,CAAC,cAAc,IAAI,EAAE,GAAG,CAAC;AAKvE,QAAO;EAAE;EAAQ;EAAQ,QAJV,wBACb,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,mBAAmB,EAC9C,qBACD;EACgC;;;AAInC,SAAS,gBACP,MAC2C;AAC3C,QAAO;EAAE,IAAI,KAAK;EAAI,MAAM,KAAK;EAAM,MAAM,KAAK,MAAM,KAAK;EAAE;;;AAIjE,SAAS,sBACP,SACA,SACuB;AACvB,QAAO,SAAS,KAAK,MAAM;AACzB,MAAI,EAAE,OAAO,SAAS,OAAQ,QAAO;EAErC,MAAM,KAAK,EAAE,OAAO;EACpB,MAAM,SACJ,QAAQ,MAAM,OAAO,EAAE,cAAc,EAAE,QAAQ,GAAG,IAClD,WAAW,cAAc,GAAG,mDAAmD;AAEjF,SAAO;GACL,GAAG;GACH,QAAQ;IACN,MAAM;IACN,IAAI,OAAO;IACZ;GACF;GACD;;;AAMJ,SAAS,qBACP,SACA,SAC0B;AAC1B,KAAI,MAAM,QAAQ,CAAE,QAAO;CAE3B,MAAM,OACJ,kBACsC;EACtC,MAAM,SAAS,UAA0B,cAAc;AACvD,MAAI,OAAO,SAAS,OAAQ,QAAO;EAEnC,MAAM,aAAa,OAAO;AAK1B,SAAO,iBAAiC;GACtC,MAAM;GACN,KALA,QAAQ,MAAM,OAAO,EAAE,cAAc,EAAE,QAAQ,WAAW,IAC1D,WAAW,cAAc,OAAO,GAAG,mDAAmD,EAI3E;GACZ,CAAC;;AAGJ,QAAO,mBAAmB,SAAS;EACjC,OAAO,SAAgC;AACrC,OAAI,KAAK,SAAS,KAAA,EAAW,QAAO;GACpC,MAAM,SAAS,EAAE,GAAG,MAAM;AAC1B,OAAI,YAAY,OAAQ,QAAO,SAAS,IAAI,OAAO,OAAO;AAC1D,OAAI,SAAS,OAAQ,QAAO,MAAM,IAAI,OAAO,IAAI;AACjD,UAAO;;EAET,MAAM,aAAoC;GAAE,MAAM;GAAO,SAAS;GAAS;EAC3E,KAAK,aAAoC;GAAE,MAAM;GAAM,SAAS;GAAS;EACzE,MAAM,YAAmC;GAAE,MAAM;GAAO,QAAQ;GAAQ;EACzE,CAAC"}
@@ -0,0 +1,64 @@
1
+ require("../../../_virtual/_rolldown/runtime.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");
4
+ const require_ctx_column_sources = require("../../../columns/ctx_column_sources.cjs");
5
+ require("../../../columns/index.cjs");
6
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
7
+ let _milaboratories_helpers = require("@milaboratories/helpers");
8
+ //#region src/components/PlDataTable/createPlDataTable/discoverColumns.ts
9
+ /** Discover columns from sources/anchors and normalize into a flat DiscoveredColumn list. */
10
+ function discoverTableColumnSnaphots(ctx, options) {
11
+ const resolvedOptions = {
12
+ ...options,
13
+ anchors: resolveAnchors(ctx, options.anchors)
14
+ };
15
+ const providers = resolveProviders(ctx, resolvedOptions.sources);
16
+ if (providers.length === 0) return void 0;
17
+ const collection = new require_column_collection_builder.ColumnCollectionBuilder(ctx.services.pframeSpec ?? (0, _milaboratories_helpers.throwError)("PFrameSpec service is required for column discovery.")).addSources(providers).build(resolvedOptions);
18
+ if (collection === void 0) return void 0;
19
+ try {
20
+ const matched = collection.findColumns(resolvedOptions.columnsSelector ?? void 0);
21
+ const anchors = collection.getAnchors();
22
+ return mapToDiscoveredColumns(matched, Array.from(Array.from(anchors.values()).map((v) => v.columnId)));
23
+ } finally {
24
+ collection.dispose();
25
+ }
26
+ }
27
+ /** Resolve PlRef values in anchors to PColumnSpec via the result pool. */
28
+ function resolveAnchors(ctx, anchors) {
29
+ const result = {};
30
+ for (const [key, value] of Object.entries(anchors)) if ((0, _milaboratories_pl_model_common.isPlRef)(value)) result[key] = ctx.resultPool.getPColumnSpecByRef(value) ?? (0, _milaboratories_helpers.throwError)(`Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`);
31
+ else result[key] = value;
32
+ return result;
33
+ }
34
+ /** Resolve column snapshot providers from explicit sources or context. */
35
+ function resolveProviders(ctx, sources) {
36
+ return sources !== void 0 ? sources.map(require_column_snapshot_provider.toColumnSnapshotProvider) : require_ctx_column_sources.collectCtxColumnSnapshotProviders(ctx);
37
+ }
38
+ /** Map matched columns into a flat DiscoveredColumn list with deduped IDs. */
39
+ function mapToDiscoveredColumns(matched, anchorColumnIds) {
40
+ const hitCounts = matched.reduce((acc, match) => acc.set(match.originalId, (acc.get(match.originalId) ?? 0) + 1), /* @__PURE__ */ new Map());
41
+ const hitIndices = /* @__PURE__ */ new Map();
42
+ return matched.map((match) => {
43
+ const snap = match.column;
44
+ let id = snap.id;
45
+ if ((hitCounts.get(match.originalId) ?? 0) > 1) {
46
+ const idx = hitIndices.get(match.originalId) ?? 0;
47
+ hitIndices.set(match.originalId, idx + 1);
48
+ id = `${snap.id}#q${idx}`;
49
+ }
50
+ return {
51
+ id,
52
+ originalId: match.originalId,
53
+ spec: snap.spec,
54
+ data: snap.data,
55
+ dataStatus: snap.dataStatus,
56
+ isPrimary: anchorColumnIds.some((anchor) => snap.id === anchor || match.originalId === anchor),
57
+ linkerPath: match.path
58
+ };
59
+ });
60
+ }
61
+ //#endregion
62
+ exports.discoverTableColumnSnaphots = discoverTableColumnSnaphots;
63
+
64
+ //# sourceMappingURL=discoverColumns.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoverColumns.cjs","names":["ColumnCollectionBuilder","toColumnSnapshotProvider","collectCtxColumnSnapshotProviders"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/discoverColumns.ts"],"sourcesContent":["import type {\n PColumnSpec,\n PlRef,\n PObjectId,\n RequireServices,\n Services,\n SUniversalPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport { isPlRef } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type { ColumnSource, ColumnMatch, RelaxedColumnSelector } from \"../../../columns\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { toColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { throwError } from \"@milaboratories/helpers\";\nimport type { ColumnsSelectorConfig, TableColumnSnapshot } from \"./createPlDataTableV3\";\n\nexport type DiscoveredTableColumnOptions = {\n sources?: ColumnSource[];\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>;\n columnsSelector: ColumnsSelectorConfig;\n};\n\n/** Discover columns from sources/anchors and normalize into a flat DiscoveredColumn list. */\nexport function discoverTableColumnSnaphots<\n A,\n U,\n S extends RequireServices<typeof Services.PFrameSpec>,\n>(\n ctx: RenderCtxBase<A, U, S>,\n options: DiscoveredTableColumnOptions,\n): TableColumnSnapshot<SUniversalPColumnId>[] | undefined {\n // Resolve PlRef anchors to PColumnSpec\n const resolvedOptions = { ...options, anchors: resolveAnchors(ctx, options.anchors) };\n\n // Resolve providers\n const providers = resolveProviders(ctx, resolvedOptions.sources);\n if (providers.length === 0) return undefined;\n\n // Build collection (anchored or plain)\n const pframeSpec =\n ctx.services.pframeSpec ?? throwError(\"PFrameSpec service is required for column discovery.\");\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSources(providers)\n .build(resolvedOptions);\n if (collection === undefined) return undefined;\n\n try {\n const matched = collection.findColumns(resolvedOptions.columnsSelector ?? undefined);\n const anchors = collection.getAnchors();\n return mapToDiscoveredColumns(\n matched,\n Array.from(Array.from(anchors.values()).map((v) => v.columnId)),\n );\n } finally {\n collection.dispose();\n }\n}\n\n// --- Pure helper functions ---\n\n/** Resolve PlRef values in anchors to PColumnSpec via the result pool. */\nfunction resolveAnchors<A, U>(\n ctx: RenderCtxBase<A, U>,\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>,\n): Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> {\n const result: Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> = {};\n for (const [key, value] of Object.entries(anchors)) {\n if (isPlRef(value)) {\n result[key] =\n ctx.resultPool.getPColumnSpecByRef(value) ??\n throwError(\n `Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/** Resolve column snapshot providers from explicit sources or context. */\nfunction resolveProviders<A, U>(ctx: RenderCtxBase<A, U>, sources: undefined | ColumnSource[]) {\n return sources !== undefined\n ? sources.map(toColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n}\n\n/** Map matched columns into a flat DiscoveredColumn list with deduped IDs. */\nfunction mapToDiscoveredColumns(\n matched: readonly ColumnMatch[],\n anchorColumnIds: readonly PObjectId[],\n): TableColumnSnapshot<SUniversalPColumnId>[] {\n const hitCounts = matched.reduce(\n (acc, match) => acc.set(match.originalId, (acc.get(match.originalId) ?? 0) + 1),\n new Map<PObjectId, number>(),\n );\n\n const hitIndices = new Map<PObjectId, number>();\n return matched.map((match) => {\n const snap = match.column;\n\n let id = snap.id;\n if ((hitCounts.get(match.originalId) ?? 0) > 1) {\n const idx = hitIndices.get(match.originalId) ?? 0;\n hitIndices.set(match.originalId, idx + 1);\n id = `${snap.id}#q${idx}` as SUniversalPColumnId;\n }\n\n return {\n id,\n originalId: match.originalId,\n spec: snap.spec,\n data: snap.data,\n dataStatus: snap.dataStatus,\n isPrimary: anchorColumnIds.some(\n (anchor) => snap.id === anchor || match.originalId === anchor,\n ),\n linkerPath: match.path,\n };\n });\n}\n"],"mappings":";;;;;;;;;AAwBA,SAAgB,4BAKd,KACA,SACwD;CAExD,MAAM,kBAAkB;EAAE,GAAG;EAAS,SAAS,eAAe,KAAK,QAAQ,QAAQ;EAAE;CAGrF,MAAM,YAAY,iBAAiB,KAAK,gBAAgB,QAAQ;AAChE,KAAI,UAAU,WAAW,EAAG,QAAO,KAAA;CAKnC,MAAM,aAAa,IAAIA,kCAAAA,wBADrB,IAAI,SAAS,eAAA,GAAA,wBAAA,YAAyB,uDAAuD,CACrC,CACvD,WAAW,UAAU,CACrB,MAAM,gBAAgB;AACzB,KAAI,eAAe,KAAA,EAAW,QAAO,KAAA;AAErC,KAAI;EACF,MAAM,UAAU,WAAW,YAAY,gBAAgB,mBAAmB,KAAA,EAAU;EACpF,MAAM,UAAU,WAAW,YAAY;AACvC,SAAO,uBACL,SACA,MAAM,KAAK,MAAM,KAAK,QAAQ,QAAQ,CAAC,CAAC,KAAK,MAAM,EAAE,SAAS,CAAC,CAChE;WACO;AACR,aAAW,SAAS;;;;AAOxB,SAAS,eACP,KACA,SACiE;CACjE,MAAM,SAA0E,EAAE;AAClF,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,MAAA,GAAA,gCAAA,SAAY,MAAM,CAChB,QAAO,OACL,IAAI,WAAW,oBAAoB,MAAM,KAAA,GAAA,wBAAA,YAEvC,UAAU,IAAI,YAAY,KAAK,UAAU,MAAM,CAAC,yCACjD;KAEH,QAAO,OAAO;AAGlB,QAAO;;;AAIT,SAAS,iBAAuB,KAA0B,SAAqC;AAC7F,QAAO,YAAY,KAAA,IACf,QAAQ,IAAIC,iCAAAA,yBAAyB,GACrCC,2BAAAA,kCAAkC,IAAI;;;AAI5C,SAAS,uBACP,SACA,iBAC4C;CAC5C,MAAM,YAAY,QAAQ,QACvB,KAAK,UAAU,IAAI,IAAI,MAAM,aAAa,IAAI,IAAI,MAAM,WAAW,IAAI,KAAK,EAAE,kBAC/E,IAAI,KAAwB,CAC7B;CAED,MAAM,6BAAa,IAAI,KAAwB;AAC/C,QAAO,QAAQ,KAAK,UAAU;EAC5B,MAAM,OAAO,MAAM;EAEnB,IAAI,KAAK,KAAK;AACd,OAAK,UAAU,IAAI,MAAM,WAAW,IAAI,KAAK,GAAG;GAC9C,MAAM,MAAM,WAAW,IAAI,MAAM,WAAW,IAAI;AAChD,cAAW,IAAI,MAAM,YAAY,MAAM,EAAE;AACzC,QAAK,GAAG,KAAK,GAAG,IAAI;;AAGtB,SAAO;GACL;GACA,YAAY,MAAM;GAClB,MAAM,KAAK;GACX,MAAM,KAAK;GACX,YAAY,KAAK;GACjB,WAAW,gBAAgB,MACxB,WAAW,KAAK,OAAO,UAAU,MAAM,eAAe,OACxD;GACD,YAAY,MAAM;GACnB;GACD"}
@@ -0,0 +1,17 @@
1
+ import { RenderCtxBase } from "../../../render/api.js";
2
+ import { ColumnSource } from "../../../columns/column_snapshot_provider.js";
3
+ import { RelaxedColumnSelector } from "../../../columns/column_selector.js";
4
+ import { ColumnsSelectorConfig, TableColumnSnapshot } from "./createPlDataTableV3.js";
5
+ import { PColumnSpec, PObjectId, PlRef, RequireServices, SUniversalPColumnId, Services } from "@milaboratories/pl-model-common";
6
+
7
+ //#region src/components/PlDataTable/createPlDataTable/discoverColumns.d.ts
8
+ type DiscoveredTableColumnOptions = {
9
+ sources?: ColumnSource[];
10
+ anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>;
11
+ columnsSelector: ColumnsSelectorConfig;
12
+ };
13
+ /** Discover columns from sources/anchors and normalize into a flat DiscoveredColumn list. */
14
+ declare function discoverTableColumnSnaphots<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(ctx: RenderCtxBase<A, U, S>, options: DiscoveredTableColumnOptions): TableColumnSnapshot<SUniversalPColumnId>[] | undefined;
15
+ //#endregion
16
+ export { DiscoveredTableColumnOptions, discoverTableColumnSnaphots };
17
+ //# sourceMappingURL=discoverColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoverColumns.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/discoverColumns.ts"],"mappings":";;;;;;;KAiBY,4BAAA;EACV,OAAA,GAAU,YAAA;EACV,OAAA,EAAS,MAAA,SAAe,KAAA,GAAQ,SAAA,GAAY,WAAA,GAAc,qBAAA;EAC1D,eAAA,EAAiB,qBAAA;AAAA;AAHnB;AAAA,iBAOgB,2BAAA,iBAGJ,eAAA,QAAuB,QAAA,CAAS,UAAA,EAAA,CAE1C,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,EAAG,CAAA,GACzB,OAAA,EAAS,4BAAA,GACR,mBAAA,CAAoB,mBAAA"}
@@ -0,0 +1,63 @@
1
+ import { toColumnSnapshotProvider } from "../../../columns/column_snapshot_provider.js";
2
+ import { ColumnCollectionBuilder } from "../../../columns/column_collection_builder.js";
3
+ import { collectCtxColumnSnapshotProviders } from "../../../columns/ctx_column_sources.js";
4
+ import "../../../columns/index.js";
5
+ import { isPlRef } from "@milaboratories/pl-model-common";
6
+ import { throwError } from "@milaboratories/helpers";
7
+ //#region src/components/PlDataTable/createPlDataTable/discoverColumns.ts
8
+ /** Discover columns from sources/anchors and normalize into a flat DiscoveredColumn list. */
9
+ function discoverTableColumnSnaphots(ctx, options) {
10
+ const resolvedOptions = {
11
+ ...options,
12
+ anchors: resolveAnchors$1(ctx, options.anchors)
13
+ };
14
+ const providers = resolveProviders(ctx, resolvedOptions.sources);
15
+ if (providers.length === 0) return void 0;
16
+ const collection = new ColumnCollectionBuilder(ctx.services.pframeSpec ?? throwError("PFrameSpec service is required for column discovery.")).addSources(providers).build(resolvedOptions);
17
+ if (collection === void 0) return void 0;
18
+ try {
19
+ const matched = collection.findColumns(resolvedOptions.columnsSelector ?? void 0);
20
+ const anchors = collection.getAnchors();
21
+ return mapToDiscoveredColumns(matched, Array.from(Array.from(anchors.values()).map((v) => v.columnId)));
22
+ } finally {
23
+ collection.dispose();
24
+ }
25
+ }
26
+ /** Resolve PlRef values in anchors to PColumnSpec via the result pool. */
27
+ function resolveAnchors$1(ctx, anchors) {
28
+ const result = {};
29
+ for (const [key, value] of Object.entries(anchors)) if (isPlRef(value)) result[key] = ctx.resultPool.getPColumnSpecByRef(value) ?? throwError(`Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`);
30
+ else result[key] = value;
31
+ return result;
32
+ }
33
+ /** Resolve column snapshot providers from explicit sources or context. */
34
+ function resolveProviders(ctx, sources) {
35
+ return sources !== void 0 ? sources.map(toColumnSnapshotProvider) : collectCtxColumnSnapshotProviders(ctx);
36
+ }
37
+ /** Map matched columns into a flat DiscoveredColumn list with deduped IDs. */
38
+ function mapToDiscoveredColumns(matched, anchorColumnIds) {
39
+ const hitCounts = matched.reduce((acc, match) => acc.set(match.originalId, (acc.get(match.originalId) ?? 0) + 1), /* @__PURE__ */ new Map());
40
+ const hitIndices = /* @__PURE__ */ new Map();
41
+ return matched.map((match) => {
42
+ const snap = match.column;
43
+ let id = snap.id;
44
+ if ((hitCounts.get(match.originalId) ?? 0) > 1) {
45
+ const idx = hitIndices.get(match.originalId) ?? 0;
46
+ hitIndices.set(match.originalId, idx + 1);
47
+ id = `${snap.id}#q${idx}`;
48
+ }
49
+ return {
50
+ id,
51
+ originalId: match.originalId,
52
+ spec: snap.spec,
53
+ data: snap.data,
54
+ dataStatus: snap.dataStatus,
55
+ isPrimary: anchorColumnIds.some((anchor) => snap.id === anchor || match.originalId === anchor),
56
+ linkerPath: match.path
57
+ };
58
+ });
59
+ }
60
+ //#endregion
61
+ export { discoverTableColumnSnaphots };
62
+
63
+ //# sourceMappingURL=discoverColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoverColumns.js","names":["resolveAnchors"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/discoverColumns.ts"],"sourcesContent":["import type {\n PColumnSpec,\n PlRef,\n PObjectId,\n RequireServices,\n Services,\n SUniversalPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport { isPlRef } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type { ColumnSource, ColumnMatch, RelaxedColumnSelector } from \"../../../columns\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { toColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { throwError } from \"@milaboratories/helpers\";\nimport type { ColumnsSelectorConfig, TableColumnSnapshot } from \"./createPlDataTableV3\";\n\nexport type DiscoveredTableColumnOptions = {\n sources?: ColumnSource[];\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>;\n columnsSelector: ColumnsSelectorConfig;\n};\n\n/** Discover columns from sources/anchors and normalize into a flat DiscoveredColumn list. */\nexport function discoverTableColumnSnaphots<\n A,\n U,\n S extends RequireServices<typeof Services.PFrameSpec>,\n>(\n ctx: RenderCtxBase<A, U, S>,\n options: DiscoveredTableColumnOptions,\n): TableColumnSnapshot<SUniversalPColumnId>[] | undefined {\n // Resolve PlRef anchors to PColumnSpec\n const resolvedOptions = { ...options, anchors: resolveAnchors(ctx, options.anchors) };\n\n // Resolve providers\n const providers = resolveProviders(ctx, resolvedOptions.sources);\n if (providers.length === 0) return undefined;\n\n // Build collection (anchored or plain)\n const pframeSpec =\n ctx.services.pframeSpec ?? throwError(\"PFrameSpec service is required for column discovery.\");\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSources(providers)\n .build(resolvedOptions);\n if (collection === undefined) return undefined;\n\n try {\n const matched = collection.findColumns(resolvedOptions.columnsSelector ?? undefined);\n const anchors = collection.getAnchors();\n return mapToDiscoveredColumns(\n matched,\n Array.from(Array.from(anchors.values()).map((v) => v.columnId)),\n );\n } finally {\n collection.dispose();\n }\n}\n\n// --- Pure helper functions ---\n\n/** Resolve PlRef values in anchors to PColumnSpec via the result pool. */\nfunction resolveAnchors<A, U>(\n ctx: RenderCtxBase<A, U>,\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>,\n): Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> {\n const result: Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> = {};\n for (const [key, value] of Object.entries(anchors)) {\n if (isPlRef(value)) {\n result[key] =\n ctx.resultPool.getPColumnSpecByRef(value) ??\n throwError(\n `Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/** Resolve column snapshot providers from explicit sources or context. */\nfunction resolveProviders<A, U>(ctx: RenderCtxBase<A, U>, sources: undefined | ColumnSource[]) {\n return sources !== undefined\n ? sources.map(toColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n}\n\n/** Map matched columns into a flat DiscoveredColumn list with deduped IDs. */\nfunction mapToDiscoveredColumns(\n matched: readonly ColumnMatch[],\n anchorColumnIds: readonly PObjectId[],\n): TableColumnSnapshot<SUniversalPColumnId>[] {\n const hitCounts = matched.reduce(\n (acc, match) => acc.set(match.originalId, (acc.get(match.originalId) ?? 0) + 1),\n new Map<PObjectId, number>(),\n );\n\n const hitIndices = new Map<PObjectId, number>();\n return matched.map((match) => {\n const snap = match.column;\n\n let id = snap.id;\n if ((hitCounts.get(match.originalId) ?? 0) > 1) {\n const idx = hitIndices.get(match.originalId) ?? 0;\n hitIndices.set(match.originalId, idx + 1);\n id = `${snap.id}#q${idx}` as SUniversalPColumnId;\n }\n\n return {\n id,\n originalId: match.originalId,\n spec: snap.spec,\n data: snap.data,\n dataStatus: snap.dataStatus,\n isPrimary: anchorColumnIds.some(\n (anchor) => snap.id === anchor || match.originalId === anchor,\n ),\n linkerPath: match.path,\n };\n });\n}\n"],"mappings":";;;;;;;;AAwBA,SAAgB,4BAKd,KACA,SACwD;CAExD,MAAM,kBAAkB;EAAE,GAAG;EAAS,SAASA,iBAAe,KAAK,QAAQ,QAAQ;EAAE;CAGrF,MAAM,YAAY,iBAAiB,KAAK,gBAAgB,QAAQ;AAChE,KAAI,UAAU,WAAW,EAAG,QAAO,KAAA;CAKnC,MAAM,aAAa,IAAI,wBADrB,IAAI,SAAS,cAAc,WAAW,uDAAuD,CACrC,CACvD,WAAW,UAAU,CACrB,MAAM,gBAAgB;AACzB,KAAI,eAAe,KAAA,EAAW,QAAO,KAAA;AAErC,KAAI;EACF,MAAM,UAAU,WAAW,YAAY,gBAAgB,mBAAmB,KAAA,EAAU;EACpF,MAAM,UAAU,WAAW,YAAY;AACvC,SAAO,uBACL,SACA,MAAM,KAAK,MAAM,KAAK,QAAQ,QAAQ,CAAC,CAAC,KAAK,MAAM,EAAE,SAAS,CAAC,CAChE;WACO;AACR,aAAW,SAAS;;;;AAOxB,SAASA,iBACP,KACA,SACiE;CACjE,MAAM,SAA0E,EAAE;AAClF,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,QAAQ,MAAM,CAChB,QAAO,OACL,IAAI,WAAW,oBAAoB,MAAM,IACzC,WACE,UAAU,IAAI,YAAY,KAAK,UAAU,MAAM,CAAC,yCACjD;KAEH,QAAO,OAAO;AAGlB,QAAO;;;AAIT,SAAS,iBAAuB,KAA0B,SAAqC;AAC7F,QAAO,YAAY,KAAA,IACf,QAAQ,IAAI,yBAAyB,GACrC,kCAAkC,IAAI;;;AAI5C,SAAS,uBACP,SACA,iBAC4C;CAC5C,MAAM,YAAY,QAAQ,QACvB,KAAK,UAAU,IAAI,IAAI,MAAM,aAAa,IAAI,IAAI,MAAM,WAAW,IAAI,KAAK,EAAE,kBAC/E,IAAI,KAAwB,CAC7B;CAED,MAAM,6BAAa,IAAI,KAAwB;AAC/C,QAAO,QAAQ,KAAK,UAAU;EAC5B,MAAM,OAAO,MAAM;EAEnB,IAAI,KAAK,KAAK;AACd,OAAK,UAAU,IAAI,MAAM,WAAW,IAAI,KAAK,GAAG;GAC9C,MAAM,MAAM,WAAW,IAAI,MAAM,WAAW,IAAI;AAChD,cAAW,IAAI,MAAM,YAAY,MAAM,EAAE;AACzC,QAAK,GAAG,KAAK,GAAG,IAAI;;AAGtB,SAAO;GACL;GACA,YAAY,MAAM;GAClB,MAAM,KAAK;GACX,MAAM,KAAK;GACX,YAAY,KAAK;GACjB,WAAW,gBAAgB,MACxB,WAAW,KAAK,OAAO,UAAU,MAAM,eAAe,OACxD;GACD,YAAY,MAAM;GACnB;GACD"}
@@ -1,12 +1,12 @@
1
- const require_createPlDataTableV3 = require('./createPlDataTableV3.cjs');
2
- const require_createPlDataTableV2 = require('./createPlDataTableV2.cjs');
3
-
1
+ const require_createPlDataTableV2 = require("./createPlDataTableV2.cjs");
2
+ require("./discoverColumns.cjs");
3
+ const require_createPlDataTableV3 = require("./createPlDataTableV3.cjs");
4
4
  //#region src/components/PlDataTable/createPlDataTable/index.ts
5
5
  function createPlDataTable(ctx, options) {
6
6
  if (options.version === "v2") return require_createPlDataTableV2.createPlDataTableV2(ctx, options.columns, options.tableState, options.options);
7
7
  else return require_createPlDataTableV3.createPlDataTableV3(ctx, options);
8
8
  }
9
-
10
9
  //#endregion
11
10
  exports.createPlDataTable = createPlDataTable;
11
+
12
12
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["createPlDataTableV2","createPlDataTableV3"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV5\";\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, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\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"],"mappings":";;;;AAeA,SAAgB,kBACd,KACA,SAG8B;AAC9B,KAAI,QAAQ,YAAY,KACtB,QAAOA,gDAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,QAAQ;KAGrF,QAAOC,gDAAoB,KAAK,QAAQ"}
1
+ {"version":3,"file":"index.cjs","names":["createPlDataTableV2","createPlDataTableV3"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV5\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\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":";;;;AAeA,SAAgB,kBACd,KACA,SAG8B;AAC9B,KAAI,QAAQ,YAAY,KACtB,QAAOA,4BAAAA,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,QAAQ;KAGrF,QAAOC,4BAAAA,oBAAoB,KAAK,QAAQ"}
@@ -1,11 +1,11 @@
1
1
  import { RenderCtxBase } from "../../../render/api.js";
2
- import "../../../render/index.js";
3
2
  import { createPlDataTableOptionsV2, createPlDataTableV2 } from "./createPlDataTableV2.js";
3
+ import { discoverTableColumnSnaphots } from "./discoverColumns.js";
4
4
  import { createPlDataTableOptionsV3, createPlDataTableV3 } from "./createPlDataTableV3.js";
5
5
  import { RequireServices, Services } from "@milaboratories/pl-model-common";
6
6
 
7
7
  //#region src/components/PlDataTable/createPlDataTable/index.d.ts
8
- declare function createPlDataTable<A, U>(ctx: RenderCtxBase<A, U>, options: {
8
+ declare function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(ctx: RenderCtxBase<A, U, S>, options: {
9
9
  version: "v2";
10
10
  } & createPlDataTableOptionsV2): ReturnType<typeof createPlDataTableV2>;
11
11
  declare function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(ctx: RenderCtxBase<A, U, S>, options: {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"mappings":";;;;;;;iBAOgB,iBAAA,iBAAkC,eAAA,QAAuB,QAAA,CAAS,UAAA,EAAA,CAChF,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,EAAG,CAAA,GACzB,OAAA;EAAW,OAAA;AAAA,IAAkB,0BAAA,GAC5B,UAAA,QAAkB,mBAAA;AAAA,iBACL,iBAAA,iBAAkC,eAAA,QAAuB,QAAA,CAAS,UAAA,EAAA,CAChF,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,EAAG,CAAA,GACzB,OAAA;EAAW,OAAA;AAAA,IAAmB,0BAAA,GAC7B,UAAA,QAAkB,mBAAA"}
@@ -1,12 +1,12 @@
1
- import { createPlDataTableV3 } from "./createPlDataTableV3.js";
2
1
  import { createPlDataTableV2 } from "./createPlDataTableV2.js";
3
-
2
+ import "./discoverColumns.js";
3
+ import { createPlDataTableV3 } from "./createPlDataTableV3.js";
4
4
  //#region src/components/PlDataTable/createPlDataTable/index.ts
5
5
  function createPlDataTable(ctx, options) {
6
6
  if (options.version === "v2") return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);
7
7
  else return createPlDataTableV3(ctx, options);
8
8
  }
9
-
10
9
  //#endregion
11
10
  export { createPlDataTable };
11
+
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV5\";\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, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\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"],"mappings":";;;;AAeA,SAAgB,kBACd,KACA,SAG8B;AAC9B,KAAI,QAAQ,YAAY,KACtB,QAAO,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,QAAQ;KAGrF,QAAO,oBAAoB,KAAK,QAAQ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV5\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\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":";;;;AAeA,SAAgB,kBACd,KACA,SAG8B;AAC9B,KAAI,QAAQ,YAAY,KACtB,QAAO,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,QAAQ;KAGrF,QAAO,oBAAoB,KAAK,QAAQ"}
@@ -0,0 +1,109 @@
1
+ require("../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_derive_distinct_labels = require("../../../labels/derive_distinct_labels.cjs");
3
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
4
+ let es_toolkit = require("es-toolkit");
5
+ //#region src/components/PlDataTable/createPlDataTable/utils.ts
6
+ /** Check if column should be omitted from the table */
7
+ function isColumnHidden(spec) {
8
+ return (0, _milaboratories_pl_model_common.readAnnotation)(spec, _milaboratories_pl_model_common.Annotation.Table.Visibility) === "hidden";
9
+ }
10
+ /** Check if column is hidden by default */
11
+ function isColumnOptional(spec) {
12
+ return (0, _milaboratories_pl_model_common.readAnnotation)(spec, _milaboratories_pl_model_common.Annotation.Table.Visibility) === "optional";
13
+ }
14
+ /** Get effective visibility for a column, considering display config rules first, then annotations. */
15
+ function getEffectiveVisibility(spec, displayConfig) {
16
+ if (displayConfig?.visibility) {
17
+ for (const rule of displayConfig.visibility) if (rule.match(spec)) return rule.visibility;
18
+ }
19
+ if (isColumnHidden(spec)) return "hidden";
20
+ if (isColumnOptional(spec)) return "optional";
21
+ }
22
+ /** Get ordering priority for a column. Display config rules first, then annotation fallback. */
23
+ function getOrderPriority(spec, displayConfig) {
24
+ if (displayConfig?.ordering) {
25
+ for (const rule of displayConfig.ordering) if (rule.match(spec)) return rule.priority;
26
+ }
27
+ return (0, _milaboratories_pl_model_common.readAnnotationJson)(spec, _milaboratories_pl_model_common.Annotation.Table.OrderPriority);
28
+ }
29
+ /**
30
+ * Writes derived labels into column and axis annotations.
31
+ * Returns new column objects with modified specs — original columns are not mutated.
32
+ *
33
+ * For each column: writes derived label into Annotation.Label (if present in derivedLabels).
34
+ * For each axis in column specs: writes derived axis label into AxisSpec annotations.
35
+ */
36
+ function withLabelAnnotations(derivedLabels, columns) {
37
+ if (derivedLabels === void 0) return columns;
38
+ return columns.map((col) => {
39
+ const colLabel = derivedLabels[col.id];
40
+ return {
41
+ ...col,
42
+ spec: {
43
+ ...col.spec,
44
+ ...(0, es_toolkit.isNil)(colLabel) ? {} : { annotations: {
45
+ ...col.spec.annotations,
46
+ [_milaboratories_pl_model_common.Annotation.Label]: colLabel
47
+ } },
48
+ axesSpec: col.spec.axesSpec.map((axis) => {
49
+ const label = derivedLabels[(0, _milaboratories_pl_model_common.canonicalizeAxisId)(axis)];
50
+ return (0, es_toolkit.isNil)(label) ? axis : {
51
+ ...axis,
52
+ annotations: {
53
+ ...axis.annotations,
54
+ [_milaboratories_pl_model_common.Annotation.Label]: label
55
+ }
56
+ };
57
+ })
58
+ }
59
+ };
60
+ });
61
+ }
62
+ /**
63
+ * Writes effective display properties (OrderPriority, Visibility) from ColumnDisplayOptions
64
+ * into column annotations. Returns new column objects — originals are not mutated.
65
+ */
66
+ function withTableVisualAnnotations(displayOptions, columns) {
67
+ if (displayOptions === void 0) return columns;
68
+ return columns.map((col) => {
69
+ const annotations = { ...col.spec.annotations };
70
+ const visibility = getEffectiveVisibility(col.spec, displayOptions);
71
+ if (!(0, es_toolkit.isNil)(visibility)) annotations[_milaboratories_pl_model_common.Annotation.Table.Visibility] = visibility;
72
+ const orderPriority = getOrderPriority(col.spec, displayOptions);
73
+ if (!(0, es_toolkit.isNil)(orderPriority)) annotations[_milaboratories_pl_model_common.Annotation.Table.OrderPriority] = String(orderPriority);
74
+ return {
75
+ ...col,
76
+ spec: {
77
+ ...col.spec,
78
+ annotations
79
+ }
80
+ };
81
+ });
82
+ }
83
+ /** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */
84
+ function deriveAllLabels(options) {
85
+ const { columns, labelColumns, deriveLabelsOptions } = options;
86
+ const axisLabels = deriveAxisLabels(columns, labelColumns);
87
+ const columnLabels = require_derive_distinct_labels.deriveDistinctLabels(columns, deriveLabelsOptions).reduce((acc, label, index) => (acc[columns[index].id] = label, acc), {});
88
+ return {
89
+ ...axisLabels,
90
+ ...columnLabels
91
+ };
92
+ }
93
+ /** Derive axis labels from matching label columns, falling back to axis spec annotations. */
94
+ function deriveAxisLabels(columns, labelColumns) {
95
+ const axisSpecMap = new Map(columns.flatMap((c) => c.spec.axesSpec).map((a) => [(0, _milaboratories_pl_model_common.canonicalizeJson)((0, _milaboratories_pl_model_common.getAxisId)(a)), a]));
96
+ const result = {};
97
+ for (const axisKey of axisSpecMap.keys()) result[axisKey] = (0, _milaboratories_pl_model_common.readAnnotation)(labelColumns.find((lc) => (0, _milaboratories_pl_model_common.canonicalizeJson)((0, _milaboratories_pl_model_common.getAxisId)(lc.spec.axesSpec[0])) === axisKey)?.spec ?? axisSpecMap.get(axisKey) ?? {}, _milaboratories_pl_model_common.Annotation.Label)?.trim() ?? "Unlabeled";
98
+ return result;
99
+ }
100
+ //#endregion
101
+ exports.deriveAllLabels = deriveAllLabels;
102
+ exports.getEffectiveVisibility = getEffectiveVisibility;
103
+ exports.getOrderPriority = getOrderPriority;
104
+ exports.isColumnHidden = isColumnHidden;
105
+ exports.isColumnOptional = isColumnOptional;
106
+ exports.withLabelAnnotations = withLabelAnnotations;
107
+ exports.withTableVisualAnnotations = withTableVisualAnnotations;
108
+
109
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type PColumn,\n type PColumnSpec,\n type PObjectId,\n Annotation,\n canonicalizeAxisId,\n canonicalizeJson,\n getAxisId,\n readAnnotation,\n readAnnotationJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport type { ColumnsDisplayOptions } from \"./createPlDataTableV3\";\nimport { isNil } from \"es-toolkit\";\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/** Get effective visibility for a column, considering display config rules first, then annotations. */\nexport function getEffectiveVisibility(\n spec: PColumnSpec,\n displayConfig?: ColumnsDisplayOptions,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n if (displayConfig?.visibility) {\n for (const rule of displayConfig.visibility) {\n if (rule.match(spec)) {\n return rule.visibility;\n }\n }\n }\n if (isColumnHidden(spec)) return \"hidden\";\n if (isColumnOptional(spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Display config rules first, then annotation fallback. */\nexport function getOrderPriority(\n spec: PColumnSpec,\n displayConfig?: ColumnsDisplayOptions,\n): undefined | number {\n if (displayConfig?.ordering) {\n for (const rule of displayConfig.ordering) {\n if (rule.match(spec)) {\n return rule.priority;\n }\n }\n }\n return readAnnotationJson(spec, Annotation.Table.OrderPriority);\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<Data>(\n derivedLabels: undefined | Record<string, string>,\n columns: PColumn<Data>[],\n): PColumn<Data>[] {\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 };\n });\n}\n\n/**\n * Writes effective display properties (OrderPriority, Visibility) from ColumnDisplayOptions\n * into column annotations. Returns new column objects — originals are not mutated.\n */\nexport function withTableVisualAnnotations<Data>(\n displayOptions: undefined | ColumnsDisplayOptions,\n columns: PColumn<Data>[],\n): PColumn<Data>[] {\n if (displayOptions === undefined) return columns;\n return columns.map((col) => {\n const annotations = { ...col.spec.annotations };\n\n const visibility = getEffectiveVisibility(col.spec, displayOptions);\n if (!isNil(visibility)) annotations[Annotation.Table.Visibility] = visibility;\n\n const orderPriority = getOrderPriority(col.spec, displayOptions);\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 };\n });\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: { spec: PColumnSpec }[];\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n labelColumns: { readonly spec: PColumnSpec }[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, labelColumns, deriveLabelsOptions } = options;\n const axisLabels = deriveAxisLabels(columns, labelColumns);\n const columnLabels = deriveDistinctLabels(columns, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return { ...axisLabels, ...columnLabels };\n}\n\n/** Derive axis labels from matching label columns, falling back to axis spec annotations. */\nfunction deriveAxisLabels(\n columns: { readonly spec: PColumnSpec }[],\n labelColumns: { readonly spec: PColumnSpec }[],\n): Record<string, string> {\n const axisSpecMap = new Map(\n columns.flatMap((c) => c.spec.axesSpec).map((a) => [canonicalizeJson(getAxisId(a)), a]),\n );\n const result: Record<string, string> = {};\n for (const axisKey of axisSpecMap.keys()) {\n const labelCol = labelColumns.find(\n (lc) => canonicalizeJson(getAxisId(lc.spec.axesSpec[0])) === axisKey,\n );\n const source = labelCol?.spec ?? axisSpecMap.get(axisKey);\n result[axisKey] = readAnnotation(source ?? {}, Annotation.Label)?.trim() ?? \"Unlabeled\";\n }\n return result;\n}\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ColumnsDisplayOptions } from "./createPlDataTableV3.js";
2
+ import { Annotation, PColumn, PColumnSpec, PObjectId } from "@milaboratories/pl-model-common";
3
+
4
+ //#region src/components/PlDataTable/createPlDataTable/utils.d.ts
5
+ /** Check if column should be omitted from the table */
6
+ declare function isColumnHidden(spec: {
7
+ annotations?: Annotation;
8
+ }): boolean;
9
+ /** Check if column is hidden by default */
10
+ declare function isColumnOptional(spec: {
11
+ annotations?: Annotation;
12
+ }): boolean;
13
+ /** Get effective visibility for a column, considering display config rules first, then annotations. */
14
+ declare function getEffectiveVisibility(spec: PColumnSpec, displayConfig?: ColumnsDisplayOptions): undefined | "default" | "optional" | "hidden";
15
+ /** Get ordering priority for a column. Display config rules first, then annotation fallback. */
16
+ declare function getOrderPriority(spec: PColumnSpec, displayConfig?: ColumnsDisplayOptions): undefined | number;
17
+ //#endregion
18
+ export { getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional };
19
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"mappings":";;;;;iBAmBgB,cAAA,CAAe,IAAA;EAAQ,WAAA,GAAc,UAAA;AAAA;;iBAKrC,gBAAA,CAAiB,IAAA;EAAQ,WAAA,GAAc,UAAA;AAAA;;iBAKvC,sBAAA,CACd,IAAA,EAAM,WAAA,EACN,aAAA,GAAgB,qBAAA;;iBAeF,gBAAA,CACd,IAAA,EAAM,WAAA,EACN,aAAA,GAAgB,qBAAA"}