@fnndsc/argus 0.7.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/assets/Settings-aPI1L0Hv.js +4204 -0
  2. package/dist/assets/Texture-B5_yVp0g.js +204 -0
  3. package/dist/assets/{addVolumesToViewports-kPbPUzG1.js → addVolumesToViewports-DihvLMPa.js} +1 -1
  4. package/dist/assets/cornerstoneEngine-A1IbMa9k.js +2 -0
  5. package/dist/assets/{index-BEqlmVJ8.js → index-AzIZ0aym.js} +1 -1
  6. package/dist/assets/{index-WxcTPiRU.js → index-B4dN9H5V.js} +2 -2
  7. package/dist/assets/index-C0cxM8sU.css +1 -0
  8. package/dist/assets/index-CNN-ajYW.js +4149 -0
  9. package/dist/assets/index-CU4ov6t9.js +1 -0
  10. package/dist/assets/index-CsgpuZsj.js +1 -0
  11. package/dist/assets/{index-BivV2-EJ.js → index-Cw0WY3CI.js} +2 -2
  12. package/dist/assets/{index-DRvbvdZm.js → index-DPYz8EHh.js} +5 -5
  13. package/dist/assets/niivueEngine-BOeCGTwL.js +2 -0
  14. package/dist/assets/slabScene-BvqXoSPu.js +559 -0
  15. package/dist/index.html +161 -37
  16. package/package.json +4 -3
  17. package/dist/assets/Settings-B_WPNkCE.js +0 -4407
  18. package/dist/assets/cornerstoneEngine-COmMRWtq.js +0 -2
  19. package/dist/assets/index-B1IRr1ii.js +0 -4145
  20. package/dist/assets/index-BbgujRGq.css +0 -1
  21. package/dist/assets/index-Ddoc1eo6.js +0 -1
  22. package/dist/assets/index-oaz5IMVa.js +0 -1
  23. package/dist/assets/niivueEngine-B2PDgoH7.js +0 -2
  24. /package/dist/{assets/arrive-ClURnB_N.wav → sounds/arrive.wav} +0 -0
  25. /package/dist/{assets/press-Cr6-1MeH.wav → sounds/press.wav} +0 -0
  26. /package/dist/{assets/refuse-DQOeTs-N.wav → sounds/refuse.wav} +0 -0
  27. /package/dist/{assets/retreat-CxfXQVOC.wav → sounds/retreat.wav} +0 -0
package/dist/index.html CHANGED
@@ -12,17 +12,24 @@
12
12
  href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap"
13
13
  rel="stylesheet"
14
14
  />
15
- <script type="module" crossorigin src="./assets/index-B1IRr1ii.js"></script>
16
- <link rel="stylesheet" crossorigin href="./assets/index-BbgujRGq.css">
15
+ <script type="module" crossorigin src="./assets/index-CNN-ajYW.js"></script>
16
+ <link rel="stylesheet" crossorigin href="./assets/index-C0cxM8sU.css">
17
17
  </head>
18
18
  <body>
19
19
  <!-- ARGUS's own four sounds, synthesised rather than borrowed
20
20
  (scripts/sounds_make.mjs): a press acknowledged, a thing arriving,
21
21
  a retreat, a refusal. -->
