@ksp-gonogo/ui-kit 0.1.0 → 0.2.0-rc.10

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 (132) hide show
  1. package/LICENSE +21 -596
  2. package/README.md +151 -0
  3. package/dist/chunk-G3PMV62Z.js +36 -0
  4. package/dist/chunk-G3PMV62Z.js.map +1 -0
  5. package/dist/chunk-KPESGDJJ.js +8611 -0
  6. package/dist/chunk-KPESGDJJ.js.map +1 -0
  7. package/dist/chunk-SHAX2WJJ.js +18 -0
  8. package/dist/chunk-SHAX2WJJ.js.map +1 -0
  9. package/dist/dist-JSEJWZKX.js +546 -0
  10. package/dist/dist-JSEJWZKX.js.map +1 -0
  11. package/dist/gridUnits.d.ts +34 -0
  12. package/dist/gridUnits.js +14 -0
  13. package/dist/gridUnits.js.map +1 -0
  14. package/dist/guards.d.ts +110 -0
  15. package/dist/guards.js +171 -0
  16. package/dist/guards.js.map +1 -0
  17. package/dist/index.d.ts +9318 -25
  18. package/dist/index.js +8098 -28
  19. package/dist/index.js.map +1 -1
  20. package/dist/magic-string.es-J7BYFTTJ.js +1309 -0
  21. package/dist/magic-string.es-J7BYFTTJ.js.map +1 -0
  22. package/dist/testing.d.ts +470 -0
  23. package/dist/testing.js +16747 -0
  24. package/dist/testing.js.map +1 -0
  25. package/dist/tokens.css +1063 -29
  26. package/dist/units-Cl-8ZdJc.d.ts +270 -0
  27. package/package.json +57 -15
  28. package/dist/ActionButton.d.ts +0 -18
  29. package/dist/ActionButton.d.ts.map +0 -1
  30. package/dist/ActionButton.js +0 -56
  31. package/dist/ActionButton.js.map +0 -1
  32. package/dist/Badge.d.ts +0 -15
  33. package/dist/Badge.d.ts.map +0 -1
  34. package/dist/Badge.js +0 -60
  35. package/dist/Badge.js.map +0 -1
  36. package/dist/Box.d.ts +0 -19
  37. package/dist/Box.d.ts.map +0 -1
  38. package/dist/Box.js +0 -27
  39. package/dist/Box.js.map +0 -1
  40. package/dist/Card.d.ts +0 -11
  41. package/dist/Card.d.ts.map +0 -1
  42. package/dist/Card.js +0 -13
  43. package/dist/Card.js.map +0 -1
  44. package/dist/Cluster.d.ts +0 -18
  45. package/dist/Cluster.d.ts.map +0 -1
  46. package/dist/Cluster.js +0 -24
  47. package/dist/Cluster.js.map +0 -1
  48. package/dist/EmptyState.d.ts +0 -16
  49. package/dist/EmptyState.d.ts.map +0 -1
  50. package/dist/EmptyState.js +0 -37
  51. package/dist/EmptyState.js.map +0 -1
  52. package/dist/GonogoTokens.d.ts +0 -16
  53. package/dist/GonogoTokens.d.ts.map +0 -1
  54. package/dist/GonogoTokens.js +0 -108
  55. package/dist/GonogoTokens.js.map +0 -1
  56. package/dist/Grid.d.ts +0 -25
  57. package/dist/Grid.d.ts.map +0 -1
  58. package/dist/Grid.js +0 -23
  59. package/dist/Grid.js.map +0 -1
  60. package/dist/Inline.d.ts +0 -20
  61. package/dist/Inline.d.ts.map +0 -1
  62. package/dist/Inline.js +0 -17
  63. package/dist/Inline.js.map +0 -1
  64. package/dist/Panel.d.ts +0 -14
  65. package/dist/Panel.d.ts.map +0 -1
  66. package/dist/Panel.js +0 -145
  67. package/dist/Panel.js.map +0 -1
  68. package/dist/ProgressBar.d.ts +0 -15
  69. package/dist/ProgressBar.d.ts.map +0 -1
  70. package/dist/ProgressBar.js +0 -31
  71. package/dist/ProgressBar.js.map +0 -1
  72. package/dist/Readout.d.ts +0 -35
  73. package/dist/Readout.d.ts.map +0 -1
  74. package/dist/Readout.js +0 -114
  75. package/dist/Readout.js.map +0 -1
  76. package/dist/Row.d.ts +0 -22
  77. package/dist/Row.d.ts.map +0 -1
  78. package/dist/Row.js +0 -32
  79. package/dist/Row.js.map +0 -1
  80. package/dist/Section.d.ts +0 -15
  81. package/dist/Section.d.ts.map +0 -1
  82. package/dist/Section.js +0 -21
  83. package/dist/Section.js.map +0 -1
  84. package/dist/Spinner.d.ts +0 -18
  85. package/dist/Spinner.d.ts.map +0 -1
  86. package/dist/Spinner.js +0 -22
  87. package/dist/Spinner.js.map +0 -1
  88. package/dist/Stack.d.ts +0 -15
  89. package/dist/Stack.d.ts.map +0 -1
  90. package/dist/Stack.js +0 -17
  91. package/dist/Stack.js.map +0 -1
  92. package/dist/StatusIndicator.d.ts +0 -27
  93. package/dist/StatusIndicator.d.ts.map +0 -1
  94. package/dist/StatusIndicator.js +0 -78
  95. package/dist/StatusIndicator.js.map +0 -1
  96. package/dist/Truncate.d.ts +0 -7
  97. package/dist/Truncate.d.ts.map +0 -1
  98. package/dist/Truncate.js +0 -14
  99. package/dist/Truncate.js.map +0 -1
  100. package/dist/Value.d.ts +0 -24
  101. package/dist/Value.d.ts.map +0 -1
  102. package/dist/Value.js +0 -42
  103. package/dist/Value.js.map +0 -1
  104. package/dist/WidgetHeader.d.ts +0 -16
  105. package/dist/WidgetHeader.d.ts.map +0 -1
  106. package/dist/WidgetHeader.js +0 -40
  107. package/dist/WidgetHeader.js.map +0 -1
  108. package/dist/defaultDarkTheme.d.ts +0 -16
  109. package/dist/defaultDarkTheme.d.ts.map +0 -1
  110. package/dist/defaultDarkTheme.js +0 -96
  111. package/dist/defaultDarkTheme.js.map +0 -1
  112. package/dist/format.d.ts +0 -11
  113. package/dist/format.d.ts.map +0 -1
  114. package/dist/format.js +0 -12
  115. package/dist/format.js.map +0 -1
  116. package/dist/index.d.ts.map +0 -1
  117. package/dist/science/ScienceExperimentRow.d.ts +0 -43
  118. package/dist/science/ScienceExperimentRow.d.ts.map +0 -1
  119. package/dist/science/ScienceExperimentRow.js +0 -61
  120. package/dist/science/ScienceExperimentRow.js.map +0 -1
  121. package/dist/test/axe.d.ts +0 -3
  122. package/dist/test/axe.d.ts.map +0 -1
  123. package/dist/test/axe.js +0 -5
  124. package/dist/test/axe.js.map +0 -1
  125. package/dist/test/setup.d.ts +0 -2
  126. package/dist/test/setup.d.ts.map +0 -1
  127. package/dist/test/setup.js +0 -12
  128. package/dist/test/setup.js.map +0 -1
  129. package/dist/theme.d.ts +0 -116
  130. package/dist/theme.d.ts.map +0 -1
  131. package/dist/theme.js +0 -15
  132. package/dist/theme.js.map +0 -1
