@platforma-sdk/model 1.53.10 → 1.53.13

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 (288) hide show
  1. package/dist/annotations/converter.cjs +11 -11
  2. package/dist/annotations/converter.cjs.map +1 -1
  3. package/dist/annotations/converter.d.ts +1 -1
  4. package/dist/annotations/converter.d.ts.map +1 -1
  5. package/dist/annotations/converter.js +11 -11
  6. package/dist/annotations/converter.js.map +1 -1
  7. package/dist/annotations/index.d.ts +2 -2
  8. package/dist/annotations/types.d.ts +4 -4
  9. package/dist/bconfig/index.d.ts +5 -5
  10. package/dist/bconfig/lambdas.d.ts +7 -7
  11. package/dist/bconfig/lambdas.d.ts.map +1 -1
  12. package/dist/bconfig/normalization.cjs.map +1 -1
  13. package/dist/bconfig/normalization.d.ts +3 -3
  14. package/dist/bconfig/normalization.js.map +1 -1
  15. package/dist/bconfig/types.cjs.map +1 -1
  16. package/dist/bconfig/types.d.ts +2 -2
  17. package/dist/bconfig/types.d.ts.map +1 -1
  18. package/dist/bconfig/types.js.map +1 -1
  19. package/dist/bconfig/util.d.ts +4 -4
  20. package/dist/bconfig/v3.d.ts +3 -3
  21. package/dist/block_api_v1.d.ts +2 -2
  22. package/dist/block_api_v1.d.ts.map +1 -1
  23. package/dist/block_api_v2.d.ts +2 -2
  24. package/dist/block_api_v2.d.ts.map +1 -1
  25. package/dist/block_api_v3.d.ts +3 -3
  26. package/dist/block_migrations.cjs +10 -10
  27. package/dist/block_migrations.cjs.map +1 -1
  28. package/dist/block_migrations.d.ts.map +1 -1
  29. package/dist/block_migrations.js +10 -10
  30. package/dist/block_migrations.js.map +1 -1
  31. package/dist/block_model.cjs +11 -11
  32. package/dist/block_model.cjs.map +1 -1
  33. package/dist/block_model.d.ts +8 -8
  34. package/dist/block_model.d.ts.map +1 -1
  35. package/dist/block_model.js +11 -11
  36. package/dist/block_model.js.map +1 -1
  37. package/dist/block_state_patch.d.ts +2 -2
  38. package/dist/block_state_util.cjs +1 -1
  39. package/dist/block_state_util.cjs.map +1 -1
  40. package/dist/block_state_util.d.ts +3 -3
  41. package/dist/block_state_util.js +1 -1
  42. package/dist/block_state_util.js.map +1 -1
  43. package/dist/block_storage.cjs +10 -10
  44. package/dist/block_storage.cjs.map +1 -1
  45. package/dist/block_storage.d.ts +2 -2
  46. package/dist/block_storage.d.ts.map +1 -1
  47. package/dist/block_storage.js +10 -10
  48. package/dist/block_storage.js.map +1 -1
  49. package/dist/block_storage_vm.cjs +22 -22
  50. package/dist/block_storage_vm.cjs.map +1 -1
  51. package/dist/block_storage_vm.d.ts +1 -1
  52. package/dist/block_storage_vm.d.ts.map +1 -1
  53. package/dist/block_storage_vm.js +22 -22
  54. package/dist/block_storage_vm.js.map +1 -1
  55. package/dist/builder.cjs +32 -23
  56. package/dist/builder.cjs.map +1 -1
  57. package/dist/builder.d.ts +7 -7
  58. package/dist/builder.d.ts.map +1 -1
  59. package/dist/builder.js +32 -23
  60. package/dist/builder.js.map +1 -1
  61. package/dist/components/PFrameForGraphs.cjs +7 -6
  62. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  63. package/dist/components/PFrameForGraphs.d.ts +4 -4
  64. package/dist/components/PFrameForGraphs.d.ts.map +1 -1
  65. package/dist/components/PFrameForGraphs.js +7 -6
  66. package/dist/components/PFrameForGraphs.js.map +1 -1
  67. package/dist/components/PlAnnotations/filter.d.ts +14 -14
  68. package/dist/components/PlAnnotations/filter.d.ts.map +1 -1
  69. package/dist/components/PlAnnotations/filters_ui.cjs +46 -46
  70. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
  71. package/dist/components/PlAnnotations/filters_ui.d.ts +10 -34
  72. package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -1
  73. package/dist/components/PlAnnotations/filters_ui.js +46 -46
  74. package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
  75. package/dist/components/PlAnnotations/index.d.ts +2 -2
  76. package/dist/components/PlAnnotations/types.d.ts +2 -2
  77. package/dist/components/PlDataTable.cjs +19 -20
  78. package/dist/components/PlDataTable.cjs.map +1 -1
  79. package/dist/components/PlDataTable.d.ts +27 -27
  80. package/dist/components/PlDataTable.d.ts.map +1 -1
  81. package/dist/components/PlDataTable.js +19 -20
  82. package/dist/components/PlDataTable.js.map +1 -1
  83. package/dist/components/PlMultiSequenceAlignment.cjs +2 -2
  84. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
  85. package/dist/components/PlMultiSequenceAlignment.d.ts +6 -6
  86. package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -1
  87. package/dist/components/PlMultiSequenceAlignment.js +2 -2
  88. package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
  89. package/dist/components/PlSelectionModel.cjs.map +1 -1
  90. package/dist/components/PlSelectionModel.d.ts +1 -1
  91. package/dist/components/PlSelectionModel.js.map +1 -1
  92. package/dist/components/index.d.ts +5 -5
  93. package/dist/config/actions.cjs +39 -39
  94. package/dist/config/actions.cjs.map +1 -1
  95. package/dist/config/actions.d.ts +9 -9
  96. package/dist/config/actions.d.ts.map +1 -1
  97. package/dist/config/actions.js +39 -39
  98. package/dist/config/actions.js.map +1 -1
  99. package/dist/config/actions_kinds.d.ts +30 -30
  100. package/dist/config/actions_kinds.d.ts.map +1 -1
  101. package/dist/config/index.d.ts +6 -6
  102. package/dist/config/model.d.ts +28 -28
  103. package/dist/config/model_meta.d.ts +1 -1
  104. package/dist/config/type_engine.d.ts +3 -3
  105. package/dist/config/type_util.d.ts +2 -2
  106. package/dist/env_value.cjs +1 -1
  107. package/dist/env_value.cjs.map +1 -1
  108. package/dist/env_value.js +1 -1
  109. package/dist/env_value.js.map +1 -1
  110. package/dist/filters/converter.cjs +36 -32
  111. package/dist/filters/converter.cjs.map +1 -1
  112. package/dist/filters/converter.d.ts +2 -2
  113. package/dist/filters/converter.d.ts.map +1 -1
  114. package/dist/filters/converter.js +36 -32
  115. package/dist/filters/converter.js.map +1 -1
  116. package/dist/filters/index.d.ts +2 -2
  117. package/dist/filters/types.d.ts +33 -33
  118. package/dist/filters/types.d.ts.map +1 -1
  119. package/dist/index.d.ts +24 -24
  120. package/dist/internal.cjs +7 -7
  121. package/dist/internal.cjs.map +1 -1
  122. package/dist/internal.d.ts +4 -4
  123. package/dist/internal.d.ts.map +1 -1
  124. package/dist/internal.js +7 -7
  125. package/dist/internal.js.map +1 -1
  126. package/dist/package.json.cjs +1 -1
  127. package/dist/package.json.js +1 -1
  128. package/dist/pframe.cjs +1 -1
  129. package/dist/pframe.cjs.map +1 -1
  130. package/dist/pframe.d.ts +1 -1
  131. package/dist/pframe.js +1 -1
  132. package/dist/pframe.js.map +1 -1
  133. package/dist/pframe_utils/columns.cjs +23 -15
  134. package/dist/pframe_utils/columns.cjs.map +1 -1
  135. package/dist/pframe_utils/columns.d.ts +3 -3
  136. package/dist/pframe_utils/columns.d.ts.map +1 -1
  137. package/dist/pframe_utils/columns.js +23 -15
  138. package/dist/pframe_utils/columns.js.map +1 -1
  139. package/dist/pframe_utils/index.cjs +25 -25
  140. package/dist/pframe_utils/index.cjs.map +1 -1
  141. package/dist/pframe_utils/index.d.ts +3 -3
  142. package/dist/pframe_utils/index.d.ts.map +1 -1
  143. package/dist/pframe_utils/index.js +25 -25
  144. package/dist/pframe_utils/index.js.map +1 -1
  145. package/dist/platforma.d.ts +7 -7
  146. package/dist/platforma.d.ts.map +1 -1
  147. package/dist/raw_globals.cjs +4 -1
  148. package/dist/raw_globals.cjs.map +1 -1
  149. package/dist/raw_globals.d.ts +2 -2
  150. package/dist/raw_globals.d.ts.map +1 -1
  151. package/dist/raw_globals.js +4 -1
  152. package/dist/raw_globals.js.map +1 -1
  153. package/dist/ref_util.cjs +4 -4
  154. package/dist/ref_util.cjs.map +1 -1
  155. package/dist/ref_util.d.ts +1 -1
  156. package/dist/ref_util.js +4 -4
  157. package/dist/ref_util.js.map +1 -1
  158. package/dist/render/accessor.cjs +24 -24
  159. package/dist/render/accessor.cjs.map +1 -1
  160. package/dist/render/accessor.d.ts +10 -10
  161. package/dist/render/accessor.d.ts.map +1 -1
  162. package/dist/render/accessor.js +24 -24
  163. package/dist/render/accessor.js.map +1 -1
  164. package/dist/render/api.cjs +23 -23
  165. package/dist/render/api.cjs.map +1 -1
  166. package/dist/render/api.d.ts +11 -11
  167. package/dist/render/api.d.ts.map +1 -1
  168. package/dist/render/api.js +23 -23
  169. package/dist/render/api.js.map +1 -1
  170. package/dist/render/future.cjs.map +1 -1
  171. package/dist/render/future.d.ts +1 -1
  172. package/dist/render/future.js.map +1 -1
  173. package/dist/render/index.d.ts +6 -6
  174. package/dist/render/internal.cjs +4 -4
  175. package/dist/render/internal.cjs.map +1 -1
  176. package/dist/render/internal.d.ts +7 -7
  177. package/dist/render/internal.d.ts.map +1 -1
  178. package/dist/render/internal.js +4 -4
  179. package/dist/render/internal.js.map +1 -1
  180. package/dist/render/traversal_ops.d.ts +1 -1
  181. package/dist/render/util/axis_filtering.cjs +48 -44
  182. package/dist/render/util/axis_filtering.cjs.map +1 -1
  183. package/dist/render/util/axis_filtering.d.ts +2 -2
  184. package/dist/render/util/axis_filtering.js +48 -44
  185. package/dist/render/util/axis_filtering.js.map +1 -1
  186. package/dist/render/util/column_collection.cjs +42 -35
  187. package/dist/render/util/column_collection.cjs.map +1 -1
  188. package/dist/render/util/column_collection.d.ts +4 -4
  189. package/dist/render/util/column_collection.d.ts.map +1 -1
  190. package/dist/render/util/column_collection.js +42 -35
  191. package/dist/render/util/column_collection.js.map +1 -1
  192. package/dist/render/util/index.d.ts +4 -4
  193. package/dist/render/util/label.cjs +15 -21
  194. package/dist/render/util/label.cjs.map +1 -1
  195. package/dist/render/util/label.d.ts +2 -2
  196. package/dist/render/util/label.d.ts.map +1 -1
  197. package/dist/render/util/label.js +15 -21
  198. package/dist/render/util/label.js.map +1 -1
  199. package/dist/render/util/pcolumn_data.cjs +56 -54
  200. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  201. package/dist/render/util/pcolumn_data.d.ts +5 -5
  202. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  203. package/dist/render/util/pcolumn_data.js +56 -54
  204. package/dist/render/util/pcolumn_data.js.map +1 -1
  205. package/dist/render/util/pframe_upgraders.cjs +6 -6
  206. package/dist/render/util/pframe_upgraders.cjs.map +1 -1
  207. package/dist/render/util/pframe_upgraders.d.ts +1 -1
  208. package/dist/render/util/pframe_upgraders.d.ts.map +1 -1
  209. package/dist/render/util/pframe_upgraders.js +6 -6
  210. package/dist/render/util/pframe_upgraders.js.map +1 -1
  211. package/dist/render/util/split_selectors.d.ts +1 -1
  212. package/dist/render/util/split_selectors.d.ts.map +1 -1
  213. package/dist/sdk_info.cjs.map +1 -1
  214. package/dist/sdk_info.js.map +1 -1
  215. package/dist/version.cjs.map +1 -1
  216. package/dist/version.js.map +1 -1
  217. package/package.json +23 -21
  218. package/src/annotations/converter.test.ts +98 -101
  219. package/src/annotations/converter.ts +21 -17
  220. package/src/annotations/index.ts +2 -2
  221. package/src/annotations/types.ts +4 -4
  222. package/src/bconfig/index.ts +5 -5
  223. package/src/bconfig/lambdas.ts +10 -12
  224. package/src/bconfig/normalization.ts +5 -5
  225. package/src/bconfig/types.ts +3 -5
  226. package/src/bconfig/util.ts +3 -3
  227. package/src/bconfig/v3.ts +3 -3
  228. package/src/block_api_v1.ts +7 -3
  229. package/src/block_api_v2.ts +7 -3
  230. package/src/block_api_v3.ts +3 -3
  231. package/src/block_migrations.test.ts +66 -67
  232. package/src/block_migrations.ts +16 -16
  233. package/src/block_model.ts +76 -140
  234. package/src/block_state_patch.ts +2 -2
  235. package/src/block_state_util.ts +4 -4
  236. package/src/block_storage.test.ts +106 -99
  237. package/src/block_storage.ts +22 -25
  238. package/src/block_storage_vm.ts +41 -35
  239. package/src/builder.ts +107 -95
  240. package/src/components/PFrameForGraphs.test.ts +261 -255
  241. package/src/components/PFrameForGraphs.ts +35 -22
  242. package/src/components/PlAnnotations/filter.ts +21 -15
  243. package/src/components/PlAnnotations/filters_ui.test.ts +230 -73
  244. package/src/components/PlAnnotations/filters_ui.ts +138 -105
  245. package/src/components/PlAnnotations/index.ts +2 -2
  246. package/src/components/PlAnnotations/types.ts +2 -2
  247. package/src/components/PlDataTable.ts +177 -164
  248. package/src/components/PlMultiSequenceAlignment.ts +11 -18
  249. package/src/components/PlSelectionModel.ts +1 -1
  250. package/src/components/index.ts +5 -5
  251. package/src/config/actions.ts +64 -59
  252. package/src/config/actions_kinds.ts +38 -34
  253. package/src/config/index.ts +6 -6
  254. package/src/config/model.ts +28 -28
  255. package/src/config/model_meta.ts +1 -1
  256. package/src/config/type_engine.ts +3 -3
  257. package/src/config/type_util.ts +2 -2
  258. package/src/env_value.ts +2 -2
  259. package/src/filters/converter.test.ts +185 -144
  260. package/src/filters/converter.ts +47 -35
  261. package/src/filters/index.ts +2 -2
  262. package/src/filters/types.ts +44 -39
  263. package/src/global.d.ts +1 -1
  264. package/src/index.ts +24 -24
  265. package/src/internal.ts +27 -17
  266. package/src/pframe.ts +3 -3
  267. package/src/pframe_utils/columns.ts +81 -31
  268. package/src/pframe_utils/index.ts +65 -43
  269. package/src/platforma.ts +44 -21
  270. package/src/raw_globals.ts +13 -7
  271. package/src/ref_util.ts +6 -6
  272. package/src/render/accessor.ts +43 -44
  273. package/src/render/api.ts +102 -78
  274. package/src/render/future.ts +2 -2
  275. package/src/render/index.ts +6 -6
  276. package/src/render/internal.ts +11 -12
  277. package/src/render/traversal_ops.ts +1 -1
  278. package/src/render/util/axis_filtering.ts +67 -52
  279. package/src/render/util/column_collection.ts +171 -91
  280. package/src/render/util/index.ts +4 -4
  281. package/src/render/util/label.test.ts +139 -139
  282. package/src/render/util/label.ts +42 -33
  283. package/src/render/util/pcolumn_data.ts +111 -75
  284. package/src/render/util/pframe_upgraders.ts +24 -13
  285. package/src/render/util/split_selectors.ts +6 -1
  286. package/src/sdk_info.ts +1 -1
  287. package/src/typing.test.ts +56 -56
  288. package/src/version.ts +1 -1