22
- <audio id="audio1" src="./assets/press-Cr6-1MeH.wav" preload="auto"></audio>
23
- <audio id="audio2" src="./assets/arrive-ClURnB_N.wav" preload="auto"></audio>
24
- <audio id="audio3" src="./assets/retreat-CxfXQVOC.wav" preload="auto"></audio>
25
- <audio id="audio4" src="./assets/refuse-DQOeTs-N.wav" preload="auto"></audio>
22
+ <!-- The four voices. The original TheLCARS.com beeps play when present
23
+ (materialized from the operator's LCARS-26.zip by
24
+ scripts/sounds_import.mjs into public/sounds/, gitignored because
25
+ the template's EULA forbids redistributing them); the synthesised
26
+ .wav is the committed fallback, so a clone without the zip still
27
+ answers a press. Served from public/ so the browser can fall from
28
+ one source to the next — a bundled import cannot. -->
29
+ <audio id="audio1" preload="auto"><source src="sounds/press.mp3" type="audio/mpeg" /><source src="sounds/press.wav" type="audio/wav" /></audio>
30
+ <audio id="audio2" preload="auto"><source src="sounds/arrive.mp3" type="audio/mpeg" /><source src="sounds/arrive.wav" type="audio/wav" /></audio>
31
+ <audio id="audio3" preload="auto"><source src="sounds/retreat.mp3" type="audio/mpeg" /><source src="sounds/retreat.wav" type="audio/wav" /></audio>
32
+ <audio id="audio4" preload="auto"><source src="sounds/refuse.mp3" type="audio/mpeg" /><source src="sounds/refuse.wav" type="audio/wav" /></audio>
26
33
 
27
34
  <div id="attach-form" class="attach-overlay">
28
35
  <div class="attach-card">
@@ -81,16 +88,21 @@
81
88
  <div class="wrap" id="gap">
82
89
  <div class="left-frame">
83
90
  <div>
84
- <button class="panel-3 domain-live" id="gutter-files" title="the console's browser: the workspace, following the session cwd">FILES<span class="hop">-01</span></button>
85
- <button class="panel-4 domain-live" id="gutter-runs">RUNS<span class="hop">-02</span></button>
86
- <button class="panel-5 domain-live" id="gutter-tools">PACS<span class="hop">-03</span></button>
87
- <button class="panel-6 domain-inert">SOURCES<span class="hop">-04</span></button>
91
+ <!-- The gutter reads top down, and the first block is where a
92
+ session begins. The panel-N classes are POSITIONS in the
93
+ frame's hue cycle (and carry the first block's own corner),
94
+ so a domain moving up takes the class of the seat it moves
95
+ into rather than its colour with it. -->
96
+ <button class="panel-3 domain-live" id="gutter-dashboard" title="where a session begins: what each domain holds, and the way into it">DASHBOARD<span class="hop">-01</span></button>
97
+ <button class="panel-4 domain-live" id="gutter-files" title="the console's browser: the workspace, following the session cwd">FILES<span class="hop">-02</span></button>
98
+ <button class="panel-5 domain-live" id="gutter-runs">RUNS<span class="hop">-03</span></button>
99
+ <button class="panel-6 domain-live" id="gutter-tools">PACS<span class="hop">-04</span></button>
88
100
  <button class="panel-console domain-live" id="gutter-console" title="summon the console">CONSOLE<span class="hop">-05</span></button>
89
101
  <button class="panel-lang domain-live" id="lang-pill" title="the argus command line (Ctrl-B :)">LANG</button>
90
102
  <div class="panel-spacer"></div>
91
103
  </div>
92
104
  <div>
93
- <button class="panel-7 domain-inert">COMPUTE<span class="hop">-06</span></button>
105
+ <button class="panel-7 domain-live" id="gutter-panes" title="every pane you have moved away from, to bring back">PANES<span class="hop">-06</span></button>
94
106
  </div>
95
107
  </div>
96
108
  <div class="right-frame">
@@ -219,6 +231,49 @@
219
231
  <div class="dag-empty files-empty">NO FEED IN VIEW &mdash; PRESS RUNS-02, cd INTO A FEED, OR RUN `feed diagram &lt;feed&gt;`</div>
220
232
  </div>
221
233
  </template>
