@platforma-sdk/model 1.79.17 → 1.79.24
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.
- package/dist/annotations/converter.cjs +0 -1
- package/dist/annotations/converter.cjs.map +1 -1
- package/dist/annotations/converter.d.ts.map +1 -1
- package/dist/annotations/converter.js.map +1 -1
- package/dist/annotations/index.cjs +2 -1
- package/dist/annotations/index.d.ts +2 -1
- package/dist/annotations/index.js +2 -1
- package/dist/bconfig/index.cjs +5 -2
- package/dist/bconfig/index.d.ts +2 -1
- package/dist/bconfig/index.js +3 -2
- package/dist/bconfig/lambdas.d.ts.map +1 -1
- package/dist/bconfig/normalization.cjs +0 -1
- package/dist/bconfig/normalization.cjs.map +1 -1
- package/dist/bconfig/normalization.d.ts.map +1 -1
- package/dist/bconfig/normalization.js.map +1 -1
- package/dist/bconfig/types.cjs.map +1 -1
- package/dist/bconfig/types.d.ts.map +1 -1
- package/dist/bconfig/types.js.map +1 -1
- package/dist/bconfig/util.d.ts.map +1 -1
- package/dist/bconfig/v3.d.ts.map +1 -1
- package/dist/block_api_v1.d.ts.map +1 -1
- package/dist/block_migrations.cjs +3 -0
- package/dist/block_migrations.cjs.map +1 -1
- package/dist/block_migrations.d.ts +1 -1
- package/dist/block_migrations.d.ts.map +1 -1
- package/dist/block_migrations.js +1 -1
- package/dist/block_migrations.js.map +1 -1
- package/dist/block_model.cjs +1 -1
- package/dist/block_model.cjs.map +1 -1
- package/dist/block_model.d.ts.map +1 -1
- package/dist/block_model.js +1 -0
- package/dist/block_model.js.map +1 -1
- package/dist/block_model_legacy.cjs +1 -1
- package/dist/block_model_legacy.cjs.map +1 -1
- package/dist/block_model_legacy.d.ts.map +1 -1
- package/dist/block_model_legacy.js +1 -0
- package/dist/block_model_legacy.js.map +1 -1
- package/dist/block_state_patch.d.ts.map +1 -1
- package/dist/block_state_util.cjs +2 -0
- package/dist/block_state_util.cjs.map +1 -1
- package/dist/block_state_util.d.ts.map +1 -1
- package/dist/block_state_util.js +2 -0
- package/dist/block_state_util.js.map +1 -1
- package/dist/block_storage.cjs.map +1 -1
- package/dist/block_storage.d.ts +1 -1
- package/dist/block_storage.d.ts.map +1 -1
- package/dist/block_storage.js.map +1 -1
- package/dist/block_storage_callbacks.cjs +1 -1
- package/dist/block_storage_callbacks.cjs.map +1 -1
- package/dist/block_storage_callbacks.js +1 -1
- package/dist/block_storage_callbacks.js.map +1 -1
- package/dist/block_storage_facade.cjs.map +1 -1
- package/dist/block_storage_facade.d.ts.map +1 -1
- package/dist/block_storage_facade.js.map +1 -1
- package/dist/columns/column_collection_builder.cjs +3 -1
- package/dist/columns/column_collection_builder.cjs.map +1 -1
- package/dist/columns/column_collection_builder.d.ts.map +1 -1
- package/dist/columns/column_collection_builder.js +3 -0
- package/dist/columns/column_collection_builder.js.map +1 -1
- package/dist/columns/column_selector.cjs.map +1 -1
- package/dist/columns/column_selector.d.ts.map +1 -1
- package/dist/columns/column_selector.js.map +1 -1
- package/dist/columns/column_snapshot.cjs.map +1 -1
- package/dist/columns/column_snapshot.d.ts.map +1 -1
- package/dist/columns/column_snapshot.js.map +1 -1
- package/dist/columns/column_snapshot_provider.cjs +3 -1
- package/dist/columns/column_snapshot_provider.cjs.map +1 -1
- package/dist/columns/column_snapshot_provider.d.ts.map +1 -1
- package/dist/columns/column_snapshot_provider.js +3 -0
- package/dist/columns/column_snapshot_provider.js.map +1 -1
- package/dist/columns/ctx_column_sources.cjs +1 -1
- package/dist/columns/ctx_column_sources.cjs.map +1 -1
- package/dist/columns/ctx_column_sources.d.ts.map +1 -1
- package/dist/columns/ctx_column_sources.js +1 -0
- package/dist/columns/ctx_column_sources.js.map +1 -1
- package/dist/columns/expand_by_partition.cjs +0 -1
- package/dist/columns/expand_by_partition.cjs.map +1 -1
- package/dist/columns/expand_by_partition.d.ts.map +1 -1
- package/dist/columns/expand_by_partition.js.map +1 -1
- package/dist/columns/index.cjs +20 -6
- package/dist/columns/index.d.ts +2 -1
- package/dist/columns/index.js +7 -6
- package/dist/components/PFrameForGraphs.cjs +3 -2
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +1 -1
- package/dist/components/PFrameForGraphs.d.ts.map +1 -1
- package/dist/components/PFrameForGraphs.js +2 -2
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlAnnotations/filter.d.ts.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
- package/dist/components/PlAnnotations/index.d.ts +2 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +1 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +2 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.cjs +19 -7
- package/dist/components/PlDataTable/index.d.ts +2 -1
- package/dist/components/PlDataTable/index.js +8 -7
- package/dist/components/PlDataTable/labels.cjs +0 -1
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +0 -1
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV4.d.ts +1 -1
- package/dist/components/PlDataTable/typesV4.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV6.d.ts +1 -1
- package/dist/components/PlDataTable/typesV6.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +0 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +0 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/index.cjs +9 -3
- package/dist/components/PlDatasetSelector/index.d.ts +2 -1
- package/dist/components/PlDatasetSelector/index.js +4 -3
- package/dist/components/PlMultiSequenceAlignment.cjs +0 -1
- package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
- package/dist/components/PlSelectionModel.cjs.map +1 -1
- package/dist/components/PlSelectionModel.d.ts.map +1 -1
- package/dist/components/PlSelectionModel.js.map +1 -1
- package/dist/components/index.cjs +44 -15
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +16 -15
- package/dist/config/actions.cjs.map +1 -1
- package/dist/config/actions.d.ts.map +1 -1
- package/dist/config/actions.js.map +1 -1
- package/dist/config/actions_kinds.d.ts.map +1 -1
- package/dist/config/index.cjs +33 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.js +2 -1
- package/dist/config/model.d.ts.map +1 -1
- package/dist/config/type_engine.d.ts.map +1 -1
- package/dist/config/type_util.d.ts +1 -1
- package/dist/config/type_util.d.ts.map +1 -1
- package/dist/env_value.cjs.map +1 -1
- package/dist/env_value.d.ts.map +1 -1
- package/dist/env_value.js.map +1 -1
- package/dist/filters/converters/filterToQuery.cjs +0 -1
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs +0 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
- package/dist/filters/converters/index.cjs +5 -2
- package/dist/filters/converters/index.d.ts +2 -1
- package/dist/filters/converters/index.js +3 -2
- package/dist/filters/distill.cjs +1 -2
- package/dist/filters/distill.cjs.map +1 -1
- package/dist/filters/distill.d.ts.map +1 -1
- package/dist/filters/distill.js +1 -1
- package/dist/filters/distill.js.map +1 -1
- package/dist/filters/index.cjs +7 -3
- package/dist/filters/index.d.ts +2 -1
- package/dist/filters/index.js +4 -3
- package/dist/filters/traverse.cjs.map +1 -1
- package/dist/filters/traverse.js.map +1 -1
- package/dist/filters/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/internal.cjs +2 -0
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/labels/derive_distinct_labels.cjs +2 -3
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js +2 -2
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +0 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/labels/index.cjs +4 -2
- package/dist/labels/index.d.ts +2 -1
- package/dist/labels/index.js +3 -2
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/pframe.cjs +1 -0
- package/dist/pframe.cjs.map +1 -1
- package/dist/pframe.d.ts.map +1 -1
- package/dist/pframe.js +1 -0
- package/dist/pframe.js.map +1 -1
- package/dist/pframe_utils/axes.cjs +0 -1
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts.map +1 -1
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +0 -1
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts.map +1 -1
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs +3 -2
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts +1 -1
- package/dist/pframe_utils/index.d.ts.map +1 -1
- package/dist/pframe_utils/index.js +2 -2
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/platforma.d.ts.map +1 -1
- package/dist/plugin_handle.cjs.map +1 -1
- package/dist/plugin_handle.d.ts.map +1 -1
- package/dist/plugin_handle.js.map +1 -1
- package/dist/plugin_model.cjs +5 -0
- package/dist/plugin_model.cjs.map +1 -1
- package/dist/plugin_model.d.ts +1 -1
- package/dist/plugin_model.d.ts.map +1 -1
- package/dist/plugin_model.js +3 -1
- package/dist/plugin_model.js.map +1 -1
- package/dist/raw_globals.cjs.map +1 -1
- package/dist/raw_globals.d.ts.map +1 -1
- package/dist/raw_globals.js.map +1 -1
- package/dist/ref_util.cjs.map +1 -1
- package/dist/ref_util.d.ts.map +1 -1
- package/dist/ref_util.js.map +1 -1
- package/dist/render/accessor.cjs +2 -1
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts.map +1 -1
- package/dist/render/accessor.js +2 -0
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +5 -2
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +4 -1
- package/dist/render/api.js.map +1 -1
- package/dist/render/future.cjs +2 -0
- package/dist/render/future.cjs.map +1 -1
- package/dist/render/future.d.ts.map +1 -1
- package/dist/render/future.js +2 -0
- package/dist/render/future.js.map +1 -1
- package/dist/render/index.cjs +34 -7
- package/dist/render/index.d.ts +2 -1
- package/dist/render/index.js +8 -7
- package/dist/render/internal.cjs +3 -0
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +1 -1
- package/dist/render/internal.d.ts.map +1 -1
- package/dist/render/internal.js +1 -1
- package/dist/render/internal.js.map +1 -1
- package/dist/render/traversal_ops.d.ts.map +1 -1
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.d.ts.map +1 -1
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +2 -1
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +1 -0
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.cjs +23 -4
- package/dist/render/util/index.d.ts +2 -1
- package/dist/render/util/index.js +5 -4
- package/dist/render/util/label.cjs.map +1 -1
- package/dist/render/util/label.d.ts +1 -1
- package/dist/render/util/label.d.ts.map +1 -1
- package/dist/render/util/label.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs +8 -11
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +8 -10
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/render/util/pframe_upgraders.cjs.map +1 -1
- package/dist/render/util/pframe_upgraders.js.map +1 -1
- package/dist/render/util/split_selectors.d.ts +1 -1
- package/dist/render/util/split_selectors.d.ts.map +1 -1
- package/dist/services/block_services.cjs +0 -1
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +1 -3
- package/dist/services/block_services.d.ts.map +1 -1
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/get_services.cjs.map +1 -1
- package/dist/services/get_services.d.ts.map +1 -1
- package/dist/services/get_services.js.map +1 -1
- package/dist/services/index.cjs +8 -3
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.js +4 -3
- package/dist/services/service_bridge.cjs.map +1 -1
- package/dist/services/service_bridge.d.ts.map +1 -1
- package/dist/services/service_bridge.js.map +1 -1
- package/dist/services/service_resolve.d.ts.map +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoverColumns.cjs","names":["ColumnCollectionBuilder","collectCtxColumnSnapshotProviders","PColumnName","toColumnSnapshotProvider"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/discoverColumns.ts"],"sourcesContent":["import type { PColumnSpec, PlRef, PObjectId } from \"@milaboratories/pl-model-common\";\nimport { createDiscoveredPColumnId, isPlRef, PColumnName } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type {\n ColumnSource,\n ColumnVariant,\n RelaxedColumnSelector,\n ColumnSnapshotProvider,\n ColumnSnapshot,\n} from \"../../../columns\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { toColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { throwError } from \"@milaboratories/helpers\";\nimport type { ColumnsSelectorConfig, TableColumnVariant } from \"./createPlDataTableV3\";\n\nexport type DiscoverTableColumnOptions = {\n sources?: ColumnSource[];\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>;\n selector: ColumnsSelectorConfig;\n};\n\n/** Discover columns from sources/anchors and normalize into a flat TableColumnVariant list. */\nexport function discoverTableColumnSnaphots(\n ctx: RenderCtxBase,\n options: DiscoverTableColumnOptions,\n): TableColumnVariant[] | undefined {\n // Resolve PlRef anchors to PColumnSpec\n const resolvedOptions = {\n ...options,\n anchors: resolveAnchors(ctx, options.anchors),\n };\n\n // Resolve providers\n const providers = resolveProviders(ctx, resolvedOptions.sources);\n if (providers.length === 0) return undefined;\n\n // Build collection (anchored or plain)\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(providers)\n .build(resolvedOptions);\n if (collection === undefined) return undefined;\n\n try {\n const variants = collection.findColumnVariants(resolvedOptions.selector);\n const anchors = collection.getAnchors();\n return mapToTableColumnVariants(variants, anchors);\n } finally {\n collection.dispose();\n }\n}\n\n/**\n * Discover label columns matching the axes of the given value columns from\n * ctx providers. Returns label snapshots wrapped as direct TableColumnVariants\n * (path: [], empty qualifications, isPrimary: false).\n */\nexport function discoverLabelColumnVariants<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: TableColumnVariant[],\n): TableColumnVariant[] {\n if (columns.length === 0) return [];\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .addSource(columns.map((c) => c.column))\n .build({\n allowPartialColumnList: true,\n anchors: Object.fromEntries(\n columns\n .filter((col) => (col.path?.length ?? 0) === 0 && col.isPrimary)\n .map((col, i) => [`anchor_${i}`, col.column.spec]),\n ),\n });\n\n try {\n const axes = columns.flatMap((col) => col.column.spec.axesSpec);\n return collection\n .findColumnVariants({\n include: axes.map((a) => ({\n name: { type: \"exact\", value: PColumnName.Label },\n axes: [{ name: { type: \"exact\", value: a.name } }],\n })),\n maxHops: columns.reduce((acc, c) => Math.max(acc, c.path?.length ?? 0), 0),\n })\n .map((variant) => ({\n ...variant,\n column: {\n ...variant.column,\n id: createDiscoveredPColumnId({\n column: variant.column.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n }),\n originalId: variant.column.id,\n },\n }));\n } finally {\n collection.dispose();\n }\n}\n\n/** Resolve PlRef values in anchors to PColumnSpec via the result pool. */\nfunction resolveAnchors(\n ctx: RenderCtxBase,\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>,\n): Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> {\n const result: Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> = {};\n for (const [key, value] of Object.entries(anchors)) {\n if (isPlRef(value)) {\n result[key] =\n ctx.resultPool.getPColumnSpecByRef(value) ??\n throwError(\n `Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/** Resolve column snapshot providers from explicit sources or context. */\nfunction resolveProviders(\n ctx: RenderCtxBase,\n sources: undefined | ColumnSource[],\n): ColumnSnapshotProvider[] {\n return sources !== undefined\n ? sources.map(toColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n}\n\n/** Map column variants into TableColumnVariant list with anchor-derived isPrimary flag. */\nfunction mapToTableColumnVariants(\n variants: readonly ColumnVariant[],\n anchors: Map<string, ColumnSnapshot<PObjectId>>,\n): TableColumnVariant[] {\n const columnIdToAnchorName = new Map<PObjectId, string>(\n Array.from(anchors.entries(), ([key, { id }]) => [id, key] as const),\n );\n\n return variants.map((variant): TableColumnVariant => {\n const snap = variant.column;\n const isPrimary = columnIdToAnchorName.get(snap.id) !== undefined;\n\n const discoveredId = createDiscoveredPColumnId({\n column: snap.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n });\n return {\n column: {\n id: discoveredId,\n spec: snap.spec,\n data: snap.data,\n dataStatus: snap.dataStatus,\n },\n path: variant.path,\n qualifications: variant.qualifications,\n originalId: snap.id,\n isPrimary,\n };\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"discoverColumns.cjs","names":["ColumnCollectionBuilder","collectCtxColumnSnapshotProviders","PColumnName","toColumnSnapshotProvider"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/discoverColumns.ts"],"sourcesContent":["import type { PColumnSpec, PlRef, PObjectId } from \"@milaboratories/pl-model-common\";\nimport { createDiscoveredPColumnId, isPlRef, PColumnName } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type {\n ColumnSource,\n ColumnVariant,\n RelaxedColumnSelector,\n ColumnSnapshotProvider,\n ColumnSnapshot,\n} from \"../../../columns\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { toColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { throwError } from \"@milaboratories/helpers\";\nimport type { ColumnsSelectorConfig, TableColumnVariant } from \"./createPlDataTableV3\";\n\nexport type DiscoverTableColumnOptions = {\n sources?: ColumnSource[];\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>;\n selector: ColumnsSelectorConfig;\n};\n\n/** Discover columns from sources/anchors and normalize into a flat TableColumnVariant list. */\nexport function discoverTableColumnSnaphots(\n ctx: RenderCtxBase,\n options: DiscoverTableColumnOptions,\n): TableColumnVariant[] | undefined {\n // Resolve PlRef anchors to PColumnSpec\n const resolvedOptions = {\n ...options,\n anchors: resolveAnchors(ctx, options.anchors),\n };\n\n // Resolve providers\n const providers = resolveProviders(ctx, resolvedOptions.sources);\n if (providers.length === 0) return undefined;\n\n // Build collection (anchored or plain)\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(providers)\n .build(resolvedOptions);\n if (collection === undefined) return undefined;\n\n try {\n const variants = collection.findColumnVariants(resolvedOptions.selector);\n const anchors = collection.getAnchors();\n return mapToTableColumnVariants(variants, anchors);\n } finally {\n collection.dispose();\n }\n}\n\n/**\n * Discover label columns matching the axes of the given value columns from\n * ctx providers. Returns label snapshots wrapped as direct TableColumnVariants\n * (path: [], empty qualifications, isPrimary: false).\n */\nexport function discoverLabelColumnVariants<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: TableColumnVariant[],\n): TableColumnVariant[] {\n if (columns.length === 0) return [];\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .addSource(columns.map((c) => c.column))\n .build({\n allowPartialColumnList: true,\n anchors: Object.fromEntries(\n columns\n .filter((col) => (col.path?.length ?? 0) === 0 && col.isPrimary)\n .map((col, i) => [`anchor_${i}`, col.column.spec]),\n ),\n });\n\n try {\n const axes = columns.flatMap((col) => col.column.spec.axesSpec);\n return collection\n .findColumnVariants({\n include: axes.map((a) => ({\n name: { type: \"exact\", value: PColumnName.Label },\n axes: [{ name: { type: \"exact\", value: a.name } }],\n })),\n maxHops: columns.reduce((acc, c) => Math.max(acc, c.path?.length ?? 0), 0),\n })\n .map((variant) => ({\n ...variant,\n column: {\n ...variant.column,\n id: createDiscoveredPColumnId({\n column: variant.column.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n }),\n originalId: variant.column.id,\n },\n }));\n } finally {\n collection.dispose();\n }\n}\n\n/** Resolve PlRef values in anchors to PColumnSpec via the result pool. */\nfunction resolveAnchors(\n ctx: RenderCtxBase,\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>,\n): Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> {\n const result: Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> = {};\n for (const [key, value] of Object.entries(anchors)) {\n if (isPlRef(value)) {\n result[key] =\n ctx.resultPool.getPColumnSpecByRef(value) ??\n throwError(\n `Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/** Resolve column snapshot providers from explicit sources or context. */\nfunction resolveProviders(\n ctx: RenderCtxBase,\n sources: undefined | ColumnSource[],\n): ColumnSnapshotProvider[] {\n return sources !== undefined\n ? sources.map(toColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n}\n\n/** Map column variants into TableColumnVariant list with anchor-derived isPrimary flag. */\nfunction mapToTableColumnVariants(\n variants: readonly ColumnVariant[],\n anchors: Map<string, ColumnSnapshot<PObjectId>>,\n): TableColumnVariant[] {\n const columnIdToAnchorName = new Map<PObjectId, string>(\n Array.from(anchors.entries(), ([key, { id }]) => [id, key] as const),\n );\n\n return variants.map((variant): TableColumnVariant => {\n const snap = variant.column;\n const isPrimary = columnIdToAnchorName.get(snap.id) !== undefined;\n\n const discoveredId = createDiscoveredPColumnId({\n column: snap.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n });\n return {\n column: {\n id: discoveredId,\n spec: snap.spec,\n data: snap.data,\n dataStatus: snap.dataStatus,\n },\n path: variant.path,\n qualifications: variant.qualifications,\n originalId: snap.id,\n isPrimary,\n };\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoverColumns.js","names":["resolveAnchors"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/discoverColumns.ts"],"sourcesContent":["import type { PColumnSpec, PlRef, PObjectId } from \"@milaboratories/pl-model-common\";\nimport { createDiscoveredPColumnId, isPlRef, PColumnName } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type {\n ColumnSource,\n ColumnVariant,\n RelaxedColumnSelector,\n ColumnSnapshotProvider,\n ColumnSnapshot,\n} from \"../../../columns\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { toColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { throwError } from \"@milaboratories/helpers\";\nimport type { ColumnsSelectorConfig, TableColumnVariant } from \"./createPlDataTableV3\";\n\nexport type DiscoverTableColumnOptions = {\n sources?: ColumnSource[];\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>;\n selector: ColumnsSelectorConfig;\n};\n\n/** Discover columns from sources/anchors and normalize into a flat TableColumnVariant list. */\nexport function discoverTableColumnSnaphots(\n ctx: RenderCtxBase,\n options: DiscoverTableColumnOptions,\n): TableColumnVariant[] | undefined {\n // Resolve PlRef anchors to PColumnSpec\n const resolvedOptions = {\n ...options,\n anchors: resolveAnchors(ctx, options.anchors),\n };\n\n // Resolve providers\n const providers = resolveProviders(ctx, resolvedOptions.sources);\n if (providers.length === 0) return undefined;\n\n // Build collection (anchored or plain)\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(providers)\n .build(resolvedOptions);\n if (collection === undefined) return undefined;\n\n try {\n const variants = collection.findColumnVariants(resolvedOptions.selector);\n const anchors = collection.getAnchors();\n return mapToTableColumnVariants(variants, anchors);\n } finally {\n collection.dispose();\n }\n}\n\n/**\n * Discover label columns matching the axes of the given value columns from\n * ctx providers. Returns label snapshots wrapped as direct TableColumnVariants\n * (path: [], empty qualifications, isPrimary: false).\n */\nexport function discoverLabelColumnVariants<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: TableColumnVariant[],\n): TableColumnVariant[] {\n if (columns.length === 0) return [];\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .addSource(columns.map((c) => c.column))\n .build({\n allowPartialColumnList: true,\n anchors: Object.fromEntries(\n columns\n .filter((col) => (col.path?.length ?? 0) === 0 && col.isPrimary)\n .map((col, i) => [`anchor_${i}`, col.column.spec]),\n ),\n });\n\n try {\n const axes = columns.flatMap((col) => col.column.spec.axesSpec);\n return collection\n .findColumnVariants({\n include: axes.map((a) => ({\n name: { type: \"exact\", value: PColumnName.Label },\n axes: [{ name: { type: \"exact\", value: a.name } }],\n })),\n maxHops: columns.reduce((acc, c) => Math.max(acc, c.path?.length ?? 0), 0),\n })\n .map((variant) => ({\n ...variant,\n column: {\n ...variant.column,\n id: createDiscoveredPColumnId({\n column: variant.column.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n }),\n originalId: variant.column.id,\n },\n }));\n } finally {\n collection.dispose();\n }\n}\n\n/** Resolve PlRef values in anchors to PColumnSpec via the result pool. */\nfunction resolveAnchors(\n ctx: RenderCtxBase,\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>,\n): Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> {\n const result: Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> = {};\n for (const [key, value] of Object.entries(anchors)) {\n if (isPlRef(value)) {\n result[key] =\n ctx.resultPool.getPColumnSpecByRef(value) ??\n throwError(\n `Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/** Resolve column snapshot providers from explicit sources or context. */\nfunction resolveProviders(\n ctx: RenderCtxBase,\n sources: undefined | ColumnSource[],\n): ColumnSnapshotProvider[] {\n return sources !== undefined\n ? sources.map(toColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n}\n\n/** Map column variants into TableColumnVariant list with anchor-derived isPrimary flag. */\nfunction mapToTableColumnVariants(\n variants: readonly ColumnVariant[],\n anchors: Map<string, ColumnSnapshot<PObjectId>>,\n): TableColumnVariant[] {\n const columnIdToAnchorName = new Map<PObjectId, string>(\n Array.from(anchors.entries(), ([key, { id }]) => [id, key] as const),\n );\n\n return variants.map((variant): TableColumnVariant => {\n const snap = variant.column;\n const isPrimary = columnIdToAnchorName.get(snap.id) !== undefined;\n\n const discoveredId = createDiscoveredPColumnId({\n column: snap.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n });\n return {\n column: {\n id: discoveredId,\n spec: snap.spec,\n data: snap.data,\n dataStatus: snap.dataStatus,\n },\n path: variant.path,\n qualifications: variant.qualifications,\n originalId: snap.id,\n isPrimary,\n };\n });\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgB,4BACd,KACA,SACkC;CAElC,MAAM,kBAAkB;EACtB,GAAG;EACH,SAASA,iBAAe,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"discoverColumns.js","names":["resolveAnchors"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/discoverColumns.ts"],"sourcesContent":["import type { PColumnSpec, PlRef, PObjectId } from \"@milaboratories/pl-model-common\";\nimport { createDiscoveredPColumnId, isPlRef, PColumnName } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../../render\";\nimport type {\n ColumnSource,\n ColumnVariant,\n RelaxedColumnSelector,\n ColumnSnapshotProvider,\n ColumnSnapshot,\n} from \"../../../columns\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { toColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { throwError } from \"@milaboratories/helpers\";\nimport type { ColumnsSelectorConfig, TableColumnVariant } from \"./createPlDataTableV3\";\n\nexport type DiscoverTableColumnOptions = {\n sources?: ColumnSource[];\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>;\n selector: ColumnsSelectorConfig;\n};\n\n/** Discover columns from sources/anchors and normalize into a flat TableColumnVariant list. */\nexport function discoverTableColumnSnaphots(\n ctx: RenderCtxBase,\n options: DiscoverTableColumnOptions,\n): TableColumnVariant[] | undefined {\n // Resolve PlRef anchors to PColumnSpec\n const resolvedOptions = {\n ...options,\n anchors: resolveAnchors(ctx, options.anchors),\n };\n\n // Resolve providers\n const providers = resolveProviders(ctx, resolvedOptions.sources);\n if (providers.length === 0) return undefined;\n\n // Build collection (anchored or plain)\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(providers)\n .build(resolvedOptions);\n if (collection === undefined) return undefined;\n\n try {\n const variants = collection.findColumnVariants(resolvedOptions.selector);\n const anchors = collection.getAnchors();\n return mapToTableColumnVariants(variants, anchors);\n } finally {\n collection.dispose();\n }\n}\n\n/**\n * Discover label columns matching the axes of the given value columns from\n * ctx providers. Returns label snapshots wrapped as direct TableColumnVariants\n * (path: [], empty qualifications, isPrimary: false).\n */\nexport function discoverLabelColumnVariants<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: TableColumnVariant[],\n): TableColumnVariant[] {\n if (columns.length === 0) return [];\n const collection = new ColumnCollectionBuilder(ctx.getService(\"pframeSpec\"))\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .addSource(columns.map((c) => c.column))\n .build({\n allowPartialColumnList: true,\n anchors: Object.fromEntries(\n columns\n .filter((col) => (col.path?.length ?? 0) === 0 && col.isPrimary)\n .map((col, i) => [`anchor_${i}`, col.column.spec]),\n ),\n });\n\n try {\n const axes = columns.flatMap((col) => col.column.spec.axesSpec);\n return collection\n .findColumnVariants({\n include: axes.map((a) => ({\n name: { type: \"exact\", value: PColumnName.Label },\n axes: [{ name: { type: \"exact\", value: a.name } }],\n })),\n maxHops: columns.reduce((acc, c) => Math.max(acc, c.path?.length ?? 0), 0),\n })\n .map((variant) => ({\n ...variant,\n column: {\n ...variant.column,\n id: createDiscoveredPColumnId({\n column: variant.column.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n }),\n originalId: variant.column.id,\n },\n }));\n } finally {\n collection.dispose();\n }\n}\n\n/** Resolve PlRef values in anchors to PColumnSpec via the result pool. */\nfunction resolveAnchors(\n ctx: RenderCtxBase,\n anchors: Record<string, PlRef | PObjectId | PColumnSpec | RelaxedColumnSelector>,\n): Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> {\n const result: Record<string, PObjectId | PColumnSpec | RelaxedColumnSelector> = {};\n for (const [key, value] of Object.entries(anchors)) {\n if (isPlRef(value)) {\n result[key] =\n ctx.resultPool.getPColumnSpecByRef(value) ??\n throwError(\n `Anchor ${key} with ref ${JSON.stringify(value)} could not be resolved to a PColumnSpec`,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/** Resolve column snapshot providers from explicit sources or context. */\nfunction resolveProviders(\n ctx: RenderCtxBase,\n sources: undefined | ColumnSource[],\n): ColumnSnapshotProvider[] {\n return sources !== undefined\n ? sources.map(toColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n}\n\n/** Map column variants into TableColumnVariant list with anchor-derived isPrimary flag. */\nfunction mapToTableColumnVariants(\n variants: readonly ColumnVariant[],\n anchors: Map<string, ColumnSnapshot<PObjectId>>,\n): TableColumnVariant[] {\n const columnIdToAnchorName = new Map<PObjectId, string>(\n Array.from(anchors.entries(), ([key, { id }]) => [id, key] as const),\n );\n\n return variants.map((variant): TableColumnVariant => {\n const snap = variant.column;\n const isPrimary = columnIdToAnchorName.get(snap.id) !== undefined;\n\n const discoveredId = createDiscoveredPColumnId({\n column: snap.id,\n path: variant.path?.map((p) => ({\n type: \"linker\",\n column: p.linker.id,\n })),\n columnQualifications: variant.qualifications?.forHit,\n queriesQualifications: variant.qualifications?.forQueries,\n });\n return {\n column: {\n id: discoveredId,\n spec: snap.spec,\n data: snap.data,\n dataStatus: snap.dataStatus,\n },\n path: variant.path,\n qualifications: variant.qualifications,\n originalId: snap.id,\n isPrimary,\n };\n });\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgB,4BACd,KACA,SACkC;CAElC,MAAM,kBAAkB;EACtB,GAAG;EACH,SAASA,iBAAe,KAAK,QAAQ,OAAO;CAC9C;CAGA,MAAM,YAAY,iBAAiB,KAAK,gBAAgB,OAAO;CAC/D,IAAI,UAAU,WAAW,GAAG,OAAO,KAAA;CAGnC,MAAM,aAAa,IAAI,wBAAwB,IAAI,WAAW,YAAY,CAAC,CAAC,CACzE,WAAW,SAAS,CAAC,CACrB,MAAM,eAAe;CACxB,IAAI,eAAe,KAAA,GAAW,OAAO,KAAA;CAErC,IAAI;EAGF,OAAO,yBAFU,WAAW,mBAAmB,gBAAgB,QAExB,GADvB,WAAW,WACqB,CAAC;CACnD,UAAU;EACR,WAAW,QAAQ;CACrB;AACF;;;;;;AAOA,SAAgB,4BACd,KACA,SACsB;CACtB,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAClC,MAAM,aAAa,IAAI,wBAAwB,IAAI,WAAW,YAAY,CAAC,CAAC,CACzE,WAAW,kCAAkC,GAAG,CAAC,CAAC,CAClD,UAAU,QAAQ,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,CACvC,MAAM;EACL,wBAAwB;EACxB,SAAS,OAAO,YACd,QACG,QAAQ,SAAS,IAAI,MAAM,UAAU,OAAO,KAAK,IAAI,SAAS,CAAC,CAC/D,KAAK,KAAK,MAAM,CAAC,UAAU,KAAK,IAAI,OAAO,IAAI,CAAC,CACrD;CACF,CAAC;CAEH,IAAI;EACF,MAAM,OAAO,QAAQ,SAAS,QAAQ,IAAI,OAAO,KAAK,QAAQ;EAC9D,OAAO,WACJ,mBAAmB;GAClB,SAAS,KAAK,KAAK,OAAO;IACxB,MAAM;KAAE,MAAM;KAAS,OAAO,YAAY;IAAM;IAChD,MAAM,CAAC,EAAE,MAAM;KAAE,MAAM;KAAS,OAAO,EAAE;IAAK,EAAE,CAAC;GACnD,EAAE;GACF,SAAS,QAAQ,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,MAAM,UAAU,CAAC,GAAG,CAAC;EAC3E,CAAC,CAAC,CACD,KAAK,aAAa;GACjB,GAAG;GACH,QAAQ;IACN,GAAG,QAAQ;IACX,IAAI,0BAA0B;KAC5B,QAAQ,QAAQ,OAAO;KACvB,MAAM,QAAQ,MAAM,KAAK,OAAO;MAC9B,MAAM;MACN,QAAQ,EAAE,OAAO;KACnB,EAAE;KACF,sBAAsB,QAAQ,gBAAgB;KAC9C,uBAAuB,QAAQ,gBAAgB;IACjD,CAAC;IACD,YAAY,QAAQ,OAAO;GAC7B;EACF,EAAE;CACN,UAAU;EACR,WAAW,QAAQ;CACrB;AACF;;AAGA,SAASA,iBACP,KACA,SACiE;CACjE,MAAM,SAA0E,CAAC;CACjF,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,IAAI,QAAQ,KAAK,GACf,OAAO,OACL,IAAI,WAAW,oBAAoB,KAAK,KACxC,WACE,UAAU,IAAI,YAAY,KAAK,UAAU,KAAK,EAAE,wCAClD;MAEF,OAAO,OAAO;CAGlB,OAAO;AACT;;AAGA,SAAS,iBACP,KACA,SAC0B;CAC1B,OAAO,YAAY,KAAA,IACf,QAAQ,IAAI,wBAAwB,IACpC,kCAAkC,GAAG;AAC3C;;AAGA,SAAS,yBACP,UACA,SACsB;CACtB,MAAM,uBAAuB,IAAI,IAC/B,MAAM,KAAK,QAAQ,QAAQ,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAG,CAAU,CACrE;CAEA,OAAO,SAAS,KAAK,YAAgC;EACnD,MAAM,OAAO,QAAQ;EACrB,MAAM,YAAY,qBAAqB,IAAI,KAAK,EAAE,MAAM,KAAA;EAWxD,OAAO;GACL,QAAQ;IACN,IAXiB,0BAA0B;KAC7C,QAAQ,KAAK;KACb,MAAM,QAAQ,MAAM,KAAK,OAAO;MAC9B,MAAM;MACN,QAAQ,EAAE,OAAO;KACnB,EAAE;KACF,sBAAsB,QAAQ,gBAAgB;KAC9C,uBAAuB,QAAQ,gBAAgB;IACjD,CAGmB;IACf,MAAM,KAAK;IACX,MAAM,KAAK;IACX,YAAY,KAAK;GACnB;GACA,MAAM,QAAQ;GACd,gBAAgB,QAAQ;GACxB,YAAY,KAAK;GACjB;EACF;CACF,CAAC;AACH"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_createPlDataTableV2 = require("./createPlDataTableV2.cjs");
|
|
2
|
-
require("./discoverColumns.cjs");
|
|
2
|
+
const require_discoverColumns = require("./discoverColumns.cjs");
|
|
3
3
|
const require_createPlDataTableV3 = require("./createPlDataTableV3.cjs");
|
|
4
4
|
//#region src/components/PlDataTable/createPlDataTable/index.ts
|
|
5
5
|
function createPlDataTable(ctx, options) {
|
|
@@ -8,5 +8,6 @@ function createPlDataTable(ctx, options) {
|
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
10
|
exports.createPlDataTable = createPlDataTable;
|
|
11
|
+
exports.discoverTableColumnSnaphots = require_discoverColumns.discoverTableColumnSnaphots;
|
|
11
12
|
|
|
12
13
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["createPlDataTableV2","createPlDataTableV3"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV7\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options:\n | ({ version: \"v2\" } & createPlDataTableOptionsV2)\n | ({ version?: \"v3\" } & createPlDataTableOptionsV3),\n): PlDataTableModel | undefined {\n if (options.version === \"v2\") {\n return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);\n } else {\n // default version is last (v3 at the moment)\n return createPlDataTableV3(ctx, options);\n }\n}\n\nexport { discoverTableColumnSnaphots } from \"./discoverColumns\";\n"],"mappings":";;;;AAcA,SAAgB,kBACd,KACA,SAG8B;
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createPlDataTableV2","createPlDataTableV3"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV7\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options:\n | ({ version: \"v2\" } & createPlDataTableOptionsV2)\n | ({ version?: \"v3\" } & createPlDataTableOptionsV3),\n): PlDataTableModel | undefined {\n if (options.version === \"v2\") {\n return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);\n } else {\n // default version is last (v3 at the moment)\n return createPlDataTableV3(ctx, options);\n }\n}\n\nexport { discoverTableColumnSnaphots } from \"./discoverColumns\";\n"],"mappings":";;;;AAcA,SAAgB,kBACd,KACA,SAG8B;CAC9B,IAAI,QAAQ,YAAY,MACtB,OAAOA,4BAAAA,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,OAAO;MAGpF,OAAOC,4BAAAA,oBAAoB,KAAK,OAAO;AAE3C"}
|
|
@@ -11,5 +11,5 @@ declare function createPlDataTable<A, U>(ctx: RenderCtxBase<A, U>, options: {
|
|
|
11
11
|
version?: "v3";
|
|
12
12
|
} & createPlDataTableOptionsV3): ReturnType<typeof createPlDataTableV3>;
|
|
13
13
|
//#endregion
|
|
14
|
-
export { createPlDataTable };
|
|
14
|
+
export { createPlDataTable, discoverTableColumnSnaphots };
|
|
15
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"mappings":";;;;;;iBAMgB,iBAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"mappings":";;;;;;iBAMgB,iBAAA,OACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,OAAA;EAAW,OAAA;AAAA,IAAkB,0BAAA,GAC5B,UAAA,QAAkB,mBAAA;AAAA,iBACL,iBAAA,OACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,OAAA;EAAW,OAAA;AAAA,IAAmB,0BAAA,GAC7B,UAAA,QAAkB,mBAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createPlDataTableV2 } from "./createPlDataTableV2.js";
|
|
2
|
-
import "./discoverColumns.js";
|
|
2
|
+
import { discoverTableColumnSnaphots } from "./discoverColumns.js";
|
|
3
3
|
import { createPlDataTableV3 } from "./createPlDataTableV3.js";
|
|
4
4
|
//#region src/components/PlDataTable/createPlDataTable/index.ts
|
|
5
5
|
function createPlDataTable(ctx, options) {
|
|
@@ -7,6 +7,6 @@ function createPlDataTable(ctx, options) {
|
|
|
7
7
|
else return createPlDataTableV3(ctx, options);
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
|
-
export { createPlDataTable };
|
|
10
|
+
export { createPlDataTable, discoverTableColumnSnaphots };
|
|
11
11
|
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV7\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options:\n | ({ version: \"v2\" } & createPlDataTableOptionsV2)\n | ({ version?: \"v3\" } & createPlDataTableOptionsV3),\n): PlDataTableModel | undefined {\n if (options.version === \"v2\") {\n return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);\n } else {\n // default version is last (v3 at the moment)\n return createPlDataTableV3(ctx, options);\n }\n}\n\nexport { discoverTableColumnSnaphots } from \"./discoverColumns\";\n"],"mappings":";;;;AAcA,SAAgB,kBACd,KACA,SAG8B;
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV7\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options:\n | ({ version: \"v2\" } & createPlDataTableOptionsV2)\n | ({ version?: \"v3\" } & createPlDataTableOptionsV3),\n): PlDataTableModel | undefined {\n if (options.version === \"v2\") {\n return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);\n } else {\n // default version is last (v3 at the moment)\n return createPlDataTableV3(ctx, options);\n }\n}\n\nexport { discoverTableColumnSnaphots } from \"./discoverColumns\";\n"],"mappings":";;;;AAcA,SAAgB,kBACd,KACA,SAG8B;CAC9B,IAAI,QAAQ,YAAY,MACtB,OAAO,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,OAAO;MAGpF,OAAO,oBAAoB,KAAK,OAAO;AAE3C"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_derive_distinct_labels = require("../../../labels/derive_distinct_labels.cjs");
|
|
3
2
|
const require_column_snapshot_provider = require("../../../columns/column_snapshot_provider.cjs");
|
|
4
3
|
const require_column_collection_builder = require("../../../columns/column_collection_builder.cjs");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["Annotation","ColumnCollectionBuilder","ArrayColumnProvider","deriveDistinctLabels","deriveDistinctTooltips"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type PColumn,\n type PColumnSpec,\n type PFrameSpecDriver,\n type PObjectId,\n Annotation,\n canonicalizeAxisId,\n DiscoveredPColumnId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnDataStatus, MatchQualifications, MatchVariant } from \"../../../columns\";\nimport type { ColumnMatcher, ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector } from \"../../../columns\";\nimport { ArrayColumnProvider, ColumnCollectionBuilder } from \"../../../columns\";\nimport { isNil } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`\n * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.\n */\nexport function evaluateRules<R extends { match: ColumnMatcher | ColumnSelector }>(\n rules: R[],\n columns: RuleColumn[],\n pframeSpec: PFrameSpecDriver,\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const hasSelectorRules = rules.some((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (hasSelectorRules) {\n const dedupedColumns = dedupeById(columns);\n const pColumns = dedupedColumns.map((c) => ({ id: c.id, spec: c.spec, data: undefined }));\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(new ArrayColumnProvider(pColumns))\n .build();\n if (collection === undefined) return result;\n\n try {\n for (const rule of rules) {\n if (typeof rule.match === \"function\") continue;\n const hits = collection.findColumns({ include: rule.match });\n selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));\n }\n } finally {\n collection.dispose();\n }\n }\n\n for (const col of columns) {\n for (const rule of rules) {\n const matches =\n typeof rule.match === \"function\"\n ? rule.match(col.spec)\n : (selectorHitsByRule.get(rule)?.has(col.id) ?? false);\n if (matches) {\n result.set(col.id, rule);\n break;\n }\n }\n }\n return result;\n}\n\nfunction dedupeById(columns: RuleColumn[]): RuleColumn[] {\n const seen = new Set<PObjectId>();\n const result: RuleColumn[] = [];\n for (const col of columns) {\n if (seen.has(col.id)) continue;\n seen.add(col.id);\n result.push(col);\n }\n return result;\n}\n\n/**\n * Writes derived labels into column and axis annotations.\n * Returns new column objects with modified specs — original columns are not mutated.\n *\n * For each column: writes derived label into Annotation.Label (if present in derivedLabels).\n * For each axis in column specs: writes derived axis label into AxisSpec annotations.\n */\nexport function withLabelAnnotations<\n T extends {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n },\n>(derivedLabels: undefined | Record<string, string>, columns: T[]): T[] {\n if (derivedLabels === undefined) return columns;\n return columns.map((col) => {\n const colLabel = derivedLabels[col.id];\n return {\n ...col,\n spec: {\n ...col.spec,\n ...(isNil(colLabel)\n ? {}\n : { annotations: { ...col.spec.annotations, [Annotation.Label]: colLabel } }),\n axesSpec: col.spec.axesSpec.map((axis) => {\n const label = derivedLabels[canonicalizeAxisId(axis)];\n return isNil(label)\n ? axis\n : { ...axis, annotations: { ...axis.annotations, [Annotation.Label]: label } };\n }),\n },\n } as T;\n });\n}\n\nexport function withDataStatusAnnotations<\n T extends {\n readonly spec: PColumnSpec;\n readonly dataStatus: ColumnDataStatus;\n },\n>(columns: T[]): T[] {\n return columns.map((col) => {\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: {\n ...col.spec.annotations,\n [Annotation.DataStatus]: col.dataStatus,\n },\n },\n } as T;\n });\n}\n\n/**\n * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps\n * into column annotations. Returns new column objects — originals are not mutated.\n */\nexport function withTableVisualAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(\n visibilityByColId: undefined | Map<PObjectId, ColumnVisibilityRule>,\n orderByColId: undefined | Map<PObjectId, ColumnOrderRule>,\n columns: T[],\n): T[] {\n if (visibilityByColId === undefined && orderByColId === undefined) return columns;\n return columns.map((col) => {\n const annotations = { ...col.spec.annotations };\n\n const visibility = getEffectiveVisibility(col, visibilityByColId);\n if (!isNil(visibility)) annotations[Annotation.Table.Visibility] = visibility;\n\n const orderPriority = getOrderPriority(col, orderByColId);\n if (!isNil(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);\n\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: annotations,\n },\n } as T;\n });\n}\n\n/**\n * Writes derived info annotations into column annotations.\n * Columns without an info entry are passed through unchanged.\n */\nexport function withInfoAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(infoById: undefined | Record<string, string>, columns: T[]): T[] {\n if (isNil(infoById)) return columns;\n return columns.map((col) => {\n const info = infoById[col.id];\n if (isNil(info)) return col;\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: { ...col.spec.annotations, [Annotation.Table.Info]: info },\n },\n } as T;\n });\n}\n\nexport function withHidenAxesAnnotations<T extends { readonly spec: PColumnSpec }>(\n columns: T[],\n): T[] {\n return columns.map(\n (col) =>\n ({\n ...col,\n spec: {\n ...col.spec,\n axesSpec: col.spec.axesSpec.map((axis) => ({\n ...axis,\n annotations: { ...axis.annotations, [Annotation.Table.Visibility]: \"hidden\" },\n })),\n },\n }) as T,\n );\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({\n spec: step.linker.spec,\n })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: PObjectId | DiscoveredPColumnId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<DiscoveredPColumnId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<PObjectId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<PObjectId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["Annotation","ColumnCollectionBuilder","ArrayColumnProvider","deriveDistinctLabels","deriveDistinctTooltips"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type PColumn,\n type PColumnSpec,\n type PFrameSpecDriver,\n type PObjectId,\n Annotation,\n canonicalizeAxisId,\n DiscoveredPColumnId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnDataStatus, MatchQualifications, MatchVariant } from \"../../../columns\";\nimport type { ColumnMatcher, ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector } from \"../../../columns\";\nimport { ArrayColumnProvider, ColumnCollectionBuilder } from \"../../../columns\";\nimport { isNil } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`\n * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.\n */\nexport function evaluateRules<R extends { match: ColumnMatcher | ColumnSelector }>(\n rules: R[],\n columns: RuleColumn[],\n pframeSpec: PFrameSpecDriver,\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const hasSelectorRules = rules.some((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (hasSelectorRules) {\n const dedupedColumns = dedupeById(columns);\n const pColumns = dedupedColumns.map((c) => ({ id: c.id, spec: c.spec, data: undefined }));\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(new ArrayColumnProvider(pColumns))\n .build();\n if (collection === undefined) return result;\n\n try {\n for (const rule of rules) {\n if (typeof rule.match === \"function\") continue;\n const hits = collection.findColumns({ include: rule.match });\n selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));\n }\n } finally {\n collection.dispose();\n }\n }\n\n for (const col of columns) {\n for (const rule of rules) {\n const matches =\n typeof rule.match === \"function\"\n ? rule.match(col.spec)\n : (selectorHitsByRule.get(rule)?.has(col.id) ?? false);\n if (matches) {\n result.set(col.id, rule);\n break;\n }\n }\n }\n return result;\n}\n\nfunction dedupeById(columns: RuleColumn[]): RuleColumn[] {\n const seen = new Set<PObjectId>();\n const result: RuleColumn[] = [];\n for (const col of columns) {\n if (seen.has(col.id)) continue;\n seen.add(col.id);\n result.push(col);\n }\n return result;\n}\n\n/**\n * Writes derived labels into column and axis annotations.\n * Returns new column objects with modified specs — original columns are not mutated.\n *\n * For each column: writes derived label into Annotation.Label (if present in derivedLabels).\n * For each axis in column specs: writes derived axis label into AxisSpec annotations.\n */\nexport function withLabelAnnotations<\n T extends {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n },\n>(derivedLabels: undefined | Record<string, string>, columns: T[]): T[] {\n if (derivedLabels === undefined) return columns;\n return columns.map((col) => {\n const colLabel = derivedLabels[col.id];\n return {\n ...col,\n spec: {\n ...col.spec,\n ...(isNil(colLabel)\n ? {}\n : { annotations: { ...col.spec.annotations, [Annotation.Label]: colLabel } }),\n axesSpec: col.spec.axesSpec.map((axis) => {\n const label = derivedLabels[canonicalizeAxisId(axis)];\n return isNil(label)\n ? axis\n : { ...axis, annotations: { ...axis.annotations, [Annotation.Label]: label } };\n }),\n },\n } as T;\n });\n}\n\nexport function withDataStatusAnnotations<\n T extends {\n readonly spec: PColumnSpec;\n readonly dataStatus: ColumnDataStatus;\n },\n>(columns: T[]): T[] {\n return columns.map((col) => {\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: {\n ...col.spec.annotations,\n [Annotation.DataStatus]: col.dataStatus,\n },\n },\n } as T;\n });\n}\n\n/**\n * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps\n * into column annotations. Returns new column objects — originals are not mutated.\n */\nexport function withTableVisualAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(\n visibilityByColId: undefined | Map<PObjectId, ColumnVisibilityRule>,\n orderByColId: undefined | Map<PObjectId, ColumnOrderRule>,\n columns: T[],\n): T[] {\n if (visibilityByColId === undefined && orderByColId === undefined) return columns;\n return columns.map((col) => {\n const annotations = { ...col.spec.annotations };\n\n const visibility = getEffectiveVisibility(col, visibilityByColId);\n if (!isNil(visibility)) annotations[Annotation.Table.Visibility] = visibility;\n\n const orderPriority = getOrderPriority(col, orderByColId);\n if (!isNil(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);\n\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: annotations,\n },\n } as T;\n });\n}\n\n/**\n * Writes derived info annotations into column annotations.\n * Columns without an info entry are passed through unchanged.\n */\nexport function withInfoAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(infoById: undefined | Record<string, string>, columns: T[]): T[] {\n if (isNil(infoById)) return columns;\n return columns.map((col) => {\n const info = infoById[col.id];\n if (isNil(info)) return col;\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: { ...col.spec.annotations, [Annotation.Table.Info]: info },\n },\n } as T;\n });\n}\n\nexport function withHidenAxesAnnotations<T extends { readonly spec: PColumnSpec }>(\n columns: T[],\n): T[] {\n return columns.map(\n (col) =>\n ({\n ...col,\n spec: {\n ...col.spec,\n axesSpec: col.spec.axesSpec.map((axis) => ({\n ...axis,\n annotations: { ...axis.annotations, [Annotation.Table.Visibility]: \"hidden\" },\n })),\n },\n }) as T,\n );\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({\n spec: step.linker.spec,\n })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: PObjectId | DiscoveredPColumnId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<DiscoveredPColumnId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<PObjectId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<PObjectId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":"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"}
|
|
@@ -17,5 +17,5 @@ declare function getEffectiveVisibility(col: RuleColumn, visibilityByColId?: Map
|
|
|
17
17
|
/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */
|
|
18
18
|
declare function getOrderPriority(col: RuleColumn, orderByColId?: Map<PObjectId, ColumnOrderRule>): undefined | number;
|
|
19
19
|
//#endregion
|
|
20
|
-
export { getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional };
|
|
20
|
+
export { RuleColumn, getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional };
|
|
21
21
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"mappings":";;;;;iBA0BgB,cAAA,CAAe,IAAA;EAAQ,WAAA,GAAc,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"mappings":";;;;;iBA0BgB,cAAA,CAAe,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;;iBAK/C,gBAAA,CAAiB,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;;KAKrD,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,SAAA;AALtC;AAAA,iBAQgB,sBAAA,CACd,GAAA,EAAK,UAAA,EACL,iBAAA,GAAoB,GAAA,CAAI,SAAA,EAAW,oBAAA;;iBAUrB,gBAAA,CACd,GAAA,EAAK,UAAA,EACL,YAAA,GAAe,GAAA,CAAI,SAAA,EAAW,eAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["isNil"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type PColumn,\n type PColumnSpec,\n type PFrameSpecDriver,\n type PObjectId,\n Annotation,\n canonicalizeAxisId,\n DiscoveredPColumnId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnDataStatus, MatchQualifications, MatchVariant } from \"../../../columns\";\nimport type { ColumnMatcher, ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector } from \"../../../columns\";\nimport { ArrayColumnProvider, ColumnCollectionBuilder } from \"../../../columns\";\nimport { isNil } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`\n * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.\n */\nexport function evaluateRules<R extends { match: ColumnMatcher | ColumnSelector }>(\n rules: R[],\n columns: RuleColumn[],\n pframeSpec: PFrameSpecDriver,\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const hasSelectorRules = rules.some((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (hasSelectorRules) {\n const dedupedColumns = dedupeById(columns);\n const pColumns = dedupedColumns.map((c) => ({ id: c.id, spec: c.spec, data: undefined }));\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(new ArrayColumnProvider(pColumns))\n .build();\n if (collection === undefined) return result;\n\n try {\n for (const rule of rules) {\n if (typeof rule.match === \"function\") continue;\n const hits = collection.findColumns({ include: rule.match });\n selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));\n }\n } finally {\n collection.dispose();\n }\n }\n\n for (const col of columns) {\n for (const rule of rules) {\n const matches =\n typeof rule.match === \"function\"\n ? rule.match(col.spec)\n : (selectorHitsByRule.get(rule)?.has(col.id) ?? false);\n if (matches) {\n result.set(col.id, rule);\n break;\n }\n }\n }\n return result;\n}\n\nfunction dedupeById(columns: RuleColumn[]): RuleColumn[] {\n const seen = new Set<PObjectId>();\n const result: RuleColumn[] = [];\n for (const col of columns) {\n if (seen.has(col.id)) continue;\n seen.add(col.id);\n result.push(col);\n }\n return result;\n}\n\n/**\n * Writes derived labels into column and axis annotations.\n * Returns new column objects with modified specs — original columns are not mutated.\n *\n * For each column: writes derived label into Annotation.Label (if present in derivedLabels).\n * For each axis in column specs: writes derived axis label into AxisSpec annotations.\n */\nexport function withLabelAnnotations<\n T extends {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n },\n>(derivedLabels: undefined | Record<string, string>, columns: T[]): T[] {\n if (derivedLabels === undefined) return columns;\n return columns.map((col) => {\n const colLabel = derivedLabels[col.id];\n return {\n ...col,\n spec: {\n ...col.spec,\n ...(isNil(colLabel)\n ? {}\n : { annotations: { ...col.spec.annotations, [Annotation.Label]: colLabel } }),\n axesSpec: col.spec.axesSpec.map((axis) => {\n const label = derivedLabels[canonicalizeAxisId(axis)];\n return isNil(label)\n ? axis\n : { ...axis, annotations: { ...axis.annotations, [Annotation.Label]: label } };\n }),\n },\n } as T;\n });\n}\n\nexport function withDataStatusAnnotations<\n T extends {\n readonly spec: PColumnSpec;\n readonly dataStatus: ColumnDataStatus;\n },\n>(columns: T[]): T[] {\n return columns.map((col) => {\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: {\n ...col.spec.annotations,\n [Annotation.DataStatus]: col.dataStatus,\n },\n },\n } as T;\n });\n}\n\n/**\n * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps\n * into column annotations. Returns new column objects — originals are not mutated.\n */\nexport function withTableVisualAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(\n visibilityByColId: undefined | Map<PObjectId, ColumnVisibilityRule>,\n orderByColId: undefined | Map<PObjectId, ColumnOrderRule>,\n columns: T[],\n): T[] {\n if (visibilityByColId === undefined && orderByColId === undefined) return columns;\n return columns.map((col) => {\n const annotations = { ...col.spec.annotations };\n\n const visibility = getEffectiveVisibility(col, visibilityByColId);\n if (!isNil(visibility)) annotations[Annotation.Table.Visibility] = visibility;\n\n const orderPriority = getOrderPriority(col, orderByColId);\n if (!isNil(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);\n\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: annotations,\n },\n } as T;\n });\n}\n\n/**\n * Writes derived info annotations into column annotations.\n * Columns without an info entry are passed through unchanged.\n */\nexport function withInfoAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(infoById: undefined | Record<string, string>, columns: T[]): T[] {\n if (isNil(infoById)) return columns;\n return columns.map((col) => {\n const info = infoById[col.id];\n if (isNil(info)) return col;\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: { ...col.spec.annotations, [Annotation.Table.Info]: info },\n },\n } as T;\n });\n}\n\nexport function withHidenAxesAnnotations<T extends { readonly spec: PColumnSpec }>(\n columns: T[],\n): T[] {\n return columns.map(\n (col) =>\n ({\n ...col,\n spec: {\n ...col.spec,\n axesSpec: col.spec.axesSpec.map((axis) => ({\n ...axis,\n annotations: { ...axis.annotations, [Annotation.Table.Visibility]: \"hidden\" },\n })),\n },\n }) as T,\n );\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({\n spec: step.linker.spec,\n })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: PObjectId | DiscoveredPColumnId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<DiscoveredPColumnId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<PObjectId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<PObjectId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":";;;;;;;;;;AA0BA,SAAgB,eAAe,MAA6C;AAC1E,QAAO,eAAe,MAAM,WAAW,MAAM,WAAW,KAAK;;;AAI/D,SAAgB,iBAAiB,MAA6C;AAC5E,QAAO,eAAe,MAAM,WAAW,MAAM,WAAW,KAAK;;;AAO/D,SAAgB,uBACd,KACA,mBAC+C;CAC/C,MAAM,OAAO,mBAAmB,IAAI,IAAI,GAAG;AAC3C,KAAI,SAAS,KAAA,EAAW,QAAO,KAAK;AACpC,KAAI,eAAe,IAAI,KAAK,CAAE,QAAO;AACrC,KAAI,iBAAiB,IAAI,KAAK,CAAE,QAAO;;;AAKzC,SAAgB,iBACd,KACA,cACoB;CACpB,MAAM,OAAO,cAAc,IAAI,IAAI,GAAG;AACtC,KAAI,SAAS,KAAA,EAAW,QAAO,KAAK;CACpC,MAAM,aAAa,OAAO,eAAe,IAAI,MAAM,WAAW,MAAM,cAAc,CAAC;AACnF,QAAO,MAAM,WAAW,GAAG,KAAA,IAAY;;;;;;;;;;AAWzC,SAAgB,cACd,OACA,SACA,YACmB;CACnB,MAAM,yBAAS,IAAI,KAAmB;AACtC,KAAI,MAAM,WAAW,KAAK,QAAQ,WAAW,EAAG,QAAO;CAEvD,MAAM,mBAAmB,MAAM,MAAM,SAAS,OAAO,KAAK,UAAU,WAAW;CAC/E,MAAM,qCAAqB,IAAI,KAAwB;AAEvD,KAAI,kBAAkB;EAEpB,MAAM,WADiB,WAAW,QAAQ,CACV,KAAK,OAAO;GAAE,IAAI,EAAE;GAAI,MAAM,EAAE;GAAM,MAAM,KAAA;GAAW,EAAE;EACzF,MAAM,aAAa,IAAI,wBAAwB,WAAW,CACvD,UAAU,IAAI,oBAAoB,SAAS,CAAC,CAC5C,OAAO;AACV,MAAI,eAAe,KAAA,EAAW,QAAO;AAErC,MAAI;AACF,QAAK,MAAM,QAAQ,OAAO;AACxB,QAAI,OAAO,KAAK,UAAU,WAAY;IACtC,MAAM,OAAO,WAAW,YAAY,EAAE,SAAS,KAAK,OAAO,CAAC;AAC5D,uBAAmB,IAAI,MAAM,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC;;YAEtD;AACR,cAAW,SAAS;;;AAIxB,MAAK,MAAM,OAAO,QAChB,MAAK,MAAM,QAAQ,MAKjB,KAHE,OAAO,KAAK,UAAU,aAClB,KAAK,MAAM,IAAI,KAAK,GACnB,mBAAmB,IAAI,KAAK,EAAE,IAAI,IAAI,GAAG,IAAI,OACvC;AACX,SAAO,IAAI,IAAI,IAAI,KAAK;AACxB;;AAIN,QAAO;;AAGT,SAAS,WAAW,SAAqC;CACvD,MAAM,uBAAO,IAAI,KAAgB;CACjC,MAAM,SAAuB,EAAE;AAC/B,MAAK,MAAM,OAAO,SAAS;AACzB,MAAI,KAAK,IAAI,IAAI,GAAG,CAAE;AACtB,OAAK,IAAI,IAAI,GAAG;AAChB,SAAO,KAAK,IAAI;;AAElB,QAAO;;;;;;;;;AAUT,SAAgB,qBAKd,eAAmD,SAAmB;AACtE,KAAI,kBAAkB,KAAA,EAAW,QAAO;AACxC,QAAO,QAAQ,KAAK,QAAQ;EAC1B,MAAM,WAAW,cAAc,IAAI;AACnC,SAAO;GACL,GAAG;GACH,MAAM;IACJ,GAAG,IAAI;IACP,GAAIA,QAAM,SAAS,GACf,EAAE,GACF,EAAE,aAAa;KAAE,GAAG,IAAI,KAAK;MAAc,WAAW,QAAQ;KAAU,EAAE;IAC9E,UAAU,IAAI,KAAK,SAAS,KAAK,SAAS;KACxC,MAAM,QAAQ,cAAc,mBAAmB,KAAK;AACpD,YAAOA,QAAM,MAAM,GACf,OACA;MAAE,GAAG;MAAM,aAAa;OAAE,GAAG,KAAK;QAAc,WAAW,QAAQ;OAAO;MAAE;MAChF;IACH;GACF;GACD;;AAGJ,SAAgB,0BAKd,SAAmB;AACnB,QAAO,QAAQ,KAAK,QAAQ;AAC1B,SAAO;GACL,GAAG;GACH,MAAM;IACJ,GAAG,IAAI;IACP,aAAa;KACX,GAAG,IAAI,KAAK;MACX,WAAW,aAAa,IAAI;KAC9B;IACF;GACF;GACD;;;;;;AAOJ,SAAgB,2BAGd,mBACA,cACA,SACK;AACL,KAAI,sBAAsB,KAAA,KAAa,iBAAiB,KAAA,EAAW,QAAO;AAC1E,QAAO,QAAQ,KAAK,QAAQ;EAC1B,MAAM,cAAc,EAAE,GAAG,IAAI,KAAK,aAAa;EAE/C,MAAM,aAAa,uBAAuB,KAAK,kBAAkB;AACjE,MAAI,CAACA,QAAM,WAAW,CAAE,aAAY,WAAW,MAAM,cAAc;EAEnE,MAAM,gBAAgB,iBAAiB,KAAK,aAAa;AACzD,MAAI,CAACA,QAAM,cAAc,CAAE,aAAY,WAAW,MAAM,iBAAiB,OAAO,cAAc;AAE9F,SAAO;GACL,GAAG;GACH,MAAM;IACJ,GAAG,IAAI;IACM;IACd;GACF;GACD;;;;;;AAOJ,SAAgB,oBAEd,UAA8C,SAAmB;AACjE,KAAIA,QAAM,SAAS,CAAE,QAAO;AAC5B,QAAO,QAAQ,KAAK,QAAQ;EAC1B,MAAM,OAAO,SAAS,IAAI;AAC1B,MAAIA,QAAM,KAAK,CAAE,QAAO;AACxB,SAAO;GACL,GAAG;GACH,MAAM;IACJ,GAAG,IAAI;IACP,aAAa;KAAE,GAAG,IAAI,KAAK;MAAc,WAAW,MAAM,OAAO;KAAM;IACxE;GACF;GACD;;AAGJ,SAAgB,yBACd,SACK;AACL,QAAO,QAAQ,KACZ,SACE;EACC,GAAG;EACH,MAAM;GACJ,GAAG,IAAI;GACP,UAAU,IAAI,KAAK,SAAS,KAAK,UAAU;IACzC,GAAG;IACH,aAAa;KAAE,GAAG,KAAK;MAAc,WAAW,MAAM,aAAa;KAAU;IAC9E,EAAE;GACJ;EACF,EACJ;;;AAYH,SAAgB,gBAAgB,SAGL;CACzB,MAAM,EAAE,SAAS,wBAAwB;AAYzC,QAJqB,qBAPL,QAAQ,KAAK,OAAO;EAClC,MAAM,EAAE;EACR,YAAY,EAAE,YAAY,KAAK,UAAU,EACvC,MAAM,KAAK,OAAO,MACnB,EAAE;EACH,gBAAgB,EAAE;EACnB,EAAE,EACgD,oBAAoB,CAAC,QACrE,KAAK,OAAO,WAAY,IAAI,QAAQ,OAAO,MAAM,OAAQ,MAC1D,EAAE,CACH;;;AAcH,SAAgB,kBAAkB,SAEM;CACtC,MAAM,EAAE,YAAY;CAEpB,MAAM,yBAAyB,QAAQ,QAAgC,KAAK,MAAM;AAChF,SAAO,IAAI,IAAI,SAAS,GAAG,aAAa,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,KAAK,EAAE;oBAC1F,IAAI,KAAK,CAAC;CAEb,MAAM,EAAE,YAAY,QAAQ,QACzB,EAAE,SAAS,eAAe,MAAM;EAC/B,MAAM,KAAK,SAAS,GAAG,aAAa,IAAI,EAAE;EAC1C,MAAM,eAAe,uBAAuB,IAAI,GAAG;EACnD,MAAM,gBACH,YAAY,IAAI,KAAK,YAAY,IAAI,GAAG,IAAI,KAAK,EAAE,EAAE,YAAY,IAAI,GAAG;AAE3E,UAAQ,KAAK;GACX,MAAM,EAAE;GACR,YAAY,EAAE;GACd,gBAAgB,EAAE;GAClB;GACA;GACD,CAAC;AAEF,SAAO;GAAE;GAAS;GAAa;IAEjC;EAAE,SAAS,EAAE;EAAoB,6BAAa,IAAI,KAAwB;EAAE,CAC7E;CAED,MAAM,WAAW,uBAAuB,QAAQ;AAEhD,QAAO,OAAO,YACZ,SAAS,SAAS,GAAG,MAAOA,QAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAU,CAAE,CAC5E"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["isNil"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type PColumn,\n type PColumnSpec,\n type PFrameSpecDriver,\n type PObjectId,\n Annotation,\n canonicalizeAxisId,\n DiscoveredPColumnId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnDataStatus, MatchQualifications, MatchVariant } from \"../../../columns\";\nimport type { ColumnMatcher, ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector } from \"../../../columns\";\nimport { ArrayColumnProvider, ColumnCollectionBuilder } from \"../../../columns\";\nimport { isNil } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`\n * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.\n */\nexport function evaluateRules<R extends { match: ColumnMatcher | ColumnSelector }>(\n rules: R[],\n columns: RuleColumn[],\n pframeSpec: PFrameSpecDriver,\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const hasSelectorRules = rules.some((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (hasSelectorRules) {\n const dedupedColumns = dedupeById(columns);\n const pColumns = dedupedColumns.map((c) => ({ id: c.id, spec: c.spec, data: undefined }));\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(new ArrayColumnProvider(pColumns))\n .build();\n if (collection === undefined) return result;\n\n try {\n for (const rule of rules) {\n if (typeof rule.match === \"function\") continue;\n const hits = collection.findColumns({ include: rule.match });\n selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));\n }\n } finally {\n collection.dispose();\n }\n }\n\n for (const col of columns) {\n for (const rule of rules) {\n const matches =\n typeof rule.match === \"function\"\n ? rule.match(col.spec)\n : (selectorHitsByRule.get(rule)?.has(col.id) ?? false);\n if (matches) {\n result.set(col.id, rule);\n break;\n }\n }\n }\n return result;\n}\n\nfunction dedupeById(columns: RuleColumn[]): RuleColumn[] {\n const seen = new Set<PObjectId>();\n const result: RuleColumn[] = [];\n for (const col of columns) {\n if (seen.has(col.id)) continue;\n seen.add(col.id);\n result.push(col);\n }\n return result;\n}\n\n/**\n * Writes derived labels into column and axis annotations.\n * Returns new column objects with modified specs — original columns are not mutated.\n *\n * For each column: writes derived label into Annotation.Label (if present in derivedLabels).\n * For each axis in column specs: writes derived axis label into AxisSpec annotations.\n */\nexport function withLabelAnnotations<\n T extends {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n },\n>(derivedLabels: undefined | Record<string, string>, columns: T[]): T[] {\n if (derivedLabels === undefined) return columns;\n return columns.map((col) => {\n const colLabel = derivedLabels[col.id];\n return {\n ...col,\n spec: {\n ...col.spec,\n ...(isNil(colLabel)\n ? {}\n : { annotations: { ...col.spec.annotations, [Annotation.Label]: colLabel } }),\n axesSpec: col.spec.axesSpec.map((axis) => {\n const label = derivedLabels[canonicalizeAxisId(axis)];\n return isNil(label)\n ? axis\n : { ...axis, annotations: { ...axis.annotations, [Annotation.Label]: label } };\n }),\n },\n } as T;\n });\n}\n\nexport function withDataStatusAnnotations<\n T extends {\n readonly spec: PColumnSpec;\n readonly dataStatus: ColumnDataStatus;\n },\n>(columns: T[]): T[] {\n return columns.map((col) => {\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: {\n ...col.spec.annotations,\n [Annotation.DataStatus]: col.dataStatus,\n },\n },\n } as T;\n });\n}\n\n/**\n * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps\n * into column annotations. Returns new column objects — originals are not mutated.\n */\nexport function withTableVisualAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(\n visibilityByColId: undefined | Map<PObjectId, ColumnVisibilityRule>,\n orderByColId: undefined | Map<PObjectId, ColumnOrderRule>,\n columns: T[],\n): T[] {\n if (visibilityByColId === undefined && orderByColId === undefined) return columns;\n return columns.map((col) => {\n const annotations = { ...col.spec.annotations };\n\n const visibility = getEffectiveVisibility(col, visibilityByColId);\n if (!isNil(visibility)) annotations[Annotation.Table.Visibility] = visibility;\n\n const orderPriority = getOrderPriority(col, orderByColId);\n if (!isNil(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);\n\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: annotations,\n },\n } as T;\n });\n}\n\n/**\n * Writes derived info annotations into column annotations.\n * Columns without an info entry are passed through unchanged.\n */\nexport function withInfoAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(infoById: undefined | Record<string, string>, columns: T[]): T[] {\n if (isNil(infoById)) return columns;\n return columns.map((col) => {\n const info = infoById[col.id];\n if (isNil(info)) return col;\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: { ...col.spec.annotations, [Annotation.Table.Info]: info },\n },\n } as T;\n });\n}\n\nexport function withHidenAxesAnnotations<T extends { readonly spec: PColumnSpec }>(\n columns: T[],\n): T[] {\n return columns.map(\n (col) =>\n ({\n ...col,\n spec: {\n ...col.spec,\n axesSpec: col.spec.axesSpec.map((axis) => ({\n ...axis,\n annotations: { ...axis.annotations, [Annotation.Table.Visibility]: \"hidden\" },\n })),\n },\n }) as T,\n );\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({\n spec: step.linker.spec,\n })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: PObjectId | DiscoveredPColumnId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<DiscoveredPColumnId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<PObjectId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<PObjectId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableSheet.cjs","names":[],"sources":["../../../src/components/PlDataTable/createPlDataTableSheet.ts"],"sourcesContent":["import type { AxisSpec } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { PlDataTableSheet } from \"./typesV7\";\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"],"mappings":";;AAKA,SAAgB,uBACd,KACA,MACA,QACkB;CAClB,MAAM,SAAS,IAAI,WAAW,WAAW,
|
|
1
|
+
{"version":3,"file":"createPlDataTableSheet.cjs","names":[],"sources":["../../../src/components/PlDataTable/createPlDataTableSheet.ts"],"sourcesContent":["import type { AxisSpec } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { PlDataTableSheet } from \"./typesV7\";\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"],"mappings":";;AAKA,SAAgB,uBACd,KACA,MACA,QACkB;CAClB,MAAM,SAAS,IAAI,WAAW,WAAW,IAAI;CAC7C,OAAO;EACL;EACA,SAAS,OAAO,KAAK,OAAO;GAC1B,OAAO;GACP,OAAO,SAAS,MAAM,EAAE,SAAS;EACnC,EAAE;EACF,cAAc,OAAO;CACvB;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableSheet.d.ts","names":[],"sources":["../../../src/components/PlDataTable/createPlDataTableSheet.ts"],"mappings":";;;;;;iBAKgB,sBAAA,
|
|
1
|
+
{"version":3,"file":"createPlDataTableSheet.d.ts","names":[],"sources":["../../../src/components/PlDataTable/createPlDataTableSheet.ts"],"mappings":";;;;;;iBAKgB,sBAAA,OACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,IAAA,EAAM,QAAA,EACN,MAAA,wBACC,gBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableSheet.js","names":[],"sources":["../../../src/components/PlDataTable/createPlDataTableSheet.ts"],"sourcesContent":["import type { AxisSpec } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { PlDataTableSheet } from \"./typesV7\";\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"],"mappings":";;AAKA,SAAgB,uBACd,KACA,MACA,QACkB;CAClB,MAAM,SAAS,IAAI,WAAW,WAAW,
|
|
1
|
+
{"version":3,"file":"createPlDataTableSheet.js","names":[],"sources":["../../../src/components/PlDataTable/createPlDataTableSheet.ts"],"sourcesContent":["import type { AxisSpec } from \"@milaboratories/pl-model-common\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { PlDataTableSheet } from \"./typesV7\";\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"],"mappings":";;AAKA,SAAgB,uBACd,KACA,MACA,QACkB;CAClB,MAAM,SAAS,IAAI,WAAW,WAAW,IAAI;CAC7C,OAAO;EACL;EACA,SAAS,OAAO,KAAK,OAAO;GAC1B,OAAO;GACP,OAAO,SAAS,MAAM,EAAE,SAAS;EACnC,EAAE;EACF,cAAc,OAAO;CACvB;AACF"}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
require("./state-migration.cjs");
|
|
2
|
-
require("./createPlDataTableSheet.cjs");
|
|
3
|
-
require("./createPlDataTable/utils.cjs");
|
|
4
|
-
require("./createPlDataTable/createPlDataTableV2.cjs");
|
|
5
|
-
require("./createPlDataTable/discoverColumns.cjs");
|
|
6
|
-
require("./createPlDataTable/createPlDataTableV3.cjs");
|
|
7
|
-
require("./createPlDataTable/index.cjs");
|
|
1
|
+
const require_state_migration = require("./state-migration.cjs");
|
|
2
|
+
const require_createPlDataTableSheet = require("./createPlDataTableSheet.cjs");
|
|
3
|
+
const require_utils = require("./createPlDataTable/utils.cjs");
|
|
4
|
+
const require_createPlDataTableV2 = require("./createPlDataTable/createPlDataTableV2.cjs");
|
|
5
|
+
const require_discoverColumns = require("./createPlDataTable/discoverColumns.cjs");
|
|
6
|
+
const require_createPlDataTableV3 = require("./createPlDataTable/createPlDataTableV3.cjs");
|
|
7
|
+
const require_index = require("./createPlDataTable/index.cjs");
|
|
8
|
+
exports.createDefaultPTableParams = require_state_migration.createDefaultPTableParams;
|
|
9
|
+
exports.createPlDataTable = require_index.createPlDataTable;
|
|
10
|
+
exports.createPlDataTableSheet = require_createPlDataTableSheet.createPlDataTableSheet;
|
|
11
|
+
exports.createPlDataTableStateV2 = require_state_migration.createPlDataTableStateV2;
|
|
12
|
+
exports.createPlDataTableV2 = require_createPlDataTableV2.createPlDataTableV2;
|
|
13
|
+
exports.createPlDataTableV3 = require_createPlDataTableV3.createPlDataTableV3;
|
|
14
|
+
exports.discoverTableColumnSnaphots = require_discoverColumns.discoverTableColumnSnaphots;
|
|
15
|
+
exports.getEffectiveVisibility = require_utils.getEffectiveVisibility;
|
|
16
|
+
exports.getOrderPriority = require_utils.getOrderPriority;
|
|
17
|
+
exports.isColumnHidden = require_utils.isColumnHidden;
|
|
18
|
+
exports.isColumnOptional = require_utils.isColumnOptional;
|
|
19
|
+
exports.upgradePlDataTableStateV2 = require_state_migration.upgradePlDataTableStateV2;
|
|
@@ -5,4 +5,5 @@ import { createPlDataTableV2 } from "./createPlDataTable/createPlDataTableV2.js"
|
|
|
5
5
|
import { discoverTableColumnSnaphots } from "./createPlDataTable/discoverColumns.js";
|
|
6
6
|
import { ColumnMatcher, ColumnOrderRule, ColumnVisibilityRule, ColumnsDisplayOptions, ColumnsSelectorConfig, createPlDataTableOptionsV3, createPlDataTableV3 } from "./createPlDataTable/createPlDataTableV3.js";
|
|
7
7
|
import { createPlDataTable } from "./createPlDataTable/index.js";
|
|
8
|
-
import { getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional } from "./createPlDataTable/utils.js";
|
|
8
|
+
import { getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional } from "./createPlDataTable/utils.js";
|
|
9
|
+
export { type ColumnMatcher, type ColumnOrderRule, type ColumnVisibilityRule, type ColumnsDisplayOptions, type ColumnsSelectorConfig, type PTableParamsV2, type PlDataTableFilterMeta, type PlDataTableFilterSpecLeaf, type PlDataTableFilters, type PlDataTableFiltersWithMeta, type PlDataTableGridStateCore, type PlDataTableModel, type PlDataTableSheet, type PlDataTableSheetState, type PlDataTableStateV2, type PlDataTableStateV2CacheEntry, type PlDataTableStateV2Normalized, type PlTableColumnIdJson, createDefaultPTableParams, createPlDataTable, type createPlDataTableOptionsV3, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, discoverTableColumnSnaphots, getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional, upgradePlDataTableStateV2 };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import "./state-migration.js";
|
|
2
|
-
import "./createPlDataTableSheet.js";
|
|
3
|
-
import "./createPlDataTable/utils.js";
|
|
4
|
-
import "./createPlDataTable/createPlDataTableV2.js";
|
|
5
|
-
import "./createPlDataTable/discoverColumns.js";
|
|
6
|
-
import "./createPlDataTable/createPlDataTableV3.js";
|
|
7
|
-
import "./createPlDataTable/index.js";
|
|
1
|
+
import { createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./state-migration.js";
|
|
2
|
+
import { createPlDataTableSheet } from "./createPlDataTableSheet.js";
|
|
3
|
+
import { getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional } from "./createPlDataTable/utils.js";
|
|
4
|
+
import { createPlDataTableV2 } from "./createPlDataTable/createPlDataTableV2.js";
|
|
5
|
+
import { discoverTableColumnSnaphots } from "./createPlDataTable/discoverColumns.js";
|
|
6
|
+
import { createPlDataTableV3 } from "./createPlDataTable/createPlDataTableV3.js";
|
|
7
|
+
import { createPlDataTable } from "./createPlDataTable/index.js";
|
|
8
|
+
export { createDefaultPTableParams, createPlDataTable, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, discoverTableColumnSnaphots, getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional, upgradePlDataTableStateV2 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.cjs","names":[],"sources":["../../../src/components/PlDataTable/labels.ts"],"sourcesContent":["import type { AxisId, PColumn, PColumnSpec, PObjectId } from \"@milaboratories/pl-model-common\";\nimport {\n getAxisId,\n isLabelColumn,\n matchAxisId,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../render\";\nimport { ColumnCollectionBuilder, collectCtxColumnSnapshotProviders } from \"../../columns\";\n\n/**\n * Get all label columns visible in the current render context\n * (result pool + block outputs + prerun).\n */\nexport function getAllLabelColumns<A, U>(\n ctx: RenderCtxBase<A, U>,\n): PColumn<PColumnDataUniversal>[] {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .build({ allowPartialColumnList: true });\n try {\n return collection\n .findColumns({ include: { name: PColumnName.Label, axes: [] } })\n .reduce<PColumn<PColumnDataUniversal>[]>((acc, hit) => {\n const data = hit.data?.get();\n return data === undefined ? acc : [...acc, { id: hit.id, spec: hit.spec, data }];\n }, []);\n } finally {\n collection.dispose();\n }\n}\n\n/** Get label columns matching the provided columns from the result pool */\nexport function getMatchingLabelColumns(\n columns: { spec: PColumnSpec }[],\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 = (\n id: PObjectId,\n domain?: Record<string, string>,\n contextDomain?: Record<string, string>,\n ): 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 if (contextDomain) {\n for (const k in contextDomain) {\n wid += k;\n wid += contextDomain[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 =\n Object.keys(axisId.domain ?? {}).length + Object.keys(axisId.contextDomain ?? {}).length;\n const labelDomainLen =\n Object.keys(labelAxis.domain ?? {}).length +\n Object.keys(labelAxis.contextDomain ?? {}).length;\n if (dataDomainLen > labelDomainLen) {\n labelColumns.push({\n id: colId(labelColumn.id, axisId.domain, axisId.contextDomain),\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"],"mappings":"
|
|
1
|
+
{"version":3,"file":"labels.cjs","names":[],"sources":["../../../src/components/PlDataTable/labels.ts"],"sourcesContent":["import type { AxisId, PColumn, PColumnSpec, PObjectId } from \"@milaboratories/pl-model-common\";\nimport {\n getAxisId,\n isLabelColumn,\n matchAxisId,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../render\";\nimport { ColumnCollectionBuilder, collectCtxColumnSnapshotProviders } from \"../../columns\";\n\n/**\n * Get all label columns visible in the current render context\n * (result pool + block outputs + prerun).\n */\nexport function getAllLabelColumns<A, U>(\n ctx: RenderCtxBase<A, U>,\n): PColumn<PColumnDataUniversal>[] {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .build({ allowPartialColumnList: true });\n try {\n return collection\n .findColumns({ include: { name: PColumnName.Label, axes: [] } })\n .reduce<PColumn<PColumnDataUniversal>[]>((acc, hit) => {\n const data = hit.data?.get();\n return data === undefined ? acc : [...acc, { id: hit.id, spec: hit.spec, data }];\n }, []);\n } finally {\n collection.dispose();\n }\n}\n\n/** Get label columns matching the provided columns from the result pool */\nexport function getMatchingLabelColumns(\n columns: { spec: PColumnSpec }[],\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 = (\n id: PObjectId,\n domain?: Record<string, string>,\n contextDomain?: Record<string, string>,\n ): 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 if (contextDomain) {\n for (const k in contextDomain) {\n wid += k;\n wid += contextDomain[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 =\n Object.keys(axisId.domain ?? {}).length + Object.keys(axisId.contextDomain ?? {}).length;\n const labelDomainLen =\n Object.keys(labelAxis.domain ?? {}).length +\n Object.keys(labelAxis.contextDomain ?? {}).length;\n if (dataDomainLen > labelDomainLen) {\n labelColumns.push({\n id: colId(labelColumn.id, axisId.domain, axisId.contextDomain),\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"],"mappings":";;;;AAkCA,SAAgB,wBACd,SACA,iBACiC;CAEjC,MAAM,oBAAoC,CAAC;CAC3C,MAAM,oBAAoC,CAAC;CAC3C,KAAK,MAAM,UAAU,SACnB,KAAA,GAAA,gCAAA,cAAA,CAAkB,OAAO,IAAI,GAC3B,kBAAkB,KAAK,MAAM;MAE7B,kBAAkB,KAAK,MAAM;CAKjC,MAAM,gBAA0B,CAAC;CACjC,KAAK,MAAM,UAAU,mBACnB,KAAK,MAAM,QAAQ,OAAO,KAAK,UAAU;EACvC,MAAM,UAAA,GAAA,gCAAA,UAAA,CAAmB,IAAI;EAC7B,IAAI,CAAC,cAAc,MAAM,QAAA,GAAA,gCAAA,YAAA,CAAmB,IAAI,MAAM,CAAC,GACrD,cAAc,KAAK,MAAM;CAE7B;CAIF,KAAK,MAAM,eAAe,mBAAmB;EAC3C,MAAM,eAAA,GAAA,gCAAA,UAAA,CAAwB,YAAY,KAAK,SAAS,EAAE;EAC1D,MAAM,aAAa,cAAc,WAAW,YAAA,GAAA,gCAAA,YAAA,CAAuB,QAAQ,WAAW,CAAC;EACvF,IAAI,eAAe,IACjB,cAAc,OAAO,YAAY,CAAC;CAEtC;CAGA,MAAM,SACJ,IACA,QACA,kBACc;EACd,IAAI,MAAM,GAAG,SAAS;EACtB,IAAI,QACF,KAAK,MAAM,KAAK,QAAQ;GACtB,OAAO;GACP,OAAO,OAAO;EAChB;EAEF,IAAI,eACF,KAAK,MAAM,KAAK,eAAe;GAC7B,OAAO;GACP,OAAO,cAAc;EACvB;EAEF,OAAO;CACT;CAGA,MAAM,eAAuC,CAAC;CAC9C,KAAK,MAAM,eAAe,iBAAiB;EACzC,MAAM,YAAY,YAAY,KAAK,SAAS;EAC5C,MAAM,eAAA,GAAA,gCAAA,UAAA,CAAwB,SAAS;EACvC,MAAM,aAAa,cAAc,WAAW,YAAA,GAAA,gCAAA,YAAA,CAAuB,QAAQ,WAAW,CAAC;EACvF,IAAI,eAAe,IAAI;GACrB,MAAM,SAAS,cAAc;GAM7B,IAJE,OAAO,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,KAAK,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAElF,OAAO,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC,CAAC,SACpC,OAAO,KAAK,UAAU,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAE3C,aAAa,KAAK;IAChB,IAAI,MAAM,YAAY,IAAI,OAAO,QAAQ,OAAO,aAAa;IAC7D,MAAM;KACJ,GAAG,YAAY;KACf,UAAU,CAAC;MAAE,GAAG;MAAQ,aAAa,UAAU;KAAY,CAAC;IAC9D;IACA,MAAM,YAAY;GACpB,CAAC;QAED,aAAa,KAAK,WAAW;GAE/B,cAAc,OAAO,YAAY,CAAC;EACpC;CACF;CACA,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.js","names":[],"sources":["../../../src/components/PlDataTable/labels.ts"],"sourcesContent":["import type { AxisId, PColumn, PColumnSpec, PObjectId } from \"@milaboratories/pl-model-common\";\nimport {\n getAxisId,\n isLabelColumn,\n matchAxisId,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../render\";\nimport { ColumnCollectionBuilder, collectCtxColumnSnapshotProviders } from \"../../columns\";\n\n/**\n * Get all label columns visible in the current render context\n * (result pool + block outputs + prerun).\n */\nexport function getAllLabelColumns<A, U>(\n ctx: RenderCtxBase<A, U>,\n): PColumn<PColumnDataUniversal>[] {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .build({ allowPartialColumnList: true });\n try {\n return collection\n .findColumns({ include: { name: PColumnName.Label, axes: [] } })\n .reduce<PColumn<PColumnDataUniversal>[]>((acc, hit) => {\n const data = hit.data?.get();\n return data === undefined ? acc : [...acc, { id: hit.id, spec: hit.spec, data }];\n }, []);\n } finally {\n collection.dispose();\n }\n}\n\n/** Get label columns matching the provided columns from the result pool */\nexport function getMatchingLabelColumns(\n columns: { spec: PColumnSpec }[],\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 = (\n id: PObjectId,\n domain?: Record<string, string>,\n contextDomain?: Record<string, string>,\n ): 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 if (contextDomain) {\n for (const k in contextDomain) {\n wid += k;\n wid += contextDomain[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 =\n Object.keys(axisId.domain ?? {}).length + Object.keys(axisId.contextDomain ?? {}).length;\n const labelDomainLen =\n Object.keys(labelAxis.domain ?? {}).length +\n Object.keys(labelAxis.contextDomain ?? {}).length;\n if (dataDomainLen > labelDomainLen) {\n labelColumns.push({\n id: colId(labelColumn.id, axisId.domain, axisId.contextDomain),\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"],"mappings":";;;;AAkCA,SAAgB,wBACd,SACA,iBACiC;CAEjC,MAAM,oBAAoC,
|
|
1
|
+
{"version":3,"file":"labels.js","names":[],"sources":["../../../src/components/PlDataTable/labels.ts"],"sourcesContent":["import type { AxisId, PColumn, PColumnSpec, PObjectId } from \"@milaboratories/pl-model-common\";\nimport {\n getAxisId,\n isLabelColumn,\n matchAxisId,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../render\";\nimport { ColumnCollectionBuilder, collectCtxColumnSnapshotProviders } from \"../../columns\";\n\n/**\n * Get all label columns visible in the current render context\n * (result pool + block outputs + prerun).\n */\nexport function getAllLabelColumns<A, U>(\n ctx: RenderCtxBase<A, U>,\n): PColumn<PColumnDataUniversal>[] {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSources(collectCtxColumnSnapshotProviders(ctx))\n .build({ allowPartialColumnList: true });\n try {\n return collection\n .findColumns({ include: { name: PColumnName.Label, axes: [] } })\n .reduce<PColumn<PColumnDataUniversal>[]>((acc, hit) => {\n const data = hit.data?.get();\n return data === undefined ? acc : [...acc, { id: hit.id, spec: hit.spec, data }];\n }, []);\n } finally {\n collection.dispose();\n }\n}\n\n/** Get label columns matching the provided columns from the result pool */\nexport function getMatchingLabelColumns(\n columns: { spec: PColumnSpec }[],\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 = (\n id: PObjectId,\n domain?: Record<string, string>,\n contextDomain?: Record<string, string>,\n ): 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 if (contextDomain) {\n for (const k in contextDomain) {\n wid += k;\n wid += contextDomain[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 =\n Object.keys(axisId.domain ?? {}).length + Object.keys(axisId.contextDomain ?? {}).length;\n const labelDomainLen =\n Object.keys(labelAxis.domain ?? {}).length +\n Object.keys(labelAxis.contextDomain ?? {}).length;\n if (dataDomainLen > labelDomainLen) {\n labelColumns.push({\n id: colId(labelColumn.id, axisId.domain, axisId.contextDomain),\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"],"mappings":";;;;AAkCA,SAAgB,wBACd,SACA,iBACiC;CAEjC,MAAM,oBAAoC,CAAC;CAC3C,MAAM,oBAAoC,CAAC;CAC3C,KAAK,MAAM,UAAU,SACnB,IAAI,cAAc,OAAO,IAAI,GAC3B,kBAAkB,KAAK,MAAM;MAE7B,kBAAkB,KAAK,MAAM;CAKjC,MAAM,gBAA0B,CAAC;CACjC,KAAK,MAAM,UAAU,mBACnB,KAAK,MAAM,QAAQ,OAAO,KAAK,UAAU;EACvC,MAAM,SAAS,UAAU,IAAI;EAC7B,IAAI,CAAC,cAAc,MAAM,OAAO,YAAY,IAAI,MAAM,CAAC,GACrD,cAAc,KAAK,MAAM;CAE7B;CAIF,KAAK,MAAM,eAAe,mBAAmB;EAC3C,MAAM,cAAc,UAAU,YAAY,KAAK,SAAS,EAAE;EAC1D,MAAM,aAAa,cAAc,WAAW,WAAW,YAAY,QAAQ,WAAW,CAAC;EACvF,IAAI,eAAe,IACjB,cAAc,OAAO,YAAY,CAAC;CAEtC;CAGA,MAAM,SACJ,IACA,QACA,kBACc;EACd,IAAI,MAAM,GAAG,SAAS;EACtB,IAAI,QACF,KAAK,MAAM,KAAK,QAAQ;GACtB,OAAO;GACP,OAAO,OAAO;EAChB;EAEF,IAAI,eACF,KAAK,MAAM,KAAK,eAAe;GAC7B,OAAO;GACP,OAAO,cAAc;EACvB;EAEF,OAAO;CACT;CAGA,MAAM,eAAuC,CAAC;CAC9C,KAAK,MAAM,eAAe,iBAAiB;EACzC,MAAM,YAAY,YAAY,KAAK,SAAS;EAC5C,MAAM,cAAc,UAAU,SAAS;EACvC,MAAM,aAAa,cAAc,WAAW,WAAW,YAAY,QAAQ,WAAW,CAAC;EACvF,IAAI,eAAe,IAAI;GACrB,MAAM,SAAS,cAAc;GAM7B,IAJE,OAAO,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,KAAK,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAElF,OAAO,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC,CAAC,SACpC,OAAO,KAAK,UAAU,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAE3C,aAAa,KAAK;IAChB,IAAI,MAAM,YAAY,IAAI,OAAO,QAAQ,OAAO,aAAa;IAC7D,MAAM;KACJ,GAAG,YAAY;KACf,UAAU,CAAC;MAAE,GAAG;MAAQ,aAAa,UAAU;KAAY,CAAC;IAC9D;IACA,MAAM,YAAY;GACpB,CAAC;QAED,aAAa,KAAK,WAAW;GAE/B,cAAc,OAAO,YAAY,CAAC;EACpC;CACF;CACA,OAAO;AACT"}
|