@platforma-open/milaboratories.sequence-properties.model 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/work/sequence-properties/sequence-properties/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-open/milaboratories.sequence-properties.model@1.1.1 build /home/runner/work/sequence-properties/sequence-properties/model
3
+ > @platforma-open/milaboratories.sequence-properties.model@1.2.0 build /home/runner/work/sequence-properties/sequence-properties/model
4
4
  > ts-builder build --target block-model && block-tools build-model
5
5
 
6
6
  Building block-model project...
@@ -8,21 +8,21 @@ Building block-model project...
8
8
  [PLUGIN_TIMINGS] Warning: Your build spent significant time in plugin `rolldown-plugin-dts:generate`. See https://rolldown.rs/options/checks#plugintimings for more details.
9
9
 
10
10
  [log] <DIR>/dataModel.d.ts.map asset │ size: 0.14 kB
11
- [log] <DIR>/types.d.ts.map asset │ size: 0.31 kB
12
- [log] <DIR>/dataModel.js.map asset │ size: 0.49 kB
13
- [log] <DIR>/index.d.ts.map asset │ size: 1.96 kB
14
- [log] <DIR>/index.js.map asset │ size: 5.91 kB
11
+ [log] <DIR>/types.d.ts.map asset │ size: 0.39 kB
12
+ [log] <DIR>/dataModel.js.map asset │ size: 1.50 kB
13
+ [log] <DIR>/index.d.ts.map asset │ size: 2.00 kB
14
+ [log] <DIR>/index.js.map asset │ size: 11.88 kB
15
15
  [log] <DIR>/dataModel.d.ts chunk │ size: 0.29 kB
16
- [log] <DIR>/dataModel.js chunk │ size: 0.32 kB
17
- [log] <DIR>/types.d.ts chunk │ size: 0.71 kB
18
- [log] <DIR>/index.js chunk │ size: 2.46 kB
19
- [log] <DIR>/index.d.ts chunk │ size: 56.81 kB
20
- [log] <DIR>/dataModel.cjs.map asset │ size: 0.53 kB
21
- [log] <DIR>/index.cjs.map asset │ size: 6.04 kB
22
- [log] <DIR>/dataModel.cjs chunk │ size: 0.35 kB
23
- [log] <DIR>/index.cjs chunk │ size: 2.69 kB
24
- [log] <DIR>/bundle.js.map asset │ size: 675.99 kB
25
- [log] <DIR>/bundle.js chunk │ size: 343.70 kB
16
+ [log] <DIR>/dataModel.js chunk │ size: 0.80 kB
17
+ [log] <DIR>/types.d.ts chunk │ size: 0.89 kB
18
+ [log] <DIR>/index.js chunk │ size: 4.47 kB
19
+ [log] <DIR>/index.d.ts chunk │ size: 58.01 kB
20
+ [log] <DIR>/dataModel.cjs.map asset │ size: 1.54 kB
21
+ [log] <DIR>/index.cjs.map asset │ size: 12.01 kB
22
+ [log] <DIR>/dataModel.cjs chunk │ size: 0.83 kB
23
+ [log] <DIR>/index.cjs chunk │ size: 4.72 kB
24
+ [log] <DIR>/bundle.js.map asset │ size: 682.96 kB
25
+ [log] <DIR>/bundle.js chunk │ size: 346.26 kB
26
26
  [log]
27
- [success] rolldown v1.0.0-rc.16 Finished in 5.42 s
27
+ [success] rolldown v1.0.0-rc.16 Finished in 10.54 s
28
28
  Build completed successfully
@@ -1,19 +1,19 @@
1
1
   WARN  Issue while reading "/home/runner/work/sequence-properties/sequence-properties/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-open/milaboratories.sequence-properties.model@1.1.1 check /home/runner/work/sequence-properties/sequence-properties/model
3
+ > @platforma-open/milaboratories.sequence-properties.model@1.2.0 check /home/runner/work/sequence-properties/sequence-properties/model
4
4
  > ts-builder check --target block-model
5
5
 
6
6
  ↳ tsc --noEmit --project ./tsconfig.json --customConditions ,
7
7
  Linting project...
8
8
  ↳ oxlint --config /home/runner/work/sequence-properties/sequence-properties/model/.oxlintrc.json --deny-warnings
9
9
  Found 0 warnings and 0 errors.
10
- Finished in 8ms on 3 files with 90 rules using 2 threads.
10
+ Finished in 13ms on 3 files with 90 rules using 2 threads.
11
11
  Linting completed successfully
12
12
  Checking formatting...