234
+ <template id="tpl-pane-gather">
235
+ <!-- The GATHER pane: a cohort as a listing, born beside the
236
+ PACS workspace when the first series is gathered. One
237
+ block, the cohort row over its series; the verbs in the
238
+ frame's row zone (aegis.adoc: a-row-s-verbs-live-in-the-frame). -->
239
+ <div class="workspace-pane pane-gather">
240
+ <div class="lcars-terminal-header-bar files-header-bar pane-handle" title="pane controls">
241
+ <div class="lcars-bar-horizontal">
242
+ <span class="lcars-title gather-title">GATHER</span>
243
+ <span class="pane-mode"></span>
244
+ <span class="pane-state"></span>
245
+ </div>
246
+ <div class="lcars-bar-end bar-punctuation"></div>
247
+ </div>
248
+ <div class="pane-drawer" hidden>
249
+ <span class="drawer-group drawer-structure">
250
+ <span class="drawer-label">SPLIT</span>
251
+ <button class="pacs-capsule drawer-split" data-split="col" data-place="before" title="new pane opens left">LEFT</button>
252
+ <button class="pacs-capsule drawer-split" data-split="col" data-place="after" title="new pane opens right">RIGHT</button>
253
+ <button class="pacs-capsule drawer-split" data-split="row" data-place="before" title="new pane opens above">ABOVE</button>
254
+ <button class="pacs-capsule drawer-split" data-split="row" data-place="after" title="new pane opens below">BELOW</button>
255
+ <button class="pacs-capsule drawer-zoom" data-pane="" title="zoom (Esc restores)">ZOOM</button>
256
+ <button class="pacs-capsule drawer-close" title="close pane">CLOSE</button>
257
+ </span>
258
+ <span class="drawer-group drawer-binding" role="radiogroup" title="what the next split creates">
259
+ <button class="pacs-capsule drawer-bind drawer-bind-selected" data-bind="unlinked">UNLINKED</button>
260
+ <button class="pacs-capsule drawer-bind" data-bind="fs">LINKED FS</button>
261
+ <button class="pacs-capsule drawer-bind" data-bind="viewer">LINKED VIEWER</button>
262
+ </span>
263
+ <span class="drawer-group drawer-children"></span>
264
+ </div>
265
+ <div class="gather-listing">
266
+ <span class="field-rule"></span>
267
+ <button class="mode-strip" title="display modes" aria-label="display modes"></button>
268
+ <span class="mode-elbow"></span>
269
+ <aside class="mode-frame">
270
+ <button class="strategy-pill gather-filter rail-off" title="filter the cohort (the bar reads FILTERED n/m)">FILTER OFF</button>
271
+ <span class="mode-fill"></span>
272
+ </aside>
273
+ <div class="gather-rows"></div>
274
+ </div>
275
+ </div>
276
+ </template>
222
277
  <template id="tpl-pane-files">
223
278
  <div class="workspace-pane pane-files">
224
279
  <div class="lcars-terminal-header-bar files-header-bar pane-handle" title="pane controls">
@@ -274,13 +329,16 @@
274
329
  make in a list of feeds. -->
275
330
  <button class="strategy-pill files-mkdir" title="make a directory in the listing on stage">MKDIR</button>
276
331
  <button class="strategy-pill files-upload" title="put a local file into the listing on stage">UPLOAD</button>
332
+ <button class="strategy-pill files-refresh" title="list the place on stage again">REFRESH</button>
277
333
  <input class="files-upload-input" type="file" multiple hidden />
278
334
  <!-- SELECT is a MODE: it changes what a click means, so
279
- it is a block on the frame like every other mode.
280
- The selection's own verbs ride the frame beneath
281
- it, because a selection belongs to the field. -->
335
+ it is a block on the frame like every other mode. -->
282
336
  <button class="strategy-pill files-select rail-off" title="select rows instead of indicating them">SELECT OFF</button>
283
- <span class="files-selection-bar listing-actions" hidden></span>
337
+ <!-- The ROW ZONE is minted here by the listing façade,
338
+ beneath the field's blocks: the verbs of the row
339
+ the operator indicated, or of the selection, empty
340
+ when nothing is (aegis.adoc:
341
+ a-row-s-verbs-live-in-the-frame). -->
284
342
  <!-- A pane has ONE frame, and its blocks answer to what
285
343
  the field currently holds: a listing offers a
286
344
  projection and a filter, a diagram offers the modes
@@ -289,6 +347,9 @@
289
347
  <button class="strategy-pill diagram-strategy" title="layout: ranked tiers or force molecule">RANKED</button>
290
348
  <button class="strategy-pill diagram-projection" title="projection: sculpted 3D or flat schematic">3D</button>
291
349
  <button class="strategy-pill diagram-pulse" title="replay the graph as a dependency wave (one pass)">PULSE</button>
