@fasl-work/caos-app-shell 0.12.0 → 0.13.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,72 +1,72 @@
1
- #!/usr/bin/env node
2
- // caos-shell-gate: the measured web baseline of a CAOS product (ADR-0071, ADR-0017, ADR-0016, ADR-0078).
3
- // The checks and the traps each one embeds are listed in gate/run.mjs; the self-test (npm run test:gate in the
4
- // shell repository) plants one defect per check and requires each to fail.
5
- //
6
- // Usage:
7
- // npx caos-shell-gate --serve dist --expect-brand "Contraste" a Pages-faithful server over the build
8
- // npx caos-shell-gate --url https://contraste.fasl-work.com --expect-brand "Contraste" the deployed origin
9
- // Options:
10
- // --base-path /Repo/ the site's base path with --serve (a project page); default /
11
- // --routes /,/methodology the routes; default: read from the header navigation
12
- // --workbench / the routes that carry the case workbench; default /
13
- // --sizes 390x844,...,2560x1440 --themes light,dark --langs en,es
14
- // --case-sample id1,id2 cases walked outside the primary mode; default the first and the last
15
- // --single-case the workbench has one case and no case control
16
- // --idle-ms 3000 --settle-ms 15000 --text-floor 400 --instrument-min 0.5 --stage-fill-min 0.3 --stage-floor 140
17
- // --wide-font-sizes 390x844,1280x800 the sizes of the wide-font pass (G10); --no-wide-font skips it
18
- // --out gate-output report (gate-report.json), screenshots (shots/) and the capture index (index.html)
19
- // Needs `playwright` in the consuming project (optional peer dependency). Exit 1 on any failure, 2 on misuse.
20
-
21
- import { runGate } from '../gate/run.mjs';
22
-
23
- const FLAGS = new Set(['single-case', 'no-wide-font']);
24
- const args = {};
25
- const argv = process.argv.slice(2);
26
- for (let i = 0; i < argv.length; i += 1) {
27
- const a = argv[i];
28
- if (!a.startsWith('--')) continue;
29
- const key = a.slice(2);
30
- if (FLAGS.has(key)) args[key] = true;
31
- else args[key] = argv[i + 1];
32
- if (!FLAGS.has(key)) i += 1;
33
- }
34
- const num = (k) => (args[k] === undefined ? undefined : Number(args[k]));
35
- const options = {
36
- url: args.url,
37
- serve: args.serve,
38
- basePath: args['base-path'],
39
- expectBrand: args['expect-brand'],
40
- routes: args.routes,
41
- workbench: args.workbench,
42
- sizes: args.sizes,
43
- themes: args.themes,
44
- langs: args.langs,
45
- caseSample: args['case-sample'],
46
- singleCase: args['single-case'] === true,
47
- idleMs: num('idle-ms'),
48
- settleMs: num('settle-ms'),
49
- textFloor: num('text-floor'),
50
- instrumentMin: num('instrument-min'),
51
- stageFillMin: num('stage-fill-min'),
52
- stageFloor: num('stage-floor'),
53
- wideFontSizes: args['wide-font-sizes'],
54
- wideFont: args['no-wide-font'] === true ? false : undefined,
55
- out: args.out,
56
- };
57
- for (const k of Object.keys(options)) if (options[k] === undefined) delete options[k];
58
-
59
- let report;
60
- try {
61
- report = await runGate(options);
62
- } catch (e) {
63
- console.error(e.message);
64
- process.exit(2);
65
- }
66
- const shown = report.failures.slice(0, 80);
67
- for (const f of shown) console.log(`FAIL [${f.check}] ${f.route} ${f.mode}${f.trail ? ` (${f.trail})` : ''}: ${f.message}`);
68
- if (report.failures.length > shown.length) console.log(`... and ${report.failures.length - shown.length} more in ${options.out ?? 'gate-output'}/gate-report.json`);
69
- for (const w of report.waivers ?? []) console.log(`WAIVER ${w.route} (${w.lang}) ${w.floor}: ${w.reason}${w.valid ? '' : ' [refused]'}`);
70
- const counts = Object.entries(report.checks).map(([k, n]) => `${k} ${n}`).join(', ');
71
- console.log(report.ok ? `caos-shell-gate: OK, ${report.states} measured states` : `caos-shell-gate: ${report.failures.length} failure(s) in ${report.states} measured states (${counts})`);
72
- process.exit(report.ok ? 0 : 1);
1
+ #!/usr/bin/env node
2
+ // caos-shell-gate: the measured web baseline of a CAOS product (ADR-0071, ADR-0017, ADR-0016, ADR-0078).
3
+ // The checks and the traps each one embeds are listed in gate/run.mjs; the self-test (npm run test:gate in the
4
+ // shell repository) plants one defect per check and requires each to fail.
5
+ //
6
+ // Usage:
7
+ // npx caos-shell-gate --serve dist --expect-brand "Contraste" a Pages-faithful server over the build
8
+ // npx caos-shell-gate --url https://contraste.fasl-work.com --expect-brand "Contraste" the deployed origin
9
+ // Options:
10
+ // --base-path /Repo/ the site's base path with --serve (a project page); default /
11
+ // --routes /,/methodology the routes; default: read from the header navigation
12
+ // --workbench /app the routes that carry the case workbench; default /app
13
+ // --sizes 390x844,...,2560x1440 --themes light,dark --langs en,es
14
+ // --case-sample id1,id2 cases walked outside the primary mode; default the first and the last
15
+ // --single-case the workbench has one case and no case control
16
+ // --idle-ms 3000 --settle-ms 15000 --text-floor 400 --instrument-min 0.5 --stage-fill-min 0.3 --stage-floor 140
17
+ // --wide-font-sizes 390x844,1280x800 the sizes of the wide-font pass (G10); --no-wide-font skips it
18
+ // --out gate-output report (gate-report.json), screenshots (shots/) and the capture index (index.html)
19
+ // Needs `playwright` in the consuming project (optional peer dependency). Exit 1 on any failure, 2 on misuse.
20
+
21
+ import { runGate } from '../gate/run.mjs';
22
+
23
+ const FLAGS = new Set(['single-case', 'no-wide-font']);
24
+ const args = {};
25
+ const argv = process.argv.slice(2);
26
+ for (let i = 0; i < argv.length; i += 1) {
27
+ const a = argv[i];
28
+ if (!a.startsWith('--')) continue;
29
+ const key = a.slice(2);
30
+ if (FLAGS.has(key)) args[key] = true;
31
+ else args[key] = argv[i + 1];
32
+ if (!FLAGS.has(key)) i += 1;
33
+ }
34
+ const num = (k) => (args[k] === undefined ? undefined : Number(args[k]));
35
+ const options = {
36
+ url: args.url,
37
+ serve: args.serve,
38
+ basePath: args['base-path'],
39
+ expectBrand: args['expect-brand'],
40
+ routes: args.routes,
41
+ workbench: args.workbench,
42
+ sizes: args.sizes,
43
+ themes: args.themes,
44
+ langs: args.langs,
45
+ caseSample: args['case-sample'],
46
+ singleCase: args['single-case'] === true,
47
+ idleMs: num('idle-ms'),
48
+ settleMs: num('settle-ms'),
49
+ textFloor: num('text-floor'),
50
+ instrumentMin: num('instrument-min'),
51
+ stageFillMin: num('stage-fill-min'),
52
+ stageFloor: num('stage-floor'),
53
+ wideFontSizes: args['wide-font-sizes'],
54
+ wideFont: args['no-wide-font'] === true ? false : undefined,
55
+ out: args.out,
56
+ };
57
+ for (const k of Object.keys(options)) if (options[k] === undefined) delete options[k];
58
+
59
+ let report;
60
+ try {
61
+ report = await runGate(options);
62
+ } catch (e) {
63
+ console.error(e.message);
64
+ process.exit(2);
65
+ }
66
+ const shown = report.failures.slice(0, 80);
67
+ for (const f of shown) console.log(`FAIL [${f.check}] ${f.route} ${f.mode}${f.trail ? ` (${f.trail})` : ''}: ${f.message}`);
68
+ if (report.failures.length > shown.length) console.log(`... and ${report.failures.length - shown.length} more in ${options.out ?? 'gate-output'}/gate-report.json`);
69
+ for (const w of report.waivers ?? []) console.log(`WAIVER ${w.route} (${w.lang}) ${w.floor}: ${w.reason}${w.valid ? '' : ' [refused]'}`);
70
+ const counts = Object.entries(report.checks).map(([k, n]) => `${k} ${n}`).join(', ');
71
+ console.log(report.ok ? `caos-shell-gate: OK, ${report.states} measured states` : `caos-shell-gate: ${report.failures.length} failure(s) in ${report.states} measured states (${counts})`);
72
+ process.exit(report.ok ? 0 : 1);
package/dist/chart.js CHANGED
@@ -1,5 +1,5 @@
1
- import { useShellLang, useThemeStore, useStageSize, pick, resolveToken, NBSP, formatNumber, formatTicks } from './chunk-DX36XRD5.js';
2
- import './chunk-X6Y5CDUD.js';
1
+ import { useShellLang, useThemeStore, useStageSize, pick, resolveToken, NBSP, formatNumber, formatTicks } from './chunk-3QYQCWSZ.js';
2
+ import './chunk-YVVDBSAC.js';
3
3
  import { useRef, useCallback, useState, useMemo, useEffect } from 'react';
