@ksp-gonogo/ui-kit 0.1.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.
Files changed (111) hide show
  1. package/LICENSE +596 -0
  2. package/dist/ActionButton.d.ts +18 -0
  3. package/dist/ActionButton.d.ts.map +1 -0
  4. package/dist/ActionButton.js +56 -0
  5. package/dist/ActionButton.js.map +1 -0
  6. package/dist/Badge.d.ts +15 -0
  7. package/dist/Badge.d.ts.map +1 -0
  8. package/dist/Badge.js +60 -0
  9. package/dist/Badge.js.map +1 -0
  10. package/dist/Box.d.ts +19 -0
  11. package/dist/Box.d.ts.map +1 -0
  12. package/dist/Box.js +27 -0
  13. package/dist/Box.js.map +1 -0
  14. package/dist/Card.d.ts +11 -0
  15. package/dist/Card.d.ts.map +1 -0
  16. package/dist/Card.js +13 -0
  17. package/dist/Card.js.map +1 -0
  18. package/dist/Cluster.d.ts +18 -0
  19. package/dist/Cluster.d.ts.map +1 -0
  20. package/dist/Cluster.js +24 -0
  21. package/dist/Cluster.js.map +1 -0
  22. package/dist/EmptyState.d.ts +16 -0
  23. package/dist/EmptyState.d.ts.map +1 -0
  24. package/dist/EmptyState.js +37 -0
  25. package/dist/EmptyState.js.map +1 -0
  26. package/dist/GonogoTokens.d.ts +16 -0
  27. package/dist/GonogoTokens.d.ts.map +1 -0
  28. package/dist/GonogoTokens.js +108 -0
  29. package/dist/GonogoTokens.js.map +1 -0
  30. package/dist/Grid.d.ts +25 -0
  31. package/dist/Grid.d.ts.map +1 -0
  32. package/dist/Grid.js +23 -0
  33. package/dist/Grid.js.map +1 -0
  34. package/dist/Inline.d.ts +20 -0
  35. package/dist/Inline.d.ts.map +1 -0
  36. package/dist/Inline.js +17 -0
  37. package/dist/Inline.js.map +1 -0
  38. package/dist/Panel.d.ts +14 -0
  39. package/dist/Panel.d.ts.map +1 -0
  40. package/dist/Panel.js +145 -0
  41. package/dist/Panel.js.map +1 -0
  42. package/dist/ProgressBar.d.ts +15 -0
  43. package/dist/ProgressBar.d.ts.map +1 -0
  44. package/dist/ProgressBar.js +31 -0
  45. package/dist/ProgressBar.js.map +1 -0
  46. package/dist/Readout.d.ts +35 -0
  47. package/dist/Readout.d.ts.map +1 -0
  48. package/dist/Readout.js +114 -0
  49. package/dist/Readout.js.map +1 -0
  50. package/dist/Row.d.ts +22 -0
  51. package/dist/Row.d.ts.map +1 -0
  52. package/dist/Row.js +32 -0
  53. package/dist/Row.js.map +1 -0
  54. package/dist/Section.d.ts +15 -0
  55. package/dist/Section.d.ts.map +1 -0
  56. package/dist/Section.js +21 -0
  57. package/dist/Section.js.map +1 -0
  58. package/dist/Spinner.d.ts +18 -0
  59. package/dist/Spinner.d.ts.map +1 -0
  60. package/dist/Spinner.js +22 -0
  61. package/dist/Spinner.js.map +1 -0
  62. package/dist/Stack.d.ts +15 -0
  63. package/dist/Stack.d.ts.map +1 -0
  64. package/dist/Stack.js +17 -0
  65. package/dist/Stack.js.map +1 -0
  66. package/dist/StatusIndicator.d.ts +27 -0
  67. package/dist/StatusIndicator.d.ts.map +1 -0
  68. package/dist/StatusIndicator.js +78 -0
  69. package/dist/StatusIndicator.js.map +1 -0
  70. package/dist/Truncate.d.ts +7 -0
  71. package/dist/Truncate.d.ts.map +1 -0
  72. package/dist/Truncate.js +14 -0
  73. package/dist/Truncate.js.map +1 -0
  74. package/dist/Value.d.ts +24 -0
  75. package/dist/Value.d.ts.map +1 -0
  76. package/dist/Value.js +42 -0
  77. package/dist/Value.js.map +1 -0
  78. package/dist/WidgetHeader.d.ts +16 -0
  79. package/dist/WidgetHeader.d.ts.map +1 -0
  80. package/dist/WidgetHeader.js +40 -0
  81. package/dist/WidgetHeader.js.map +1 -0
  82. package/dist/defaultDarkTheme.d.ts +16 -0
  83. package/dist/defaultDarkTheme.d.ts.map +1 -0
  84. package/dist/defaultDarkTheme.js +96 -0
  85. package/dist/defaultDarkTheme.js.map +1 -0
  86. package/dist/format.d.ts +11 -0
  87. package/dist/format.d.ts.map +1 -0
  88. package/dist/format.js +12 -0
  89. package/dist/format.js.map +1 -0
  90. package/dist/index.d.ts +25 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +29 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/science/ScienceExperimentRow.d.ts +43 -0
  95. package/dist/science/ScienceExperimentRow.d.ts.map +1 -0
  96. package/dist/science/ScienceExperimentRow.js +61 -0
  97. package/dist/science/ScienceExperimentRow.js.map +1 -0
  98. package/dist/test/axe.d.ts +3 -0
  99. package/dist/test/axe.d.ts.map +1 -0
  100. package/dist/test/axe.js +5 -0
  101. package/dist/test/axe.js.map +1 -0
  102. package/dist/test/setup.d.ts +2 -0
  103. package/dist/test/setup.d.ts.map +1 -0
  104. package/dist/test/setup.js +12 -0
  105. package/dist/test/setup.js.map +1 -0
  106. package/dist/theme.d.ts +116 -0
  107. package/dist/theme.d.ts.map +1 -0
  108. package/dist/theme.js +15 -0
  109. package/dist/theme.js.map +1 -0
  110. package/dist/tokens.css +133 -0
  111. package/package.json +57 -0
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled, { css, keyframes } from "styled-components";
3
+ /**
4
+ * Compact row-level action button. Extracted from ScienceOfficer's
5
+ * `ActionButton` + `ConfirmTransmitButton` — the `go` tone replaces the
6
+ * latter.
7
+ */
8
+ export function ActionButton({ tone = "ghost", children, ...rest }) {
9
+ return (_jsx(ActionButton__Root, { "$tone": tone, ...rest, children: children }));
10
+ }
11
+ const transmitPulse = keyframes `
12
+ 0%,
13
+ 100% {
14
+ opacity: 1;
15
+ }
16
+ 50% {
17
+ opacity: 0.6;
18
+ }
19
+ `;
20
+ const ActionButton__Root = styled.button `
21
+ font-size: 10px;
22
+ font-weight: 600;
23
+ letter-spacing: 0.04em;
24
+ padding: 2px 8px;
25
+ border-radius: 2px;
26
+ border: 1px solid var(--color-surface-raised);
27
+ background: transparent;
28
+ color: var(--color-text-muted);
29
+ cursor: pointer;
30
+ font-family: inherit;
31
+ display: inline-flex;
32
+ align-items: center;
33
+ gap: 4px;
34
+
35
+ &:hover:not(:disabled) {
36
+ color: var(--color-text-primary);
37
+ border-color: var(--color-accent-fg);
38
+ }
39
+
40
+ &:disabled {
41
+ cursor: not-allowed;
42
+ opacity: 0.7;
43
+ }
44
+
45
+ ${({ $tone }) => $tone === "go" &&
46
+ css `
47
+ background: var(--color-status-go-bg);
48
+ color: var(--color-status-go-fg);
49
+ border-color: transparent;
50
+
51
+ @media (prefers-reduced-motion: no-preference) {
52
+ animation: ${transmitPulse} 1s ease-in-out infinite;
53
+ }
54
+ `}
55
+ `;
56
+ //# sourceMappingURL=ActionButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionButton.js","sourceRoot":"","sources":["../src/ActionButton.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAe3D;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,IAAI,GAAG,OAAO,EACd,QAAQ,EACR,GAAG,IAAI,EACW;IAClB,OAAO,CACL,KAAC,kBAAkB,aAAQ,IAAI,KAAM,IAAI,YACtC,QAAQ,GACU,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,SAAS,CAAA;;;;;;;;CAQ9B,CAAC;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAA6B;;;;;;;;;;;;;;;;;;;;;;;;;IAyBjE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACd,KAAK,KAAK,IAAI;IACd,GAAG,CAAA;;;;;;qBAMc,aAAa;;KAE7B;CACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type BadgeTone = "neutral" | "go" | "nogo" | "warn" | "info";
3
+ export type BadgeSize = "sm" | "md";
4
+ export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
5
+ tone?: BadgeTone;
6
+ size?: BadgeSize;
7
+ children: ReactNode;
8
+ }
9
+ /**
10
+ * Compact label/state pill. This is the kit's canonical badge — the single
11
+ * tone/size vocabulary every widget's state chips should map onto, replacing
12
+ * bespoke styled spans (e.g. a widget's own `KindBadge`/`StateTag`).
13
+ */
14
+ export declare function Badge({ tone, size, children, ...rest }: BadgeProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../src/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpC,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,eAAe,CAAC;IACjE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EACpB,IAAgB,EAChB,IAAW,EACX,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,UAAU,2CAMZ"}
package/dist/Badge.js ADDED
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ /**
4
+ * Compact label/state pill. This is the kit's canonical badge — the single
5
+ * tone/size vocabulary every widget's state chips should map onto, replacing
6
+ * bespoke styled spans (e.g. a widget's own `KindBadge`/`StateTag`).
7
+ */
8
+ export function Badge({ tone = "neutral", size = "md", children, ...rest }) {
9
+ return (_jsx(Badge__Body, { "$tone": tone, "$size": size, ...rest, children: children }));
10
+ }
11
+ const TONE_STYLES = {
12
+ neutral: css `
13
+ background: var(--color-surface-raised);
14
+ border-color: var(--color-border-subtle);
15
+ color: var(--color-text-muted);
16
+ `,
17
+ go: css `
18
+ background: var(--color-status-go-bg);
19
+ border-color: var(--color-status-go-bg);
20
+ color: var(--color-status-go-fg);
21
+ `,
22
+ nogo: css `
23
+ background: var(--color-status-nogo-bg);
24
+ border-color: var(--color-status-nogo-bg);
25
+ color: var(--color-status-nogo-fg);
26
+ `,
27
+ warn: css `
28
+ background: var(--color-status-warning-bg);
29
+ border-color: var(--color-status-warning-bg);
30
+ color: var(--color-status-warning-fg);
31
+ `,
32
+ info: css `
33
+ background: var(--color-status-info-bg);
34
+ border-color: var(--color-status-info-bg);
35
+ color: var(--color-status-info-fg);
36
+ `,
37
+ };
38
+ const SIZE_STYLES = {
39
+ sm: css `
40
+ font-size: 10px;
41
+ padding: 1px 4px;
42
+ `,
43
+ md: css `
44
+ font-size: var(--font-size-xs);
45
+ padding: 1px 6px;
46
+ `,
47
+ };
48
+ const Badge__Body = styled.span `
49
+ display: inline-block;
50
+ border: 1px solid;
51
+ border-radius: 3px;
52
+ font-weight: 600;
53
+ letter-spacing: 0.08em;
54
+ text-transform: uppercase;
55
+ white-space: nowrap;
56
+
57
+ ${({ $size }) => SIZE_STYLES[$size]}
58
+ ${({ $tone }) => TONE_STYLES[$tone]}
59
+ `;
60
+ //# sourceMappingURL=Badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../src/Badge.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAWhD;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,EACpB,IAAI,GAAG,SAAS,EAChB,IAAI,GAAG,IAAI,EACX,QAAQ,EACR,GAAG,IAAI,EACI;IACX,OAAO,CACL,KAAC,WAAW,aAAQ,IAAI,WAAS,IAAI,KAAM,IAAI,YAC5C,QAAQ,GACG,CACf,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,GAAG,CAAA;;;;GAIX;IACD,EAAE,EAAE,GAAG,CAAA;;;;GAIN;IACD,IAAI,EAAE,GAAG,CAAA;;;;GAIR;IACD,IAAI,EAAE,GAAG,CAAA;;;;GAIR;IACD,IAAI,EAAE,GAAG,CAAA;;;;GAIR;CACO,CAAC;AAEX,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,GAAG,CAAA;;;GAGN;IACD,EAAE,EAAE,GAAG,CAAA;;;GAGN;CACO,CAAC;AAEX,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAwC;;;;;;;;;IASnE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IACjC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;CACpC,CAAC"}
package/dist/Box.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ import type { SpaceToken } from "./Stack";
3
+ export type BoxSurface = "app" | "panel" | "raised" | "sunken";
4
+ export type BoxRadius = "xs" | "sm" | "md" | "pill";
5
+ export type BoxPad = SpaceToken | [SpaceToken, SpaceToken];
6
+ export interface BoxProps extends HTMLAttributes<HTMLDivElement> {
7
+ /** Background surface tier. Omit for a transparent box. */
8
+ surface?: BoxSurface;
9
+ /** Padding on all sides, or a `[vertical, horizontal]` pair. */
10
+ pad?: BoxPad;
11
+ /** Adds a `1px solid` subtle border. Defaults to `false`. */
12
+ bordered?: boolean;
13
+ /** Corner radius. Omit for square corners. */
14
+ radius?: BoxRadius;
15
+ children?: ReactNode;
16
+ }
17
+ /** Background/border/padding/radius wrapper — the generic surface primitive. */
18
+ export declare function Box({ surface, pad, bordered, radius, children, ...rest }: BoxProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=Box.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Box.d.ts","sourceRoot":"","sources":["../src/Box.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAE3D,MAAM,WAAW,QAAS,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC9D,2DAA2D;IAC3D,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AASD,gFAAgF;AAChF,wBAAgB,GAAG,CAAC,EAClB,OAAO,EACP,GAAG,EACH,QAAgB,EAChB,MAAM,EACN,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,QAAQ,2CAYV"}
package/dist/Box.js ADDED
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ const SURFACE_VAR = {
4
+ app: "var(--color-surface-app)",
5
+ panel: "var(--color-surface-panel)",
6
+ raised: "var(--color-surface-raised)",
7
+ sunken: "var(--color-surface-sunken)",
8
+ };
9
+ /** Background/border/padding/radius wrapper — the generic surface primitive. */
10
+ export function Box({ surface, pad, bordered = false, radius, children, ...rest }) {
11
+ return (_jsx(Box__Root, { "$surface": surface, "$pad": pad, "$bordered": bordered, "$radius": radius, ...rest, children: children }));
12
+ }
13
+ const Box__Root = styled.div `
14
+ ${({ $surface }) => $surface && `background: ${SURFACE_VAR[$surface]};`}
15
+ ${({ $bordered }) => $bordered && `border: 1px solid var(--color-border-subtle);`}
16
+ ${({ theme, $radius }) => $radius && `border-radius: ${theme.radii[$radius]};`}
17
+ ${({ theme, $pad }) => {
18
+ if (!$pad)
19
+ return "";
20
+ if (Array.isArray($pad)) {
21
+ const [y, x] = $pad;
22
+ return `padding: ${theme.space[y]} ${theme.space[x]};`;
23
+ }
24
+ return `padding: ${theme.space[$pad]};`;
25
+ }}
26
+ `;
27
+ //# sourceMappingURL=Box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Box.js","sourceRoot":"","sources":["../src/Box.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAmBvC,MAAM,WAAW,GAA+B;IAC9C,GAAG,EAAE,0BAA0B;IAC/B,KAAK,EAAE,4BAA4B;IACnC,MAAM,EAAE,6BAA6B;IACrC,MAAM,EAAE,6BAA6B;CACtC,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,GAAG,CAAC,EAClB,OAAO,EACP,GAAG,EACH,QAAQ,GAAG,KAAK,EAChB,MAAM,EACN,QAAQ,EACR,GAAG,IAAI,EACE;IACT,OAAO,CACL,KAAC,SAAS,gBACE,OAAO,UACX,GAAG,eACE,QAAQ,aACV,MAAM,KACX,IAAI,YAEP,QAAQ,GACC,CACb,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAK1B;IACE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,eAAe,WAAW,CAAC,QAAQ,CAAC,GAAG;IACrE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,IAAI,+CAA+C;IAC/E,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,kBAAkB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;IAC5E,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACpB,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;QACpB,OAAO,YAAY,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC;IACD,OAAO,YAAY,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1C,CAAC;CACF,CAAC"}
package/dist/Card.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export interface CardProps extends HTMLAttributes<HTMLDivElement> {
3
+ children?: ReactNode;
4
+ }
5
+ /**
6
+ * Sunken inset card — a nested surface for a single record inside a list
7
+ * (a tracked vessel, a fleet entry). Extracted from the Scanning widget's
8
+ * `VesselCard`.
9
+ */
10
+ export declare const Card: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof CardProps> & CardProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof CardProps> & CardProps, never>>> & string;
11
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../src/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,6bAKhB,CAAC"}
package/dist/Card.js ADDED
@@ -0,0 +1,13 @@
1
+ import styled from "styled-components";
2
+ /**
3
+ * Sunken inset card — a nested surface for a single record inside a list
4
+ * (a tracked vessel, a fleet entry). Extracted from the Scanning widget's
5
+ * `VesselCard`.
6
+ */
7
+ export const Card = styled.div `
8
+ background: var(--color-surface-sunken);
9
+ border: 1px solid var(--color-border-subtle);
10
+ border-radius: 3px;
11
+ padding: 6px 8px;
12
+ `;
13
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.js","sourceRoot":"","sources":["../src/Card.tsx"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAMvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAW;;;;;CAKxC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ import type { SpaceToken } from "./Stack";
3
+ export type ClusterJustify = "between" | "start" | "end";
4
+ export interface ClusterProps extends HTMLAttributes<HTMLDivElement> {
5
+ /** `justify-content` shorthand. Defaults to `between`. */
6
+ justify?: ClusterJustify;
7
+ /** Gap between children, snapped to the space scale. Defaults to `md`. */
8
+ gap?: SpaceToken;
9
+ children?: ReactNode;
10
+ }
11
+ /**
12
+ * The single most-repeated block in the dashboard: a horizontal row with
13
+ * centred items, spread-out justification, and a `min-width: 0` so a
14
+ * truncating child inside actually truncates instead of overflowing the flex
15
+ * item. Verbatim source: ScienceOfficer's `TitleRow` and `LabHeader`.
16
+ */
17
+ export declare function Cluster({ justify, gap, children, ...rest }: ClusterProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=Cluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cluster.d.ts","sourceRoot":"","sources":["../src/Cluster.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,0DAA0D;IAC1D,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAQD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EACtB,OAAmB,EACnB,GAAU,EACV,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,YAAY,2CAMd"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ const JUSTIFY_CONTENT = {
4
+ between: "space-between",
5
+ start: "flex-start",
6
+ end: "flex-end",
7
+ };
8
+ /**
9
+ * The single most-repeated block in the dashboard: a horizontal row with
10
+ * centred items, spread-out justification, and a `min-width: 0` so a
11
+ * truncating child inside actually truncates instead of overflowing the flex
12
+ * item. Verbatim source: ScienceOfficer's `TitleRow` and `LabHeader`.
13
+ */
14
+ export function Cluster({ justify = "between", gap = "md", children, ...rest }) {
15
+ return (_jsx(Cluster__Root, { "$justify": justify, "$gap": gap, ...rest, children: children }));
16
+ }
17
+ const Cluster__Root = styled.div `
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: ${({ $justify }) => JUSTIFY_CONTENT[$justify]};
21
+ gap: ${({ theme, $gap }) => theme.space[$gap]};
22
+ min-width: 0;
23
+ `;
24
+ //# sourceMappingURL=Cluster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cluster.js","sourceRoot":"","sources":["../src/Cluster.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAavC,MAAM,eAAe,GAAmC;IACtD,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,YAAY;IACnB,GAAG,EAAE,UAAU;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,OAAO,GAAG,SAAS,EACnB,GAAG,GAAG,IAAI,EACV,QAAQ,EACR,GAAG,IAAI,EACM;IACb,OAAO,CACL,KAAC,aAAa,gBAAW,OAAO,UAAQ,GAAG,KAAM,IAAI,YAClD,QAAQ,GACK,CACjB,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAG9B;;;qBAGmB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;SACvD,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;;CAE9C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type EmptyStateLayout = "inline" | "fill";
3
+ export interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {
4
+ children?: ReactNode;
5
+ layout?: EmptyStateLayout;
6
+ }
7
+ /**
8
+ * Muted placeholder text shown when a panel has nothing to render. Replaces
9
+ * the many ad-hoc `Empty = styled.div` definitions sprinkled across widgets.
10
+ *
11
+ * `inline` is the default — small vertical padding, sits where it's mounted
12
+ * inside a panel's stack of children. `fill` centres in the available space
13
+ * and is appropriate as a panel's sole child.
14
+ */
15
+ export declare function EmptyState({ children, layout, ...rest }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=EmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../src/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,MAAiB,EACjB,GAAG,IAAI,EACR,EAAE,eAAe,2CAMjB"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ /**
4
+ * Muted placeholder text shown when a panel has nothing to render. Replaces
5
+ * the many ad-hoc `Empty = styled.div` definitions sprinkled across widgets.
6
+ *
7
+ * `inline` is the default — small vertical padding, sits where it's mounted
8
+ * inside a panel's stack of children. `fill` centres in the available space
9
+ * and is appropriate as a panel's sole child.
10
+ */
11
+ export function EmptyState({ children, layout = "inline", ...rest }) {
12
+ return (_jsx(EmptyState__Body, { "$layout": layout, ...rest, children: children }));
13
+ }
14
+ const LAYOUT_STYLES = {
15
+ inline: css `
16
+ padding: 8px 0;
17
+ `,
18
+ fill: css `
19
+ width: 100%;
20
+ height: 100%;
21
+ flex: 1;
22
+ min-height: 0;
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ text-align: center;
27
+ padding: 16px;
28
+ `,
29
+ };
30
+ const EmptyState__Body = styled.div `
31
+ color: var(--color-text-muted);
32
+ font-size: var(--font-size-sm);
33
+ letter-spacing: 0.04em;
34
+
35
+ ${({ $layout }) => LAYOUT_STYLES[$layout]}
36
+ `;
37
+ //# sourceMappingURL=EmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.js","sourceRoot":"","sources":["../src/EmptyState.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAShD;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,MAAM,GAAG,QAAQ,EACjB,GAAG,IAAI,EACS;IAChB,OAAO,CACL,KAAC,gBAAgB,eAAU,MAAM,KAAM,IAAI,YACxC,QAAQ,GACQ,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,MAAM,EAAE,GAAG,CAAA;;GAEV;IACD,IAAI,EAAE,GAAG,CAAA;;;;;;;;;;GAUR;CACO,CAAC;AAEX,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAA+B;;;;;IAK9D,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;CAC1C,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Design-token custom properties as a styled-components global sheet.
3
+ *
4
+ * Mirrors `tokens.css` exactly — the same `:root` variable block and the
5
+ * coarse-pointer font-size override. Hosts that build their global styles
6
+ * through styled-components (rather than importing `@ksp-gonogo/ui-kit/tokens.css`)
7
+ * render `<GonogoTokens />` once near the tree root.
8
+ *
9
+ * Not auto-mounted: injecting a stylesheet is a side effect, and the kit stays
10
+ * side-effect-free so it tree-shakes cleanly. The host opts in explicitly.
11
+ *
12
+ * Keep this block and `tokens.css` in sync — they are two hand-maintained
13
+ * copies of the same source of truth.
14
+ */
15
+ export declare const GonogoTokens: import("react").NamedExoticComponent<import("styled-components").ExecutionProps & object>;
16
+ //# sourceMappingURL=GonogoTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GonogoTokens.d.ts","sourceRoot":"","sources":["../src/GonogoTokens.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,2FA2FxB,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { createGlobalStyle } from "styled-components";
2
+ /**
3
+ * Design-token custom properties as a styled-components global sheet.
4
+ *
5
+ * Mirrors `tokens.css` exactly — the same `:root` variable block and the
6
+ * coarse-pointer font-size override. Hosts that build their global styles
7
+ * through styled-components (rather than importing `@ksp-gonogo/ui-kit/tokens.css`)
8
+ * render `<GonogoTokens />` once near the tree root.
9
+ *
10
+ * Not auto-mounted: injecting a stylesheet is a side effect, and the kit stays
11
+ * side-effect-free so it tree-shakes cleanly. The host opts in explicitly.
12
+ *
13
+ * Keep this block and `tokens.css` in sync — they are two hand-maintained
14
+ * copies of the same source of truth.
15
+ */
16
+ export const GonogoTokens = createGlobalStyle `
17
+ :root {
18
+ --font-family-mono:
19
+ "JetBrains Mono", ui-monospace, "IBM Plex Mono", Menlo, Consolas, monospace;
20
+ --font-size-xs: 11px;
21
+ --font-size-sm: 12px;
22
+ --font-size-base: 14px;
23
+ --font-size-lg: 16px;
24
+
25
+ --color-text-primary: #ccc;
26
+ --color-text-muted: #888;
27
+ --color-text-dim: #808080;
28
+ --color-text-faint: #7a7a7a;
29
+ --color-text-inverse: #050505;
30
+
31
+ --color-surface-app: #050505;
32
+ --color-surface-panel: #0d0d0d;
33
+ --color-surface-raised: #1a1a1a;
34
+ --color-surface-sunken: #0a0a0a;
35
+
36
+ --color-border-subtle: #2a2a2a;
37
+ --color-border-strong: #333;
38
+
39
+ --color-accent-fg: #00ff88;
40
+ --color-accent-bg: #00ff88;
41
+
42
+ --color-status-go-fg: #cfe;
43
+ --color-status-go-bg: #2e5a2e;
44
+ --color-status-nogo-fg: #ffdede;
45
+ --color-status-nogo-bg: #ff4d4d;
46
+ --color-status-warning-fg: #1a1a1a;
47
+ --color-status-warning-bg: #ff8c00;
48
+ --color-status-info-fg: #7cf;
49
+ --color-status-info-bg: #0d0d0d;
50
+
51
+ --color-status-alert-muted: #4a0e0e;
52
+ --color-status-warning-bg-muted: #3a2a0a;
53
+ --color-status-warning-fg-muted: #ffd68a;
54
+ --color-status-warning-border-muted: #8a6a28;
55
+
56
+ --color-tag-blue-fg: #4488ff;
57
+ --color-tag-blue-bg: #0a0a1a;
58
+ --color-tag-blue-border: #1a1a3a;
59
+ --color-tag-purple-fg: #cc44cc;
60
+ --color-tag-purple-bg: #1a0a1a;
61
+ --color-tag-purple-border: #6a3a9a;
62
+ --color-tag-yellow-fg: #ffeb3b;
63
+ --color-tag-yellow-bg: #3a2800;
64
+ --color-tag-yellow-border: #6a5a2a;
65
+ --color-tag-dark-brown-bg: #1a1000;
66
+ --color-tag-dark-brown-border: #3a2800;
67
+ --color-tag-cyan-fg: #00cccc;
68
+ --color-tag-orange-fg: #ff6633;
69
+ --color-tag-red-fg: #ff4466;
70
+
71
+ --color-data-1: #6cb4ff;
72
+ --color-data-2: #ff7e7e;
73
+ --color-data-3: #d987ff;
74
+ --color-data-4: #ffb87a;
75
+ --color-data-5: #4fe6ff;
76
+ --color-data-6: #ffd866;
77
+ --color-data-7: #ff8eb8;
78
+ --color-data-8: #7d8eff;
79
+ --color-data-9: #88dd55;
80
+ --color-data-10: #44dddd;
81
+ --color-data-11: #c87fff;
82
+ --color-data-12: #ff5cad;
83
+ --color-data-13: #5fc97a;
84
+ --color-data-14: #e89c5b;
85
+ --color-data-15: #aa9cff;
86
+ --color-data-16: #c2db4a;
87
+ --color-data-17: #6fc2e5;
88
+ --color-data-18: #db8b6f;
89
+ --color-data-19: #b6f7d6;
90
+ --color-data-20: #ffa3d6;
91
+ --color-data-21: #87a6ff;
92
+ --color-data-22: #ffc88e;
93
+ --color-data-23: #c8a6e3;
94
+ --color-data-24: #f5e07c;
95
+
96
+ --color-focus: #00ff88;
97
+ }
98
+
99
+ @media (pointer: coarse) {
100
+ :root {
101
+ --font-size-xs: 12px;
102
+ --font-size-sm: 13px;
103
+ --font-size-base: 15px;
104
+ --font-size-lg: 17px;
105
+ }
106
+ }
107
+ `;
108
+ //# sourceMappingURL=GonogoTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GonogoTokens.js","sourceRoot":"","sources":["../src/GonogoTokens.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2F5C,CAAC"}
package/dist/Grid.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ import type { SpaceToken } from "./Stack";
3
+ export interface GridProps extends HTMLAttributes<HTMLDivElement> {
4
+ /**
5
+ * Fixed column template (e.g. `"120px 1fr 60px"`). Takes precedence over
6
+ * `minColWidth` when both are set. Extracted from the Scanning widget's
7
+ * coverage row (`grid-template-columns: 120px 1fr 60px`).
8
+ */
9
+ cols?: string;
10
+ /**
11
+ * Auto-fill responsive columns: `repeat(auto-fill, minmax(minColWidth, 1fr))`.
12
+ * Ignored when `cols` is set.
13
+ */
14
+ minColWidth?: string;
15
+ /** Gap between cells, snapped to the space scale. Defaults to `sm`. */
16
+ gap?: SpaceToken;
17
+ children?: ReactNode;
18
+ }
19
+ /**
20
+ * CSS grid wrapper for fixed-column rows and auto-fill card layouts — the two
21
+ * grid shapes widgets hand-roll (a labelled data row, a responsive card
22
+ * gallery).
23
+ */
24
+ export declare function Grid({ cols, minColWidth, gap, children, ...rest }: GridProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=Grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../src/Grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,WAAW,EACX,GAAU,EACV,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,SAAS,2CAMX"}
package/dist/Grid.js ADDED
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ /**
4
+ * CSS grid wrapper for fixed-column rows and auto-fill card layouts — the two
5
+ * grid shapes widgets hand-roll (a labelled data row, a responsive card
6
+ * gallery).
7
+ */
8
+ export function Grid({ cols, minColWidth, gap = "sm", children, ...rest }) {
9
+ return (_jsx(Grid__Root, { "$cols": cols, "$minColWidth": minColWidth, "$gap": gap, ...rest, children: children }));
10
+ }
11
+ const Grid__Root = styled.div `
12
+ display: grid;
13
+ align-items: center;
14
+ gap: ${({ theme, $gap }) => theme.space[$gap]};
15
+ grid-template-columns: ${({ $cols, $minColWidth }) => {
16
+ if ($cols)
17
+ return $cols;
18
+ if ($minColWidth)
19
+ return `repeat(auto-fill, minmax(${$minColWidth}, 1fr))`;
20
+ return "1fr";
21
+ }};
22
+ `;
23
+ //# sourceMappingURL=Grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.js","sourceRoot":"","sources":["../src/Grid.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAoBvC;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,EACnB,IAAI,EACJ,WAAW,EACX,GAAG,GAAG,IAAI,EACV,QAAQ,EACR,GAAG,IAAI,EACG;IACV,OAAO,CACL,KAAC,UAAU,aAAQ,IAAI,kBAAgB,WAAW,UAAQ,GAAG,KAAM,IAAI,YACpE,QAAQ,GACE,CACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAI3B;;;SAGO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;2BACpB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;IACnD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,YAAY;QAAE,OAAO,4BAA4B,YAAY,SAAS,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ import type { SpaceToken } from "./Stack";
3
+ export interface InlineProps extends HTMLAttributes<HTMLSpanElement> {
4
+ /** Gap between children, snapped to the space scale. Defaults to `sm`. */
5
+ gap?: SpaceToken;
6
+ /**
7
+ * Adds `margin-left: 6px` so this cluster sits apart from a preceding
8
+ * sibling cluster (e.g. a badge row followed by an action-button row).
9
+ * Verbatim source: ScienceOfficer's `Actions` (vs. plain `Badges`).
10
+ */
11
+ inset?: boolean;
12
+ children?: ReactNode;
13
+ }
14
+ /**
15
+ * Compact inline cluster for badges/action buttons that must not grow —
16
+ * `flex-shrink: 0` so it never yields space to a truncating sibling.
17
+ * Replaces ScienceOfficer's `Badges`/`LabBadges`/`Actions`.
18
+ */
19
+ export declare function Inline({ gap, inset, children, ...rest }: InlineProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=Inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inline.d.ts","sourceRoot":"","sources":["../src/Inline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,eAAe,CAAC;IAClE,0EAA0E;IAC1E,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAU,EACV,KAAa,EACb,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,WAAW,2CAMb"}
package/dist/Inline.js ADDED
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ /**
4
+ * Compact inline cluster for badges/action buttons that must not grow —
5
+ * `flex-shrink: 0` so it never yields space to a truncating sibling.
6
+ * Replaces ScienceOfficer's `Badges`/`LabBadges`/`Actions`.
7
+ */
8
+ export function Inline({ gap = "sm", inset = false, children, ...rest }) {
9
+ return (_jsx(Inline__Root, { "$gap": gap, "$inset": inset, ...rest, children: children }));
10
+ }
11
+ const Inline__Root = styled.span `
12
+ display: inline-flex;
13
+ gap: ${({ theme, $gap }) => theme.space[$gap]};
14
+ flex-shrink: 0;
15
+ ${({ $inset }) => $inset && `margin-left: 6px;`}
16
+ `;
17
+ //# sourceMappingURL=Inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inline.js","sourceRoot":"","sources":["../src/Inline.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAevC;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,EACrB,GAAG,GAAG,IAAI,EACV,KAAK,GAAG,KAAK,EACb,QAAQ,EACR,GAAG,IAAI,EACK;IACZ,OAAO,CACL,KAAC,YAAY,YAAO,GAAG,YAAU,KAAK,KAAM,IAAI,YAC7C,QAAQ,GACI,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAuC;;SAE9D,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;;IAE3C,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,IAAI,mBAAmB;CAChD,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const Panel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
2
+ export declare const PanelTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never>>> & string;
3
+ export declare const PanelSubtitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
4
+ /**
5
+ * Scrolling region with subtle white glow indicators at the top/bottom edges
6
+ * when there's scroll content in that direction. Use anywhere an internal
7
+ * region of a widget can overflow (e.g. lists, terminal output, file trees).
8
+ *
9
+ * Forwards its ref to the inner scroll element so consumers can imperatively
10
+ * scroll. Accepts standard div props on the root; pass className via
11
+ * `styled(ScrollArea)` to apply layout to the root.
12
+ */
13
+ export declare const ScrollArea: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
14
+ //# sourceMappingURL=Panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../src/Panel.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,KAAK,uVAkBjB,CAAC;AAEF,eAAO,MAAM,UAAU,uWAOtB,CAAC;AAEF,eAAO,MAAM,aAAa,uVAKzB,CAAC;AAyEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,2MAsDrB,CAAC"}