350
+ <!-- A bound catalogue's graph is the form: RUN runs the
351
+ line the dive wrote, from the frame the graph is in. -->
352
+ <button class="strategy-pill diagram-run" title="run the line on the catalogue's input">RUN</button>
292
353
  <span class="mode-fill"></span>
293
354
  </aside>
294
355
  <section class="files-panel" aria-label="Files"></section>
@@ -384,6 +445,7 @@
384
445
  <button class="strategy-pill image-layout rail-off" data-layout="single" title="one plane, scrolled">SINGLE</button>
385
446
  <button class="strategy-pill image-layout rail-off" data-layout="mpr" title="three linked planes, with a shared cursor">MPR</button>
386
447
  <button class="strategy-pill image-layout rail-off" data-layout="3d" title="a 3D volume render">3D</button>
448
+ <button class="strategy-pill image-layout rail-off" data-layout="slab" title="a crisp slice sweeping through a ghost volume">SLAB</button>
387
449
  <button class="strategy-pill image-colormap" title="colormap">GRAY</button>
388
450
  <button class="strategy-pill image-preset" hidden title="the modality's window presets">PRESET</button>
389
451
  <!-- A volume layout pulls every slice; over the guard
@@ -494,6 +556,75 @@
494
556
  <div class="empty-result"></div>
495
557
  </div>
496
558
  </template>
559
+ <template id="tpl-pane-launcher">
560
+ <!-- LAUNCHER: where a session begins when nothing is open. One
561
+ block per domain, each carrying what it holds now and
562
+ ending in the verb that opens it; its rows are doors. -->
563
+ <div class="workspace-pane pane-launcher">
564
+ <div class="lcars-terminal-header-bar files-header-bar pane-handle" title="pane controls">
565
+ <div class="lcars-bar-horizontal">
566
+ <span class="lcars-title pane-title">DASHBOARD</span>
567
+ <span class="pane-mode"></span>
568
+ <span class="pane-state"></span>
569
+ </div>
570
+ <div class="lcars-bar-end bar-punctuation"></div>
571
+ </div>
572
+ <div class="pane-drawer" hidden>
573
+ <span class="drawer-group drawer-structure">
574
+ <span class="drawer-label">SPLIT</span>
575
+ <button class="pacs-capsule drawer-split" data-split="col" data-place="before" title="new pane opens left">LEFT</button>
576
+ <button class="pacs-capsule drawer-split" data-split="col" data-place="after" title="new pane opens right">RIGHT</button>
577
+ <button class="pacs-capsule drawer-split" data-split="row" data-place="before" title="new pane opens above">ABOVE</button>
578
+ <button class="pacs-capsule drawer-split" data-split="row" data-place="after" title="new pane opens below">BELOW</button>
579
+ <button class="pacs-capsule drawer-zoom" data-pane="" title="zoom (Esc restores)">ZOOM</button>
580
+ <button class="pacs-capsule drawer-close" title="close pane">CLOSE</button>
581
+ </span>
582
+ <span class="drawer-group drawer-binding" role="radiogroup" title="what the next split creates">
583
+ <button class="pacs-capsule drawer-bind drawer-bind-selected" data-bind="unlinked">UNLINKED</button>
584
+ <button class="pacs-capsule drawer-bind" data-bind="fs">LINKED FS</button>
585
+ <button class="pacs-capsule drawer-bind" data-bind="viewer">LINKED VIEWER</button>
586
+ </span>
587
+ <span class="drawer-group drawer-children"></span>
588
+ </div>
589
+ <div class="launcher-body">
590
+ <div class="launcher-grid" aria-label="Where to begin"></div>
591
+ <button class="pacs-capsule launcher-start" title="begin here every time, or leave the session as you last had it">START HERE · OFF</button>
592
+ </div>
593
+ </div>
594
+ </template>
595
+ <template id="tpl-pane-panes">
596
+ <div class="workspace-pane pane-panes">
597
+ <div class="lcars-terminal-header-bar files-header-bar pane-handle" title="pane controls">
598
+ <div class="lcars-bar-horizontal">
599
+ <span class="lcars-title pane-title">PANES</span>
600
+ <span class="pane-mode"></span>
601
+ <span class="pane-state"></span>
602
+ </div>
603
+ <div class="lcars-bar-end bar-punctuation"></div>
604
+ </div>
605
+ <div class="pane-drawer" hidden>
606
+ <span class="drawer-group drawer-structure">
607
+ <span class="drawer-label">SPLIT</span>
608
+ <button class="pacs-capsule drawer-split" data-split="col" data-place="before" title="new pane opens left">LEFT</button>
609
+ <button class="pacs-capsule drawer-split" data-split="col" data-place="after" title="new pane opens right">RIGHT</button>
610
+ <button class="pacs-capsule drawer-split" data-split="row" data-place="before" title="new pane opens above">ABOVE</button>
611
+ <button class="pacs-capsule drawer-split" data-split="row" data-place="after" title="new pane opens below">BELOW</button>
612
+ <button class="pacs-capsule drawer-zoom" data-pane="" title="zoom (Esc restores)">ZOOM</button>
613
+ <button class="pacs-capsule drawer-close" title="close pane">CLOSE</button>
614
+ </span>
615
+ <span class="drawer-group drawer-binding" role="radiogroup" title="what the next split creates">
616
+ <button class="pacs-capsule drawer-bind drawer-bind-selected" data-bind="unlinked">UNLINKED</button>
617
+ <button class="pacs-capsule drawer-bind" data-bind="fs">LINKED FS</button>
618
+ <button class="pacs-capsule drawer-bind" data-bind="viewer">LINKED VIEWER</button>
619
+ </span>
620
+ <span class="drawer-group drawer-children"></span>
621
+ </div>
622
+ <div class="panes-body">
623
+ <div class="panes-grid" aria-label="Panes you have moved away from"></div>
624
+ <div class="panes-empty" hidden>No panes set aside. Move away from a view and it waits here.</div>
625
+ </div>
626
+ </div>
627
+ </template>
497
628
  <div class="workspace-pane" id="pacs-workspace">
