@platforma-open/milaboratories.immune-assay-data.model 1.4.3 → 1.5.1

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/index.cjs CHANGED
@@ -4,6 +4,8 @@ var model$1 = require('@platforma-sdk/model');
4
4
 
5
5
  const model = model$1.BlockModel.create()
6
6
  .withArgs({
7
+ defaultBlockLabel: '',
8
+ customBlockLabel: '',
7
9
  settings: {
8
10
  coverageThreshold: 0.95, // default value matching MMseqs2 default
9
11
  identity: 0.9,
@@ -12,7 +14,6 @@ const model = model$1.BlockModel.create()
12
14
  selectedColumns: [],
13
15
  })
14
16
  .withUiState({
15
- title: 'Immune Assay Data',
16
17
  tableState: model$1.createPlDataTableStateV2(),
17
18
  })
18
19
  .argsValid((ctx) => ctx.args.datasetRef !== undefined
@@ -80,7 +81,8 @@ const model = model$1.BlockModel.create()
80
81
  return model$1.createPlDataTableV2(ctx, cols, ctx.uiState.tableState);
81
82
  })
82
83
  .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)
83
- .title((ctx) => ctx.uiState.title)
84
+ .title(() => 'Immune Assay Data')
85
+ .subtitle((ctx) => ctx.args.customBlockLabel || ctx.args.defaultBlockLabel)
84
86
  .sections((_ctx) => ([
85
87
  { type: 'link', href: '/', label: 'Main' },
86
88
  ]))
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import type {\n ImportFileHandle,\n InferOutputsType,\n PlDataTableStateV2,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableStateV2,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n identity: number;\n similarityType: 'sequence-identity' | 'alignment-score';\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n selectedColumns: string[];\n settings: Settings;\n};\n\nexport type UiState = {\n title: string;\n fileImportError?: string;\n tableState: PlDataTableStateV2;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n settings: {\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n identity: 0.9,\n similarityType: 'alignment-score',\n },\n selectedColumns: [],\n })\n\n .withUiState<UiState>({\n title: 'Immune Assay Data',\n tableState: createPlDataTableStateV2(),\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n // const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n // 'FR3', 'FR4', 'VDJRegion'];\n // for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n },\n });\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .outputWithStatus('table', (ctx) => {\n if (ctx.outputs?.resolve('emptyResults')?.getDataAsJson<boolean>()) {\n return undefined;\n }\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title((ctx) => ctx.uiState.title)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done(2);\n\nexport type BlockOutputs = InferOutputsType<typeof model>;\n"],"names":["BlockModel","createPlDataTableStateV2","createPlDataTableV2"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import type {\n ImportFileHandle,\n PlDataTableStateV2,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableStateV2,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n identity: number;\n similarityType: 'sequence-identity' | 'alignment-score';\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n defaultBlockLabel: string;\n customBlockLabel: string;\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n selectedColumns: string[];\n settings: Settings;\n};\n\nexport type UiState = {\n fileImportError?: string;\n tableState: PlDataTableStateV2;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n defaultBlockLabel: '',\n customBlockLabel: '',\n settings: {\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n identity: 0.9,\n similarityType: 'alignment-score',\n },\n selectedColumns: [],\n })\n\n .withUiState<UiState>({\n tableState: createPlDataTableStateV2(),\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n // const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n // 'FR3', 'FR4', 'VDJRegion'];\n // for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n },\n });\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .outputWithStatus('table', (ctx) => {\n if (ctx.outputs?.resolve('emptyResults')?.getDataAsJson<boolean>()) {\n return undefined;\n }\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title(() => 'Immune Assay Data')\n\n .subtitle((ctx) => ctx.args.customBlockLabel || ctx.args.defaultBlockLabel)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done(2);\n"],"names":["BlockModel","createPlDataTableStateV2","createPlDataTableV2"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ImportFileHandle, InferOutputsType, PlDataTableStateV2, PlRef, SUniversalPColumnId } from '@platforma-sdk/model';
1
+ import type { ImportFileHandle, PlDataTableStateV2, PlRef, SUniversalPColumnId } from '@platforma-sdk/model';
2
2
  type Settings = {
3
3
  coverageThreshold: number;
4
4
  identity: number;
@@ -11,6 +11,8 @@ export type ImportColumnInfo = {
11
11
  sequenceType?: 'nucleotide' | 'aminoacid';
12
12
  };
13
13
  export type BlockArgs = {
14
+ defaultBlockLabel: string;
15
+ customBlockLabel: string;
14
16
  datasetRef?: PlRef;
15
17
  targetRef?: SUniversalPColumnId;
16
18
  fileHandle?: ImportFileHandle;
@@ -21,7 +23,6 @@ export type BlockArgs = {
21
23
  settings: Settings;
22
24
  };
23
25
  export type UiState = {
24
- title: string;
25
26
  fileImportError?: string;
26
27
  tableState: PlDataTableStateV2;
27
28
  };
@@ -57,6 +58,5 @@ export declare const model: import("@platforma-sdk/model").PlatformaExtended<imp
57
58
  __unwrap: true;
58
59
  };
59
60
  }, UiState, "/">>;
60
- export type BlockOutputs = InferOutputsType<typeof model>;
61
61
  export {};
62
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,EACL,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAO9B,KAAK,QAAQ,GAAG;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClC,oEAAoE;IACpE,YAAY,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6GR,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,EACL,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAO9B,KAAK,QAAQ,GAAG;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClC,oEAAoE;IACpE,YAAY,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgHR,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,8 @@ import { BlockModel, createPlDataTableStateV2, createPlDataTableV2 } from '@plat
2
2
 
3
3
  const model = BlockModel.create()
4
4
  .withArgs({
5
+ defaultBlockLabel: '',
6
+ customBlockLabel: '',
5
7
  settings: {
6
8
  coverageThreshold: 0.95, // default value matching MMseqs2 default
7
9
  identity: 0.9,
@@ -10,7 +12,6 @@ const model = BlockModel.create()
10
12
  selectedColumns: [],
11
13
  })
12
14
  .withUiState({
13
- title: 'Immune Assay Data',
14
15
  tableState: createPlDataTableStateV2(),
15
16
  })
16
17
  .argsValid((ctx) => ctx.args.datasetRef !== undefined
@@ -78,7 +79,8 @@ const model = BlockModel.create()
78
79
  return createPlDataTableV2(ctx, cols, ctx.uiState.tableState);
79
80
  })
80
81
  .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)
81
- .title((ctx) => ctx.uiState.title)
82
+ .title(() => 'Immune Assay Data')
83
+ .subtitle((ctx) => ctx.args.customBlockLabel || ctx.args.defaultBlockLabel)
82
84
  .sections((_ctx) => ([
83
85
  { type: 'link', href: '/', label: 'Main' },
84
86
  ]))
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n ImportFileHandle,\n InferOutputsType,\n PlDataTableStateV2,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableStateV2,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n identity: number;\n similarityType: 'sequence-identity' | 'alignment-score';\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n selectedColumns: string[];\n settings: Settings;\n};\n\nexport type UiState = {\n title: string;\n fileImportError?: string;\n tableState: PlDataTableStateV2;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n settings: {\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n identity: 0.9,\n similarityType: 'alignment-score',\n },\n selectedColumns: [],\n })\n\n .withUiState<UiState>({\n title: 'Immune Assay Data',\n tableState: createPlDataTableStateV2(),\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n // const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n // 'FR3', 'FR4', 'VDJRegion'];\n // for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n },\n });\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .outputWithStatus('table', (ctx) => {\n if (ctx.outputs?.resolve('emptyResults')?.getDataAsJson<boolean>()) {\n return undefined;\n }\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title((ctx) => ctx.uiState.title)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done(2);\n\nexport type BlockOutputs = InferOutputsType<typeof model>;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n ImportFileHandle,\n PlDataTableStateV2,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableStateV2,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n identity: number;\n similarityType: 'sequence-identity' | 'alignment-score';\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n defaultBlockLabel: string;\n customBlockLabel: string;\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n selectedColumns: string[];\n settings: Settings;\n};\n\nexport type UiState = {\n fileImportError?: string;\n tableState: PlDataTableStateV2;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n defaultBlockLabel: '',\n customBlockLabel: '',\n settings: {\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n identity: 0.9,\n similarityType: 'alignment-score',\n },\n selectedColumns: [],\n })\n\n .withUiState<UiState>({\n tableState: createPlDataTableStateV2(),\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n // const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n // 'FR3', 'FR4', 'VDJRegion'];\n // for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n // 'pl7.app/vdj/feature': feature,\n },\n });\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .outputWithStatus('table', (ctx) => {\n if (ctx.outputs?.resolve('emptyResults')?.getDataAsJson<boolean>()) {\n return undefined;\n }\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title(() => 'Immune Assay Data')\n\n .subtitle((ctx) => ctx.args.customBlockLabel || ctx.args.defaultBlockLabel)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done(2);\n"],"names":[],"mappings":"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"}