4
4
  import uPlot from 'uplot';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { LANG_STORAGE_KEY, THEME_STORAGE_KEY } from './chunk-X6Y5CDUD.js';
1
+ import { LANG_STORAGE_KEY, THEME_STORAGE_KEY } from './chunk-YVVDBSAC.js';
2
2
  import { create } from 'zustand';
3
3
  import { useMemo, useState, useRef, useCallback, useEffect } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -1,7 +1,9 @@
1
1
  // src/shell/routes.ts
2
+ var LANDING_ROUTE = "/introduction";
3
+ var APP_ROUTE = "/app";
2
4
  var STANDARD_ROUTES = [
3
- { path: "/", en: "App", es: "App" },
4
- { path: "/introduction", en: "Introduction", es: "Introducci\xF3n" },
5
+ { path: LANDING_ROUTE, en: "Introduction", es: "Introducci\xF3n" },
6
+ { path: APP_ROUTE, en: "App", es: "App" },
5
7
  { path: "/methodology", en: "Methodology", es: "Metodolog\xEDa" },
6
8
  { path: "/implementation", en: "Implementation", es: "Implementaci\xF3n" },
7
9
  { path: "/experiments", en: "Experiments", es: "Experimentos" },
@@ -13,4 +15,4 @@ var THEME_STORAGE_KEY = "caos.theme";
13
15
  var LANG_STORAGE_KEY = "caos.lang";
14
16
  var THEME_BOOT_SCRIPT = `(function(){try{var t=localStorage.getItem('${THEME_STORAGE_KEY}');if(t!=='light'&&t!=='dark'){t=matchMedia('(prefers-color-scheme: light)').matches?'light':'dark'}document.documentElement.dataset.theme=t;var l=localStorage.getItem('${LANG_STORAGE_KEY}');document.documentElement.lang=l==='es'?'es':'en'}catch(e){document.documentElement.dataset.theme='dark'}})();`;
15
17
 
16
- export { LANG_STORAGE_KEY, STANDARD_ROUTES, THEME_BOOT_SCRIPT, THEME_STORAGE_KEY };
18
+ export { APP_ROUTE, LANDING_ROUTE, LANG_STORAGE_KEY, STANDARD_ROUTES, THEME_BOOT_SCRIPT, THEME_STORAGE_KEY };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as AppShell, a as ArchTab, b as ArchitectureConfig, c as ArchitectureModal, L as LANG_STORAGE_KEY, S as STANDARD_ROUTES, d as ShellConfig, e as ShellRoute, T as THEME_BOOT_SCRIPT, f as THEME_STORAGE_KEY, v as validateArchitectureConfig } from './keys-CnvqkckF.js';
1
+ export { A as APP_ROUTE, a as AppShell, b as ArchTab, c as ArchitectureConfig, d as ArchitectureModal, L as LANDING_ROUTE, e as LANG_STORAGE_KEY, S as STANDARD_ROUTES, f as ShellConfig, g as ShellRoute, T as THEME_BOOT_SCRIPT, h as THEME_STORAGE_KEY, v as validateArchitectureConfig } from './keys-CTQZafOf.js';
2
2
  import * as react from 'react';
