@platforma-sdk/model 1.59.3 → 1.60.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 (140) hide show
  1. package/dist/block_storage.cjs.map +1 -1
  2. package/dist/block_storage.d.ts +1 -11
  3. package/dist/block_storage.js.map +1 -1
  4. package/dist/block_storage_callbacks.cjs.map +1 -1
  5. package/dist/block_storage_callbacks.js.map +1 -1
  6. package/dist/columns/column_collection_builder.cjs +215 -0
  7. package/dist/columns/column_collection_builder.cjs.map +1 -0
  8. package/dist/columns/column_collection_builder.d.ts +112 -0
  9. package/dist/columns/column_collection_builder.js +214 -0
  10. package/dist/columns/column_collection_builder.js.map +1 -0
  11. package/dist/columns/column_selector.cjs +122 -0
  12. package/dist/columns/column_selector.cjs.map +1 -0
  13. package/dist/columns/column_selector.d.ts +41 -0
  14. package/dist/columns/column_selector.js +118 -0
  15. package/dist/columns/column_selector.js.map +1 -0
  16. package/dist/columns/column_snapshot.cjs +20 -0
  17. package/dist/columns/column_snapshot.cjs.map +1 -0
  18. package/dist/columns/column_snapshot.d.ts +39 -0
  19. package/dist/columns/column_snapshot.js +18 -0
  20. package/dist/columns/column_snapshot.js.map +1 -0
  21. package/dist/columns/column_snapshot_provider.cjs +112 -0
  22. package/dist/columns/column_snapshot_provider.cjs.map +1 -0
  23. package/dist/columns/column_snapshot_provider.d.ts +73 -0
  24. package/dist/columns/column_snapshot_provider.js +107 -0
  25. package/dist/columns/column_snapshot_provider.js.map +1 -0
  26. package/dist/columns/ctx_column_sources.cjs +84 -0
  27. package/dist/columns/ctx_column_sources.cjs.map +1 -0
  28. package/dist/columns/ctx_column_sources.d.ts +33 -0
  29. package/dist/columns/ctx_column_sources.js +82 -0
  30. package/dist/columns/ctx_column_sources.js.map +1 -0
  31. package/dist/columns/index.cjs +5 -0
  32. package/dist/columns/index.d.ts +5 -0
  33. package/dist/columns/index.js +5 -0
  34. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +111 -0
  35. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -0
  36. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +25 -0
  37. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +110 -0
  38. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -0
  39. package/dist/components/PlDataTable/{table.cjs → createPlDataTable/createPlDataTableV3.cjs} +54 -54
  40. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -0
  41. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +39 -0
  42. package/dist/components/PlDataTable/{table.js → createPlDataTable/createPlDataTableV3.js} +53 -53
  43. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -0
  44. package/dist/components/PlDataTable/createPlDataTable/index.cjs +12 -0
  45. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -0
  46. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +15 -0
  47. package/dist/components/PlDataTable/createPlDataTable/index.js +12 -0
  48. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -0
  49. package/dist/components/PlDataTable/createPlDataTableSheet.cjs +18 -0
  50. package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -0
  51. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +11 -0
  52. package/dist/components/PlDataTable/createPlDataTableSheet.js +17 -0
  53. package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -0
  54. package/dist/components/PlDataTable/index.cjs +4 -1
  55. package/dist/components/PlDataTable/index.d.ts +5 -2
  56. package/dist/components/PlDataTable/index.js +4 -1
  57. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  58. package/dist/components/PlDataTable/state-migration.d.ts +2 -2
  59. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  60. package/dist/components/PlDataTable/{v4.d.ts → typesV4.d.ts} +2 -2
  61. package/dist/components/PlDataTable/{v5.d.ts → typesV5.d.ts} +2 -2
  62. package/dist/components/index.cjs +4 -1
  63. package/dist/components/index.d.ts +5 -2
  64. package/dist/components/index.js +4 -1
  65. package/dist/index.cjs +44 -16
  66. package/dist/index.d.ts +17 -5
  67. package/dist/index.js +15 -3
  68. package/dist/labels/derive_distinct_labels.cjs +156 -0
  69. package/dist/labels/derive_distinct_labels.cjs.map +1 -0
  70. package/dist/labels/derive_distinct_labels.d.ts +29 -0
  71. package/dist/labels/derive_distinct_labels.js +155 -0
  72. package/dist/labels/derive_distinct_labels.js.map +1 -0
  73. package/dist/labels/index.cjs +2 -0
  74. package/dist/labels/index.d.ts +2 -0
  75. package/dist/labels/index.js +2 -0
  76. package/dist/labels/write_labels_to_specs.cjs +15 -0
  77. package/dist/labels/write_labels_to_specs.cjs.map +1 -0
  78. package/dist/labels/write_labels_to_specs.d.ts +9 -0
  79. package/dist/labels/write_labels_to_specs.js +14 -0
  80. package/dist/labels/write_labels_to_specs.js.map +1 -0
  81. package/dist/package.cjs +1 -1
  82. package/dist/package.js +1 -1
  83. package/dist/render/api.cjs +11 -2
  84. package/dist/render/api.cjs.map +1 -1
  85. package/dist/render/api.d.ts +9 -5
  86. package/dist/render/api.js +12 -3
  87. package/dist/render/api.js.map +1 -1
  88. package/dist/render/index.d.ts +2 -1
  89. package/dist/render/index.js +1 -1
  90. package/dist/render/internal.cjs.map +1 -1
  91. package/dist/render/internal.d.ts +5 -2
  92. package/dist/render/internal.js.map +1 -1
  93. package/dist/render/util/column_collection.cjs +3 -3
  94. package/dist/render/util/column_collection.cjs.map +1 -1
  95. package/dist/render/util/column_collection.d.ts +3 -2
  96. package/dist/render/util/column_collection.js +4 -4
  97. package/dist/render/util/column_collection.js.map +1 -1
  98. package/dist/render/util/index.d.ts +2 -1
  99. package/dist/render/util/index.js +1 -1
  100. package/dist/render/util/label.cjs +7 -134
  101. package/dist/render/util/label.cjs.map +1 -1
  102. package/dist/render/util/label.d.ts +5 -50
  103. package/dist/render/util/label.js +8 -132
  104. package/dist/render/util/label.js.map +1 -1
  105. package/dist/render/util/split_selectors.d.ts +2 -2
  106. package/package.json +9 -7
  107. package/src/block_storage.ts +0 -11
  108. package/src/block_storage_callbacks.ts +1 -1
  109. package/src/columns/column_collection_builder.test.ts +427 -0
  110. package/src/columns/column_collection_builder.ts +455 -0
  111. package/src/columns/column_selector.test.ts +472 -0
  112. package/src/columns/column_selector.ts +212 -0
  113. package/src/columns/column_snapshot.ts +55 -0
  114. package/src/columns/column_snapshot_provider.ts +177 -0
  115. package/src/columns/ctx_column_sources.ts +107 -0
  116. package/src/columns/expand_by_partition.test.ts +289 -0
  117. package/src/columns/expand_by_partition.ts +187 -0
  118. package/src/columns/index.ts +5 -0
  119. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +193 -0
  120. package/src/components/PlDataTable/{table.ts → createPlDataTable/createPlDataTableV3.ts} +134 -70
  121. package/src/components/PlDataTable/createPlDataTable/index.ts +27 -0
  122. package/src/components/PlDataTable/createPlDataTableSheet.ts +20 -0
  123. package/src/components/PlDataTable/index.ts +6 -4
  124. package/src/components/PlDataTable/state-migration.ts +2 -2
  125. package/src/index.ts +2 -1
  126. package/src/labels/derive_distinct_labels.test.ts +461 -0
  127. package/src/labels/derive_distinct_labels.ts +289 -0
  128. package/src/labels/index.ts +2 -0
  129. package/src/labels/write_labels_to_specs.ts +12 -0
  130. package/src/render/api.ts +25 -3
  131. package/src/render/internal.ts +20 -1
  132. package/src/render/util/column_collection.ts +9 -6
  133. package/src/render/util/label.test.ts +1 -1
  134. package/src/render/util/label.ts +19 -235
  135. package/src/render/util/split_selectors.ts +3 -3
  136. package/dist/components/PlDataTable/table.cjs.map +0 -1
  137. package/dist/components/PlDataTable/table.d.ts +0 -30
  138. package/dist/components/PlDataTable/table.js.map +0 -1
  139. /package/src/components/PlDataTable/{v4.ts → typesV4.ts} +0 -0
  140. /package/src/components/PlDataTable/{v5.ts → typesV5.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctx_column_sources.cjs","names":["ResourceTypeName","OutputColumnProvider"],"sources":["../../src/columns/ctx_column_sources.ts"],"sourcesContent":["import type { PColumnSpec, PObjectId } from \"@milaboratories/pl-model-common\";\nimport { TreeNodeAccessor } from \"../render/accessor\";\nimport type { RenderCtxBase, ResultPool } from \"../render\";\nimport type { ColumnSnapshot } from \"./column_snapshot\";\nimport type { ColumnDataStatus } from \"./column_snapshot\";\nimport type { ColumnSnapshotProvider } from \"./column_snapshot_provider\";\nimport { OutputColumnProvider } from \"./column_snapshot_provider\";\nimport { ResourceTypeName } from \"@milaboratories/pl-model-common\";\nimport type { ValueOf } from \"@milaboratories/helpers\";\n\n/**\n * Collect ColumnSnapshotProviders from all render context sources:\n *\n * - **resultPool** — all upstream columns (always included)\n * - **outputs** — PFrame fields from block execution outputs\n * - **prerun** — PFrame fields from prerun/staging results\n *\n * Returns an array of providers suitable for `ColumnCollectionBuilder.addSource()`.\n */\nexport function collectCtxColumnSnapshotProviders<A, U>(\n ctx: RenderCtxBase<A, U>,\n): ColumnSnapshotProvider[] {\n const providers: ColumnSnapshotProvider[] = [];\n\n // ResultPool — all upstream columns\n providers.push(new ResultPoolColumnSnapshotProvider(ctx.resultPool));\n\n // Outputs — each PFrame-like output field becomes a provider\n const outputs = ctx.outputs;\n if (outputs) {\n providers.push(...collectPFrameProviders(outputs));\n }\n\n // Prerun — same treatment as outputs\n const prerun = ctx.prerun;\n if (prerun) {\n providers.push(...collectPFrameProviders(prerun));\n }\n\n return providers;\n}\n\n/**\n * Adapter wrapping ResultPool into the new ColumnSnapshotProvider interface.\n *\n * - `isColumnListComplete()` always returns true — the result pool\n * is a stable snapshot within a single render cycle.\n * - Data status is derived from the underlying TreeNodeAccessor:\n * ready (getIsReadyOrError), computing, or absent (no data resource).\n */\nexport class ResultPoolColumnSnapshotProvider implements ColumnSnapshotProvider {\n constructor(private readonly pool: ResultPool) {}\n\n getAllColumns(): ColumnSnapshot[] {\n const pColumns = this.pool.selectColumns(() => true);\n return pColumns.map((col) => toSnapshot(col.id, col.spec, col.data));\n }\n\n isColumnListComplete(): boolean {\n return true;\n }\n}\n\nfunction toSnapshot(\n id: PObjectId,\n spec: PColumnSpec,\n accessor: TreeNodeAccessor | undefined,\n): ColumnSnapshot {\n if (accessor === undefined) {\n return { id, spec, dataStatus: \"absent\" as ColumnDataStatus, data: undefined };\n }\n const isReady = accessor.getIsReadyOrError();\n return {\n id,\n spec,\n dataStatus: (isReady ? \"ready\" : \"computing\") as ColumnDataStatus,\n data: { get: () => (isReady ? accessor : undefined) },\n };\n}\n\n/**\n * Recursively walk the output tree starting from `accessor`.\n * - If a node's resourceType is PFrame → wrap it as OutputColumnProvider.\n * - If a node's resourceType is StdMap/std/map → recurse into its output fields.\n * - Otherwise → skip (leaf of unknown type).\n */\nfunction collectPFrameProviders(accessor: TreeNodeAccessor): ColumnSnapshotProvider[] {\n const out: ColumnSnapshotProvider[] = [];\n walkTree(accessor, out);\n return out;\n}\n\nfunction walkTree(node: TreeNodeAccessor, out: ColumnSnapshotProvider[]): void {\n const typeName = node.resourceType.name as ValueOf<typeof ResourceTypeName>;\n\n if (typeName === ResourceTypeName.PFrame) {\n out.push(new OutputColumnProvider(node));\n return;\n }\n\n if (typeName === ResourceTypeName.StdMap || typeName === ResourceTypeName.StdMapSlash) {\n for (const field of node.listInputFields()) {\n const child = node.resolve(field);\n if (child) walkTree(child, out);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,SAAgB,kCACd,KAC0B;CAC1B,MAAM,YAAsC,EAAE;AAG9C,WAAU,KAAK,IAAI,iCAAiC,IAAI,WAAW,CAAC;CAGpE,MAAM,UAAU,IAAI;AACpB,KAAI,QACF,WAAU,KAAK,GAAG,uBAAuB,QAAQ,CAAC;CAIpD,MAAM,SAAS,IAAI;AACnB,KAAI,OACF,WAAU,KAAK,GAAG,uBAAuB,OAAO,CAAC;AAGnD,QAAO;;;;;;;;;;AAWT,IAAa,mCAAb,MAAgF;CAC9E,YAAY,AAAiB,MAAkB;EAAlB;;CAE7B,gBAAkC;AAEhC,SADiB,KAAK,KAAK,oBAAoB,KAAK,CACpC,KAAK,QAAQ,WAAW,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;;CAGtE,uBAAgC;AAC9B,SAAO;;;AAIX,SAAS,WACP,IACA,MACA,UACgB;AAChB,KAAI,aAAa,OACf,QAAO;EAAE;EAAI;EAAM,YAAY;EAA8B,MAAM;EAAW;CAEhF,MAAM,UAAU,SAAS,mBAAmB;AAC5C,QAAO;EACL;EACA;EACA,YAAa,UAAU,UAAU;EACjC,MAAM,EAAE,WAAY,UAAU,WAAW,QAAY;EACtD;;;;;;;;AASH,SAAS,uBAAuB,UAAsD;CACpF,MAAM,MAAgC,EAAE;AACxC,UAAS,UAAU,IAAI;AACvB,QAAO;;AAGT,SAAS,SAAS,MAAwB,KAAqC;CAC7E,MAAM,WAAW,KAAK,aAAa;AAEnC,KAAI,aAAaA,iDAAiB,QAAQ;AACxC,MAAI,KAAK,IAAIC,sDAAqB,KAAK,CAAC;AACxC;;AAGF,KAAI,aAAaD,iDAAiB,UAAU,aAAaA,iDAAiB,YACxE,MAAK,MAAM,SAAS,KAAK,iBAAiB,EAAE;EAC1C,MAAM,QAAQ,KAAK,QAAQ,MAAM;AACjC,MAAI,MAAO,UAAS,OAAO,IAAI"}