@@ -1,145 +1,145 @@
1
1
  // DEPRECATED - use lib/ui/uikit/src/composition/filters
2
2
  function unreachable(x) {
3
3
  // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
4
- throw new Error('Unexpected object: ' + x);
4
+ throw new Error("Unexpected object: " + x);
5
5
  }
6
6
  function compileFilter(ui) {
7
- if (ui.type === 'or') {
7
+ if (ui.type === "or") {
8
8
  return {
9
- type: 'or',
9
+ type: "or",
10
10
  filters: compileFilters(ui.filters),
11
11
  };
12
12
  }
13
- if (ui.type === 'and') {
13
+ if (ui.type === "and") {
14
14
  return {
15
- type: 'and',
15
+ type: "and",
16
16
  filters: compileFilters(ui.filters),
17
17
  };
18
18
  }
19
- if (ui.type === 'not') {
19
+ if (ui.type === "not") {
20
20
  return {
21
- type: 'not',
21
+ type: "not",
22
22
  filter: compileFilter(ui.filter),
23
23
  };
24
24
  }
25
- if (ui.type === 'isNA') {
25
+ if (ui.type === "isNA") {
26
26
  return {
27
- type: 'isNA',
27
+ type: "isNA",
28
28
  column: ui.column,
29
29
  };
30
30
  }
31
- if (ui.type === 'isNotNA') {
32
- const isNAFilter = { type: 'isNA', column: ui.column };
33
- const notFilter = { type: 'not', filter: isNAFilter };
31
+ if (ui.type === "isNotNA") {
32
+ const isNAFilter = { type: "isNA", column: ui.column };
33
+ const notFilter = { type: "not", filter: isNAFilter };
34
34
  return notFilter;
35
35
  }
36
- if (ui.type === 'patternEquals') {
36
+ if (ui.type === "patternEquals") {
37
37
  return {
38
- type: 'pattern',
38
+ type: "pattern",
39
39
  column: ui.column,
40
40
  predicate: {
41
- type: 'equals',
41
+ type: "equals",
42
42
  value: ui.value,
43
43
  },
44
44
  };
45
45
  }
46
- if (ui.type === 'patternNotEquals') {
46
+ if (ui.type === "patternNotEquals") {
47
47
  const patternFilter = {
48
- type: 'pattern',
48
+ type: "pattern",
49
49
  column: ui.column,
50
- predicate: { type: 'equals', value: ui.value },
50
+ predicate: { type: "equals", value: ui.value },
51
51
  };
52
- const notFilter = { type: 'not', filter: patternFilter };
52
+ const notFilter = { type: "not", filter: patternFilter };
53
53
  return notFilter;
54
54
  }
55
- if (ui.type === 'patternContainSubsequence') {
55
+ if (ui.type === "patternContainSubsequence") {
56
56
  return {
57
- type: 'pattern',
57
+ type: "pattern",
58
58
  column: ui.column,
59
59
  predicate: {
60
- type: 'containSubsequence',
60
+ type: "containSubsequence",
61
61
  value: ui.value,
62
62
  },
63
63
  };
64
64
  }
65
- if (ui.type === 'patternNotContainSubsequence') {
65
+ if (ui.type === "patternNotContainSubsequence") {
66
66
  const patternFilter = {
67
- type: 'pattern',
67
+ type: "pattern",
68
68
  column: ui.column,
69
- predicate: { type: 'containSubsequence', value: ui.value },
69
+ predicate: { type: "containSubsequence", value: ui.value },
70
70
  };
71
- const notFilter = { type: 'not', filter: patternFilter };
71
+ const notFilter = { type: "not", filter: patternFilter };
72
72
  return notFilter;
73
73
  }
74
- if (ui.type === 'topN') {
74
+ if (ui.type === "topN") {
75
75
  const rankTransform = {
76
- transformer: 'rank',
76
+ transformer: "rank",
77
77
  column: ui.column,
78
78
  descending: true,
79
79
  };
80
80
  const comparisonFilter = {
81
- type: 'numericalComparison',
81
+ type: "numericalComparison",
82
82
  lhs: rankTransform,
83
83
  rhs: ui.n,
84
84
  allowEqual: true,
85
85
  };
86
86
  return comparisonFilter;
87
87
  }
88
- if (ui.type === 'bottomN') {
88
+ if (ui.type === "bottomN") {
89
89
  const rankTransform = {
90
- transformer: 'rank',
90
+ transformer: "rank",
91
91
  column: ui.column,
92
92
  };
93
93
  const comparisonFilter = {
94
- type: 'numericalComparison',
94
+ type: "numericalComparison",
95
95
  lhs: rankTransform,
96
96
  rhs: ui.n,
97
97
  allowEqual: true,
98
98
  };
99
99
  return comparisonFilter;
100
100
  }
101
- if (ui.type === 'lessThan') {
101
+ if (ui.type === "lessThan") {
102
102
  return {
103
- type: 'numericalComparison',
103
+ type: "numericalComparison",
104
104
  lhs: ui.column,
105
105
  rhs: ui.x,
106
106
  };
107
107
  }
108
- if (ui.type === 'greaterThan') {
108
+ if (ui.type === "greaterThan") {
109
109
  return {
110
- type: 'numericalComparison',
110
+ type: "numericalComparison",
111
111
  rhs: ui.column,
112
112
  lhs: ui.x,
113
113
  };
114
114
  }
115
- if (ui.type === 'greaterThanOrEqual') {
115
+ if (ui.type === "greaterThanOrEqual") {
116
116
  return {
117
- type: 'numericalComparison',
117
+ type: "numericalComparison",
118
118
  rhs: ui.column,
119
119
  lhs: ui.x,
120
120
  allowEqual: true,
121
121
  };
122
122
  }
123
- if (ui.type === 'lessThanOrEqual') {
123
+ if (ui.type === "lessThanOrEqual") {
124
124
  return {
125
- type: 'numericalComparison',
125
+ type: "numericalComparison",
126
126
  lhs: ui.column,
127
127
  rhs: ui.x,
128
128
  allowEqual: true,
129
129
  };
130
130
  }
131
- if (ui.type === 'lessThanColumn') {
131
+ if (ui.type === "lessThanColumn") {
132
132
  return {
133
- type: 'numericalComparison',
133
+ type: "numericalComparison",
134
134
  lhs: ui.column,
135
135
  rhs: ui.rhs,
136
136
  minDiff: ui.minDiff,
137
137
  allowEqual: undefined,
138
138
  };
139
139
  }
140
- if (ui.type === 'lessThanColumnOrEqual') {
140
+ if (ui.type === "lessThanColumnOrEqual") {
141
141
  return {
142
- type: 'numericalComparison',
142
+ type: "numericalComparison",
143
143
  lhs: ui.column,
144
144
  rhs: ui.rhs,
145
145
  minDiff: ui.minDiff,
@@ -161,10 +161,10 @@ function compileAnnotationScript(uiScript) {
161
161
  if (step.filter.type == null) {
162
162
  return false;
163
163
  }
164
- if (step.filter.type === 'or') {
164
+ if (step.filter.type === "or") {
165
165
  return step.filter.filters.length > 0;
166
166
  }
167
- if (step.filter.type === 'and') {
167
+ if (step.filter.type === "and") {
168
168
  return step.filter.filters.length > 0;
169
169
  }
170
170
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"filters_ui.js","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"sourcesContent":["// @DEPRECATED - use sdk/model/src/filters + sdk/model/src/annotations\nimport type { SUniversalPColumnId } from '@milaboratories/pl-model-common';\nimport type { FilterSpecUi } from '../../annotations';\nimport type { FilterSpec, FilterSpecLeaf } from '../../filters';\nimport type { AnnotationFilter, AnnotationMode, AnnotationScript, IsNA, NotFilter, NumericalComparisonFilter, PatternFilter, PatternPredicate, ValueRank } from './filter';\n\nexport type FilterUi = FilterSpec<Extract<\n FilterSpecLeaf,\n // supported filters\n { type:\n | 'lessThan'\n | 'greaterThan'\n | 'lessThanOrEqual'\n | 'greaterThanOrEqual'\n | 'lessThanColumn'\n | 'lessThanColumnOrEqual'\n | 'patternContainSubsequence'\n | 'patternNotContainSubsequence'\n | 'patternEquals'\n | 'patternNotEquals'\n | 'topN'\n | 'bottomN'\n | 'isNA'\n | 'isNotNA';\n }\n>, { id: number; name?: string; isExpanded?: boolean }>;\n\nexport type FilterUiType = Exclude<FilterUi, { type: undefined }>['type'];\n\nexport type FilterUiOfType<T extends FilterUiType> = Extract<FilterUi, { type: T }>;\n\n// DEPRECATED - use lib/ui/uikit/src/composition/filters\nexport function unreachable(x: never): never {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n throw new Error('Unexpected object: ' + x);\n}\n\nexport type TypeToLiteral<T> =\n [T] extends [FilterUiType] ? 'FilterUiType' :\n [T] extends [SUniversalPColumnId] ? 'SUniversalPColumnId' :\n [T] extends [PatternPredicate] ? 'PatternPredicate' :\n [T] extends [AnnotationFilter[]] ? 'AnnotationFilter[]' :\n [T] extends [AnnotationFilter] ? 'AnnotationFilter' :\n [T] extends [number] ? 'number' :\n [T] extends [number | undefined] ? 'number?' :\n [T] extends [string] ? 'string' :\n [T] extends [string | undefined] ? 'string?' :\n [T] extends [boolean] ? 'boolean' :\n [T] extends [boolean | undefined] ? 'boolean?' :\n [T] extends [unknown[]] ? 'unknown[]' :\n // this is special\n T extends number ? 'number' :\n T extends string ? 'string' :\n T extends boolean ? 'boolean' :\n T extends Record<string, unknown> ? 'form' :\n 'unknown';\n\n// @TODO: \"parse\" option\nexport type TypeField<V> = {\n fieldType: TypeToLiteral<V>;\n label: string;\n defaultValue: () => V | undefined;\n};\n\nexport type TypeFieldRecord<T extends FilterUi> = { [K in keyof T]: TypeField<T[K]>; };\n\nexport type TypeForm<T> = {\n [P in keyof T]: T[P] extends Record<string, unknown> ? {\n fieldType: 'form';\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n } : TypeField<T[P]>;\n};\n\nexport type FormField =\n {\n fieldType: 'form';\n form?: Record<string, FormField>;\n defaultValue: () => Record<string, unknown>;\n }\n | TypeField<FilterUiType>\n | TypeField<string>\n | TypeField<number>\n | TypeField<number | undefined>\n | TypeField<boolean>\n | TypeField<boolean | undefined>\n | TypeField<SUniversalPColumnId>;\n\nexport type AnyForm = Record<string, FormField>;\n\nexport type AnnotationStepUi = FilterSpecUi<Extract<FilterUi, { type: 'and' | 'or' }>> & { id: number };\n\nexport type AnnotationScriptUi = {\n isCreated?: boolean;\n title: string;\n mode: AnnotationMode;\n steps: AnnotationStepUi[];\n};\n\nexport function compileFilter(ui: FilterUi): AnnotationFilter {\n if (ui.type === 'or') {\n return {\n type: 'or' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'and') {\n return {\n type: 'and' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'not') {\n return {\n type: 'not' as const,\n filter: compileFilter(ui.filter),\n };\n }\n\n if (ui.type === 'isNA') {\n return {\n type: 'isNA' as const,\n column: ui.column,\n };\n }\n\n if (ui.type === 'isNotNA') {\n const isNAFilter: IsNA = { type: 'isNA', column: ui.column };\n const notFilter: NotFilter = { type: 'not', filter: isNAFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternEquals') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'equals' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotEquals') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'equals', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternContainSubsequence') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'containSubsequence' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotContainSubsequence') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'containSubsequence', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'topN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n descending: true,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'bottomN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'lessThan') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThan') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanColumn') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: undefined,\n };\n }\n\n if (ui.type === 'lessThanColumnOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: true,\n };\n }\n\n unreachable(ui);\n}\n\nexport function compileFilters(uiFilters: FilterUi[]): AnnotationFilter[] {\n return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);\n}\n\nexport function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript {\n return {\n title: uiScript.title,\n mode: uiScript.mode,\n steps: uiScript.steps\n .filter((step) => {\n // No need to compile empty steps\n if (step.filter.type == null) {\n return false;\n }\n\n if (step.filter.type === 'or') {\n return step.filter.filters.length > 0;\n }\n\n if (step.filter.type === 'and') {\n return step.filter.filters.length > 0;\n }\n\n return false;\n })\n .map((step) => ({\n label: step.label.trim(),\n filter: compileFilter(step.filter),\n })),\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filters_ui.js","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"sourcesContent":["// @DEPRECATED - use sdk/model/src/filters + sdk/model/src/annotations\nimport type { SUniversalPColumnId } from \"@milaboratories/pl-model-common\";\nimport type { FilterSpecUi } from \"../../annotations\";\nimport type { FilterSpec, FilterSpecLeaf } from \"../../filters\";\nimport type {\n AnnotationFilter,\n AnnotationMode,\n AnnotationScript,\n IsNA,\n NotFilter,\n NumericalComparisonFilter,\n PatternFilter,\n PatternPredicate,\n ValueRank,\n} from \"./filter\";\n\nexport type FilterUi = FilterSpec<\n Extract<\n FilterSpecLeaf,\n // supported filters\n {\n type:\n | \"lessThan\"\n | \"greaterThan\"\n | \"lessThanOrEqual\"\n | \"greaterThanOrEqual\"\n | \"lessThanColumn\"\n | \"lessThanColumnOrEqual\"\n | \"patternContainSubsequence\"\n | \"patternNotContainSubsequence\"\n | \"patternEquals\"\n | \"patternNotEquals\"\n | \"topN\"\n | \"bottomN\"\n | \"isNA\"\n | \"isNotNA\";\n }\n >,\n { id: number; name?: string; isExpanded?: boolean }\n>;\n\nexport type FilterUiType = Exclude<FilterUi, { type: undefined }>[\"type\"];\n\nexport type FilterUiOfType<T extends FilterUiType> = Extract<FilterUi, { type: T }>;\n\n// DEPRECATED - use lib/ui/uikit/src/composition/filters\nexport function unreachable(x: never): never {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n throw new Error(\"Unexpected object: \" + x);\n}\n\nexport type TypeToLiteral<T> = [T] extends [FilterUiType]\n ? \"FilterUiType\"\n : [T] extends [SUniversalPColumnId]\n ? \"SUniversalPColumnId\"\n : [T] extends [PatternPredicate]\n ? \"PatternPredicate\"\n : [T] extends [AnnotationFilter[]]\n ? \"AnnotationFilter[]\"\n : [T] extends [AnnotationFilter]\n ? \"AnnotationFilter\"\n : [T] extends [number]\n ? \"number\"\n : [T] extends [number | undefined]\n ? \"number?\"\n : [T] extends [string]\n ? \"string\"\n : [T] extends [string | undefined]\n ? \"string?\"\n : [T] extends [boolean]\n ? \"boolean\"\n : [T] extends [boolean | undefined]\n ? \"boolean?\"\n : [T] extends [unknown[]]\n ? \"unknown[]\"\n : // this is special\n T extends number\n ? \"number\"\n : T extends string\n ? \"string\"\n : T extends boolean\n ? \"boolean\"\n : T extends Record<string, unknown>\n ? \"form\"\n : \"unknown\";\n\n// @TODO: \"parse\" option\nexport type TypeField<V> = {\n fieldType: TypeToLiteral<V>;\n label: string;\n defaultValue: () => V | undefined;\n};\n\nexport type TypeFieldRecord<T extends FilterUi> = { [K in keyof T]: TypeField<T[K]> };\n\nexport type TypeForm<T> = {\n [P in keyof T]: T[P] extends Record<string, unknown>\n ? {\n fieldType: \"form\";\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n }\n : TypeField<T[P]>;\n};\n\nexport type FormField =\n | {\n fieldType: \"form\";\n form?: Record<string, FormField>;\n defaultValue: () => Record<string, unknown>;\n }\n | TypeField<FilterUiType>\n | TypeField<string>\n | TypeField<number>\n | TypeField<number | undefined>\n | TypeField<boolean>\n | TypeField<boolean | undefined>\n | TypeField<SUniversalPColumnId>;\n\nexport type AnyForm = Record<string, FormField>;\n\nexport type AnnotationStepUi = FilterSpecUi<Extract<FilterUi, { type: \"and\" | \"or\" }>> & {\n id: number;\n};\n\nexport type AnnotationScriptUi = {\n isCreated?: boolean;\n title: string;\n mode: AnnotationMode;\n steps: AnnotationStepUi[];\n};\n\nexport function compileFilter(ui: FilterUi): AnnotationFilter {\n if (ui.type === \"or\") {\n return {\n type: \"or\" as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === \"and\") {\n return {\n type: \"and\" as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === \"not\") {\n return {\n type: \"not\" as const,\n filter: compileFilter(ui.filter),\n };\n }\n\n if (ui.type === \"isNA\") {\n return {\n type: \"isNA\" as const,\n column: ui.column,\n };\n }\n\n if (ui.type === \"isNotNA\") {\n const isNAFilter: IsNA = { type: \"isNA\", column: ui.column };\n const notFilter: NotFilter = { type: \"not\", filter: isNAFilter };\n return notFilter;\n }\n\n if (ui.type === \"patternEquals\") {\n return {\n type: \"pattern\" as const,\n column: ui.column,\n predicate: {\n type: \"equals\" as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === \"patternNotEquals\") {\n const patternFilter: PatternFilter = {\n type: \"pattern\",\n column: ui.column,\n predicate: { type: \"equals\", value: ui.value },\n };\n const notFilter: NotFilter = { type: \"not\", filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === \"patternContainSubsequence\") {\n return {\n type: \"pattern\" as const,\n column: ui.column,\n predicate: {\n type: \"containSubsequence\" as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === \"patternNotContainSubsequence\") {\n const patternFilter: PatternFilter = {\n type: \"pattern\",\n column: ui.column,\n predicate: { type: \"containSubsequence\", value: ui.value },\n };\n const notFilter: NotFilter = { type: \"not\", filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === \"topN\") {\n const rankTransform: ValueRank = {\n transformer: \"rank\",\n column: ui.column,\n descending: true,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: \"numericalComparison\",\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === \"bottomN\") {\n const rankTransform: ValueRank = {\n transformer: \"rank\",\n column: ui.column,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: \"numericalComparison\",\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === \"lessThan\") {\n return {\n type: \"numericalComparison\" as const,\n lhs: ui.column,\n rhs: ui.x,\n };\n }\n\n if (ui.type === \"greaterThan\") {\n return {\n type: \"numericalComparison\" as const,\n rhs: ui.column,\n lhs: ui.x,\n };\n }\n\n if (ui.type === \"greaterThanOrEqual\") {\n return {\n type: \"numericalComparison\" as const,\n rhs: ui.column,\n lhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === \"lessThanOrEqual\") {\n return {\n type: \"numericalComparison\" as const,\n lhs: ui.column,\n rhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === \"lessThanColumn\") {\n return {\n type: \"numericalComparison\" as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: undefined,\n };\n }\n\n if (ui.type === \"lessThanColumnOrEqual\") {\n return {\n type: \"numericalComparison\" as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: true,\n };\n }\n\n unreachable(ui);\n}\n\nexport function compileFilters(uiFilters: FilterUi[]): AnnotationFilter[] {\n return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);\n}\n\nexport function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript {\n return {\n title: uiScript.title,\n mode: uiScript.mode,\n steps: uiScript.steps\n .filter((step) => {\n // No need to compile empty steps\n if (step.filter.type == null) {\n return false;\n }\n\n if (step.filter.type === \"or\") {\n return step.filter.filters.length > 0;\n }\n\n if (step.filter.type === \"and\") {\n return step.filter.filters.length > 0;\n }\n\n return false;\n })\n .map((step) => ({\n label: step.label.trim(),\n filter: compileFilter(step.filter),\n })),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export * from './filter';
2
- export * from './filters_ui';
1
+ export * from "./filter";
2
+ export * from "./filters_ui";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
- import type { PColumnSpec } from '@milaboratories/pl-model-common';
2
- export type SimplifiedPColumnSpec = Pick<PColumnSpec, 'valueType' | 'annotations'>;
1
+ import type { PColumnSpec } from "@milaboratories/pl-model-common";
2
+ export type SimplifiedPColumnSpec = Pick<PColumnSpec, "valueType" | "annotations">;
3
3
  //# sourceMappingURL=types.d.ts.map
@@ -31,7 +31,7 @@ function upgradePlDataTableStateV2(state) {
31
31
  return createPlDataTableStateV2();
32
32
  }
33
33
  // v1 -> v2
34
- if (!('version' in state)) {
34
+ if (!("version" in state)) {
35
35
  // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default
36
36
  state = createPlDataTableStateV2();
37
37
  }
@@ -147,12 +147,12 @@ function createPTableDef(params) {
147
147
  secondaryColumns.push(...params.labelColumns);
148
148
  return {
149
149
  src: {
150
- type: 'outer',
150
+ type: "outer",
151
151
  primary: {
152
152
  type: params.coreJoinType,
153
- entries: coreColumns.map((c) => ({ type: 'column', column: c })),
153
+ entries: coreColumns.map((c) => ({ type: "column", column: c })),
154
154
  },
155
- secondary: secondaryColumns.map((c) => ({ type: 'column', column: c })),
155
+ secondary: secondaryColumns.map((c) => ({ type: "column", column: c })),
156
156
  },
157
157
  partitionFilters: params.partitionFilters,
158
158
  filters: params.filters,
@@ -161,11 +161,11 @@ function createPTableDef(params) {
161
161
  }
162
162
  /** Check if column should be omitted from the table */
163
163
  function isColumnHidden(spec) {
164
- return plModelCommon.readAnnotation(spec, plModelCommon.Annotation.Table.Visibility) === 'hidden';
164
+ return plModelCommon.readAnnotation(spec, plModelCommon.Annotation.Table.Visibility) === "hidden";
165
165
  }
166
166
  /** Check if column is hidden by default */
167
167
  function isColumnOptional(spec) {
168
- return plModelCommon.readAnnotation(spec, plModelCommon.Annotation.Table.Visibility) === 'optional';
168
+ return plModelCommon.readAnnotation(spec, plModelCommon.Annotation.Table.Visibility) === "optional";
169
169
  }
170
170
  /**
171
171
  * Create p-table spec and handle given ui table state
@@ -198,14 +198,13 @@ function createPlDataTableV2(ctx, columns, tableState, ops) {
198
198
  const fullColumns = [...columns, ...fullLabelColumns];
199
199
  const fullColumnsAxes = plModelCommon.uniqueBy(fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => plModelCommon.getAxisId(a))), (a) => plModelCommon.canonicalizeJson(a));
200
200
  const fullColumnsIds = [
201
- ...fullColumnsAxes.map((a) => ({ type: 'axis', id: a })),
202
- ...fullColumns.map((c) => ({ type: 'column', id: c.id })),
201
+ ...fullColumnsAxes.map((a) => ({ type: "axis", id: a })),
202
+ ...fullColumns.map((c) => ({ type: "column", id: c.id })),
203
203
  ];
204
204
  const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => plModelCommon.canonicalizeJson(c)));
205
205
  const isValidColumnId = (id) => fullColumnsIdsSet.has(plModelCommon.canonicalizeJson(id));
206
- const coreJoinType = ops?.coreJoinType ?? 'full';
207
- const partitionFilters = tableStateNormalized.pTableParams.partitionFilters
208
- .filter((f) => {
206
+ const coreJoinType = ops?.coreJoinType ?? "full";
207
+ const partitionFilters = tableStateNormalized.pTableParams.partitionFilters.filter((f) => {
209
208
  const valid = isValidColumnId(f.column);
210
209
  if (!valid)
211
210
  ctx.logWarn(`Partition filter ${JSON.stringify(f)} does not match provided columns, skipping`);
@@ -237,19 +236,15 @@ function createPlDataTableV2(ctx, columns, tableState, ops) {
237
236
  return undefined;
238
237
  const hiddenColumns = new Set((() => {
239
238
  // Inner join works as a filter - all columns must be present
240
- if (coreJoinType === 'inner')
239
+ if (coreJoinType === "inner")
241
240
  return [];
242
241
  const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;
243
242
  if (hiddenColIds)
244
243
  return hiddenColIds;
245
- return columns
246
- .filter((c) => isColumnOptional(c.spec))
247
- .map((c) => c.id);
244
+ return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);
248
245
  })());
249
246
  // Preserve linker columns
250
- columns
251
- .filter((c) => plModelCommon.isLinkerColumn(c.spec))
252
- .forEach((c) => hiddenColumns.delete(c.id));
247
+ columns.filter((c) => plModelCommon.isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));
253
248
  // Preserve core columns as they change the shape of join.
254
249
  const coreColumnPredicate = ops?.coreColumnPredicate;
255
250
  if (coreColumnPredicate) {
@@ -257,8 +252,12 @@ function createPlDataTableV2(ctx, columns, tableState, ops) {
257
252
  coreColumns.forEach((c) => hiddenColumns.delete(c));
258
253
  }
259
254
  // Filters decrease the number of result rows, sorting changes the order of result rows
260
- [...partitionFilters.map((f) => f.column), ...filters.map((f) => f.column), ...sorting.map((s) => s.column)]
261
- .filter((c) => c.type === 'column')
255
+ [
256
+ ...partitionFilters.map((f) => f.column),
257
+ ...filters.map((f) => f.column),
258
+ ...sorting.map((s) => s.column),
259
+ ]
260
+ .filter((c) => c.type === "column")
262
261
  .forEach((c) => hiddenColumns.delete(c.id));
263
262
  const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));
264
263
  const visibleLabelColumns = getMatchingLabelColumns(visibleColumns.map(plModelCommon.getColumnIdAndSpec), allLabelColumns);
@@ -1 +1 @@
1
- {"version":3,"file":"PlDataTable.cjs","sources":["../../src/components/PlDataTable.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpec,\n CanonicalizedJson,\n DataInfo,\n ListOptionBase,\n PColumn,\n PColumnIdAndSpec,\n PColumnValues,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableColumnSpec,\n PTableDef,\n PTableHandle,\n PTableRecordFilter,\n PTableRecordSingleValueFilterV2,\n PTableSorting,\n} from '@milaboratories/pl-model-common';\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLabelColumn,\n isLinkerColumn,\n matchAxisId,\n PColumnName,\n readAnnotation,\n uniqueBy,\n} from '@milaboratories/pl-model-common';\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n TreeNodeAccessor,\n} from '../render';\nimport {\n allPColumnsReady,\n deriveLabels,\n PColumnCollection,\n} from '../render';\nimport { identity } from 'es-toolkit';\n\nexport type PlTableColumnId = {\n /** Original column spec */\n source: PTableColumnSpec;\n /** Column spec with labeled axes replaced by label columns */\n labeled: PTableColumnSpec;\n};\n\nexport type PlTableColumnIdJson = CanonicalizedJson<PlTableColumnId>;\n\nexport type PlDataTableGridStateCore = {\n /** Includes column ordering */\n columnOrder?: {\n /** All colIds in order */\n orderedColIds: PlTableColumnIdJson[];\n };\n /** Includes current sort columns and direction */\n sort?: {\n /** Sorted columns and directions in order */\n sortModel: {\n /** Column Id to apply the sort to. */\n colId: PlTableColumnIdJson;\n /** Sort direction */\n sort: 'asc' | 'desc';\n }[];\n };\n /** Includes column visibility */\n columnVisibility?: {\n /** All colIds which were hidden */\n hiddenColIds: PlTableColumnIdJson[];\n };\n};\n\nexport type PlDataTableSheet = {\n /** spec of the axis to use */\n axis: AxisSpec;\n /** options to show in the filter dropdown */\n options: ListOptionBase<string | number>[];\n /** default (selected) value */\n defaultValue?: string | number;\n};\n\nexport type PlDataTableSheetState = {\n /** id of the axis */\n axisId: AxisId;\n /** selected value */\n value: string | number;\n};\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: 'asc' | 'desc';\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: 'asc' | 'desc';\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: 'asc' | 'desc';\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n // Normalized state\n | PlDataTableStateV2Normalized;\n\nexport type PlDataTableStateV2CacheEntry = {\n /** DataSource identifier for state management */\n sourceId: string;\n /** Internal ag-grid state */\n gridState: PlDataTableGridStateCore;\n /** Sheets state */\n sheetsState: PlDataTableSheetState[];\n /** Filters state */\n filtersState: PlDataTableFilterState[];\n};\n\nexport type PTableParamsV2 =\n | {\n sourceId: null;\n hiddenColIds: null;\n partitionFilters: [];\n filters: [];\n sorting: [];\n }\n | {\n sourceId: string;\n hiddenColIds: PObjectId[] | null;\n partitionFilters: PTableRecordFilter[];\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n\nexport type PlDataTableStateV2Normalized = {\n /** Version for upgrades */\n version: 4;\n /** Internal states, LRU cache for 5 sourceId-s */\n stateCache: PlDataTableStateV2CacheEntry[];\n /** PTable params derived from the cache state for the current sourceId */\n pTableParams: PTableParamsV2;\n};\n\nexport function makeDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n partitionFilters: [],\n filters: [],\n sorting: [],\n };\n}\n\n/** Create default PlDataTableStateV2 */\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 4,\n stateCache: [],\n pTableParams: makeDefaultPTableParams(),\n };\n}\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(state: PlDataTableStateV2 | undefined): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!('version' in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: makeDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n return state;\n}\n\nexport type PlDataTableFilterState = {\n id: PTableColumnId;\n alphabetic: boolean;\n filter: null | {\n value: PlTableFilter;\n disabled: boolean;\n };\n};\n\n/** PlTableFilters filter entry */\nexport type PlTableFilterIsNotNA = {\n /** Predicate type */\n type: 'isNotNA';\n};\n\n/** PlTableFilters filter entry */\nexport type PlTableFilterIsNA = {\n /** Predicate type */\n type: 'isNA';\n};\n\n/** PlTableFilters filter entries applicable to both string and number values */\nexport type PlTableFilterCommon = PlTableFilterIsNotNA | PlTableFilterIsNA;\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberEquals = {\n /** Predicate type */\n type: 'number_equals';\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberNotEquals = {\n /** Predicate type */\n type: 'number_notEquals';\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberGreaterThan = {\n /** Predicate type */\n type: 'number_greaterThan';\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberGreaterThanOrEqualTo = {\n /** Predicate type */\n type: 'number_greaterThanOrEqualTo';\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberLessThan = {\n /** Predicate type */\n type: 'number_lessThan';\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberLessThanOrEqualTo = {\n /** Predicate type */\n type: 'number_lessThanOrEqualTo';\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberBetween = {\n /** Predicate type */\n type: 'number_between';\n /** Reference value for the lower bound */\n lowerBound: number;\n /** Defines whether values equal to lower bound reference value should be matched */\n includeLowerBound: boolean;\n /** Reference value for the upper bound */\n upperBound: number;\n /** Defines whether values equal to upper bound reference value should be matched */\n includeUpperBound: boolean;\n};\n\n/** All PlTableFilters numeric filter entries */\nexport type PlTableFilterNumber =\n | PlTableFilterCommon\n | PlTableFilterNumberEquals\n | PlTableFilterNumberNotEquals\n | PlTableFilterNumberGreaterThan\n | PlTableFilterNumberGreaterThanOrEqualTo\n | PlTableFilterNumberLessThan\n | PlTableFilterNumberLessThanOrEqualTo\n | PlTableFilterNumberBetween;\n/** All types of PlTableFilters numeric filter entries */\nexport type PlTableFilterNumberType = PlTableFilterNumber['type'];\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringEquals = {\n /** Predicate type */\n type: 'string_equals';\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringNotEquals = {\n /** Predicate type */\n type: 'string_notEquals';\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringContains = {\n /** Predicate type */\n type: 'string_contains';\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringDoesNotContain = {\n /** Predicate type */\n type: 'string_doesNotContain';\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringMatches = {\n /** Predicate type */\n type: 'string_matches';\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringDoesNotMatch = {\n /** Predicate type */\n type: 'string_doesNotMatch';\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringContainsFuzzyMatch = {\n /** Predicate type */\n type: 'string_containsFuzzyMatch';\n /** Reference value */\n reference: string;\n /**\n * Maximum acceptable edit distance between reference value and matched substring\n * @see https://en.wikipedia.org/wiki/Edit_distance\n */\n maxEdits: number;\n /**\n * When {@link substitutionsOnly} is set to false\n * Levenshtein distance is used as edit distance (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used as edit distance (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n substitutionsOnly: boolean;\n /**\n * Single character in {@link reference} that will labelColumn any\n * single character in searched text.\n */\n wildcard?: string;\n};\n\n/** All PlTableFilters string filter entries */\nexport type PlTableFilterString =\n | PlTableFilterCommon\n | PlTableFilterStringEquals\n | PlTableFilterStringNotEquals\n | PlTableFilterStringContains\n | PlTableFilterStringDoesNotContain\n | PlTableFilterStringMatches\n | PlTableFilterStringDoesNotMatch\n | PlTableFilterStringContainsFuzzyMatch;\n/** All types of PlTableFilters string filter entries */\nexport type PlTableFilterStringType = PlTableFilterString['type'];\n\n/** All PlTableFilters filter entries */\nexport type PlTableFilter = PlTableFilterNumber | PlTableFilterString;\n/** All types of PlTableFilters filter entries */\nexport type PlTableFilterType = PlTableFilter['type'];\n\nexport type CreatePlDataTableOps = {\n /** Filters for columns and non-partitioned axes */\n filters?: PTableRecordFilter[];\n\n /** Sorting to columns hidden from user */\n sorting?: PTableSorting[];\n\n /**\n * Selects columns for which will be inner-joined to the table.\n *\n * Default behaviour: all columns are considered to be core\n */\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n\n /**\n * Determines how core columns should be joined together:\n * inner - so user will only see records present in all core columns\n * full - so user will only see records present in any of the core columns\n *\n * All non-core columns will be left joined to the table produced by the core\n * columns, in other words records form the pool of non-core columns will only\n * make their way into the final table if core table contains corresponding key.\n *\n * Default: 'full'\n */\n coreJoinType?: 'inner' | 'full';\n};\n\n/** Get all label columns from the result pool */\nexport function getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns({\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n }, { dontWaitAllData: true, overrideLabelAnnotation: false });\n}\n\n/** Get label columns matching the provided columns from the result pool */\nexport function getMatchingLabelColumns(\n columns: PColumnIdAndSpec[],\n allLabelColumns: PColumn<PColumnDataUniversal>[],\n): PColumn<PColumnDataUniversal>[] {\n // split input columns into label and value columns\n const inputLabelColumns: typeof columns = [];\n const inputValueColumns: typeof columns = [];\n for (const column of columns) {\n if (isLabelColumn(column.spec)) {\n inputLabelColumns.push(column);\n } else {\n inputValueColumns.push(column);\n }\n }\n\n // collect distinct axes of value columns\n const unlabeledAxes: AxisId[] = [];\n for (const column of inputValueColumns) {\n for (const axis of column.spec.axesSpec) {\n const axisId = getAxisId(axis);\n if (!unlabeledAxes.some((id) => matchAxisId(id, axisId))) {\n unlabeledAxes.push(axisId);\n }\n }\n }\n\n // remove axes matched by input label columns\n for (const labelColumn of inputLabelColumns) {\n const labelAxisId = getAxisId(labelColumn.spec.axesSpec[0]);\n const labelMatch = unlabeledAxes.findIndex((axisId) => matchAxisId(axisId, labelAxisId));\n if (labelMatch !== -1) {\n unlabeledAxes.splice(labelMatch, 1);\n }\n }\n\n // warning: changing this id will break backward compatibility\n const colId = (id: PObjectId, domain?: Record<string, string>): PObjectId => {\n let wid = id.toString();\n if (domain) {\n for (const k in domain) {\n wid += k;\n wid += domain[k];\n }\n }\n return wid as PObjectId;\n };\n\n // search label columns for unmatched axes\n const labelColumns: typeof allLabelColumns = [];\n for (const labelColumn of allLabelColumns) {\n const labelAxis = labelColumn.spec.axesSpec[0];\n const labelAxisId = getAxisId(labelAxis);\n const labelMatch = unlabeledAxes.findIndex((axisId) => matchAxisId(axisId, labelAxisId));\n if (labelMatch !== -1) {\n const axisId = unlabeledAxes[labelMatch];\n const dataDomainLen = Object.keys(axisId.domain ?? {}).length;\n const labelDomainLen = Object.keys(labelAxis.domain ?? {}).length;\n if (dataDomainLen > labelDomainLen) {\n labelColumns.push({\n id: colId(labelColumn.id, axisId.domain),\n spec: {\n ...labelColumn.spec,\n axesSpec: [{ ...axisId, annotations: labelAxis.annotations }],\n },\n data: labelColumn.data,\n });\n } else {\n labelColumns.push(labelColumn);\n }\n unlabeledAxes.splice(labelMatch, 1);\n }\n }\n return labelColumns;\n}\n\nfunction createPTableDef(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: 'inner' | 'full';\n partitionFilters: PTableRecordSingleValueFilterV2[];\n filters: PTableRecordSingleValueFilterV2[];\n sorting: PTableSorting[];\n coreColumnPredicate?: ((spec: PColumnIdAndSpec) => boolean);\n}): PTableDef<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (params.coreColumnPredicate) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return {\n src: {\n type: 'outer',\n primary: {\n type: params.coreJoinType,\n entries: coreColumns.map((c) => ({ type: 'column', column: c })),\n },\n secondary: secondaryColumns.map((c) => ({ type: 'column', column: c })),\n },\n partitionFilters: params.partitionFilters,\n filters: params.filters,\n sorting: params.sorting,\n };\n}\n\n/** PlAgDataTable model */\nexport type PlDataTableModel = {\n /** DataSource identifier for state management */\n sourceId: string | null;\n /** p-table including all columns, used to show the full specification of the table */\n fullTableHandle: PTableHandle;\n /** p-table including only visible columns, used to get the data */\n visibleTableHandle: PTableHandle;\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/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: PColumn<PColumnDataUniversal>[],\n tableState: PlDataTableStateV2 | undefined,\n ops?: CreatePlDataTableOps,\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map((v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n });\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: 'axis', id: a } satisfies PTableColumnIdAxis)),\n ...fullColumns.map((c) => ({ type: 'column', id: c.id } satisfies PTableColumnIdColumn)),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: PTableColumnId): boolean => fullColumnsIdsSet.has(canonicalizeJson<PTableColumnId>(id));\n\n const coreJoinType = ops?.coreJoinType ?? 'full';\n const partitionFilters: PTableRecordSingleValueFilterV2[]\n = tableStateNormalized.pTableParams.partitionFilters\n .filter((f) => {\n const valid = isValidColumnId(f.column);\n if (!valid) ctx.logWarn(`Partition filter ${JSON.stringify(f)} does not match provided columns, skipping`);\n return valid;\n });\n const filters: PTableRecordSingleValueFilterV2[]\n = uniqueBy(\n [...tableStateNormalized.pTableParams.filters, ...(ops?.filters ?? [])],\n (f) => canonicalizeJson<PTableColumnId>(f.column),\n ).filter((f) => {\n const valid = isValidColumnId(f.column);\n if (!valid) ctx.logWarn(`Filter ${JSON.stringify(f)} does not match provided columns, skipping`);\n return valid;\n });\n const sorting: PTableSorting[]\n = uniqueBy(\n [...tableStateNormalized.pTableParams.sorting, ...(ops?.sorting ?? [])],\n (s) => canonicalizeJson<PTableColumnId>(s.column),\n ).filter((s) => {\n const valid = isValidColumnId(s.column);\n if (!valid) ctx.logWarn(`Sorting ${JSON.stringify(s)} does not match provided columns, skipping`);\n return valid;\n });\n\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n partitionFilters,\n filters,\n sorting,\n coreColumnPredicate: ops?.coreColumnPredicate,\n });\n const fullHandle = ctx.createPTable(fullDef);\n if (!fullHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(((): 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\n .filter((c) => isColumnOptional(c.spec))\n .map((c) => c.id);\n })());\n\n // Preserve linker columns\n columns\n .filter((c) => isLinkerColumn(c.spec))\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = ops?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) => coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : []);\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Filters decrease the number of result rows, sorting changes the order of result rows\n [...partitionFilters.map((f) => f.column), ...filters.map((f) => f.column), ...sorting.map((s) => s.column)]\n .filter((c): c is PTableColumnIdColumn => c.type === 'column')\n .forEach((c) => hiddenColumns.delete(c.id));\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(visibleColumns.map(getColumnIdAndSpec), allLabelColumns);\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n partitionFilters,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTable(visibleDef);\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n\n/** Create sheet entries for PlDataTable */\nexport function createPlDataTableSheet<A, U>(\n ctx: RenderCtxBase<A, U>,\n axis: AxisSpec,\n values: (string | number)[],\n): PlDataTableSheet {\n const labels = ctx.resultPool.findLabels(axis);\n return {\n axis,\n options: values.map((v) => ({\n value: v,\n label: labels?.[v] ?? v.toString(),\n })),\n defaultValue: values[0],\n };\n}\n"],"names":["PColumnCollection","PColumnName","isLabelColumn","getAxisId","matchAxisId","getColumnIdAndSpec","readAnnotation","Annotation","deriveLabels","identity","uniqueBy","canonicalizeJson","isLinkerColumn","allPColumnsReady"],"mappings":"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"}
1
+ {"version":3,"file":"PlDataTable.cjs","sources":["../../src/components/PlDataTable.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpec,\n CanonicalizedJson,\n DataInfo,\n ListOptionBase,\n PColumn,\n PColumnIdAndSpec,\n PColumnValues,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableColumnSpec,\n PTableDef,\n PTableHandle,\n PTableRecordFilter,\n PTableRecordSingleValueFilterV2,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLabelColumn,\n isLinkerColumn,\n matchAxisId,\n PColumnName,\n readAnnotation,\n uniqueBy,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n TreeNodeAccessor,\n} from \"../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../render\";\nimport { identity } from \"es-toolkit\";\n\nexport type PlTableColumnId = {\n /** Original column spec */\n source: PTableColumnSpec;\n /** Column spec with labeled axes replaced by label columns */\n labeled: PTableColumnSpec;\n};\n\nexport type PlTableColumnIdJson = CanonicalizedJson<PlTableColumnId>;\n\nexport type PlDataTableGridStateCore = {\n /** Includes column ordering */\n columnOrder?: {\n /** All colIds in order */\n orderedColIds: PlTableColumnIdJson[];\n };\n /** Includes current sort columns and direction */\n sort?: {\n /** Sorted columns and directions in order */\n sortModel: {\n /** Column Id to apply the sort to. */\n colId: PlTableColumnIdJson;\n /** Sort direction */\n sort: \"asc\" | \"desc\";\n }[];\n };\n /** Includes column visibility */\n columnVisibility?: {\n /** All colIds which were hidden */\n hiddenColIds: PlTableColumnIdJson[];\n };\n};\n\nexport type PlDataTableSheet = {\n /** spec of the axis to use */\n axis: AxisSpec;\n /** options to show in the filter dropdown */\n options: ListOptionBase<string | number>[];\n /** default (selected) value */\n defaultValue?: string | number;\n};\n\nexport type PlDataTableSheetState = {\n /** id of the axis */\n axisId: AxisId;\n /** selected value */\n value: string | number;\n};\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n // Normalized state\n | PlDataTableStateV2Normalized;\n\nexport type PlDataTableStateV2CacheEntry = {\n /** DataSource identifier for state management */\n sourceId: string;\n /** Internal ag-grid state */\n gridState: PlDataTableGridStateCore;\n /** Sheets state */\n sheetsState: PlDataTableSheetState[];\n /** Filters state */\n filtersState: PlDataTableFilterState[];\n};\n\nexport type PTableParamsV2 =\n | {\n sourceId: null;\n hiddenColIds: null;\n partitionFilters: [];\n filters: [];\n sorting: [];\n }\n | {\n sourceId: string;\n hiddenColIds: PObjectId[] | null;\n partitionFilters: PTableRecordFilter[];\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n\nexport type PlDataTableStateV2Normalized = {\n /** Version for upgrades */\n version: 4;\n /** Internal states, LRU cache for 5 sourceId-s */\n stateCache: PlDataTableStateV2CacheEntry[];\n /** PTable params derived from the cache state for the current sourceId */\n pTableParams: PTableParamsV2;\n};\n\nexport function makeDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n partitionFilters: [],\n filters: [],\n sorting: [],\n };\n}\n\n/** Create default PlDataTableStateV2 */\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 4,\n stateCache: [],\n pTableParams: makeDefaultPTableParams(),\n };\n}\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: makeDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n return state;\n}\n\nexport type PlDataTableFilterState = {\n id: PTableColumnId;\n alphabetic: boolean;\n filter: null | {\n value: PlTableFilter;\n disabled: boolean;\n };\n};\n\n/** PlTableFilters filter entry */\nexport type PlTableFilterIsNotNA = {\n /** Predicate type */\n type: \"isNotNA\";\n};\n\n/** PlTableFilters filter entry */\nexport type PlTableFilterIsNA = {\n /** Predicate type */\n type: \"isNA\";\n};\n\n/** PlTableFilters filter entries applicable to both string and number values */\nexport type PlTableFilterCommon = PlTableFilterIsNotNA | PlTableFilterIsNA;\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberEquals = {\n /** Predicate type */\n type: \"number_equals\";\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberNotEquals = {\n /** Predicate type */\n type: \"number_notEquals\";\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberGreaterThan = {\n /** Predicate type */\n type: \"number_greaterThan\";\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberGreaterThanOrEqualTo = {\n /** Predicate type */\n type: \"number_greaterThanOrEqualTo\";\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberLessThan = {\n /** Predicate type */\n type: \"number_lessThan\";\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberLessThanOrEqualTo = {\n /** Predicate type */\n type: \"number_lessThanOrEqualTo\";\n /** Reference value */\n reference: number;\n};\n\n/** PlTableFilters numeric filter entry */\nexport type PlTableFilterNumberBetween = {\n /** Predicate type */\n type: \"number_between\";\n /** Reference value for the lower bound */\n lowerBound: number;\n /** Defines whether values equal to lower bound reference value should be matched */\n includeLowerBound: boolean;\n /** Reference value for the upper bound */\n upperBound: number;\n /** Defines whether values equal to upper bound reference value should be matched */\n includeUpperBound: boolean;\n};\n\n/** All PlTableFilters numeric filter entries */\nexport type PlTableFilterNumber =\n | PlTableFilterCommon\n | PlTableFilterNumberEquals\n | PlTableFilterNumberNotEquals\n | PlTableFilterNumberGreaterThan\n | PlTableFilterNumberGreaterThanOrEqualTo\n | PlTableFilterNumberLessThan\n | PlTableFilterNumberLessThanOrEqualTo\n | PlTableFilterNumberBetween;\n/** All types of PlTableFilters numeric filter entries */\nexport type PlTableFilterNumberType = PlTableFilterNumber[\"type\"];\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringEquals = {\n /** Predicate type */\n type: \"string_equals\";\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringNotEquals = {\n /** Predicate type */\n type: \"string_notEquals\";\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringContains = {\n /** Predicate type */\n type: \"string_contains\";\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringDoesNotContain = {\n /** Predicate type */\n type: \"string_doesNotContain\";\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringMatches = {\n /** Predicate type */\n type: \"string_matches\";\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringDoesNotMatch = {\n /** Predicate type */\n type: \"string_doesNotMatch\";\n /** Reference value */\n reference: string;\n};\n\n/** PlTableFilters string filter entry */\nexport type PlTableFilterStringContainsFuzzyMatch = {\n /** Predicate type */\n type: \"string_containsFuzzyMatch\";\n /** Reference value */\n reference: string;\n /**\n * Maximum acceptable edit distance between reference value and matched substring\n * @see https://en.wikipedia.org/wiki/Edit_distance\n */\n maxEdits: number;\n /**\n * When {@link substitutionsOnly} is set to false\n * Levenshtein distance is used as edit distance (substitutions and indels)\n * @see https://en.wikipedia.org/wiki/Levenshtein_distance\n * When {@link substitutionsOnly} is set to true\n * Hamming distance is used as edit distance (substitutions only)\n * @see https://en.wikipedia.org/wiki/Hamming_distance\n */\n substitutionsOnly: boolean;\n /**\n * Single character in {@link reference} that will labelColumn any\n * single character in searched text.\n */\n wildcard?: string;\n};\n\n/** All PlTableFilters string filter entries */\nexport type PlTableFilterString =\n | PlTableFilterCommon\n | PlTableFilterStringEquals\n | PlTableFilterStringNotEquals\n | PlTableFilterStringContains\n | PlTableFilterStringDoesNotContain\n | PlTableFilterStringMatches\n | PlTableFilterStringDoesNotMatch\n | PlTableFilterStringContainsFuzzyMatch;\n/** All types of PlTableFilters string filter entries */\nexport type PlTableFilterStringType = PlTableFilterString[\"type\"];\n\n/** All PlTableFilters filter entries */\nexport type PlTableFilter = PlTableFilterNumber | PlTableFilterString;\n/** All types of PlTableFilters filter entries */\nexport type PlTableFilterType = PlTableFilter[\"type\"];\n\nexport type CreatePlDataTableOps = {\n /** Filters for columns and non-partitioned axes */\n filters?: PTableRecordFilter[];\n\n /** Sorting to columns hidden from user */\n sorting?: PTableSorting[];\n\n /**\n * Selects columns for which will be inner-joined to the table.\n *\n * Default behaviour: all columns are considered to be core\n */\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n\n /**\n * Determines how core columns should be joined together:\n * inner - so user will only see records present in all core columns\n * full - so user will only see records present in any of the core columns\n *\n * All non-core columns will be left joined to the table produced by the core\n * columns, in other words records form the pool of non-core columns will only\n * make their way into the final table if core table contains corresponding key.\n *\n * Default: 'full'\n */\n coreJoinType?: \"inner\" | \"full\";\n};\n\n/** Get all label columns from the result pool */\nexport function getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n\n/** Get label columns matching the provided columns from the result pool */\nexport function getMatchingLabelColumns(\n columns: PColumnIdAndSpec[],\n allLabelColumns: PColumn<PColumnDataUniversal>[],\n): PColumn<PColumnDataUniversal>[] {\n // split input columns into label and value columns\n const inputLabelColumns: typeof columns = [];\n const inputValueColumns: typeof columns = [];\n for (const column of columns) {\n if (isLabelColumn(column.spec)) {\n inputLabelColumns.push(column);\n } else {\n inputValueColumns.push(column);\n }\n }\n\n // collect distinct axes of value columns\n const unlabeledAxes: AxisId[] = [];\n for (const column of inputValueColumns) {\n for (const axis of column.spec.axesSpec) {\n const axisId = getAxisId(axis);\n if (!unlabeledAxes.some((id) => matchAxisId(id, axisId))) {\n unlabeledAxes.push(axisId);\n }\n }\n }\n\n // remove axes matched by input label columns\n for (const labelColumn of inputLabelColumns) {\n const labelAxisId = getAxisId(labelColumn.spec.axesSpec[0]);\n const labelMatch = unlabeledAxes.findIndex((axisId) => matchAxisId(axisId, labelAxisId));\n if (labelMatch !== -1) {\n unlabeledAxes.splice(labelMatch, 1);\n }\n }\n\n // warning: changing this id will break backward compatibility\n const colId = (id: PObjectId, domain?: Record<string, string>): PObjectId => {\n let wid = id.toString();\n if (domain) {\n for (const k in domain) {\n wid += k;\n wid += domain[k];\n }\n }\n return wid as PObjectId;\n };\n\n // search label columns for unmatched axes\n const labelColumns: typeof allLabelColumns = [];\n for (const labelColumn of allLabelColumns) {\n const labelAxis = labelColumn.spec.axesSpec[0];\n const labelAxisId = getAxisId(labelAxis);\n const labelMatch = unlabeledAxes.findIndex((axisId) => matchAxisId(axisId, labelAxisId));\n if (labelMatch !== -1) {\n const axisId = unlabeledAxes[labelMatch];\n const dataDomainLen = Object.keys(axisId.domain ?? {}).length;\n const labelDomainLen = Object.keys(labelAxis.domain ?? {}).length;\n if (dataDomainLen > labelDomainLen) {\n labelColumns.push({\n id: colId(labelColumn.id, axisId.domain),\n spec: {\n ...labelColumn.spec,\n axesSpec: [{ ...axisId, annotations: labelAxis.annotations }],\n },\n data: labelColumn.data,\n });\n } else {\n labelColumns.push(labelColumn);\n }\n unlabeledAxes.splice(labelMatch, 1);\n }\n }\n return labelColumns;\n}\n\nfunction createPTableDef(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n partitionFilters: PTableRecordSingleValueFilterV2[];\n filters: PTableRecordSingleValueFilterV2[];\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDef<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (params.coreColumnPredicate) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return {\n src: {\n type: \"outer\",\n primary: {\n type: params.coreJoinType,\n entries: coreColumns.map((c) => ({ type: \"column\", column: c })),\n },\n secondary: secondaryColumns.map((c) => ({ type: \"column\", column: c })),\n },\n partitionFilters: params.partitionFilters,\n filters: params.filters,\n sorting: params.sorting,\n };\n}\n\n/** PlAgDataTable model */\nexport type PlDataTableModel = {\n /** DataSource identifier for state management */\n sourceId: string | null;\n /** p-table including all columns, used to show the full specification of the table */\n fullTableHandle: PTableHandle;\n /** p-table including only visible columns, used to get the data */\n visibleTableHandle: PTableHandle;\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/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: PColumn<PColumnDataUniversal>[],\n tableState: PlDataTableStateV2 | undefined,\n ops?: CreatePlDataTableOps,\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: PTableColumnId): boolean =>\n fullColumnsIdsSet.has(canonicalizeJson<PTableColumnId>(id));\n\n const coreJoinType = ops?.coreJoinType ?? \"full\";\n const partitionFilters: PTableRecordSingleValueFilterV2[] =\n tableStateNormalized.pTableParams.partitionFilters.filter((f) => {\n const valid = isValidColumnId(f.column);\n if (!valid)\n ctx.logWarn(\n `Partition filter ${JSON.stringify(f)} does not match provided columns, skipping`,\n );\n return valid;\n });\n const filters: PTableRecordSingleValueFilterV2[] = uniqueBy(\n [...tableStateNormalized.pTableParams.filters, ...(ops?.filters ?? [])],\n (f) => canonicalizeJson<PTableColumnId>(f.column),\n ).filter((f) => {\n const valid = isValidColumnId(f.column);\n if (!valid)\n ctx.logWarn(`Filter ${JSON.stringify(f)} does not match provided columns, skipping`);\n return valid;\n });\n const sorting: PTableSorting[] = uniqueBy(\n [...tableStateNormalized.pTableParams.sorting, ...(ops?.sorting ?? [])],\n (s) => canonicalizeJson<PTableColumnId>(s.column),\n ).filter((s) => {\n const valid = isValidColumnId(s.column);\n if (!valid)\n ctx.logWarn(`Sorting ${JSON.stringify(s)} does not match provided columns, skipping`);\n return valid;\n });\n\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n partitionFilters,\n filters,\n sorting,\n coreColumnPredicate: ops?.coreColumnPredicate,\n });\n const fullHandle = ctx.createPTable(fullDef);\n if (!fullHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) 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 = ops?.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 // Filters decrease the number of result rows, sorting changes the order of result rows\n [\n ...partitionFilters.map((f) => f.column),\n ...filters.map((f) => f.column),\n ...sorting.map((s) => s.column),\n ]\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n partitionFilters,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTable(visibleDef);\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n\n/** Create sheet entries for PlDataTable */\nexport function createPlDataTableSheet<A, U>(\n ctx: RenderCtxBase<A, U>,\n axis: AxisSpec,\n values: (string | number)[],\n): PlDataTableSheet {\n const labels = ctx.resultPool.findLabels(axis);\n return {\n axis,\n options: values.map((v) => ({\n value: v,\n label: labels?.[v] ?? v.toString(),\n })),\n defaultValue: values[0],\n };\n}\n"],"names":["PColumnCollection","PColumnName","isLabelColumn","getAxisId","matchAxisId","getColumnIdAndSpec","readAnnotation","Annotation","deriveLabels","identity","uniqueBy","canonicalizeJson","isLinkerColumn","allPColumnsReady"],"mappings":"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"}