@fasl-work/caos-app-shell 0.13.1 → 0.14.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/README.md +9 -1
- package/bin/caos-shell-gate.mjs +3 -1
- package/dist/index.d.ts +180 -2
- package/dist/index.js +547 -122
- package/gate/areas.mjs +67 -0
- package/gate/inpage.mjs +151 -5
- package/gate/run.mjs +260 -4
- package/package.json +1 -1
- package/reserved-classes.json +44 -0
- package/styles.css +69 -5
package/reserved-classes.json
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"caos-architecture-diagram",
|
|
23
23
|
"caos-badges",
|
|
24
24
|
"caos-bars",
|
|
25
|
+
"caos-card",
|
|
25
26
|
"caos-chart",
|
|
26
27
|
"caos-chart-key",
|
|
27
28
|
"caos-chart-legend",
|
|
@@ -33,8 +34,15 @@
|
|
|
33
34
|
"caos-chipgroup-label",
|
|
34
35
|
"caos-cw",
|
|
35
36
|
"caos-cw-context",
|
|
37
|
+
"caos-cw-focus",
|
|
36
38
|
"caos-cw-panel",
|
|
37
39
|
"caos-cw-panel-head",
|
|
40
|
+
"caos-deck",
|
|
41
|
+
"caos-deck-bar",
|
|
42
|
+
"caos-deck-btn",
|
|
43
|
+
"caos-deck-card",
|
|
44
|
+
"caos-deck-position",
|
|
45
|
+
"caos-deck-track",
|
|
38
46
|
"caos-doc-reference-list",
|
|
39
47
|
"caos-doc-references",
|
|
40
48
|
"caos-doc-section",
|
|
@@ -82,11 +90,24 @@
|
|
|
82
90
|
"caos-exec-title",
|
|
83
91
|
"caos-exec-value",
|
|
84
92
|
"caos-field",
|
|
93
|
+
"caos-flip",
|
|
94
|
+
"caos-flip-back",
|
|
95
|
+
"caos-flip-content",
|
|
96
|
+
"caos-flip-face",
|
|
97
|
+
"caos-flip-front",
|
|
98
|
+
"caos-flip-icon",
|
|
99
|
+
"caos-flip-inner",
|
|
100
|
+
"caos-flip-return",
|
|
101
|
+
"caos-flip-return-title",
|
|
102
|
+
"caos-flip-title",
|
|
103
|
+
"caos-flip-toggle",
|
|
85
104
|
"caos-focus-actions",
|
|
105
|
+
"caos-focus-enter",
|
|
86
106
|
"caos-focus-hud",
|
|
87
107
|
"caos-focus-instrument",
|
|
88
108
|
"caos-focus-label",
|
|
89
109
|
"caos-focus-rail",
|
|
110
|
+
"caos-focus-rail-body",
|
|
90
111
|
"caos-focus-shell",
|
|
91
112
|
"caos-focus-stage",
|
|
92
113
|
"caos-gauge-dot",
|
|
@@ -177,6 +198,7 @@
|
|
|
177
198
|
"cs-modified",
|
|
178
199
|
"cs-reset",
|
|
179
200
|
"cs-select",
|
|
201
|
+
"cs-select-row",
|
|
180
202
|
"cs-source",
|
|
181
203
|
"cs-source-label",
|
|
182
204
|
"cs-source-tabs",
|
|
@@ -306,6 +328,7 @@
|
|
|
306
328
|
"caos-architecture-diagram",
|
|
307
329
|
"caos-badges",
|
|
308
330
|
"caos-bars",
|
|
331
|
+
"caos-card",
|
|
309
332
|
"caos-chart",
|
|
310
333
|
"caos-chart-key",
|
|
311
334
|
"caos-chart-legend",
|
|
@@ -318,8 +341,15 @@
|
|
|
318
341
|
"caos-col-text",
|
|
319
342
|
"caos-cw",
|
|
320
343
|
"caos-cw-context",
|
|
344
|
+
"caos-cw-focus",
|
|
321
345
|
"caos-cw-panel",
|
|
322
346
|
"caos-cw-panel-head",
|
|
347
|
+
"caos-deck",
|
|
348
|
+
"caos-deck-bar",
|
|
349
|
+
"caos-deck-btn",
|
|
350
|
+
"caos-deck-card",
|
|
351
|
+
"caos-deck-position",
|
|
352
|
+
"caos-deck-track",
|
|
323
353
|
"caos-doc-reference-list",
|
|
324
354
|
"caos-doc-references",
|
|
325
355
|
"caos-doc-section",
|
|
@@ -367,11 +397,24 @@
|
|
|
367
397
|
"caos-exec-title",
|
|
368
398
|
"caos-exec-value",
|
|
369
399
|
"caos-field",
|
|
400
|
+
"caos-flip",
|
|
401
|
+
"caos-flip-back",
|
|
402
|
+
"caos-flip-content",
|
|
403
|
+
"caos-flip-face",
|
|
404
|
+
"caos-flip-front",
|
|
405
|
+
"caos-flip-icon",
|
|
406
|
+
"caos-flip-inner",
|
|
407
|
+
"caos-flip-return",
|
|
408
|
+
"caos-flip-return-title",
|
|
409
|
+
"caos-flip-title",
|
|
410
|
+
"caos-flip-toggle",
|
|
370
411
|
"caos-focus-actions",
|
|
412
|
+
"caos-focus-enter",
|
|
371
413
|
"caos-focus-hud",
|
|
372
414
|
"caos-focus-instrument",
|
|
373
415
|
"caos-focus-label",
|
|
374
416
|
"caos-focus-rail",
|
|
417
|
+
"caos-focus-rail-body",
|
|
375
418
|
"caos-focus-shell",
|
|
376
419
|
"caos-focus-stage",
|
|
377
420
|
"caos-gauge-dot",
|
|
@@ -464,6 +507,7 @@
|
|
|
464
507
|
"cs-modified",
|
|
465
508
|
"cs-reset",
|
|
466
509
|
"cs-select",
|
|
510
|
+
"cs-select-row",
|
|
467
511
|
"cs-source",
|
|
468
512
|
"cs-source-label",
|
|
469
513
|
"cs-source-tabs",
|
package/styles.css
CHANGED
|
@@ -508,6 +508,10 @@ svg.lucide { flex: none; }
|
|
|
508
508
|
/* The compact one-of-N case picker (ADR-0071 rule 7): ten cases in four categories cost a 308px chip block, 21% of a
|
|
509
509
|
2560x1440 viewport, and one row as a dropdown. */
|
|
510
510
|
.cs-select { width: 100%; max-width: 460px; }
|
|
511
|
+
/* the select and a control beside it (the workbench's Focus button): one row, the select shrinks, the control keeps its size */
|
|
512
|
+
.cs-select-row { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
|
|
513
|
+
.cs-select-row > .cs-select { flex: 1 1 auto; min-width: 0; }
|
|
514
|
+
.cs-select-row > :not(.cs-select) { flex: none; }
|
|
511
515
|
|
|
512
516
|
/* == 9 workbench ================================================================================================ */
|
|
513
517
|
|
|
@@ -517,12 +521,12 @@ svg.lucide { flex: none; }
|
|
|
517
521
|
.caos-wb-rail-panel { display: flex; flex-direction: column; gap: 0.8rem; min-height: 0; }
|
|
518
522
|
/* A labelled control in the rail stacks its text above it; a knob's head keeps its own row, the value at the right
|
|
519
523
|
(until 0.9.3 this rule outranked `.caos-knob-head` and stacked every knob, a line per knob; CAOS_APP_SHELL#77). */
|
|
520
|
-
.caos-wb-rail label:not(.caos-knob-head) { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.8rem; color: var(--color-fg-subtle); }
|
|
521
|
-
.caos-wb-rail .select, .caos-wb-rail .range { width: 100%; }
|
|
524
|
+
.caos-wb-rail label:not(.caos-knob-head), .caos-focus-rail label:not(.caos-knob-head) { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.8rem; color: var(--color-fg-subtle); }
|
|
525
|
+
.caos-wb-rail .select, .caos-wb-rail .range, .caos-focus-rail .select, .caos-focus-rail .range { width: 100%; }
|
|
522
526
|
/* The variants wrap in the rail instead of scrolling. */
|
|
523
|
-
.caos-wb-rail .caos-variant-bar { margin-bottom: 0; }
|
|
524
|
-
.caos-wb-rail .caos-chip-row { flex-wrap: wrap; overflow: visible; }
|
|
525
|
-
.caos-wb-rail .caos-variant-note { font-size: 0.8rem; }
|
|
527
|
+
.caos-wb-rail .caos-variant-bar, .caos-focus-rail .caos-variant-bar { margin-bottom: 0; }
|
|
528
|
+
.caos-wb-rail .caos-chip-row, .caos-focus-rail .caos-chip-row { flex-wrap: wrap; overflow: visible; }
|
|
529
|
+
.caos-wb-rail .caos-variant-note, .caos-focus-rail .caos-variant-note { font-size: 0.8rem; }
|
|
526
530
|
.caos-wb-main { display: flex; flex-direction: column; min-height: 0; min-width: 0; }
|
|
527
531
|
|
|
528
532
|
/* CaseWorkbench: ONE row of at most six question groups; the open panel takes the height the row leaves and owns its
|
|
@@ -767,3 +771,63 @@ svg.lucide { flex: none; }
|
|
|
767
771
|
.caos-exec-links { display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; padding-top: 0.25rem; }
|
|
768
772
|
.caos-exec-link { font-weight: 600; }
|
|
769
773
|
.caos-exec-error { padding: 1rem 1.25rem; border: 1px solid var(--color-bad); border-radius: var(--radius-md); }
|
|
774
|
+
|
|
775
|
+
/* == flip cards and the card deck (shell 0.14.0) ================================================================== */
|
|
776
|
+
|
|
777
|
+
/* A flip card: two faces stacked in one cell (the card is as tall as its back, so a row of cards keeps one height), the
|
|
778
|
+
inner box turns on the Y axis. The hidden face leaves the accessibility tree and the tab order through `visibility`
|
|
779
|
+
(switched after the turn on the way out, at once on the way in) and `aria-hidden`; its content stays in the markup.
|
|
780
|
+
Theme tokens only. Under reduced motion the faces swap without the turn. */
|
|
781
|
+
.caos-flip { position: relative; display: flex; min-width: 0; width: 100%; perspective: 1100px; }
|
|
782
|
+
.caos-flip-inner { display: grid; flex: 1 1 auto; min-width: 0; transform-style: preserve-3d; transition: transform 0.45s ease; }
|
|
783
|
+
.caos-flip[data-flip-open="true"] > .caos-flip-inner { transform: rotateY(180deg); }
|
|
784
|
+
.caos-flip-face { grid-area: 1 / 1; min-width: 0; display: flex; flex-direction: column; background: var(--color-surface-2); border: 1px solid var(--color-border); border-radius: var(--radius-md); overflow-wrap: anywhere; backface-visibility: hidden; -webkit-backface-visibility: hidden; transition: visibility 0s linear 0s; }
|
|
785
|
+
.caos-flip-back { transform: rotateY(180deg); visibility: hidden; padding: 0.8rem 1rem; gap: 0.5rem; transition: visibility 0s linear 0.45s; }
|
|
786
|
+
.caos-flip[data-flip-open="true"] > .caos-flip-inner > .caos-flip-front { visibility: hidden; transition-delay: 0.45s; }
|
|
787
|
+
.caos-flip[data-flip-open="true"] > .caos-flip-inner > .caos-flip-back { visibility: visible; transition-delay: 0s; }
|
|
788
|
+
.caos-flip-toggle { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; width: 100%; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
|
|
789
|
+
.caos-flip-front > .caos-flip-toggle { flex: 1 1 auto; padding: 0.8rem 1rem; font-weight: 650; border-radius: var(--radius-md); }
|
|
790
|
+
.caos-flip-front:hover { border-color: var(--color-accent); }
|
|
791
|
+
.caos-flip-title { min-width: 0; }
|
|
792
|
+
.caos-flip-icon { flex: none; color: var(--color-fg-faint); }
|
|
793
|
+
.caos-flip-return { flex: none; font-size: var(--text-xs); text-transform: uppercase; letter-spacing: 0.04em; font-weight: 650; color: var(--color-fg-faint); }
|
|
794
|
+
.caos-flip-return-title { min-width: 0; }
|
|
795
|
+
.caos-flip-content { display: flex; flex-direction: column; gap: 0.5rem; min-width: 0; }
|
|
796
|
+
@media (prefers-reduced-motion: reduce) {
|
|
797
|
+
.caos-flip-inner { transform: none !important; transition: none !important; }
|
|
798
|
+
.caos-flip-back { transform: none !important; }
|
|
799
|
+
.caos-flip-face { transition: none !important; }
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
/* The card deck: a row of cards, or a carousel that pages through them (one window of as many cards as fit, at least
|
|
803
|
+
one; the page and the panel never scroll sideways). Entering cards slide in; reduced motion removes it. */
|
|
804
|
+
.caos-deck { display: flex; flex-direction: column; gap: 0.6rem; min-width: 0; }
|
|
805
|
+
.caos-deck-track { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: 0.9rem; min-width: 0; touch-action: pan-y; }
|
|
806
|
+
.caos-deck[data-deck-mode="carousel"] > .caos-deck-track { grid-template-columns: repeat(var(--deck-per, 1), minmax(0, 1fr)); }
|
|
807
|
+
.caos-deck-card { min-width: 0; display: flex; }
|
|
808
|
+
.caos-deck-card[hidden] { display: none; }
|
|
809
|
+
.caos-card { flex: 1 1 auto; min-width: 0; padding: 0.8rem 1rem; background: var(--color-surface-2); border: 1px solid var(--color-border); border-radius: var(--radius-md); display: flex; flex-direction: column; gap: 0.5rem; overflow-wrap: anywhere; }
|
|
810
|
+
.caos-deck-bar { display: flex; align-items: center; justify-content: center; gap: 0.75rem; }
|
|
811
|
+
.caos-deck-btn { display: inline-flex; align-items: center; justify-content: center; width: 2.25rem; height: 2.25rem; padding: 0; border: 1px solid var(--color-border); border-radius: 999px; background: var(--color-surface); color: var(--color-fg); cursor: pointer; }
|
|
812
|
+
.caos-deck-btn:hover { border-color: var(--color-accent); color: var(--color-accent); }
|
|
813
|
+
.caos-deck-btn[aria-disabled="true"] { opacity: 0.4; cursor: default; }
|
|
814
|
+
.caos-deck-btn[aria-disabled="true"]:hover { border-color: var(--color-border); color: var(--color-fg); }
|
|
815
|
+
.caos-deck-position { min-width: 6.5rem; text-align: center; font-size: var(--text-sm); color: var(--color-fg-subtle); font-variant-numeric: tabular-nums; }
|
|
816
|
+
@keyframes caos-deck-in { from { opacity: 0; transform: translateX(0.75rem); } to { opacity: 1; transform: none; } }
|
|
817
|
+
.caos-deck[data-deck-moved] .caos-deck-card { animation: caos-deck-in 0.28s ease-out; }
|
|
818
|
+
@media (prefers-reduced-motion: reduce) { .caos-deck-card { animation: none !important; } }
|
|
819
|
+
|
|
820
|
+
/* Flip cards inside the executive view keep the width of the plain cards they replace. */
|
|
821
|
+
.caos-exec .caos-exec-cs.caos-deck-track { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
|
822
|
+
.caos-exec .caos-deck[data-deck-mode="carousel"] > .caos-exec-cs.caos-deck-track { grid-template-columns: repeat(var(--deck-per, 1), minmax(0, 1fr)); }
|
|
823
|
+
|
|
824
|
+
/* == Focus mode for the App (shell 0.14.0, ADR-0070) ================================================================== */
|
|
825
|
+
|
|
826
|
+
/* The stage is the open group; the label overlay (heading and line) sits above it, so the group starts below the label. */
|
|
827
|
+
.caos-focus-instrument > .caos-cw-focus { position: absolute; inset: 0; padding: 4.6rem 0.9rem 0.9rem; }
|
|
828
|
+
.caos-focus-instrument > .caos-cw-focus > .tabs { display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; }
|
|
829
|
+
.caos-focus-rail-body { display: flex; flex-direction: column; gap: var(--space-3); padding: 0.85rem; min-width: 0; }
|
|
830
|
+
.caos-focus-enter { align-self: flex-start; }
|
|
831
|
+
@media (max-width: 900px) {
|
|
832
|
+
.caos-focus-instrument > .caos-cw-focus { padding: 6.6rem 0.5rem 0.5rem; }
|
|
833
|
+
}
|