13
13
  ↳ oxfmt --check --config /home/runner/work/sequence-properties/sequence-properties/model/.oxfmtrc.json
14
14
  Checking formatting...
15
15
 
16
16
  All matched files use the correct format.
17
- Finished in 252ms on 7 files using 2 threads.
17
+ Finished in 255ms on 7 files using 2 threads.
18
18
  Format check completed successfully
19
19
  All checks passed!
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @platforma-open/MiLaboratories.sequence-properties.model
2
2
 
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c6e975d: Add Scatterplot and Histogram tabs to the Sequence Properties block. Both
8
+ panels read the existing `propertiesPf` p-frame and pick modality-aware
9
+ defaults: peptide charge / hydrophobicity in peptide mode, chain "A" CDR3
10
+ charge / hydrophobicity in antibody/TCR mode. Axis pickers list every
11
+ numeric scalar PColumn emitted by the run, excluding the 2-axis AA fraction
12
+ column. R21 / R21a reference line at GRAVY = 0 deferred — see
13
+ docs/spec-deviations.md SD-009.
14
+
15
+ ## 1.1.2
16
+
17
+ ### Patch Changes
18
+
19
+ - 9d628d9: **Workflow (SD-008):** Derive receptor from `pl7.app/vdj/chain` when `pl7.app/vdj/receptor` is absent. Bulk MiXCR axes carry the chain key (`IGHeavy`, `IGLight`, `TCRAlpha`, `TCRBeta`, `TCRGamma`, `TCRDelta`) without the receptor key, which previously fired R13b's "Receptor type not detected" warning on every bulk run. Detection precedence now: axis receptor → axis chain → per-column receptor → per-column chain → IG default + warning. Inputs that carry receptor explicitly are unaffected.
20
+
21
+ **Model:** Default-visible single upstream amino-acid sequence column matching the analysed coverage tier — peptide (`pl7.app/sequence`, feature=peptide) for peptide mode; full-chain VDJRegion (`pl7.app/vdj/sequence`, feature=VDJRegion or VDJRegionInFrame, chain A) for `full_chain` tier; CDR3 (`pl7.app/vdj/sequence`, feature=CDR3, chain A) for `cdr3_only` and `partial` tiers. Chain B (light / beta / delta) and secondary alleles stay available via the column picker.
22
+
23
+ **UI:** Move the "Input dataset" picker into a Settings slide-out drawer (matches the convention used by clonotype-clustering and other sibling blocks). Drawer auto-opens on first load when no input is selected, auto-closes when the workflow starts running.
24
+
25
+ **Software:** Switch the Python runenv from `runenv-python-3:3.12.10` to `runenv-python-3:3.12.10-scientific-slim`. The scientific-slim image now ships biopython, so the per-block dependency install is faster and matches the convention used by sibling python blocks (e.g. `titeseq-analysis`).
26
+
3
27
  ## 1.1.1
4
28
 
5
29
  ### Patch Changes
package/dist/bundle.js CHANGED
@@ -9961,7 +9961,26 @@
9961
9961
  });
9962
9962
  //#endregion
9963
9963
  //#region src/dataModel.ts
9964
- const blockDataModel = new DataModelBuilder().from("Ver_2026_04_28").init(() => ({ tableState: createPlDataTableStateV2() }));
9964
+ const DEFAULT_SCATTER_STATE = {
9965
+ title: "",
9966
+ template: "dots",
9967
+ currentTab: null
9968
+ };
9969
+ const DEFAULT_HISTOGRAM_STATE = {
9970
+ title: "",
9971
+ template: "bins",
9972
+ currentTab: null,
9973
+ layersSettings: { bins: { fillColor: "#99e099" } }
9974
+ };
9975
+ const blockDataModel = new DataModelBuilder().from("Ver_2026_04_28").migrate("Ver_2026_05_05", (v1) => ({
9976
+ ...v1,
9977
+ graphStateScatter: { ...DEFAULT_SCATTER_STATE },
9978
+ graphStateHistogram: { ...DEFAULT_HISTOGRAM_STATE }
9979
+ })).init(() => ({
9980
+ tableState: createPlDataTableStateV2(),
9981
+ graphStateScatter: { ...DEFAULT_SCATTER_STATE },
9982
+ graphStateHistogram: { ...DEFAULT_HISTOGRAM_STATE }
9983
+ }));
9965
9984
  //#endregion
9966
9985
  //#region src/index.ts