498
629
  <div class="lcars-terminal-header-bar files-header-bar pane-handle" title="pane controls">
499
630
  <div class="lcars-bar-horizontal">
@@ -533,8 +664,7 @@
533
664
  <!-- PROGRESS is the expanse in the middle of every level, right
534
665
  after the description; the form's cell over it carries
535
666
  how-this-came-about, since an answer that was not fetched
536
- now says when it was. The control that re-asks stands in
537
- the verbs column at the end, where a row's verbs stand. -->
667
+ now says when it was. -->
538
668
  <span class="pacs-form-blank" data-key="progress">
539
669
  <span id="pacs-provenance" class="pacs-provenance" hidden></span>
540
670
  </span>
@@ -549,8 +679,11 @@
549
679
  <span class="pacs-form-field" data-key="server">SERVER
550
680
  <button id="pacs-f-server" class="pacs-server-cell" title="choose which PACS to ask (one moves the session, several fan out)">—</button>
551
681
  </span>
552
- <span class="pacs-form-blank" data-key="series"></span>
553
- <button id="pacs-run" class="pacs-capsule">QUERY</button>
682
+ <!-- QUERY stands in the last column, SERIES, which a query
683
+ cannot know: a row's verbs no longer keep a column at
684
+ the end, so the control that re-asks takes the one
685
+ the form leaves blank. -->
686
+ <button id="pacs-run" class="pacs-capsule" data-key="series">QUERY</button>
554
687
  </div>
555
688
  <!-- The strip has the pane's full width, so it carries far
556
689
  more servers than capsules crammed into one grid track. -->
@@ -570,6 +703,9 @@
570
703
  clipped label and the operator reported it missing. A
571
704
  control nobody can see is a control that is not there. -->
572
705
  <button id="pacs-export" class="pacs-capsule" title="write the whole answer as CSV into ChRIS storage">EXPORT CSV</button>
706
+ <!-- Where the table went, said by the pane that made it:
707
+ a readout, not a capsule, since it answers no press. -->
708
+ <span id="pacs-wrote" class="pacs-wrote" hidden></span>
573
709
  </div>
