@fasl-work/caos-app-shell 0.19.11 → 0.20.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.
- package/CHANGELOG.md +29 -0
- package/VERSION +1 -1
- package/bin/caos-shell-gate.mjs +5 -2
- package/dist/chart.d.ts +2 -2
- package/dist/chart.js +2 -2
- package/dist/{chunk-FXPSZD6X.js → chunk-FPPJQC2J.js} +5 -0
- package/dist/index.d.ts +202 -6
- package/dist/index.js +302 -3
- package/dist/{tokens-BvU9bFPw.d.ts → tokens-CIdhVv-t.d.ts} +1 -1
- package/gate/artifacts.mjs +29 -0
- package/gate/inpage.mjs +68 -0
- package/gate/run.mjs +167 -12
- package/package.json +100 -100
- package/reserved-classes.json +60 -0
- package/styles.css +100 -4
package/styles.css
CHANGED
|
@@ -39,6 +39,11 @@
|
|
|
39
39
|
--color-good: #3fb950;
|
|
40
40
|
--color-warn: #d29922;
|
|
41
41
|
--color-bad: #f85149;
|
|
42
|
+
--color-step-1: #56d4e5;
|
|
43
|
+
--color-step-2: #79c0ff;
|
|
44
|
+
--color-step-3: #d2a8ff;
|
|
45
|
+
--color-step-4: #7ee787;
|
|
46
|
+
--color-step-5: #ffca80;
|
|
42
47
|
--color-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 6px 16px rgba(0, 0, 0, 0.45);
|
|
43
48
|
color-scheme: dark;
|
|
44
49
|
}
|
|
@@ -60,6 +65,11 @@
|
|
|
60
65
|
--color-good: #197c36;
|
|
61
66
|
--color-warn: #946300;
|
|
62
67
|
--color-bad: #cf222e;
|
|
68
|
+
--color-step-1: #0550ae;
|
|
69
|
+
--color-step-2: #0969da;
|
|
70
|
+
--color-step-3: #6639ba;
|
|
71
|
+
--color-step-4: #1a7f37;
|
|
72
|
+
--color-step-5: #9a6700;
|
|
63
73
|
--color-shadow: 0 1px 2px rgba(31, 35, 40, 0.06), 0 4px 10px rgba(31, 35, 40, 0.04);
|
|
64
74
|
}
|
|
65
75
|
|
|
@@ -235,9 +245,11 @@ code, kbd { font-family: var(--font-mono); }
|
|
|
235
245
|
/* A WORKBENCH or a SURFACE is not prose: capping an instrument at the reading width wastes every pixel beyond it. */
|
|
236
246
|
.page-body.wide { max-width: var(--maxw-wide); padding-inline: 1.25rem; }
|
|
237
247
|
.app-shell.fixed .page-body.wide { flex: 1 1 auto; min-height: 0; padding-top: 0.75rem; padding-bottom: 0.75rem; }
|
|
248
|
+
.app-shell.fixed .page-body.wide.caos-wb { padding-top: 0.15rem; padding-bottom: 0.15rem; }
|
|
249
|
+
.app-shell.fixed.contain:has(.caos-wb) > .site-header .header-inner { height: 48px; }
|
|
238
250
|
|
|
239
251
|
/* Workbench (WorkbenchLayout): a sized rail beside the instrument, on the full viewport. */
|
|
240
|
-
.caos-wb { display: grid; grid-template-columns: var(--rail-w) minmax(0, 1fr); gap: 0.
|
|
252
|
+
.caos-wb { --rail-w: clamp(232px, 17vw, 320px); display: grid; grid-template-columns: var(--rail-w) minmax(0, 1fr); gap: 0.6rem; align-items: stretch; min-width: 0; padding-top: 0.4rem; padding-bottom: 0.4rem; }
|
|
241
253
|
.page-body.wide.caos-wb { padding-inline: var(--space-4); }
|
|
242
254
|
.caos-wb > * { min-width: 0; }
|
|
243
255
|
.app-shell.fixed.contain > .page > .caos-wb { flex: 1 1 auto; min-height: 0; }
|
|
@@ -619,7 +631,7 @@ svg.lucide { flex: none; }
|
|
|
619
631
|
.caos-verdict.compact .caos-verdict-text { margin: 0; }
|
|
620
632
|
|
|
621
633
|
/* PlotCard: the frame every chart or table sits in. */
|
|
622
|
-
.caos-plot { margin: 0; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: 0.
|
|
634
|
+
.caos-plot { margin: 0; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: 0.25rem 0.6rem 0.2rem; min-width: 0; }
|
|
623
635
|
.caos-plot-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: var(--space-2); margin-bottom: 0.2rem; font-style: normal; text-align: left; min-height: 1.5rem; min-width: 0; }
|
|
624
636
|
.caos-plot-head .badge { font-size: 0.68rem; padding: 0.05rem 0.45rem; }
|
|
625
637
|
.caos-plot-title { min-width: 0; overflow-wrap: anywhere; font-size: var(--text-sm); color: var(--color-fg-subtle); font-weight: 600; }
|
|
@@ -629,6 +641,7 @@ svg.lucide { flex: none; }
|
|
|
629
641
|
.caos-plot-note { margin: 0.4rem 0 0; font-size: 0.78rem; color: var(--color-fg-faint); }
|
|
630
642
|
.caos-plot.fill { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
|
|
631
643
|
.caos-plot.fill > .caos-plot-body { flex: 1 1 0; min-height: 0; overflow: hidden; }
|
|
644
|
+
.caos-plot.fill > .caos-plot-body > .caos-table { height: 100%; }
|
|
632
645
|
/* The note of a filling card keeps at most 35% of the card and scrolls beyond it, so the drawing keeps a floor
|
|
633
646
|
(CAOS_APP_SHELL#95: a long note left plots of 10 to 90 px at 1280 x 800). */
|
|
634
647
|
.caos-plot.fill > .caos-plot-note { flex: 0 1 auto; max-height: 35%; overflow-y: auto; }
|
|
@@ -641,14 +654,14 @@ svg.lucide { flex: none; }
|
|
|
641
654
|
[data-caos-note-fit] .caos-plot.fill > .caos-plot-note { max-height: none; min-height: 0; }
|
|
642
655
|
}
|
|
643
656
|
|
|
644
|
-
/* The stage floor of a filling card (shell 0.11.2; the gate's G6 floor, `--stage-floor`
|
|
657
|
+
/* The stage floor of a filling card (shell 0.11.2; the gate's G6 floor, `--stage-floor` 146 px). At 1280 px and wider the
|
|
645
658
|
body of a filling card, the box the gate measures, keeps at least the floor itself, so the card grows when its header
|
|
646
659
|
or its note wraps (a narrow column, the Spanish title, two badges, the wide font) and the containing panel scrolls
|
|
647
660
|
when the cards do not fit (ADR-0071; the rail never does). 0.11.1 derived a card height from a fixed chrome instead,
|
|
648
661
|
and a header that wrapped to a third line left the stage under the floor (CAOS_Contraste 0.07.000: 138 px; a
|
|
649
662
|
400 px column with a note: 106 px). Below 1280 px the document scrolls and nothing changes. */
|
|
650
663
|
@media (min-width: 1280px) {
|
|
651
|
-
.caos-plot.fill > .caos-plot-body { min-height: var(--caos-stage-floor,
|
|
664
|
+
.caos-plot.fill > .caos-plot-body { min-height: var(--caos-stage-floor, 146px); }
|
|
652
665
|
}
|
|
653
666
|
|
|
654
667
|
/* A row of views side by side. Every view of the row takes an equal share, a filling card included (known shell
|
|
@@ -713,6 +726,12 @@ svg.lucide { flex: none; }
|
|
|
713
726
|
.caos-table th.caos-col-text, .caos-table td.caos-col-text { text-align: left; white-space: normal; min-width: 16ch; }
|
|
714
727
|
.caos-table thead th { position: sticky; top: 0; background: var(--color-surface); color: var(--color-fg-subtle); font-weight: 600; border-bottom-color: var(--color-fg-faint); }
|
|
715
728
|
.caos-table tbody tr:hover { background: var(--color-surface-2); }
|
|
729
|
+
/* A full-height table is a plotted view too: use taller rows on a very tall desktop so its data occupies the
|
|
730
|
+
instrument instead of leaving the lower half of a 1440 px stage visually empty (ADR-0082 G6). */
|
|
731
|
+
@media (min-width: 2400px) and (min-height: 1200px) {
|
|
732
|
+
.caos-plot.fill > .caos-plot-body > .caos-table th,
|
|
733
|
+
.caos-plot.fill > .caos-plot-body > .caos-table td { padding-block: 0.58rem; }
|
|
734
|
+
}
|
|
716
735
|
|
|
717
736
|
@media (max-width: 900px) {
|
|
718
737
|
/* The views of a row stack; a filling view gets a fixed readable height instead of the panel's. */
|
|
@@ -931,6 +950,83 @@ svg.lucide { flex: none; }
|
|
|
931
950
|
.tabs-has-slot > .tabs-slot { grid-column: 2; grid-row: 1; align-self: stretch; display: flex; align-items: center; padding-bottom: 0.4rem; margin-bottom: 0.9rem; border-bottom: 1px solid var(--color-border); }
|
|
932
951
|
.tabs-has-slot > .tabs-slot > .caos-focus-enter { align-self: center; padding-block: 0.2rem; }
|
|
933
952
|
.tabs-has-slot > .tabpanel { grid-column: 1 / -1; grid-row: 2; }
|
|
953
|
+
|
|
954
|
+
/* ADR-0082 showcase frame: one focused stage, one docked panel, readable step navigation and anchored scene notes. */
|
|
955
|
+
.caos-story { display: flex; flex-direction: column; gap: 0; min-width: 0; min-height: 0; height: 100%; padding: 0; color: var(--color-fg); background: var(--color-bg); }
|
|
956
|
+
body:has([data-story]) .app-shell > .site-header,
|
|
957
|
+
body:has([data-story]) .app-shell > .site-footer { display: none !important; }
|
|
958
|
+
body:has([data-story]) .app-shell > .page { display: flex; flex: 1 1 auto; min-height: 0; overflow: hidden; padding: 0; }
|
|
959
|
+
body:has([data-story]) .app-shell > .page > .caos-story { width: 100%; height: 100%; flex: 1 1 auto; }
|
|
960
|
+
.caos-story-header { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); min-width: 0; }
|
|
961
|
+
.caos-story-heading { min-width: 0; }
|
|
962
|
+
.caos-story-verb { display: block; color: var(--color-step-1); font: 700 var(--text-xs) var(--font-mono); letter-spacing: .09em; text-transform: uppercase; }
|
|
963
|
+
.caos-story-headline { margin: .1rem 0; font-size: clamp(1rem, 1.6vw, 1.45rem); line-height: 1.2; }
|
|
964
|
+
.caos-story-heading > p { margin: .15rem 0 0; color: var(--color-fg-subtle); font-size: var(--text-sm); }
|
|
965
|
+
.caos-story[data-step-accent="1"] .caos-story-verb { color: var(--color-step-1); }
|
|
966
|
+
.caos-story[data-step-accent="2"] .caos-story-verb { color: var(--color-step-2); }
|
|
967
|
+
.caos-story[data-step-accent="3"] .caos-story-verb { color: var(--color-step-3); }
|
|
968
|
+
.caos-story[data-step-accent="4"] .caos-story-verb { color: var(--color-step-4); }
|
|
969
|
+
.caos-story[data-step-accent="5"] .caos-story-verb { color: var(--color-step-5); }
|
|
970
|
+
.caos-story-actions,.caos-story-controls { display: flex; align-items: center; gap: var(--space-2); }
|
|
971
|
+
.caos-story button { min-height: 36px; padding: .35rem .65rem; color: var(--color-fg); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-md); cursor: pointer; }
|
|
972
|
+
.caos-story button:disabled { opacity: .55; cursor: not-allowed; }
|
|
973
|
+
.caos-story-stepper { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--space-2); min-width: 0; }
|
|
974
|
+
.caos-story-step { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-rows: auto auto; align-items: center; column-gap: .55rem; min-width: 0; min-height: 40px; padding: .2rem .55rem; color: var(--color-fg-subtle); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-md); text-decoration: none; }
|
|
975
|
+
.caos-story-step:hover { color: var(--color-fg); text-decoration: none; }
|
|
976
|
+
.caos-story-step.is-active { color: var(--color-fg); border-color: var(--color-accent); box-shadow: inset 3px 0 var(--color-accent); }
|
|
977
|
+
.caos-story-step-number { grid-row: 1 / span 2; display: grid; place-items: center; width: 1.55rem; height: 1.55rem; border: 1px solid currentColor; border-radius: 50%; font: 700 var(--text-xs) var(--font-mono); }
|
|
978
|
+
.caos-story-step-verb { overflow: hidden; color: var(--color-fg); font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
|
|
979
|
+
.caos-story-step-headline { overflow: hidden; color: var(--color-fg-subtle); font-size: var(--text-xs); text-overflow: ellipsis; white-space: nowrap; }
|
|
980
|
+
.caos-story-controls { justify-content: flex-end; }
|
|
981
|
+
.caos-story-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(260px, 29%); gap: var(--space-3); flex: 1 1 auto; min-width: 0; min-height: 0; }
|
|
982
|
+
.caos-story-stage { position: relative; isolation: isolate; min-width: 0; min-height: 360px; overflow: hidden; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); }
|
|
983
|
+
.caos-story-stage > :not(.caos-callout-layer) { width: 100%; height: 100%; }
|
|
984
|
+
.caos-story-panel { min-width: 0; min-height: 0; overflow: auto; padding: var(--space-3); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); }
|
|
985
|
+
/* A route change first moves the instrument into view, then the docked evidence panel; the sequence is short and tied to the finding. */
|
|
986
|
+
[data-story-transition] > .caos-story-stage { animation: caos-story-stage-enter 320ms cubic-bezier(.2,.72,.26,1) both; }
|
|
987
|
+
[data-story-transition] > .caos-story-panel { animation: caos-story-panel-enter 240ms cubic-bezier(.2,.72,.26,1) 100ms both; }
|
|
988
|
+
@keyframes caos-story-stage-enter { from { transform: translateY(7px) scale(.994); } to { transform: translateY(0) scale(1); } }
|
|
989
|
+
@keyframes caos-story-panel-enter { from { transform: translateY(6px); } to { transform: translateY(0); } }
|
|
990
|
+
.caos-callout-layer { position: absolute; z-index: 4; inset: 0; overflow: hidden; pointer-events: none; }
|
|
991
|
+
.caos-scene3d-frame { display: grid; grid-template-rows: auto minmax(0, 1fr); min-width: 0; min-height: 0; width: 100%; height: 100%; overflow: hidden; background: var(--color-bg); color: var(--color-fg); }
|
|
992
|
+
.caos-scene3d-controls { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2); min-width: 0; padding: var(--space-2) var(--space-3); border-block-end: 1px solid var(--color-border); background: var(--color-surface); }
|
|
993
|
+
.caos-scene3d-viewport { position: relative; min-width: 0; min-height: 0; overflow: hidden; isolation: isolate; }
|
|
994
|
+
.caos-scene3d-renderer, .caos-scene3d-renderer > canvas, .caos-scene3d-renderer > svg { display: block; width: 100%; height: 100%; min-width: 0; min-height: 0; }
|
|
995
|
+
.caos-scene3d-status { position: absolute; inset-inline-start: var(--space-3); inset-block-end: var(--space-3); z-index: 2; max-width: min(32rem, calc(100% - 2 * var(--space-3))); padding: var(--space-2) var(--space-3); border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-surface); color: var(--color-fg); }
|
|
996
|
+
.caos-scene3d-legend { position: absolute; inset-inline-end: var(--space-3); inset-block-end: var(--space-3); z-index: 2; max-width: min(24rem, calc(100% - 2 * var(--space-3))); padding: var(--space-2) var(--space-3); border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-surface); color: var(--color-fg); }
|
|
997
|
+
.caos-callout-leaders { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
|
|
998
|
+
.caos-callout-leaders line { stroke: var(--color-fg-faint); stroke-width: 1.1; stroke-dasharray: 2 4; opacity: .52; }
|
|
999
|
+
.caos-scene-callout { position: absolute; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-content: center; gap: .05rem .4rem; padding: .35rem .5rem; color: var(--color-fg); background: color-mix(in srgb, var(--color-surface) 94%, transparent); border: 1px solid var(--color-border); border-left: 3px solid var(--color-accent); border-radius: var(--radius-md); box-shadow: var(--color-shadow); backdrop-filter: blur(8px); }
|
|
1000
|
+
.caos-scene-callout[data-callout-state="alarm"] { border-left-color: var(--color-bad); }
|
|
1001
|
+
.caos-scene-callout[data-callout-state="warning"] { border-left-color: var(--color-warn); }
|
|
1002
|
+
.caos-scene-callout[data-callout-state="normal"] { border-left-color: var(--color-good); }
|
|
1003
|
+
.caos-scene-callout[data-callout-state="inactive"] { border-left-color: var(--color-fg-faint); }
|
|
1004
|
+
.caos-callout-eyebrow { overflow: hidden; color: var(--color-fg); font: 700 .68rem var(--font-mono); letter-spacing: .05em; text-overflow: ellipsis; white-space: nowrap; }
|
|
1005
|
+
.caos-scene-callout > strong { overflow: hidden; font: 700 .92rem var(--font-mono); font-variant-numeric: tabular-nums; text-overflow: ellipsis; white-space: nowrap; }
|
|
1006
|
+
.caos-scene-callout > strong small,.caos-callout-source { color: var(--color-fg); font-size: .68rem; font-weight: 500; }
|
|
1007
|
+
.caos-callout-trend { grid-column: 2; grid-row: 1 / span 2; align-self: center; font-size: 1.1rem; font-weight: 800; }
|
|
1008
|
+
.caos-callout-trend.trend-up { color: var(--color-bad); }
|
|
1009
|
+
.caos-callout-trend.trend-down { color: var(--color-good); }
|
|
1010
|
+
.caos-callout-source { grid-column: 1 / -1; }
|
|
1011
|
+
@media (max-width: 760px) {
|
|
1012
|
+
body:has([data-story]) .app-shell > .page { overflow-y: auto; }
|
|
1013
|
+
.caos-story { height: auto; min-height: 100%; }
|
|
1014
|
+
.caos-story-header { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; gap: .45rem; }
|
|
1015
|
+
.caos-story-heading { width: 100%; }
|
|
1016
|
+
.caos-story-actions { width: 100%; flex-wrap: wrap; justify-content: space-between; gap: .35rem; }
|
|
1017
|
+
.caos-story-controls { flex: 1 1 auto; justify-content: flex-start; gap: .35rem; }
|
|
1018
|
+
.caos-story button { min-height: 34px; padding: .3rem .5rem; font-size: .78rem; white-space: nowrap; }
|
|
1019
|
+
.caos-story-stepper { grid-auto-columns: minmax(90px, 1fr); grid-auto-flow: column; grid-template-columns: unset; overflow-x: auto; }
|
|
1020
|
+
.caos-story-step-headline { display: none; }
|
|
1021
|
+
.caos-story-layout { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(46dvh, 1fr) auto; }
|
|
1022
|
+
.caos-story-panel { max-height: 30dvh; }
|
|
1023
|
+
.caos-story-stage { min-height: 300px; }
|
|
1024
|
+
.caos-scene-callout { padding: .25rem .35rem; }
|
|
1025
|
+
}
|
|
1026
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1027
|
+
.caos-story *, .caos-callout-layer * { scroll-behavior: auto !important; animation-duration: .01ms !important; transition-duration: .01ms !important; }
|
|
1028
|
+
[data-story-transition] > .caos-story-stage, [data-story-transition] > .caos-story-panel { animation: none !important; }
|
|
1029
|
+
}
|
|
934
1030
|
/* The same slot in the workbench's group tab row (shell 0.17.0, BL-074): the Focus control of the App ends the row, so the case select keeps
|
|
935
1031
|
the rail head's whole width. The tab row's own spacing (a tighter rule than the surface's) is repeated under the slot. */
|
|
936
1032
|
.caos-cw > .tabs.tabs-has-slot { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: auto minmax(0, 1fr); column-gap: 0.5rem; }
|