9967
9986
  const inputAnchorSpecs = [
@@ -9989,6 +10008,9 @@
9989
10008
  if (ctx.data.inputAnchor === void 0) return void 0;
9990
10009
  const ownCols = ctx.outputs?.resolve("propertiesPf")?.getPColumns();
9991
10010
  if (ownCols === void 0) return void 0;
10011
+ const info = ctx.outputs?.resolve("info")?.getDataAsJson();
10012
+ if (info === void 0) return void 0;
10013
+ const tier = info.coverageTier;
9992
10014
  const sources = [new ArrayColumnProvider(ctx.resultPool.selectColumns((spec) => !spec.annotations?.[Annotation.Trace]?.includes("milaboratories.sequence-properties"))), new ArrayColumnProvider(ownCols)];
9993
10015
  return createPlDataTableV3(ctx, {
9994
10016
  tableState: ctx.data.tableState,
@@ -9998,15 +10020,63 @@
9998
10020
  selector: { mode: "enrichment" }
9999
10021
  },
10000
10022
  displayOptions: { visibility: [{
10023
+ match: (spec) => {
10024
+ if (spec.domain?.["pl7.app/vdj/scClonotypeChain/index"] === "secondary") return false;
10025
+ if (spec.domain?.["pl7.app/alphabet"] !== "aminoacid") return false;
10026
+ const isVdj = spec.name === "pl7.app/vdj/sequence";
10027
+ const isUniversal = spec.name === "pl7.app/sequence";
10028
+ if (!isVdj && !isUniversal) return false;
10029
+ const feature = isVdj ? spec.domain?.["pl7.app/vdj/feature"] : spec.domain?.["pl7.app/feature"];
10030
+ if (tier === "peptide") return isUniversal && feature === "peptide";
10031
+ const chain = spec.domain?.["pl7.app/vdj/scClonotypeChain"];
10032
+ if (chain !== void 0 && chain !== "A") return false;
10033
+ if (tier === "full_chain") return feature === "VDJRegion" || feature === "VDJRegionInFrame";
10034
+ if (tier === "cdr3_only" || tier === "partial") return feature === "CDR3";
10035
+ return false;
10036
+ },
10037
+ visibility: "default"
10038
+ }, {
10001
10039
  match: (spec) => !spec.annotations?.[Annotation.Trace]?.includes("milaboratories.sequence-properties") && spec.annotations?.["pl7.app/isLinkerColumn"] !== "true",
10002
10040
  visibility: "optional"
10003
10041
  }] }
10004
10042
  });
10005
- }).title(() => "Sequence Properties").subtitle((ctx) => ctx.data.defaultBlockLabel ?? "").sections(() => [{
10006
- type: "link",
10007
- href: "/",
10008
- label: "Main"
10009
- }]).done();
10043
+ }).outputWithStatus("propertiesPfHandle", (ctx) => {
10044
+ const allPCols = ctx.outputs?.resolve("propertiesPf")?.getPColumns();
10045
+ if (allPCols === void 0) return void 0;
10046
+ const pCols = allPCols.filter((c) => c.spec.name !== "pl7.app/aaFraction");
10047
+ const inputAnchor = ctx.data.inputAnchor;
10048
+ const upstreamMeta = inputAnchor !== void 0 ? (ctx.resultPool.getAnchoredPColumns({ main: inputAnchor }, [{ axes: [{
10049
+ anchor: "main",
10050
+ idx: 0
10051
+ }] }, { axes: [{
10052
+ anchor: "main",
10053
+ idx: 1
10054
+ }] }]) ?? []).filter((c) => !c.spec.annotations?.[Annotation.Trace]?.includes("milaboratories.sequence-properties")) : [];
10055
+ return ctx.createPFrame([...pCols, ...upstreamMeta]);
10056
+ }).output("propertiesPfCols", (ctx) => {
10057
+ const pCols = ctx.outputs?.resolve("propertiesPf")?.getPColumns();
10058
+ if (pCols === void 0) return void 0;
10059
+ return pCols.map((c) => ({
10060
+ columnId: c.id,
10061
+ spec: c.spec
10062
+ }));
10063
+ }).title(() => "Sequence Properties").subtitle((ctx) => ctx.data.defaultBlockLabel ?? "").sections(() => [
10064
+ {
10065
+ type: "link",
10066
+ href: "/",
10067
+ label: "Main"
10068
+ },
10069
+ {
10070
+ type: "link",
10071
+ href: "/scatter",
10072
+ label: "Scatterplot"
10073
+ },
10074
+ {
10075
+ type: "link",
10076
+ href: "/histogram",
10077
+ label: "Histogram"
10078
+ }
10079
+ ]).done();
10010
10080
  //#endregion
10011
10081
  exports.blockDataModel = blockDataModel;
10012
10082
  exports.platforma = platforma$1;