@@ -0,0 +1,33 @@
1
+ import { RenderCtxBase, ResultPool } from "../render/api.js";
2
+ import "../render/index.js";
3
+ import { ColumnSnapshot } from "./column_snapshot.js";
4
+ import { ColumnSnapshotProvider } from "./column_snapshot_provider.js";
5
+
6
+ //#region src/columns/ctx_column_sources.d.ts
7
+ /**
8
+ * Collect ColumnSnapshotProviders from all render context sources:
9
+ *
10
+ * - **resultPool** — all upstream columns (always included)
11
+ * - **outputs** — PFrame fields from block execution outputs
12
+ * - **prerun** — PFrame fields from prerun/staging results
13
+ *
14
+ * Returns an array of providers suitable for `ColumnCollectionBuilder.addSource()`.
15
+ */
16
+ declare function collectCtxColumnSnapshotProviders<A, U>(ctx: RenderCtxBase<A, U>): ColumnSnapshotProvider[];
17
+ /**
18
+ * Adapter wrapping ResultPool into the new ColumnSnapshotProvider interface.
19
+ *
20
+ * - `isColumnListComplete()` always returns true — the result pool
21
+ * is a stable snapshot within a single render cycle.
22
+ * - Data status is derived from the underlying TreeNodeAccessor:
23
+ * ready (getIsReadyOrError), computing, or absent (no data resource).
24
+ */
25
+ declare class ResultPoolColumnSnapshotProvider implements ColumnSnapshotProvider {
26
+ private readonly pool;
27
+ constructor(pool: ResultPool);
28
+ getAllColumns(): ColumnSnapshot[];
29
+ isColumnListComplete(): boolean;
30
+ }
31
+ //#endregion
32
+ export { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders };
33
+ //# sourceMappingURL=ctx_column_sources.d.ts.map
@@ -0,0 +1,82 @@
1
+ import { OutputColumnProvider } from "./column_snapshot_provider.js";
2
+ import { ResourceTypeName } from "@milaboratories/pl-model-common";
3
+
4
+ //#region src/columns/ctx_column_sources.ts
5
+ /**
6
+ * Collect ColumnSnapshotProviders from all render context sources:
7
+ *
8
+ * - **resultPool** — all upstream columns (always included)
9
+ * - **outputs** — PFrame fields from block execution outputs
10
+ * - **prerun** — PFrame fields from prerun/staging results
11
+ *
12
+ * Returns an array of providers suitable for `ColumnCollectionBuilder.addSource()`.
13
+ */
14
+ function collectCtxColumnSnapshotProviders(ctx) {
15
+ const providers = [];
16
+ providers.push(new ResultPoolColumnSnapshotProvider(ctx.resultPool));
17
+ const outputs = ctx.outputs;
18
+ if (outputs) providers.push(...collectPFrameProviders(outputs));
19
+ const prerun = ctx.prerun;
20
+ if (prerun) providers.push(...collectPFrameProviders(prerun));
21
+ return providers;
22
+ }
23
+ /**
24
+ * Adapter wrapping ResultPool into the new ColumnSnapshotProvider interface.
25
+ *
26
+ * - `isColumnListComplete()` always returns true — the result pool
27
+ * is a stable snapshot within a single render cycle.
28
+ * - Data status is derived from the underlying TreeNodeAccessor:
29
+ * ready (getIsReadyOrError), computing, or absent (no data resource).
30
+ */
31
+ var ResultPoolColumnSnapshotProvider = class {
32
+ constructor(pool) {
33
+ this.pool = pool;
34
+ }
35
+ getAllColumns() {
36
+ return this.pool.selectColumns(() => true).map((col) => toSnapshot(col.id, col.spec, col.data));
37
+ }
38
+ isColumnListComplete() {
39
+ return true;
40
+ }
41
+ };
42
+ function toSnapshot(id, spec, accessor) {
43
+ if (accessor === void 0) return {
44
+ id,
45
+ spec,
46
+ dataStatus: "absent",
47
+ data: void 0
48
+ };
49
+ const isReady = accessor.getIsReadyOrError();
50
+ return {
51
+ id,
52
+ spec,
53
+ dataStatus: isReady ? "ready" : "computing",
54
+ data: { get: () => isReady ? accessor : void 0 }
55
+ };
56
+ }
57
+ /**
58
+ * Recursively walk the output tree starting from `accessor`.
59
+ * - If a node's resourceType is PFrame → wrap it as OutputColumnProvider.
60
+ * - If a node's resourceType is StdMap/std/map → recurse into its output fields.
61
+ * - Otherwise → skip (leaf of unknown type).
62
+ */
63
+ function collectPFrameProviders(accessor) {
64
+ const out = [];
65
+ walkTree(accessor, out);
66
+ return out;
67
+ }
68
+ function walkTree(node, out) {
69
+ const typeName = node.resourceType.name;
70
+ if (typeName === ResourceTypeName.PFrame) {
71
+ out.push(new OutputColumnProvider(node));
72
+ return;
73
+ }
74
+ if (typeName === ResourceTypeName.StdMap || typeName === ResourceTypeName.StdMapSlash) for (const field of node.listInputFields()) {
75
+ const child = node.resolve(field);
76
+ if (child) walkTree(child, out);
77
+ }
78
+ }
79
+
80
+ //#endregion
81
+ export { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders };
82
+ //# sourceMappingURL=ctx_column_sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctx_column_sources.js","names":[],"sources":["../../src/columns/ctx_column_sources.ts"],"sourcesContent":["import type { PColumnSpec, PObjectId } from \"@milaboratories/pl-model-common\";\nimport { TreeNodeAccessor } from \"../render/accessor\";\nimport type { RenderCtxBase, ResultPool } from \"../render\";\nimport type { ColumnSnapshot } from \"./column_snapshot\";\nimport type { ColumnDataStatus } from \"./column_snapshot\";\nimport type { ColumnSnapshotProvider } from \"./column_snapshot_provider\";\nimport { OutputColumnProvider } from \"./column_snapshot_provider\";\nimport { ResourceTypeName } from \"@milaboratories/pl-model-common\";\nimport type { ValueOf } from \"@milaboratories/helpers\";\n\n/**\n * Collect ColumnSnapshotProviders from all render context sources:\n *\n * - **resultPool** — all upstream columns (always included)\n * - **outputs** — PFrame fields from block execution outputs\n * - **prerun** — PFrame fields from prerun/staging results\n *\n * Returns an array of providers suitable for `ColumnCollectionBuilder.addSource()`.\n */\nexport function collectCtxColumnSnapshotProviders<A, U>(\n ctx: RenderCtxBase<A, U>,\n): ColumnSnapshotProvider[] {\n const providers: ColumnSnapshotProvider[] = [];\n\n // ResultPool — all upstream columns\n providers.push(new ResultPoolColumnSnapshotProvider(ctx.resultPool));\n\n // Outputs — each PFrame-like output field becomes a provider\n const outputs = ctx.outputs;\n if (outputs) {\n providers.push(...collectPFrameProviders(outputs));\n }\n\n // Prerun — same treatment as outputs\n const prerun = ctx.prerun;\n if (prerun) {\n providers.push(...collectPFrameProviders(prerun));\n }\n\n return providers;\n}\n\n/**\n * Adapter wrapping ResultPool into the new ColumnSnapshotProvider interface.\n *\n * - `isColumnListComplete()` always returns true — the result pool\n * is a stable snapshot within a single render cycle.\n * - Data status is derived from the underlying TreeNodeAccessor:\n * ready (getIsReadyOrError), computing, or absent (no data resource).\n */\nexport class ResultPoolColumnSnapshotProvider implements ColumnSnapshotProvider {\n constructor(private readonly pool: ResultPool) {}\n\n getAllColumns(): ColumnSnapshot[] {\n const pColumns = this.pool.selectColumns(() => true);\n return pColumns.map((col) => toSnapshot(col.id, col.spec, col.data));\n }\n\n isColumnListComplete(): boolean {\n return true;\n }\n}\n\nfunction toSnapshot(\n id: PObjectId,\n spec: PColumnSpec,\n accessor: TreeNodeAccessor | undefined,\n): ColumnSnapshot {\n if (accessor === undefined) {\n return { id, spec, dataStatus: \"absent\" as ColumnDataStatus, data: undefined };\n }\n const isReady = accessor.getIsReadyOrError();\n return {\n id,\n spec,\n dataStatus: (isReady ? \"ready\" : \"computing\") as ColumnDataStatus,\n data: { get: () => (isReady ? accessor : undefined) },\n };\n}\n\n/**\n * Recursively walk the output tree starting from `accessor`.\n * - If a node's resourceType is PFrame → wrap it as OutputColumnProvider.\n * - If a node's resourceType is StdMap/std/map → recurse into its output fields.\n * - Otherwise → skip (leaf of unknown type).\n */\nfunction collectPFrameProviders(accessor: TreeNodeAccessor): ColumnSnapshotProvider[] {\n const out: ColumnSnapshotProvider[] = [];\n walkTree(accessor, out);\n return out;\n}\n\nfunction walkTree(node: TreeNodeAccessor, out: ColumnSnapshotProvider[]): void {\n const typeName = node.resourceType.name as ValueOf<typeof ResourceTypeName>;\n\n if (typeName === ResourceTypeName.PFrame) {\n out.push(new OutputColumnProvider(node));\n return;\n }\n\n if (typeName === ResourceTypeName.StdMap || typeName === ResourceTypeName.StdMapSlash) {\n for (const field of node.listInputFields()) {\n const child = node.resolve(field);\n if (child) walkTree(child, out);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAmBA,SAAgB,kCACd,KAC0B;CAC1B,MAAM,YAAsC,EAAE;AAG9C,WAAU,KAAK,IAAI,iCAAiC,IAAI,WAAW,CAAC;CAGpE,MAAM,UAAU,IAAI;AACpB,KAAI,QACF,WAAU,KAAK,GAAG,uBAAuB,QAAQ,CAAC;CAIpD,MAAM,SAAS,IAAI;AACnB,KAAI,OACF,WAAU,KAAK,GAAG,uBAAuB,OAAO,CAAC;AAGnD,QAAO;;;;;;;;;;AAWT,IAAa,mCAAb,MAAgF;CAC9E,YAAY,AAAiB,MAAkB;EAAlB;;CAE7B,gBAAkC;AAEhC,SADiB,KAAK,KAAK,oBAAoB,KAAK,CACpC,KAAK,QAAQ,WAAW,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;;CAGtE,uBAAgC;AAC9B,SAAO;;;AAIX,SAAS,WACP,IACA,MACA,UACgB;AAChB,KAAI,aAAa,OACf,QAAO;EAAE;EAAI;EAAM,YAAY;EAA8B,MAAM;EAAW;CAEhF,MAAM,UAAU,SAAS,mBAAmB;AAC5C,QAAO;EACL;EACA;EACA,YAAa,UAAU,UAAU;EACjC,MAAM,EAAE,WAAY,UAAU,WAAW,QAAY;EACtD;;;;;;;;AASH,SAAS,uBAAuB,UAAsD;CACpF,MAAM,MAAgC,EAAE;AACxC,UAAS,UAAU,IAAI;AACvB,QAAO;;AAGT,SAAS,SAAS,MAAwB,KAAqC;CAC7E,MAAM,WAAW,KAAK,aAAa;AAEnC,KAAI,aAAa,iBAAiB,QAAQ;AACxC,MAAI,KAAK,IAAI,qBAAqB,KAAK,CAAC;AACxC;;AAGF,KAAI,aAAa,iBAAiB,UAAU,aAAa,iBAAiB,YACxE,MAAK,MAAM,SAAS,KAAK,iBAAiB,EAAE;EAC1C,MAAM,QAAQ,KAAK,QAAQ,MAAM;AACjC,MAAI,MAAO,UAAS,OAAO,IAAI"}
@@ -0,0 +1,5 @@
1
+ const require_column_snapshot = require('./column_snapshot.cjs');
2
+ const require_column_snapshot_provider = require('./column_snapshot_provider.cjs');
3
+ const require_column_selector = require('./column_selector.cjs');
4
+ const require_column_collection_builder = require('./column_collection_builder.cjs');
5
+ const require_ctx_column_sources = require('./ctx_column_sources.cjs');
@@ -0,0 +1,5 @@
1
+ import { ColumnData, ColumnDataStatus, ColumnSnapshot, createColumnSnapshot, createReadyColumnData } from "./column_snapshot.js";
2
+ import { ArrayColumnProvider, ColumnSnapshotProvider, ColumnSource, OutputColumnProvider, OutputColumnProviderOpts, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./column_snapshot_provider.js";
3
+ import { ColumnSelectorInput, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, StringMatcher, columnSelectorsToPredicate, matchColumn, matchColumnSelectors, normalizeSelectors } from "./column_selector.js";
4
+ import { AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, BuildOptions, ColumnCollection, ColumnCollectionBuilder, ColumnMatch, FindColumnsOptions, MatchQualifications, MatchVariant, MatchingMode } from "./column_collection_builder.js";
5
+ import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./ctx_column_sources.js";
@@ -0,0 +1,5 @@
1
+ import { createColumnSnapshot, createReadyColumnData } from "./column_snapshot.js";
2
+ import { ArrayColumnProvider, OutputColumnProvider, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./column_snapshot_provider.js";
3
+ import { columnSelectorsToPredicate, matchColumn, matchColumnSelectors, normalizeSelectors } from "./column_selector.js";
4
+ import { ColumnCollectionBuilder } from "./column_collection_builder.js";
5
+ import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./ctx_column_sources.js";
@@ -0,0 +1,111 @@
1
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
2
+ const require_label = require('../../../render/util/label.cjs');
3
+ const require_pcolumn_data = require('../../../render/util/pcolumn_data.cjs');
4
+ require('../../../render/index.cjs');
5
+ const require_traverse = require('../../../filters/traverse.cjs');
6
+ const require_state_migration = require('../state-migration.cjs');
7
+ const require_labels = require('../labels.cjs');
8
+ const require_createPlDataTableV3 = require('./createPlDataTableV3.cjs');
9
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
10
+ let es_toolkit_compat = require("es-toolkit/compat");
11
+ let es_toolkit = require("es-toolkit");
12
+
13
+ //#region src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts
14
+ /**
15
+ * Create p-table spec and handle given ui table state
16
+ *
17
+ * @param ctx context
18
+ * @param columns column list
19
+ * @param tableState table ui state
20
+ * @returns PlAgDataTableV2 table source
21
+ */
22
+ function createPlDataTableV2(ctx, columns, tableState, options) {
23
+ if (columns.length === 0) return void 0;
24
+ const tableStateNormalized = require_state_migration.upgradePlDataTableStateV2(tableState);
25
+ const allLabelColumns = require_labels.getAllLabelColumns(ctx.resultPool);
26
+ if (!allLabelColumns) return void 0;
27
+ let fullLabelColumns = require_labels.getMatchingLabelColumns(columns.map(_milaboratories_pl_model_common.getColumnIdAndSpec), allLabelColumns);
28
+ fullLabelColumns = require_label.deriveLabels(fullLabelColumns, es_toolkit.identity, { includeNativeLabel: true }).map((v) => {
29
+ return {
30
+ ...v.value,
31
+ spec: {
32
+ ...v.value.spec,
33
+ annotations: {
34
+ ...v.value.spec.annotations,
35
+ [_milaboratories_pl_model_common.Annotation.Label]: v.label
36
+ }
37
+ }
38
+ };
39
+ });
40
+ const fullColumns = [...columns, ...fullLabelColumns];
41
+ const fullColumnsIds = [...(0, _milaboratories_pl_model_common.uniqueBy)(fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => (0, _milaboratories_pl_model_common.getAxisId)(a))), (a) => (0, _milaboratories_pl_model_common.canonicalizeJson)(a)).map((a) => ({
42
+ type: "axis",
43
+ id: a
44
+ })), ...fullColumns.map((c) => ({
45
+ type: "column",
46
+ id: c.id
47
+ }))];
48
+ const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => (0, _milaboratories_pl_model_common.canonicalizeJson)(c)));
49
+ const isValidColumnId = (id) => fullColumnsIdsSet.has(id);
50
+ const stateFilters = tableStateNormalized.pTableParams.filters;
51
+ const opsFilters = options?.filters ?? null;
52
+ const filters = stateFilters != null && opsFilters != null ? {
53
+ type: "and",
54
+ filters: [stateFilters, opsFilters]
55
+ } : stateFilters ?? opsFilters;
56
+ const firstInvalidFilterColumn = (filters ? require_traverse.collectFilterSpecColumns(filters) : []).find((col) => !isValidColumnId(col));
57
+ if (firstInvalidFilterColumn) throw new Error(`Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`);
58
+ const userSorting = tableStateNormalized.pTableParams.sorting;
59
+ const sorting = ((0, es_toolkit_compat.isEmpty)(userSorting) ? options?.sorting : userSorting) ?? [];
60
+ const firstInvalidSortingColumn = sorting.find((s) => !isValidColumnId((0, _milaboratories_pl_model_common.canonicalizeJson)(s.column)));
61
+ if (firstInvalidSortingColumn) throw new Error(`Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`);
62
+ const coreJoinType = options?.coreJoinType ?? "full";
63
+ const fullDef = require_createPlDataTableV3.createPTableDef({
64
+ columns,
65
+ labelColumns: fullLabelColumns,
66
+ coreJoinType,
67
+ filters,
68
+ sorting,
69
+ coreColumnPredicate: options?.coreColumnPredicate
70
+ });
71
+ const fullHandle = ctx.createPTableV2(fullDef);
72
+ const pframeHandle = ctx.createPFrame(fullColumns);
73
+ if (!fullHandle || !pframeHandle) return void 0;
74
+ const hiddenColumns = new Set((() => {
75
+ if (coreJoinType === "inner") return [];
76
+ const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;
77
+ if (hiddenColIds) return hiddenColIds;
78
+ return columns.filter((c) => require_createPlDataTableV3.isColumnOptional(c.spec)).map((c) => c.id);
79
+ })());
80
+ columns.filter((c) => (0, _milaboratories_pl_model_common.isLinkerColumn)(c.spec)).forEach((c) => hiddenColumns.delete(c.id));
81
+ const coreColumnPredicate = options?.coreColumnPredicate;
82
+ if (coreColumnPredicate) columns.flatMap((c) => coreColumnPredicate((0, _milaboratories_pl_model_common.getColumnIdAndSpec)(c)) ? [c.id] : []).forEach((c) => hiddenColumns.delete(c));
83
+ sorting.map((s) => s.column).filter((c) => c.type === "column").forEach((c) => hiddenColumns.delete(c.id));
84
+ if (filters) require_traverse.collectFilterSpecColumns(filters).flatMap((c) => {
85
+ const obj = (0, _milaboratories_pl_model_common.parseJson)(c);
86
+ return obj.type === "column" ? [obj.id] : [];
87
+ }).forEach((c) => hiddenColumns.delete(c));
88
+ const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));
89
+ const visibleLabelColumns = require_labels.getMatchingLabelColumns(visibleColumns.map(_milaboratories_pl_model_common.getColumnIdAndSpec), allLabelColumns);
90
+ if (!require_pcolumn_data.allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return void 0;
91
+ const visibleDef = require_createPlDataTableV3.createPTableDef({
92
+ columns: visibleColumns,
93
+ labelColumns: visibleLabelColumns,
94
+ coreJoinType,
95
+ filters,
96
+ sorting,
97
+ coreColumnPredicate
98
+ });
99
+ const visibleHandle = ctx.createPTableV2(visibleDef);
100
+ if (!visibleHandle) return void 0;
101
+ return {
102
+ sourceId: tableStateNormalized.pTableParams.sourceId,
103
+ fullTableHandle: fullHandle,
104
+ fullPframeHandle: pframeHandle,
105
+ visibleTableHandle: visibleHandle
106
+ };
107
+ }
108
+
109
+ //#endregion
110
+ exports.createPlDataTableV2 = createPlDataTableV2;
111
+ //# sourceMappingURL=createPlDataTableV2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPlDataTableV2.cjs","names":["upgradePlDataTableStateV2","getAllLabelColumns","getMatchingLabelColumns","getColumnIdAndSpec","deriveLabels","identity","Annotation","collectFilterSpecColumns","createPTableDef","isColumnOptional","allPColumnsReady"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../../render\";\nimport { allPColumnsReady, deriveLabels } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDef, isColumnOptional } from \"./createPlDataTableV3\";\n\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\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: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- 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 // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = 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 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 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 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}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,oBACd,KACA,SACA,YACA,SAC8B;AAC9B,KAAI,QAAQ,WAAW,EAAG,QAAO;CAEjC,MAAM,uBAAuBA,kDAA0B,WAAW;CAElE,MAAM,kBAAkBC,kCAAmB,IAAI,WAAW;AAC1D,KAAI,CAAC,gBAAiB,QAAO;CAE7B,IAAI,mBAAmBC,uCAAwB,QAAQ,IAAIC,mDAAmB,EAAE,gBAAgB;AAChG,oBAAmBC,2BAAa,kBAAkBC,qBAAU,EAAE,oBAAoB,MAAM,CAAC,CAAC,KACvF,MAAM;AACL,SAAO;GACL,GAAG,EAAE;GACL,MAAM;IACJ,GAAG,EAAE,MAAM;IACX,aAAa;KACX,GAAG,EAAE,MAAM,KAAK;MACfC,2CAAW,QAAQ,EAAE;KACvB;IACF;GACF;GAEJ;CAED,MAAM,cAAc,CAAC,GAAG,SAAS,GAAG,iBAAiB;CAMrD,MAAM,iBAAmC,CACvC,iDAJA,YAAY,SAAS,MAAM,EAAE,KAAK,SAAS,KAAK,qDAAgB,EAAE,CAAC,CAAC,GACnE,4DAA+B,EAAE,CACnC,CAEoB,KAAK,OAAO;EAAE,MAAM;EAAQ,IAAI;EAAG,EAA+B,EACrF,GAAG,YAAY,KAAK,OAAO;EAAE,MAAM;EAAU,IAAI,EAAE;EAAI,EAAiC,CACzF;CACD,MAAM,oBAAoB,IAAI,IAAI,eAAe,KAAK,4DAAuC,EAAE,CAAC,CAAC;CACjG,MAAM,mBAAmB,OACvB,kBAAkB,IAAI,GAAwC;CAGhE,MAAM,eAAe,qBAAqB,aAAa;CACvD,MAAM,aAAa,SAAS,WAAW;CACvC,MAAM,UACJ,gBAAgB,QAAQ,cAAc,OAClC;EAAE,MAAM;EAAO,SAAS,CAAC,cAAc,WAAW;EAAE,GACnD,gBAAgB;CAEvB,MAAM,4BADgB,UAAUC,0CAAyB,QAAQ,GAAG,EAAE,EACvB,MAAM,QAAQ,CAAC,gBAAgB,IAAI,CAAC;AACnF,KAAI,yBACF,OAAM,IAAI,MACR,yBAAyB,yBAAyB,qDACnD;CAGH,MAAM,cAAc,qBAAqB,aAAa;CACtD,MAAM,0CAAmB,YAAY,GAAG,SAAS,UAAU,gBAAgB,EAAE;CAC7E,MAAM,4BAA4B,QAAQ,MACvC,MAAM,CAAC,sEAAiD,EAAE,OAAO,CAAC,CACpE;AACD,KAAI,0BACF,OAAM,IAAI,MACR,0BAA0B,KAAK,UAAU,0BAA0B,OAAO,CAAC,qDAC5E;CAEH,MAAM,eAAe,SAAS,gBAAgB;CAC9C,MAAM,UAAUC,4CAAgB;EAC9B;EACA,cAAc;EACd;EACA;EACA;EACA,qBAAqB,SAAS;EAC/B,CAAC;CAEF,MAAM,aAAa,IAAI,eAAe,QAAQ;CAC9C,MAAM,eAAe,IAAI,aAAa,YAAY;AAClD,KAAI,CAAC,cAAc,CAAC,aAAc,QAAO;CAEzC,MAAM,gBAAgB,IAAI,WACJ;AAElB,MAAI,iBAAiB,QAAS,QAAO,EAAE;EAEvC,MAAM,eAAe,qBAAqB,aAAa;AACvD,MAAI,aAAc,QAAO;AAEzB,SAAO,QAAQ,QAAQ,MAAMC,6CAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG;KACrE,CACL;AAGD,SAAQ,QAAQ,0DAAqB,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,cAAc,OAAO,EAAE,GAAG,CAAC;CAGxF,MAAM,sBAAsB,SAAS;AACrC,KAAI,oBAIF,CAHoB,QAAQ,SAAS,MACnC,4EAAuC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CACzD,CACW,SAAS,MAAM,cAAc,OAAO,EAAE,CAAC;AAIrD,SACG,KAAK,MAAM,EAAE,OAAO,CACpB,QAAQ,MAAiC,EAAE,SAAS,SAAS,CAC7D,SAAS,MAAM,cAAc,OAAO,EAAE,GAAG,CAAC;AAG7C,KAAI,QACF,2CAAyB,QAAQ,CAC9B,SAAS,MAAM;EACd,MAAM,qDAAgB,EAAE;AACxB,SAAO,IAAI,SAAS,WAAW,CAAC,IAAI,GAAG,GAAG,EAAE;GAC5C,CACD,SAAS,MAAM,cAAc,OAAO,EAAE,CAAC;CAG5C,MAAM,iBAAiB,QAAQ,QAAQ,MAAM,CAAC,cAAc,IAAI,EAAE,GAAG,CAAC;CACtE,MAAM,sBAAsBP,uCAC1B,eAAe,IAAIC,mDAAmB,EACtC,gBACD;AAGD,KAAI,CAACO,sCAAiB,CAAC,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,CAAE,QAAO;CAE3E,MAAM,aAAaF,4CAAgB;EACjC,SAAS;EACT,cAAc;EACd;EACA;EACA;EACA;EACD,CAAC;CACF,MAAM,gBAAgB,IAAI,eAAe,WAAW;AAEpD,KAAI,CAAC,cAAe,QAAO;AAE3B,QAAO;EACL,UAAU,qBAAqB,aAAa;EAC5C,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB;EACrB"}
@@ -0,0 +1,25 @@
1
+ import { PColumnDataUniversal } from "../../../render/internal.js";
2
+ import { RenderCtxBase } from "../../../render/api.js";
3
+ import "../../../render/index.js";
4
+ import { CreatePlDataTableOps, PlDataTableModel } from "../typesV5.js";
5
+ import { PlDataTableStateV2 } from "../state-migration.js";
6
+ import { PColumn } from "@milaboratories/pl-model-common";
7
+
8
+ //#region src/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts
9
+ type createPlDataTableOptionsV2 = {
10
+ columns: PColumn<PColumnDataUniversal>[];
11
+ tableState?: PlDataTableStateV2;
12
+ options?: CreatePlDataTableOps;
13
+ };
14
+ /**
15
+ * Create p-table spec and handle given ui table state
16
+ *
17
+ * @param ctx context
18
+ * @param columns column list
19
+ * @param tableState table ui state
20
+ * @returns PlAgDataTableV2 table source
21
+ */
22
+ declare function createPlDataTableV2<A, U>(ctx: RenderCtxBase<A, U>, columns: createPlDataTableOptionsV2["columns"], tableState?: createPlDataTableOptionsV2["tableState"], options?: createPlDataTableOptionsV2["options"]): PlDataTableModel | undefined;
23
+ //#endregion
24
+ export { createPlDataTableOptionsV2, createPlDataTableV2 };
25
+ //# sourceMappingURL=createPlDataTableV2.d.ts.map
@@ -0,0 +1,110 @@
1
+ import { deriveLabels } from "../../../render/util/label.js";
2
+ import { allPColumnsReady } from "../../../render/util/pcolumn_data.js";
3
+ import "../../../render/index.js";
4
+ import { collectFilterSpecColumns } from "../../../filters/traverse.js";
5
+ import { upgradePlDataTableStateV2 } from "../state-migration.js";
6
+ import { getAllLabelColumns, getMatchingLabelColumns } from "../labels.js";
7
+ import { createPTableDef, isColumnOptional } from "./createPlDataTableV3.js";
8
+ import { Annotation, canonicalizeJson, getAxisId, getColumnIdAndSpec, isLinkerColumn, parseJson, uniqueBy } from "@milaboratories/pl-model-common";
9
+ import { isEmpty } from "es-toolkit/compat";
10
+ import { identity } from "es-toolkit";
11
+
12
+ //#region src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts
13
+ /**
14
+ * Create p-table spec and handle given ui table state
15
+ *
16
+ * @param ctx context
17
+ * @param columns column list
18
+ * @param tableState table ui state
19
+ * @returns PlAgDataTableV2 table source
20
+ */
21
+ function createPlDataTableV2(ctx, columns, tableState, options) {
22
+ if (columns.length === 0) return void 0;
23
+ const tableStateNormalized = upgradePlDataTableStateV2(tableState);
24
+ const allLabelColumns = getAllLabelColumns(ctx.resultPool);
25
+ if (!allLabelColumns) return void 0;
26
+ let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);
27
+ fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map((v) => {
28
+ return {
29
+ ...v.value,
30
+ spec: {
31
+ ...v.value.spec,
32
+ annotations: {
33
+ ...v.value.spec.annotations,
34
+ [Annotation.Label]: v.label
35
+ }
36
+ }
37
+ };
38
+ });
39
+ const fullColumns = [...columns, ...fullLabelColumns];
40
+ const fullColumnsIds = [...uniqueBy(fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))), (a) => canonicalizeJson(a)).map((a) => ({
41
+ type: "axis",
42
+ id: a
43
+ })), ...fullColumns.map((c) => ({
44
+ type: "column",
45
+ id: c.id
46
+ }))];
47
+ const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson(c)));
48
+ const isValidColumnId = (id) => fullColumnsIdsSet.has(id);
49
+ const stateFilters = tableStateNormalized.pTableParams.filters;
50
+ const opsFilters = options?.filters ?? null;
51
+ const filters = stateFilters != null && opsFilters != null ? {
52
+ type: "and",
53
+ filters: [stateFilters, opsFilters]
54
+ } : stateFilters ?? opsFilters;
55
+ const firstInvalidFilterColumn = (filters ? collectFilterSpecColumns(filters) : []).find((col) => !isValidColumnId(col));
56
+ if (firstInvalidFilterColumn) throw new Error(`Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`);
57
+ const userSorting = tableStateNormalized.pTableParams.sorting;
58
+ const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];
59
+ const firstInvalidSortingColumn = sorting.find((s) => !isValidColumnId(canonicalizeJson(s.column)));
60
+ if (firstInvalidSortingColumn) throw new Error(`Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`);
61
+ const coreJoinType = options?.coreJoinType ?? "full";
62
+ const fullDef = createPTableDef({
63
+ columns,
64
+ labelColumns: fullLabelColumns,
65
+ coreJoinType,
66
+ filters,
67
+ sorting,
68
+ coreColumnPredicate: options?.coreColumnPredicate
69
+ });
70
+ const fullHandle = ctx.createPTableV2(fullDef);
71
+ const pframeHandle = ctx.createPFrame(fullColumns);
72
+ if (!fullHandle || !pframeHandle) return void 0;
73
+ const hiddenColumns = new Set((() => {
74
+ if (coreJoinType === "inner") return [];
75
+ const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;
76
+ if (hiddenColIds) return hiddenColIds;
77
+ return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);
78
+ })());
79
+ columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));
80
+ const coreColumnPredicate = options?.coreColumnPredicate;
81
+ if (coreColumnPredicate) columns.flatMap((c) => coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : []).forEach((c) => hiddenColumns.delete(c));
82
+ sorting.map((s) => s.column).filter((c) => c.type === "column").forEach((c) => hiddenColumns.delete(c.id));
83
+ if (filters) collectFilterSpecColumns(filters).flatMap((c) => {
84
+ const obj = parseJson(c);
85
+ return obj.type === "column" ? [obj.id] : [];
86
+ }).forEach((c) => hiddenColumns.delete(c));
87
+ const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));
88
+ const visibleLabelColumns = getMatchingLabelColumns(visibleColumns.map(getColumnIdAndSpec), allLabelColumns);
89
+ if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return void 0;
90
+ const visibleDef = createPTableDef({
91
+ columns: visibleColumns,
92
+ labelColumns: visibleLabelColumns,
93
+ coreJoinType,
94
+ filters,
95
+ sorting,
96
+ coreColumnPredicate
97
+ });
98
+ const visibleHandle = ctx.createPTableV2(visibleDef);
99
+ if (!visibleHandle) return void 0;
100
+ return {
101
+ sourceId: tableStateNormalized.pTableParams.sourceId,
102
+ fullTableHandle: fullHandle,
103
+ fullPframeHandle: pframeHandle,
104
+ visibleTableHandle: visibleHandle
105
+ };
106
+ }
107
+
108
+ //#endregion
109
+ export { createPlDataTableV2 };
110
+ //# sourceMappingURL=createPlDataTableV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPlDataTableV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../../render\";\nimport { allPColumnsReady, deriveLabels } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDef, isColumnOptional } from \"./createPlDataTableV3\";\n\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\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: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- 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 // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = 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 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 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 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}\n"],"mappings":"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"}
@@ -1,18 +1,21 @@
1
- const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
2
- const require_label = require('../../render/util/label.cjs');
3
- const require_pcolumn_data = require('../../render/util/pcolumn_data.cjs');
4
- require('../../render/index.cjs');
5
- const require_traverse = require('../../filters/traverse.cjs');
6
- const require_filterToQuery = require('../../filters/converters/filterToQuery.cjs');
7
- const require_distill = require('../../filters/distill.cjs');
8
- require('../../filters/index.cjs');
9
- const require_state_migration = require('./state-migration.cjs');
10
- const require_labels = require('./labels.cjs');
1
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
2
+ const require_pcolumn_data = require('../../../render/util/pcolumn_data.cjs');
3
+ require('../../../render/index.cjs');
4
+ const require_traverse = require('../../../filters/traverse.cjs');
5
+ const require_filterToQuery = require('../../../filters/converters/filterToQuery.cjs');
6
+ const require_distill = require('../../../filters/distill.cjs');
7
+ require('../../../filters/index.cjs');
8
+ const require_state_migration = require('../state-migration.cjs');
9
+ const require_labels = require('../labels.cjs');
10
+ const require_column_snapshot_provider = require('../../../columns/column_snapshot_provider.cjs');
11
+ const require_column_collection_builder = require('../../../columns/column_collection_builder.cjs');
12
+ const require_ctx_column_sources = require('../../../columns/ctx_column_sources.cjs');
13
+ require('../../../columns/index.cjs');
11
14
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
12
15
  let es_toolkit_compat = require("es-toolkit/compat");
