@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.
- package/bin/caos-shell-gate.mjs +72 -72
- package/dist/chart.js +2 -2
- package/dist/{chunk-DX36XRD5.js → chunk-3QYQCWSZ.js} +1 -1
- package/dist/{chunk-X6Y5CDUD.js → chunk-YVVDBSAC.js} +5 -3
- package/dist/index.d.ts +149 -53
- package/dist/index.js +1030 -210
- package/dist/{keys-CnvqkckF.d.ts → keys-CTQZafOf.d.ts} +7 -3
- package/dist/keys.d.ts +1 -1
- package/dist/keys.js +1 -1
- package/gate/areas.mjs +631 -455
- package/gate/inpage.mjs +1270 -1228
- package/gate/run.mjs +780 -755
- package/gate/serve.mjs +101 -97
- package/package.json +1 -1
- package/reserved-classes.json +56 -18
- package/src/content/executive.schema.json +587 -69
- package/styles.css +769 -750
package/bin/caos-shell-gate.mjs
CHANGED
|
@@ -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 /
|
|
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-
|
|
2
|
-
import './chunk-
|
|
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-
|
|
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:
|
|
4
|
-
{ path:
|
|
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
|
|
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
|
|
478
|
-
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
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
|
|
486
|
-
* data file `content/executive.json`, its validator and its writing limits. The structure lives
|
|
487
|
-
* `executive.schema.json` (this module interprets it); the rules a schema cannot say (the limits, the 4 C's, the
|
|
488
|
-
* sources by
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
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
|
-
|
|
537
|
-
|
|
538
|
-
|
|
637
|
+
pain: ExecutiveIllustration;
|
|
638
|
+
situation: ExecutiveIllustration;
|
|
639
|
+
proposal: ExecutiveIllustration;
|
|
539
640
|
};
|
|
540
|
-
sources:
|
|
541
|
-
field: string;
|
|
542
|
-
source: BiTextValue;
|
|
543
|
-
}>;
|
|
641
|
+
sources: ExecutiveSource[];
|
|
544
642
|
}
|
|
545
643
|
interface ExecutiveProblem {
|
|
546
|
-
/** The field path, for example `
|
|
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.
|
|
650
|
+
* empty array means valid.
|
|
553
651
|
*/
|
|
554
|
-
declare function validateExecutive(data: unknown
|
|
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 };
|