3
3
  import { ReactNode, Component, ErrorInfo } from 'react';
4
4
  import * as zustand from 'zustand';
@@ -7,6 +7,20 @@ export { N as NBSP, a as NOT_AVAILABLE, b as SCIENTIFIC_BELOW, c as SHELL_TOKENS
7
7
  import { L as Lang, B as BiText } from './text-BlY47nIt.js';
8
8
  export { p as pick, u as useLangStore, a as useShellLang } from './text-BlY47nIt.js';
9
9
 
10
+ /**
11
+ * The landing route of a product (shell 0.13.0, Felipe 2026-10-13: "the shell and the apps must land at the Introduction,
12
+ * executive view"). Mount it on the root path and on the catch-all path:
13
+ *
14
+ * <Route path="/" element={<Landing />} />
15
+ * <Route path="/app" element={<App />} />
16
+ * <Route path="*" element={<Landing />} />
17
+ *
18
+ * The root and any unknown entry open the Introduction, whose executive view is its first and default view. An old link
19
+ * to the App, which was the root (`/?case=B2`, with a query string or a hash), is forwarded to the App route with the query
20
+ * string and the hash kept, so a link in a paper or a bookmark still reaches its case.
21
+ */
22
+ declare function Landing(): react.JSX.Element;
23
+
10
24
  /** One authenticated workbench destination rendered by the shared responsive navigation frame. */
11
25
  interface WorkbenchRoute {
12
26
  path: string;
@@ -472,88 +486,170 @@ interface ExecutiveViewProps {
472
486
  data: unknown;
473
487
  /** Where the product's site is served from; the illustration files are fetched from here (default `/`; a Pages site passes its base URL). */
474
488
  base?: string;
489
+ /** Opens the technical view of the Introduction (default: selects the sibling tab `technical` of the tab that holds the view). */
490
+ onOpenTechnical?: () => void;
475
491
  }
476
492
  /**
477
- * The executive view of an Introduction (CAOS_MANAGE conventions/problem-context-first.md, Felipe 2026-10-12): the four
478
- * sections of the executive-pitch rubric in order, the three illustrations in their places, the sources as numbered
479
- * notes. A product fills `content/executive.json`; it does not design this view, so the component takes no children.
480
- * Invalid data renders an error state that lists each field path, never a blank.
493
+ * The executive view of an Introduction (CAOS_MANAGE conventions/problem-context-first.md, Felipe 2026-10-12 and
494
+ * 2026-10-13): the industry's problem framed for a decision maker. Above the sub-tabs, the landing block (the title, the key
495
+ * statement, two or three headline figures); then the five sections of `EXEC_SECTION_DEFS` as the sub-tabs of `SubTabs`, the
496
+ * first selected, each opening with its key message line; below them the numbered linked sources and two onward links (the
497
+ * technical view, the App). General, never a client, never a pitch. A product fills `content/executive.json`; it does not
498
+ * design this view, so the component takes no children. Invalid data renders an error state that lists each field path,
499
+ * never a blank.
481
500
  */
482
- declare function ExecutiveView({ data, base }: ExecutiveViewProps): react.JSX.Element;
501
+ declare function ExecutiveView({ data, base, onOpenTechnical }: ExecutiveViewProps): react.JSX.Element;
483
502
 
484
503
  /**
485
- * The executive view standard (CAOS_MANAGE conventions/problem-context-first.md, Felipe 2026-10-12): the types of the
486
- * data file `content/executive.json`, its validator and its writing limits. The structure lives ONLY in
487
- * `executive.schema.json` (this module interprets it); the rules a schema cannot say (the limits, the 4 C's, the
488
- * sources by field) are here. `gate/areas.mjs` keeps the same limits for the rendered page; a unit test keeps them equal.
489
- */
490
- declare const EXECUTIVE_SCHEMA_VERSION = "1.0.0";
491
- /**
492
- * The names of the 4 C's, in the order of the 4Cs Positioning section. EMPTY ON PURPOSE: the names and the order are
493
- * Felipe's to give (problem-context-first.md, open item). While it is empty `four_cs` must be absent from every data
494
- * file and section 3 renders its declared pending state; once it holds 4 names `four_cs` is required in that order.
504
+ * The executive view standard (CAOS_MANAGE conventions/problem-context-first.md, Felipe 2026-10-12 and 2026-10-13): the
505
+ * types of the data file `content/executive.json`, its validator, its floors and its writing limits. The structure lives
506
+ * ONLY in `executive.schema.json` (this module interprets it); the rules a schema cannot say (the limits, the 4 C's, the
507
+ * sources by id, the owners that are roles, the wording) are here. `gate/areas.mjs` keeps the same limits and floors for
508
+ * the rendered page; a unit test keeps them equal.
495
509
  */
496
- declare const FOUR_CS: readonly string[];
510
+ declare const EXECUTIVE_SCHEMA_VERSION = "2.0.0";
497
511
  interface BiTextValue {
498
512
  en: string;
499
513
  es: string;
500
514
  }
515
+ interface FourC {
516
+ name: BiTextValue;
517
+ definition: BiTextValue;
518
+ }
519
+ /**
520
+ * The 4 C's of the proposal (sub-tab 5), in order, with the names and definitions Felipe gave on 2026-10-13 (verbatim,
521
+ * English and Spanish). `proposal.four_cs` is required in every data file with exactly these four rows in this order, each
522
+ * `c` equal to the name and each with what the C means for the proposal (`applies`); the view shows the definition in small
523
+ * type beside the name. `gate/areas.mjs` EXEC_FOUR_CS holds the same values; a unit test keeps them equal.
524
+ */
525
+ declare const FOUR_CS: readonly FourC[];
526
+ type Direction = 'rising' | 'easing' | 'steady';
527
+ type TrendKind = 'regulatory' | 'technological' | 'market' | 'practice';
528
+ type Horizon = 'now' | 'two_years' | 'ten_years';
529
+ type Confidence = 'low' | 'medium' | 'high';
501
530
  interface ExecutiveFigure {
531
+ heading: BiTextValue;
502
532
  value: BiTextValue;
503
533
  unit: BiTextValue;
504
- }
505
- interface ExecutiveOutcome {
506
- capability: BiTextValue;
507
- outcome: BiTextValue;
508
- proof: ExecutiveFigure & {
509
- statement: BiTextValue;
510
- };
534
+ /** The id of an entry of `sources`. */
535
+ source: string;
511
536
  }
512
537
  interface ExecutiveIllustration {
513
538
  /** The SVG file (a path under the site root), or one per language. */
514
539
  file: string | BiTextValue;
515
540
  caption: BiTextValue;
516
541
  }
542
+ interface ExecutiveSource {
543
+ id: string;
544
+ /** The publication, in plain words. */
545
+ title: BiTextValue;
546
+ /** The page or document itself: an https link. */
547
+ url: string;
548
+ /** At most one sentence (for example a page number). */
549
+ note?: BiTextValue;
550
+ }
517
551
  interface ExecutiveData {
518
- executive: BiTextValue;
519
- organisation: BiTextValue;
520
- initiative: BiTextValue;
521
- why_now: {
522
- figure: ExecutiveFigure;
523
- deadline: BiTextValue;
552
+ title: BiTextValue;
553
+ key_statement: BiTextValue;
554
+ headline_figures: ExecutiveFigure[];
555
+ pain: {
556
+ key_message: BiTextValue;
557
+ paragraphs: BiTextValue[];
558
+ bearers: Array<{
559
+ who: BiTextValue;
560
+ cost: BiTextValue;
561
+ measure: BiTextValue;
562
+ }>;
563
+ figures: ExecutiveFigure[];
564
+ causes: Array<{
565
+ cause: BiTextValue;
566
+ weight: number;
567
+ }>;
568
+ };
569
+ context: {
570
+ key_message: BiTextValue;
571
+ paragraphs: BiTextValue[];
572
+ setting: BiTextValue;
573
+ forces: Array<{
574
+ force: BiTextValue;
575
+ direction: Direction;
576
+ }>;
577
+ evidence: Array<{
578
+ statement: BiTextValue;
579
+ source: string;
580
+ }>;
581
+ };
582
+ situation: {
583
+ key_message: BiTextValue;
584
+ roles: Array<{
585
+ role: BiTextValue;
586
+ decides: BiTextValue;
587
+ needs: BiTextValue;
588
+ }>;
589
+ interaction: BiTextValue;
590
+ state_of_the_art: Array<{
591
+ approach: BiTextValue;
592
+ achieves: BiTextValue;
593
+ falls_short: BiTextValue;
594
+ source: string;
595
+ }>;
596
+ status: {
597
+ heading: BiTextValue;
598
+ value: BiTextValue;
599
+ unit: BiTextValue;
600
+ date: BiTextValue;
601
+ source: string;
602
+ };
603
+ };
604
+ trends: {
605
+ key_message: BiTextValue;
606
+ items: Array<{
607
+ trend: BiTextValue;
608
+ kind: TrendKind;
609
+ direction: Direction;
610
+ horizon: Horizon;
611
+ signal: {
612
+ statement: BiTextValue;
613
+ source: string;
614
+ };
615
+ effect: BiTextValue;
616
+ confidence: Confidence;
617
+ }>;
618
+ };
619
+ proposal: {
620
+ key_message: BiTextValue;
621
+ paragraphs: BiTextValue[];
622
+ four_cs: Array<{
623
+ c: BiTextValue;
624
+ applies: BiTextValue;
625
+ }>;
626
+ actions: Array<{
627
+ action: BiTextValue;
628
+ owner: BiTextValue;
629
+ horizon: BiTextValue;
630
+ check: BiTextValue;
631
+ }>;
632
+ risks: BiTextValue[];
633
+ unknowns: BiTextValue[];
634
+ handoff?: BiTextValue;
524
635
  };
525
- vision: BiTextValue;
526
- outcomes: ExecutiveOutcome[];
527
- four_cs?: Array<{
528
- c: BiTextValue;
529
- exec_problem: BiTextValue;
530
- }>;
531
- dialogue: Array<{
532
- question: BiTextValue;
533
- answer: BiTextValue;
534
- }>;
535
636
  illustrations: {
536
- initiative: ExecutiveIllustration;
537
- problem: ExecutiveIllustration;
538
- solution: ExecutiveIllustration;
637
+ pain: ExecutiveIllustration;
638
+ situation: ExecutiveIllustration;
639
+ proposal: ExecutiveIllustration;
539
640
  };
540
- sources: Array<{
541
- field: string;
542
- source: BiTextValue;
543
- }>;
641
+ sources: ExecutiveSource[];
544
642
  }
545
643
  interface ExecutiveProblem {
546
- /** The field path, for example `outcomes[1].proof.unit` (empty for the document itself). */
644
+ /** The field path, for example `pain.bearers[1].cost.en` (empty for the document itself). */
547
645
  path: string;
548
646
  message: string;
549
647
  }
550
648
  /**
551
649
  * Validates a product's `content/executive.json` against `executive.schema.json` and the rules on top of it. Pure; an
552
- * empty array means valid. `fourCs` is the set of names the 4Cs Positioning section expects (default `FOUR_CS`).
650
+ * empty array means valid.
553
651
  */
554
- declare function validateExecutive(data: unknown, opts?: {
555
- fourCs?: readonly string[];
556
- }): ExecutiveProblem[];
652
+ declare function validateExecutive(data: unknown): ExecutiveProblem[];
557
653
 
558
654
  interface QuestionProps {
559
655
  /** The business question the executive would ask. */
@@ -1006,4 +1102,4 @@ interface ViewsRowProps {
1006
1102
  */
1007
1103
  declare function ViewsRow({ children, shares }: ViewsRowProps): react.JSX.Element;
1008
1104
 
1009
- export { BREAKPOINTS, BarChart, type BarChartProps, type BarDatum, BiText, Callout, type CaseDef, type CaseGroup, type CaseKind, CaseSelector, type CaseSelectorProps, type CaseSelectorText, CaseWorkbench, type CaseWorkbenchProps, ChipGroup, type ChipGroupProps, type ChipOption, type Citation, CitationsProvider, Cite, DOC_AREAS, DocPage, type DocPageProps, DocReferences, DocRefsScope, DocSection, type DocSectionProps, EXECUTIVE_SCHEMA_VERSION, Equation, type ExecutiveData, type ExecutiveProblem, ExecutiveView, type ExecutiveViewProps, FOUR_CS, Figure, type FittedLabel, FocusShell, type FocusShellProps, FormatOptions, Gauge, type GaugeProps, type GaugeZone, Glossary, type GlossaryEntry, InlineMath, Knob, type KnobProps, type Lane, LaneBadge, Lang, LanguageToggle, MAX_PEER_TABS, MAX_WORKBENCH_GROUPS, PanelBoundary, type PausedVizController, PlotCard, type PlotCardProps, type Provenance, Question, type QuestionProps, type RailSection, Readout, type ReadoutItem, type ReadoutProps, ReferenceList, Refs, Stage, type StageSize, Stat, type StatProps, type SubTabDef, SubTabs, type SubTabsProps, SurfacePage, type SurfacePageProps, type TabDef, type TabGroupDef, TabGroups, type TabGroupsProps, Tabs, type TabsProps, type Theme, ThemeToggle, type Tone, type UsePausedVizOptions, VariantBar, type VariantBarProps, type VariantDef, Verdict, type VerdictProps, ViewsRow, type ViewsRowProps, type VizFrame, type VizLoop, type VizLoopDeps, type VizLoopOptions, type WorkbenchGroup, WorkbenchLayout, type WorkbenchLayoutProps, type WorkbenchRoute, WorkbenchShell, type WorkbenchShellProps, type WorkbenchState, WorkbenchStateContext, applyTheme, caseKind, caseTooltip, casesInSource, createVizLoop, firstAppearance, fitLabel, fontFamily, groupByCategory, isStale, makeStateKey, niceStep, niceTicks, readCaseParam, readTheme, replaceQueryParam, sourcesPresent, textWidth, usePausedViz, useStageSize, useThemeStore, useUrlView, useWorkbenchState, validateExecutive, viewParamOf, widestLabel, withCaseParam };
1105
+ export { BREAKPOINTS, BarChart, type BarChartProps, type BarDatum, BiText, Callout, type CaseDef, type CaseGroup, type CaseKind, CaseSelector, type CaseSelectorProps, type CaseSelectorText, CaseWorkbench, type CaseWorkbenchProps, ChipGroup, type ChipGroupProps, type ChipOption, type Citation, CitationsProvider, Cite, DOC_AREAS, DocPage, type DocPageProps, DocReferences, DocRefsScope, DocSection, type DocSectionProps, EXECUTIVE_SCHEMA_VERSION, Equation, type ExecutiveData, type ExecutiveProblem, ExecutiveView, type ExecutiveViewProps, FOUR_CS, Figure, type FittedLabel, FocusShell, type FocusShellProps, FormatOptions, Gauge, type GaugeProps, type GaugeZone, Glossary, type GlossaryEntry, InlineMath, Knob, type KnobProps, Landing, type Lane, LaneBadge, Lang, LanguageToggle, MAX_PEER_TABS, MAX_WORKBENCH_GROUPS, PanelBoundary, type PausedVizController, PlotCard, type PlotCardProps, type Provenance, Question, type QuestionProps, type RailSection, Readout, type ReadoutItem, type ReadoutProps, ReferenceList, Refs, Stage, type StageSize, Stat, type StatProps, type SubTabDef, SubTabs, type SubTabsProps, SurfacePage, type SurfacePageProps, type TabDef, type TabGroupDef, TabGroups, type TabGroupsProps, Tabs, type TabsProps, type Theme, ThemeToggle, type Tone, type UsePausedVizOptions, VariantBar, type VariantBarProps, type VariantDef, Verdict, type VerdictProps, ViewsRow, type ViewsRowProps, type VizFrame, type VizLoop, type VizLoopDeps, type VizLoopOptions, type WorkbenchGroup, WorkbenchLayout, type WorkbenchLayoutProps, type WorkbenchRoute, WorkbenchShell, type WorkbenchShellProps, type WorkbenchState, WorkbenchStateContext, applyTheme, caseKind, caseTooltip, casesInSource, createVizLoop, firstAppearance, fitLabel, fontFamily, groupByCategory, isStale, makeStateKey, niceStep, niceTicks, readCaseParam, readTheme, replaceQueryParam, sourcesPresent, textWidth, usePausedViz, useStageSize, useThemeStore, useUrlView, useWorkbenchState, validateExecutive, viewParamOf, widestLabel, withCaseParam };