574
710
  <!-- The results are a framed field like the other listings:
575
711
  a rule turning through an elbow into the spine, whose
@@ -580,28 +716,13 @@
580
716
  <span class="mode-elbow"></span>
581
717
  <aside class="mode-frame">
582
718
  <button class="strategy-pill pacs-filter rail-off" title="filter the results (the bar reads FILTERED n/m)">FILTER OFF</button>
719
+ <!-- The ROW ZONE is minted here by the listing façade:
720
+ the indicated study's or series' verbs, one under
721
+ another (aegis.adoc: a-row-s-verbs-live-in-the-frame). -->
583
722
  <span class="mode-fill"></span>
584
723
  </aside>
585
724
  <div id="pacs-results"></div>
586
725
  </div>
587
- <div id="pacs-gather">
588
- <div class="pacs-gather-head">
589
- <span class="pacs-gather-title">GATHER</span>
590
- <input id="pacs-gather-name" placeholder="cohort name" autocomplete="off" />
591
- <button id="pacs-gather-save" class="pacs-capsule" title="write ~/gather/&lt;name&gt; manifest">SAVE</button>
592
- <!-- The cohort as a table a spreadsheet reads, named for
593
- what it covers so it is not read as the whole answer.
594
- It lands in CFS, not on the machine the browser
595
- happens to be running on: the engine is elsewhere,
596
- and a redirect would write somebody else's disk. -->
597
- <button id="pacs-gather-export" class="pacs-capsule" title="write the gathered series as CSV into ChRIS storage">EXPORT GATHER CSV</button>
598
- <!-- Where the table went, said by the pane that made it:
599
- a readout, not a capsule, since it answers no press. -->
600
- <span id="pacs-wrote" class="pacs-wrote" hidden></span>
601
- <button id="pacs-gather-feed" class="pacs-capsule" title="create a feed rooted on the cohort">CREATE FEED</button>
602
- </div>
603
- <div id="pacs-gather-rows"></div>
604
- </div>
605
726
  </div>
606
727
  </main>
607
728
  </div>
@@ -612,6 +733,9 @@
612
733
  <!-- The header's lid strip: appears when the header glides away; click
613
734
  (or Esc) restores it. Same idiom as the console drawer's lid. -->
614
735
  <div id="header-restore" title="restore header" role="button" tabindex="0"></div>
736
+ <!-- The gutter's lid strip: appears when the left gutter glides away
737
+ (a press on the domain already shown); click (or Esc) restores it. -->
738
+ <div id="gutter-restore" title="restore gutter" role="button" tabindex="0"></div>
615
739
  <!-- The argus command line: prefix-: in the tmux tradition. One line,
616
740
  floating over the workspace; sentences run client-side, anything
617
741
  else falls through to the session. -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnndsc/argus",
3
- "version": "0.7.2",
3
+ "version": "0.9.0",
4
4
  "description": "ARGUS: the LCARS web surface for mise — a browser console over a calypso session",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -8,7 +8,8 @@
8
8
  "dev": "vite",
9
9
  "test": "tsc --noEmit && NODE_OPTIONS='--experimental-vm-modules --disable-warning=ExperimentalWarning' jest",
10
10
  "smoke": "node tests/smoke/smoke.mjs",
11
- "sounds": "node scripts/sounds_make.mjs"
11
+ "sounds": "node scripts/sounds_make.mjs",
12
+ "sounds:import": "node scripts/sounds_import.mjs"
12
13
  },
13
14
  "author": "Rudolph Pienaar",
14
15
  "license": "MIT",
@@ -19,7 +20,7 @@
19
20
  "@cornerstonejs/metadata": "^5.8.2",
20
21
  "@cornerstonejs/tools": "^5.8.2",
21
22
  "@cornerstonejs/utils": "^5.8.2",
22
- "@fnndsc/menu": "^0.8.0",
23
+ "@fnndsc/menu": "^0.9.0",
23
24
  "@kitware/vtk.js": "^36.4.1",
24
25
  "@niivue/niivue": "^0.69.0",
25
26
  "@types/three": "^0.185.4",