@@ -1,96 +0,0 @@
1
- /**
2
- * `default-dark` — the built-in mission-control theme.
3
- *
4
- * Token values name what is *currently* in the codebase, so the migration
5
- * from raw hex constants to `theme.*` tokens is mechanical. Palette
6
- * rationalisation (consolidating near-duplicate greys, retiring unused
7
- * shades) is deliberately deferred to a later commit so a structural sweep
8
- * can be a pure refactor with no visual diff.
9
- *
10
- * Typography sizes are emitted as CSS-variable strings so the responsive
11
- * overrides in `tokens.css` (coarse-pointer bumps etc.) keep working when
12
- * consumers read from the theme instead of the raw variable.
13
- */
14
- export const defaultDarkTheme = {
15
- colors: {
16
- text: {
17
- primary: "var(--color-text-primary)",
18
- muted: "var(--color-text-muted)",
19
- dim: "var(--color-text-dim)",
20
- faint: "var(--color-text-faint)",
21
- inverse: "var(--color-text-inverse)",
22
- },
23
- surface: {
24
- app: "var(--color-surface-app)",
25
- panel: "var(--color-surface-panel)",
26
- raised: "var(--color-surface-raised)",
27
- sunken: "var(--color-surface-sunken)",
28
- },
29
- border: {
30
- subtle: "var(--color-border-subtle)",
31
- strong: "var(--color-border-strong)",
32
- },
33
- accent: {
34
- fg: "var(--color-accent-fg)",
35
- bg: "var(--color-accent-bg)",
36
- },
37
- status: {
38
- go: {
39
- fg: "var(--color-status-go-fg)",
40
- bg: "var(--color-status-go-bg)",
41
- },
42
- nogo: {
43
- fg: "var(--color-status-nogo-fg)",
44
- bg: "var(--color-status-nogo-bg)",
45
- },
46
- warning: {
47
- fg: "var(--color-status-warning-fg)",
48
- bg: "var(--color-status-warning-bg)",
49
- },
50
- info: {
51
- fg: "var(--color-status-info-fg)",
52
- bg: "var(--color-status-info-bg)",
53
- },
54
- },
55
- focus: "var(--color-focus)",
56
- },
57
- typography: {
58
- family: {
59
- mono: 'ui-monospace, "JetBrains Mono", "IBM Plex Mono", Menlo, Consolas, monospace',
60
- },
61
- size: {
62
- xs: "var(--font-size-xs)",
63
- sm: "var(--font-size-sm)",
64
- base: "var(--font-size-base)",
65
- lg: "var(--font-size-lg)",
66
- },
67
- weight: {
68
- regular: 400,
69
- bold: 700,
70
- },
71
- letterSpacing: {
72
- tight: "0.05em",
73
- label: "0.1em",
74
- wide: "0.15em",
75
- body: "0",
76
- },
77
- },
78
- space: {
79
- xs: "2px",
80
- sm: "4px",
81
- md: "8px",
82
- lg: "12px",
83
- xl: "16px",
84
- },
85
- radii: {
86
- xs: "2px",
87
- sm: "3px",
88
- md: "4px",
89
- pill: "999px",
90
- },
91
- borders: {
92
- subtle: "1px solid var(--color-border-subtle)",
93
- strong: "1px solid var(--color-border-strong)",
94
- },
95
- };
96
- //# sourceMappingURL=defaultDarkTheme.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaultDarkTheme.js","sourceRoot":"","sources":["../src/defaultDarkTheme.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,OAAO,EAAE,2BAA2B;YACpC,KAAK,EAAE,yBAAyB;YAChC,GAAG,EAAE,uBAAuB;YAC5B,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,2BAA2B;SACrC;QACD,OAAO,EAAE;YACP,GAAG,EAAE,0BAA0B;YAC/B,KAAK,EAAE,4BAA4B;YACnC,MAAM,EAAE,6BAA6B;YACrC,MAAM,EAAE,6BAA6B;SACtC;QACD,MAAM,EAAE;YACN,MAAM,EAAE,4BAA4B;YACpC,MAAM,EAAE,4BAA4B;SACrC;QACD,MAAM,EAAE;YACN,EAAE,EAAE,wBAAwB;YAC5B,EAAE,EAAE,wBAAwB;SAC7B;QACD,MAAM,EAAE;YACN,EAAE,EAAE;gBACF,EAAE,EAAE,2BAA2B;gBAC/B,EAAE,EAAE,2BAA2B;aAChC;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE,6BAA6B;gBACjC,EAAE,EAAE,6BAA6B;aAClC;YACD,OAAO,EAAE;gBACP,EAAE,EAAE,gCAAgC;gBACpC,EAAE,EAAE,gCAAgC;aACrC;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE,6BAA6B;gBACjC,EAAE,EAAE,6BAA6B;aAClC;SACF;QACD,KAAK,EAAE,oBAAoB;KAC5B;IACD,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,6EAA6E;SACpF;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,qBAAqB;YACzB,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,uBAAuB;YAC7B,EAAE,EAAE,qBAAqB;SAC1B;QACD,MAAM,EAAE;YACN,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,GAAG;SACV;QACD,aAAa,EAAE;YACb,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,GAAG;SACV;KACF;IACD,KAAK,EAAE;QACL,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,MAAM;KACX;IACD,KAAK,EAAE;QACL,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,OAAO;KACd;IACD,OAAO,EAAE;QACP,MAAM,EAAE,sCAAsC;QAC9C,MAAM,EAAE,sCAAsC;KAC/C;CACF,CAAC"}
package/dist/format.d.ts DELETED
@@ -1,11 +0,0 @@
1
- export interface FormatNumberOptions {
2
- /** Fixed decimal places (`Number.toFixed`). Omit to stringify as-is. */
3
- decimals?: number;
4
- }
5
- /**
6
- * Formats a telemetry number for display. `undefined` and non-finite values
7
- * (`NaN`, `Infinity`) — the two shapes a not-yet-arrived or sentinel reading
8
- * takes — render as an em dash rather than `"undefined"`/`"NaN"`.
9
- */
10
- export declare function formatNumber(value: number | undefined, opts?: FormatNumberOptions): string;
11
- //# sourceMappingURL=format.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,mBAAwB,GAC7B,MAAM,CAIR"}
package/dist/format.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * Formats a telemetry number for display. `undefined` and non-finite values
3
- * (`NaN`, `Infinity`) — the two shapes a not-yet-arrived or sentinel reading
4
- * takes — render as an em dash rather than `"undefined"`/`"NaN"`.
5
- */
6
- export function formatNumber(value, opts = {}) {
7
- if (value === undefined || !Number.isFinite(value))
8
- return "—";
9
- const { decimals } = opts;
10
- return decimals === undefined ? String(value) : value.toFixed(decimals);
11
- }
12
- //# sourceMappingURL=format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAyB,EACzB,OAA4B,EAAE;IAE9B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1E,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,GAAG,EACH,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACL,UAAU,EACV,OAAO,EACP,cAAc,EACd,KAAK,WAAW,EAChB,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,GACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,43 +0,0 @@
1
- import type { TopicPayload } from "@ksp-gonogo/sitrep-sdk";
2
- /**
3
- * The row's data contract. Presentational and already-normalised (plain
4
- * booleans, not optionals) so a widget's own parsed-instrument shape maps in
5
- * directly. This is the widget-facing projection of the SDK's
6
- * `InstrumentEntry` (`science.instruments` topic), *not* `ExperimentEntry`
7
- * (`science.experiments`) — the row needs `partId`/`hasData`/`rerunnable`,
8
- * fields `ExperimentEntry` doesn't carry.
9
- */
10
- export interface ScienceInstrument {
11
- partId: string;
12
- partTitle: string;
13
- expId: string;
14
- deployed: boolean;
15
- hasData: boolean;
16
- rerunnable: boolean;
17
- inoperable: boolean;
18
- }
19
- export type WireInstrument = TopicPayload<"science.instruments">[number];
20
- export interface ScienceExperimentRowProps {
21
- /** The instrument this row renders. */
22
- instrument: ScienceInstrument;
23
- /** Called with `instrument.partId` when the operator confirms Deploy. */
24
- onDeploy?: (partId: string) => void;
25
- /**
26
- * Called with `instrument.partId` after the arm→confirm handshake — never
27
- * fired directly off a bare click.
28
- */
29
- onTransmit?: (partId: string) => void;
30
- }
31
- /**
32
- * A single science-instrument row: name, state badges, and the
33
- * Deploy/Transmit action cluster. Extracted verbatim from ScienceOfficer's
34
- * per-instrument `<Row>` + `InstrumentActions` — same arm→confirm→pending
35
- * behaviour, same badge tones, now composed entirely from kit primitives.
36
- *
37
- * Data/framework-free by design (§1 export-safety boundary): this component
38
- * never dispatches a command or reads telemetry itself. The arm/pending
39
- * control state is presentational UI state and stays local; the actual
40
- * command dispatch is the caller's job via `onDeploy`/`onTransmit`.
41
- */
42
- export declare function ScienceExperimentRow({ instrument, onDeploy, onTransmit, }: Readonly<ScienceExperimentRowProps>): import("react/jsx-runtime").JSX.Element;
43
- //# sourceMappingURL=ScienceExperimentRow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScienceExperimentRow.d.ts","sourceRoot":"","sources":["../../src/science/ScienceExperimentRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ3D;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAOD,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACxC,uCAAuC;IACvC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,QAAQ,EACR,UAAU,GACX,EAAE,QAAQ,CAAC,yBAAyB,CAAC,2CA6FrC"}
@@ -1,61 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState } from "react";
3
- import { ActionButton } from "../ActionButton";
4
- import { Badge } from "../Badge";
5
- import { Inline } from "../Inline";
6
- import { Row, RowName } from "../Row";
7
- import { Spinner } from "../Spinner";
8
- const ARM_TIMEOUT_MS = 4000;
9
- /**
10
- * A single science-instrument row: name, state badges, and the
11
- * Deploy/Transmit action cluster. Extracted verbatim from ScienceOfficer's
12
- * per-instrument `<Row>` + `InstrumentActions` — same arm→confirm→pending
13
- * behaviour, same badge tones, now composed entirely from kit primitives.
14
- *
15
- * Data/framework-free by design (§1 export-safety boundary): this component
16
- * never dispatches a command or reads telemetry itself. The arm/pending
17
- * control state is presentational UI state and stays local; the actual
18
- * command dispatch is the caller's job via `onDeploy`/`onTransmit`.
19
- */
20
- export function ScienceExperimentRow({ instrument, onDeploy, onTransmit, }) {
21
- const [armed, setArmed] = useState(false);
22
- const [pending, setPending] = useState(null);
23
- useEffect(() => {
24
- if (!armed)
25
- return;
26
- const id = setTimeout(() => setArmed(false), ARM_TIMEOUT_MS);
27
- return () => clearTimeout(id);
28
- }, [armed]);
29
- // Clear the pending state once telemetry reports the new instrument state
30
- // — `deployed`/`hasData` transitions are the success signal. Fall back to
31
- // a 5s safety timeout so an action that never lands doesn't leave the
32
- // button forever-busy.
33
- useEffect(() => {
34
- if (pending === null)
35
- return;
36
- if (pending === "deploy" && (instrument.deployed || instrument.hasData)) {
37
- setPending(null);
38
- return;
39
- }
40
- if (pending === "transmit" && !instrument.hasData) {
41
- setPending(null);
42
- return;
43
- }
44
- const id = setTimeout(() => setPending(null), 5_000);
45
- return () => clearTimeout(id);
46
- }, [pending, instrument.deployed, instrument.hasData]);
47
- return (_jsxs(Row, { children: [_jsx(RowName, { children: instrument.partTitle }), _jsxs(Inline, { children: [instrument.hasData && _jsx(Badge, { tone: "go", children: "DATA" }), instrument.deployed && _jsx(Badge, { tone: "neutral", children: "DEPLOYED" }), !instrument.rerunnable && _jsx(Badge, { tone: "neutral", children: "ONE-SHOT" }), instrument.inoperable && _jsx(Badge, { tone: "nogo", children: "INOPERABLE" })] }), !instrument.inoperable && (_jsxs(Inline, { inset: true, children: [!instrument.deployed && !instrument.hasData && (_jsx(ActionButton, { type: "button", disabled: pending === "deploy", "aria-busy": pending === "deploy", onClick: () => {
48
- if (pending !== null)
49
- return;
50
- setPending("deploy");
51
- onDeploy?.(instrument.partId);
52
- }, children: pending === "deploy" ? (_jsxs(_Fragment, { children: [_jsx(Spinner, { size: 10 }), " Deploying\u2026"] })) : ("Deploy") })), instrument.hasData &&
53
- (armed ? (_jsx(ActionButton, { type: "button", tone: "go", disabled: pending === "transmit", "aria-busy": pending === "transmit", onClick: () => {
54
- if (pending !== null)
55
- return;
56
- setArmed(false);
57
- setPending("transmit");
58
- onTransmit?.(instrument.partId);
59
- }, children: pending === "transmit" ? (_jsxs(_Fragment, { children: [_jsx(Spinner, { size: 10 }), " Transmitting\u2026"] })) : ("Confirm transmit") })) : (_jsx(ActionButton, { type: "button", onClick: () => setArmed(true), children: "Transmit" })))] }))] }));
60
- }
61
- //# sourceMappingURL=ScienceExperimentRow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScienceExperimentRow.js","sourceRoot":"","sources":["../../src/science/ScienceExperimentRow.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAuCrC,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,UAAU,EACV,QAAQ,EACR,UAAU,GAC0B;IACpC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA+B,IAAI,CAAC,CAAC;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;QAC7D,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,uBAAuB;IACvB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxE,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAClD,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAEvD,OAAO,CACL,MAAC,GAAG,eACF,KAAC,OAAO,cAAE,UAAU,CAAC,SAAS,GAAW,EACzC,MAAC,MAAM,eACJ,UAAU,CAAC,OAAO,IAAI,KAAC,KAAK,IAAC,IAAI,EAAC,IAAI,qBAAa,EACnD,UAAU,CAAC,QAAQ,IAAI,KAAC,KAAK,IAAC,IAAI,EAAC,SAAS,yBAAiB,EAC7D,CAAC,UAAU,CAAC,UAAU,IAAI,KAAC,KAAK,IAAC,IAAI,EAAC,SAAS,yBAAiB,EAChE,UAAU,CAAC,UAAU,IAAI,KAAC,KAAK,IAAC,IAAI,EAAC,MAAM,2BAAmB,IACxD,EAIR,CAAC,UAAU,CAAC,UAAU,IAAI,CACzB,MAAC,MAAM,IAAC,KAAK,mBACV,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAC9C,KAAC,YAAY,IACX,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,OAAO,KAAK,QAAQ,eACnB,OAAO,KAAK,QAAQ,EAC/B,OAAO,EAAE,GAAG,EAAE;4BACZ,IAAI,OAAO,KAAK,IAAI;gCAAE,OAAO;4BAC7B,UAAU,CAAC,QAAQ,CAAC,CAAC;4BACrB,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBAChC,CAAC,YAEA,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtB,8BACE,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,GAAI,wBACpB,CACJ,CAAC,CAAC,CAAC,CACF,QAAQ,CACT,GACY,CAChB,EACA,UAAU,CAAC,OAAO;wBACjB,CAAC,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,YAAY,IACX,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,OAAO,KAAK,UAAU,eACrB,OAAO,KAAK,UAAU,EACjC,OAAO,EAAE,GAAG,EAAE;gCACZ,IAAI,OAAO,KAAK,IAAI;oCAAE,OAAO;gCAC7B,QAAQ,CAAC,KAAK,CAAC,CAAC;gCAChB,UAAU,CAAC,UAAU,CAAC,CAAC;gCACvB,UAAU,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;4BAClC,CAAC,YAEA,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CACxB,8BACE,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,GAAI,2BACpB,CACJ,CAAC,CAAC,CAAC,CACF,kBAAkB,CACnB,GACY,CAChB,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAE1C,CAChB,CAAC,IACG,CACV,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- import { axe } from "jest-axe";
2
- export { axe };
3
- //# sourceMappingURL=axe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"axe.d.ts","sourceRoot":"","sources":["../../src/test/axe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAsB,MAAM,UAAU,CAAC;AAKnD,OAAO,EAAE,GAAG,EAAE,CAAC"}
package/dist/test/axe.js DELETED
@@ -1,5 +0,0 @@
1
- import { axe, toHaveNoViolations } from "jest-axe";
2
- import { expect } from "vitest";
3
- expect.extend(toHaveNoViolations);
4
- export { axe };
5
- //# sourceMappingURL=axe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"axe.js","sourceRoot":"","sources":["../../src/test/axe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- import "@testing-library/jest-dom";
2
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
@@ -1,12 +0,0 @@
1
- import "@testing-library/jest-dom";
2
- // jsdom omits ResizeObserver, which ScrollArea/Tabs construct at mount to track
3
- // overflow. A no-op stub keeps those components mountable in tests; the glow
4
- // indicators it would drive aren't asserted here.
5
- if (typeof globalThis.ResizeObserver === "undefined") {
6
- globalThis.ResizeObserver = class ResizeObserver {
7
- observe() { }
8
- unobserve() { }
9
- disconnect() { }
10
- };
11
- }
12
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AAEnC,gFAAgF;AAChF,6EAA6E;AAC7E,kDAAkD;AAClD,IAAI,OAAO,UAAU,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;IACrD,UAAU,CAAC,cAAc,GAAG,MAAM,cAAc;QAC9C,OAAO,KAAI,CAAC;QACZ,SAAS,KAAI,CAAC;QACd,UAAU,KAAI,CAAC;KAChB,CAAC;AACJ,CAAC"}
package/dist/theme.d.ts DELETED
@@ -1,116 +0,0 @@
1
- /**
2
- * Typed theme contract.
3
- *
4
- * Themes name the project's design tokens by role (`text.muted`, not
5
- * `gray.500`) so future palette tweaks change the value behind the role
6
- * instead of forcing a sweep across every consumer.
7
- *
8
- * Sizes and spacing are emitted as CSS-variable strings (e.g.
9
- * `var(--font-size-base)`) so the responsive overrides in `tokens.css`
10
- * (coarse-pointer bumps, `prefers-reduced-motion`, future
11
- * `prefers-color-scheme`) keep working when a styled-component switches from a
12
- * raw CSS var to `theme.typography...`.
13
- */
14
- export interface ThemeColors {
15
- text: {
16
- primary: string;
17
- muted: string;
18
- dim: string;
19
- /**
20
- * Lowest-contrast foreground tier — placeholder text, disabled labels,
21
- * extreme captions. Fails large-text WCAG contrast on dark surfaces;
22
- * use sparingly for non-essential content.
23
- */
24
- faint: string;
25
- inverse: string;
26
- };
27
- surface: {
28
- app: string;
29
- panel: string;
30
- raised: string;
31
- sunken: string;
32
- };
33
- border: {
34
- subtle: string;
35
- strong: string;
36
- };
37
- accent: {
38
- fg: string;
39
- bg: string;
40
- };
41
- status: {
42
- go: {
43
- fg: string;
44
- bg: string;
45
- };
46
- nogo: {
47
- fg: string;
48
- bg: string;
49
- };
50
- warning: {
51
- fg: string;
52
- bg: string;
53
- };
54
- info: {
55
- fg: string;
56
- bg: string;
57
- };
58
- };
59
- focus: string;
60
- }
61
- export interface ThemeTypography {
62
- family: {
63
- mono: string;
64
- };
65
- size: {
66
- xs: string;
67
- sm: string;
68
- base: string;
69
- lg: string;
70
- };
71
- weight: {
72
- regular: number;
73
- bold: number;
74
- };
75
- letterSpacing: {
76
- /** Subtle negative-to-zero tracking for dense running text. */
77
- tight: string;
78
- /** Wide tracking for uppercase labels and section headers. */
79
- label: string;
80
- /** Widest tracking for spaced-out captions and status chips. */
81
- wide: string;
82
- /** Neutral (no) tracking for body copy. */
83
- body: string;
84
- };
85
- }
86
- export interface ThemeSpace {
87
- xs: string;
88
- sm: string;
89
- md: string;
90
- lg: string;
91
- xl: string;
92
- }
93
- export interface ThemeRadii {
94
- /** Tightest corner — buttons and small controls. */
95
- xs: string;
96
- sm: string;
97
- md: string;
98
- /** Fully rounded — chips, avatars, toggle knobs. */
99
- pill: string;
100
- }
101
- export interface ThemeBorders {
102
- subtle: string;
103
- strong: string;
104
- }
105
- export interface UiKitTheme {
106
- colors: ThemeColors;
107
- typography: ThemeTypography;
108
- space: ThemeSpace;
109
- radii: ThemeRadii;
110
- borders: ThemeBorders;
111
- }
112
- declare module "styled-components" {
113
- interface DefaultTheme extends UiKitTheme {
114
- }
115
- }
116
- //# sourceMappingURL=theme.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ;;;;WAIG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,MAAM,EAAE;QACN,EAAE,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACjC,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;KAClC,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,aAAa,EAAE;QACb,+DAA+D;QAC/D,KAAK,EAAE,MAAM,CAAC;QACd,8DAA8D;QAC9D,KAAK,EAAE,MAAM,CAAC;QACd,gEAAgE;QAChE,IAAI,EAAE,MAAM,CAAC;QACb,2CAA2C;QAC3C,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,eAAe,CAAC;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,OAAO,QAAQ,mBAAmB,CAAC;IAQjC,UAAiB,YAAa,SAAQ,UAAU;KAAG;CACpD"}
package/dist/theme.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * Typed theme contract.
3
- *
4
- * Themes name the project's design tokens by role (`text.muted`, not
5
- * `gray.500`) so future palette tweaks change the value behind the role
6
- * instead of forcing a sweep across every consumer.
7
- *
8
- * Sizes and spacing are emitted as CSS-variable strings (e.g.
9
- * `var(--font-size-base)`) so the responsive overrides in `tokens.css`
10
- * (coarse-pointer bumps, `prefers-reduced-motion`, future
11
- * `prefers-color-scheme`) keep working when a styled-component switches from a
12
- * raw CSS var to `theme.typography...`.
13
- */
14
- export {};
15
- //# sourceMappingURL=theme.js.map
package/dist/theme.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}