13
16
  let es_toolkit = require("es-toolkit");
14
17
 
15
- //#region src/components/PlDataTable/table.ts
18
+ //#region src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts
16
19
  /** Convert a PTableColumnId to a SpecQueryExpression reference. */
17
20
  function columnIdToExpr(col) {
18
21
  if (col.type === "axis") return {
@@ -85,32 +88,36 @@ function isColumnHidden(spec) {
85
88
  function isColumnOptional(spec) {
86
89
  return (0, _milaboratories_pl_model_common.readAnnotation)(spec, _milaboratories_pl_model_common.Annotation.Table.Visibility) === "optional";
87
90
  }
88
- /**
89
- * Create p-table spec and handle given ui table state
90
- *
91
- * @param ctx context
92
- * @param columns column list
93
- * @param tableState table ui state
94
- * @returns PlAgDataTableV2 table source
95
- */
96
- function createPlDataTableV2(ctx, columns, tableState, ops) {
97
- if (columns.length === 0) return void 0;
98
- const tableStateNormalized = require_state_migration.upgradePlDataTableStateV2(tableState);
91
+ function createPlDataTableV3(ctx, options) {
92
+ const providers = options.source ? normalizeSourceList(options.source).filter(require_column_snapshot_provider.isColumnSnapshotProvider) : require_ctx_column_sources.collectCtxColumnSnapshotProviders(ctx);
93
+ if (providers.length === 0) return void 0;
94
+ const builder = new require_column_collection_builder.ColumnCollectionBuilder(ctx).addSources(providers);
95
+ const anchors = options.columns.anchors;
96
+ const collection = (0, es_toolkit.isNil)(anchors) ? builder.build() : builder.build({ anchors });
97
+ if (!collection) return void 0;
98
+ const findOptions = options.columns ? {
99
+ include: options.columns.include,
100
+ exclude: options.columns.exclude,
101
+ mode: options.columns.mode,
102
+ maxHops: options.columns.maxHops
103
+ } : void 0;
104
+ const dataSnapshots = collection.findColumns(findOptions).map((v) => "column" in v ? v.column : v).filter((s) => !isColumnHidden(s.spec));
105
+ if (dataSnapshots.length === 0) return void 0;
106
+ const columns = [];
107
+ for (const snap of dataSnapshots) {
108
+ if (!snap.data) return void 0;
109
+ const data = snap.data.get();
110
+ if (data === void 0) return void 0;
111
+ columns.push({
112
+ id: snap.id,
113
+ spec: snap.spec,
114
+ data
115
+ });
116
+ }
117
+ const tableStateNormalized = require_state_migration.upgradePlDataTableStateV2(options.state);
99
118
  const allLabelColumns = require_labels.getAllLabelColumns(ctx.resultPool);
100
119
  if (!allLabelColumns) return void 0;
101
- let fullLabelColumns = require_labels.getMatchingLabelColumns(columns.map(_milaboratories_pl_model_common.getColumnIdAndSpec), allLabelColumns);
102
- fullLabelColumns = require_label.deriveLabels(fullLabelColumns, es_toolkit.identity, { includeNativeLabel: true }).map((v) => {
103
- return {
104
- ...v.value,
105
- spec: {
106
- ...v.value.spec,
107
- annotations: {
108
- ...v.value.spec.annotations,
109
- [_milaboratories_pl_model_common.Annotation.Label]: v.label
110
- }
111
- }
112
- };
113
- });
120
+ const fullLabelColumns = require_labels.getMatchingLabelColumns(columns.map(_milaboratories_pl_model_common.getColumnIdAndSpec), allLabelColumns);
114
121
  const fullColumns = [...columns, ...fullLabelColumns];
115
122
  const fullColumnsIds = [...(0, _milaboratories_pl_model_common.uniqueBy)(fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => (0, _milaboratories_pl_model_common.getAxisId)(a))), (a) => (0, _milaboratories_pl_model_common.canonicalizeJson)(a)).map((a) => ({
116
123
  type: "axis",
@@ -122,7 +129,7 @@ function createPlDataTableV2(ctx, columns, tableState, ops) {
122
129
  const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => (0, _milaboratories_pl_model_common.canonicalizeJson)(c)));
123
130
  const isValidColumnId = (id) => fullColumnsIdsSet.has(id);
124
131
  const stateFilters = tableStateNormalized.pTableParams.filters;
125
- const opsFilters = ops?.filters ?? null;
132
+ const opsFilters = options?.filters ?? null;
126
133
  const filters = stateFilters != null && opsFilters != null ? {
127
134
  type: "and",
128
135
  filters: [stateFilters, opsFilters]
@@ -130,17 +137,17 @@ function createPlDataTableV2(ctx, columns, tableState, ops) {
130
137
  const firstInvalidFilterColumn = (filters ? require_traverse.collectFilterSpecColumns(filters) : []).find((col) => !isValidColumnId(col));
131
138
  if (firstInvalidFilterColumn) throw new Error(`Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`);
132
139
  const userSorting = tableStateNormalized.pTableParams.sorting;
133
- const sorting = ((0, es_toolkit_compat.isEmpty)(userSorting) ? ops?.sorting : userSorting) ?? [];
140
+ const sorting = ((0, es_toolkit_compat.isEmpty)(userSorting) ? options?.sorting : userSorting) ?? [];
134
141
  const firstInvalidSortingColumn = sorting.find((s) => !isValidColumnId((0, _milaboratories_pl_model_common.canonicalizeJson)(s.column)));
135
142
  if (firstInvalidSortingColumn) throw new Error(`Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`);
136
- const coreJoinType = ops?.coreJoinType ?? "full";
143
+ const coreJoinType = options?.coreJoinType ?? "full";
137
144
  const fullDef = createPTableDef({
138
145
  columns,
139
146
  labelColumns: fullLabelColumns,
140
147
  coreJoinType,
141
148
  filters,
142
149
  sorting,
143
- coreColumnPredicate: ops?.coreColumnPredicate
150
+ coreColumnPredicate: options?.coreColumnPredicate
144
151
  });
145
152
  const fullHandle = ctx.createPTableV2(fullDef);
146
153
  const pframeHandle = ctx.createPFrame(fullColumns);
@@ -152,7 +159,7 @@ function createPlDataTableV2(ctx, columns, tableState, ops) {
152
159
  return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);
153
160
  })());
154
161
  columns.filter((c) => (0, _milaboratories_pl_model_common.isLinkerColumn)(c.spec)).forEach((c) => hiddenColumns.delete(c.id));
155
- const coreColumnPredicate = ops?.coreColumnPredicate;
162
+ const coreColumnPredicate = options?.coreColumnPredicate;
156
163
  if (coreColumnPredicate) columns.flatMap((c) => coreColumnPredicate((0, _milaboratories_pl_model_common.getColumnIdAndSpec)(c)) ? [c.id] : []).forEach((c) => hiddenColumns.delete(c));
157
164
  sorting.map((s) => s.column).filter((c) => c.type === "column").forEach((c) => hiddenColumns.delete(c.id));
158
165
  if (filters) require_traverse.collectFilterSpecColumns(filters).flatMap((c) => {
@@ -179,22 +186,15 @@ function createPlDataTableV2(ctx, columns, tableState, ops) {
179
186
  visibleTableHandle: visibleHandle
180
187
  };
181
188
  }
182
- /** Create sheet entries for PlDataTable */
183
- function createPlDataTableSheet(ctx, axis, values) {
184
- const labels = ctx.resultPool.findLabels(axis);
185
- return {
186
- axis,
187
- options: values.map((v) => ({
188
- value: v,
189
- label: labels?.[v] ?? v.toString()
190
- })),
191
- defaultValue: values[0]
192
- };
189
+ /** Normalize raw ColumnSource | ColumnSource[] into a flat list of sources. */
190
+ function normalizeSourceList(source) {
191
+ if (Array.isArray(source) && source.length > 0 && (Array.isArray(source[0]) || require_column_snapshot_provider.isColumnSnapshotProvider(source[0]))) return source;
192
+ return [source];
193
193
  }
194
194
 
195
195
  //#endregion
196
- exports.createPlDataTableSheet = createPlDataTableSheet;
197
- exports.createPlDataTableV2 = createPlDataTableV2;
196
+ exports.createPTableDef = createPTableDef;
197
+ exports.createPlDataTableV3 = createPlDataTableV3;
198
198
  exports.isColumnHidden = isColumnHidden;
199
199
  exports.isColumnOptional = isColumnOptional;
200
- //# sourceMappingURL=table.cjs.map
200
+ //# sourceMappingURL=createPlDataTableV3.cjs.map