@xeonr/platform-ui 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 (74) hide show
  1. package/dist/index.d.ts +18 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +24 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/kit/Badge.d.ts +19 -0
  6. package/dist/kit/Badge.d.ts.map +1 -0
  7. package/dist/kit/Badge.js +61 -0
  8. package/dist/kit/Badge.js.map +1 -0
  9. package/dist/kit/Button.d.ts +28 -0
  10. package/dist/kit/Button.d.ts.map +1 -0
  11. package/dist/kit/Button.js +73 -0
  12. package/dist/kit/Button.js.map +1 -0
  13. package/dist/kit/DataTable.d.ts +23 -0
  14. package/dist/kit/DataTable.d.ts.map +1 -0
  15. package/dist/kit/DataTable.js +59 -0
  16. package/dist/kit/DataTable.js.map +1 -0
  17. package/dist/kit/EmptyState.d.ts +10 -0
  18. package/dist/kit/EmptyState.d.ts.map +1 -0
  19. package/dist/kit/EmptyState.js +42 -0
  20. package/dist/kit/EmptyState.js.map +1 -0
  21. package/dist/kit/EntityHeader.d.ts +17 -0
  22. package/dist/kit/EntityHeader.d.ts.map +1 -0
  23. package/dist/kit/EntityHeader.js +61 -0
  24. package/dist/kit/EntityHeader.js.map +1 -0
  25. package/dist/kit/Form.d.ts +78 -0
  26. package/dist/kit/Form.d.ts.map +1 -0
  27. package/dist/kit/Form.js +210 -0
  28. package/dist/kit/Form.js.map +1 -0
  29. package/dist/kit/Icon.d.ts +102 -0
  30. package/dist/kit/Icon.d.ts.map +1 -0
  31. package/dist/kit/Icon.js +48 -0
  32. package/dist/kit/Icon.js.map +1 -0
  33. package/dist/kit/KV.d.ts +9 -0
  34. package/dist/kit/KV.d.ts.map +1 -0
  35. package/dist/kit/KV.js +23 -0
  36. package/dist/kit/KV.js.map +1 -0
  37. package/dist/kit/LogView.d.ts +21 -0
  38. package/dist/kit/LogView.d.ts.map +1 -0
  39. package/dist/kit/LogView.js +35 -0
  40. package/dist/kit/LogView.js.map +1 -0
  41. package/dist/kit/Modal.d.ts +50 -0
  42. package/dist/kit/Modal.d.ts.map +1 -0
  43. package/dist/kit/Modal.js +112 -0
  44. package/dist/kit/Modal.js.map +1 -0
  45. package/dist/kit/PageHeader.d.ts +30 -0
  46. package/dist/kit/PageHeader.d.ts.map +1 -0
  47. package/dist/kit/PageHeader.js +67 -0
  48. package/dist/kit/PageHeader.js.map +1 -0
  49. package/dist/kit/Panel.d.ts +26 -0
  50. package/dist/kit/Panel.d.ts.map +1 -0
  51. package/dist/kit/Panel.js +49 -0
  52. package/dist/kit/Panel.js.map +1 -0
  53. package/dist/kit/Secret.d.ts +9 -0
  54. package/dist/kit/Secret.d.ts.map +1 -0
  55. package/dist/kit/Secret.js +39 -0
  56. package/dist/kit/Secret.js.map +1 -0
  57. package/dist/kit/Skeleton.d.ts +12 -0
  58. package/dist/kit/Skeleton.d.ts.map +1 -0
  59. package/dist/kit/Skeleton.js +21 -0
  60. package/dist/kit/Skeleton.js.map +1 -0
  61. package/dist/kit/Toast.d.ts +17 -0
  62. package/dist/kit/Toast.d.ts.map +1 -0
  63. package/dist/kit/Toast.js +64 -0
  64. package/dist/kit/Toast.js.map +1 -0
  65. package/dist/theme/ThemeProvider.d.ts +16 -0
  66. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  67. package/dist/theme/ThemeProvider.js +105 -0
  68. package/dist/theme/ThemeProvider.js.map +1 -0
  69. package/dist/theme/tokens.d.ts +62 -0
  70. package/dist/theme/tokens.d.ts.map +1 -0
  71. package/dist/theme/tokens.js +171 -0
  72. package/dist/theme/tokens.js.map +1 -0
  73. package/package.json +49 -0
  74. package/scripts/check-colour-literals.mjs +221 -0
@@ -0,0 +1,210 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { v } from "../theme/tokens.js";
4
+ import { MicroLabel } from "./Panel.js";
5
+ export const FormGrid = styled.div `
6
+ display: grid;
7
+ grid-template-columns: repeat(${(p) => p.$cols ?? 2}, minmax(0, 1fr));
8
+ gap: 14px;
9
+ @media (max-width: 640px) { grid-template-columns: 1fr; }
10
+ `;
11
+ export const FieldWrap = styled.label `
12
+ display: block;
13
+ min-width: 0;
14
+ ${(p) => (p.$span ? css `grid-column: span ${p.$span};` : "")}
15
+ `;
16
+ const HintText = styled.span `
17
+ display: block;
18
+ margin-top: 4px;
19
+ font-size: 11px;
20
+ color: ${v.faint};
21
+ `;
22
+ export function Field({ label, hint, span, children }) {
23
+ return (_jsxs(FieldWrap, { ...(span !== undefined ? { $span: span } : {}), children: [_jsx(MicroLabel, { style: { marginBottom: 6 }, children: label }), children, hint ? _jsx(HintText, { children: hint }) : null] }));
24
+ }
25
+ const ctl = css `
26
+ width: 100%;
27
+ height: 32px;
28
+ padding: 0 10px;
29
+ border-radius: ${v.rCtl};
30
+ background: ${v.field};
31
+ border: 1px solid ${v.fieldLine};
32
+ color: ${v.text};
33
+ font-size: 12.5px;
34
+ transition: border-color 0.14s ease, box-shadow 0.14s ease;
35
+ &::placeholder { color: ${v.faint}; }
36
+ &:focus { outline: none; border-color: ${v.brand55}; box-shadow: 0 0 0 3px ${v.brand08}; }
37
+ &:disabled { opacity: 0.55; }
38
+ `;
39
+ export const Input = styled.input `${ctl}`;
40
+ export const MonoInput = styled.input `${ctl} font-family: ${v.mono}; font-size: 11.5px;`;
41
+ export const Select = styled.select `
42
+ ${ctl}
43
+ appearance: none;
44
+ background-image: linear-gradient(45deg, transparent 50%, ${v.faint} 50%), linear-gradient(135deg, ${v.faint} 50%, transparent 50%);
45
+ background-position: calc(100% - 16px) 14px, calc(100% - 11px) 14px;
46
+ background-size: 5px 5px;
47
+ background-repeat: no-repeat;
48
+ padding-right: 28px;
49
+ `;
50
+ export const TextArea = styled.textarea `
51
+ ${ctl}
52
+ height: auto;
53
+ min-height: 76px;
54
+ padding: 8px 10px;
55
+ resize: vertical;
56
+ line-height: 1.5;
57
+ ${(p) => (p.$mono ? css `font-family: ${v.mono}; font-size: 11.5px;` : "")}
58
+ `;
59
+ /** Segmented: pill group for small closed enums (kinds, sources, themes). */
60
+ const SegWrap = styled.div `
61
+ display: inline-flex;
62
+ padding: 3px;
63
+ gap: 2px;
64
+ background: ${v.field};
65
+ border: 1px solid ${v.fieldLine};
66
+ border-radius: ${v.rCtl};
67
+ `;
68
+ const SegBtn = styled.button `
69
+ height: 24px;
70
+ padding: 0 10px;
71
+ border-radius: 6px;
72
+ font-size: 11.5px;
73
+ font-weight: 600;
74
+ color: ${(p) => (p.$on ? v.onBrand : v.muted)};
75
+ background: ${(p) => (p.$on ? v.grad : "transparent")};
76
+ transition: background 0.14s ease, color 0.14s ease;
77
+ &:hover { color: ${(p) => (p.$on ? v.onBrand : v.text)}; }
78
+ `;
79
+ export function Segmented({ options, value, onChange }) {
80
+ return (_jsx(SegWrap, { role: "radiogroup", children: options.map((o) => (_jsx(SegBtn, { type: "button", role: "radio", "aria-checked": o.value === value, "$on": o.value === value, onClick: () => onChange(o.value), children: o.label }, o.value))) }));
81
+ }
82
+ /** Toggle: drawn checkbox, gradient fill when on. */
83
+ const ToggleWrap = styled.label `
84
+ display: inline-flex;
85
+ align-items: center;
86
+ gap: 9px;
87
+ cursor: ${(p) => (p.$disabled ? "not-allowed" : "pointer")};
88
+ opacity: ${(p) => (p.$disabled ? 0.55 : 1)};
89
+ font-size: 12.5px;
90
+ user-select: none;
91
+ input { position: absolute; opacity: 0; pointer-events: none; }
92
+ `;
93
+ const Box = styled.span `
94
+ width: 16px; height: 16px; border-radius: 5px;
95
+ border: 1.5px solid ${(p) => (p.$on ? "transparent" : v.line2)};
96
+ background: ${(p) => (p.$on ? v.grad : "transparent")};
97
+ display: grid; place-items: center;
98
+ transition: background 0.14s ease, border-color 0.14s ease;
99
+ &::after {
100
+ content: "";
101
+ width: 8px; height: 5px;
102
+ border-left: 2px solid ${v.onBrand};
103
+ border-bottom: 2px solid ${v.onBrand};
104
+ transform: rotate(-45deg) translateY(-1px);
105
+ opacity: ${(p) => (p.$on ? 1 : 0)};
106
+ }
107
+ `;
108
+ export function Toggle({ checked, onChange, label, disabled }) {
109
+ return (_jsxs(ToggleWrap, { "$disabled": disabled, children: [_jsx("input", { type: "checkbox", checked: checked, disabled: disabled, onChange: (e) => { if (!disabled)
110
+ onChange(e.target.checked); } }), _jsx(Box, { "$on": checked, "aria-hidden": true }), _jsx("span", { children: label })] }));
111
+ }
112
+ /** FormSection: bordered settings card with a title band, auth-style. */
113
+ const SectionWrap = styled.section `
114
+ background: ${v.surface};
115
+ border: 1px solid ${v.line};
116
+ border-radius: ${v.rPanel};
117
+ overflow: hidden;
118
+ `;
119
+ const SectionHead = styled.div `
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 8px;
123
+ padding: 12px 16px;
124
+ border-bottom: 1px solid ${v.line};
125
+ `;
126
+ const SectionTitle = styled.h4 `
127
+ margin: 0;
128
+ font-size: 12.5px;
129
+ font-weight: 600;
130
+ `;
131
+ const SectionDesc = styled.p `
132
+ margin: 2px 0 0;
133
+ font-size: 11.5px;
134
+ color: ${v.muted};
135
+ `;
136
+ const SectionBody = styled.div `padding: 14px 16px;`;
137
+ export function FormSection({ title, desc, badge, children }) {
138
+ return (_jsxs(SectionWrap, { children: [_jsxs(SectionHead, { children: [_jsxs("div", { style: { minWidth: 0 }, children: [_jsx(SectionTitle, { children: title }), desc ? _jsx(SectionDesc, { children: desc }) : null] }), badge ? _jsx("span", { style: { marginLeft: "auto" }, children: badge }) : null] }), _jsx(SectionBody, { children: children })] }));
139
+ }
140
+ /** KVEditor: name/value rows for env-var-shaped maps. validateKey mirrors server
141
+ * rules so a bad name is flagged in place instead of on submit. */
142
+ const KVRows = styled.div `
143
+ display: flex;
144
+ flex-direction: column;
145
+ gap: 6px;
146
+ `;
147
+ const KVRow = styled.div `
148
+ display: grid;
149
+ grid-template-columns: minmax(0, 2fr) minmax(0, 3fr) auto;
150
+ gap: 6px;
151
+ align-items: center;
152
+ `;
153
+ const KVProblem = styled.span `
154
+ font-size: 10.5px;
155
+ color: ${v.danger};
156
+ `;
157
+ const KVRemove = styled.button `
158
+ width: 26px; height: 26px;
159
+ border-radius: 6px;
160
+ color: ${v.faint};
161
+ font-size: 14px;
162
+ line-height: 1;
163
+ &:hover { background: ${v.hover}; color: ${v.danger}; }
164
+ `;
165
+ const KVAdd = styled.button `
166
+ align-self: flex-start;
167
+ padding: 4px 8px;
168
+ border-radius: 6px;
169
+ font-size: 11.5px;
170
+ font-weight: 600;
171
+ color: ${v.muted};
172
+ &:hover { background: ${v.hover}; color: ${v.text}; }
173
+ `;
174
+ export function KVEditor({ rows, onChange, disabled, keyPlaceholder = "NAME", valuePlaceholder = "value", addLabel = "+ Add variable", secret, validateKey }) {
175
+ const set = (i, patch) => onChange(rows.map((r, j) => (j === i ? { ...r, ...patch } : r)));
176
+ return (_jsxs(KVRows, { children: [rows.map((r, i) => {
177
+ const problem = r.k && validateKey ? validateKey(r.k) : null;
178
+ return (_jsxs("div", { children: [_jsxs(KVRow, { children: [_jsx(MonoInput, { value: r.k, disabled: disabled, placeholder: keyPlaceholder, spellCheck: false, onChange: (e) => set(i, { k: e.target.value }) }), _jsx(MonoInput, { value: r.v, disabled: disabled, type: secret ? "password" : "text", placeholder: valuePlaceholder, spellCheck: false, autoComplete: secret ? "off" : undefined, onChange: (e) => set(i, { v: e.target.value }) }), _jsx(KVRemove, { type: "button", "aria-label": "Remove row", disabled: disabled, onClick: () => onChange(rows.filter((_, j) => j !== i)), children: "\u00D7" })] }), problem ? _jsxs(KVProblem, { children: [r.k, ": ", problem] }) : null] }, i));
179
+ }), _jsx(KVAdd, { type: "button", disabled: disabled, onClick: () => onChange([...rows, { k: "", v: "" }]), children: addLabel })] }));
180
+ }
181
+ /** Rows → wire map, dropping blank names and trimming keys. */
182
+ export function kvToMap(rows) {
183
+ const out = {};
184
+ for (const r of rows) {
185
+ const k = r.k.trim();
186
+ if (k)
187
+ out[k] = r.v;
188
+ }
189
+ return out;
190
+ }
191
+ /** Wire map → rows (for prefill/readback). */
192
+ export function mapToKv(m) {
193
+ return Object.entries(m ?? {}).map(([k, val]) => ({ k, v: val }));
194
+ }
195
+ export const FormActions = styled.div `
196
+ display: flex;
197
+ justify-content: flex-end;
198
+ align-items: center;
199
+ gap: 8px;
200
+ margin-top: 16px;
201
+ `;
202
+ export const InlineError = styled.div `
203
+ margin-top: 10px;
204
+ padding: 9px 12px;
205
+ border-radius: ${v.rCtl};
206
+ background: ${v.dangerBg};
207
+ color: ${v.danger};
208
+ font-size: 12px;
209
+ `;
210
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","sourceRoot":"","sources":["../../src/kit/Form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
2
+ declare const MAP: {
3
+ home: IconDefinition;
4
+ overview: IconDefinition;
5
+ products: IconDefinition;
6
+ grid: IconDefinition;
7
+ launcher: IconDefinition;
8
+ search: IconDefinition;
9
+ theme: IconDefinition;
10
+ sun: IconDefinition;
11
+ moon: IconDefinition;
12
+ system: IconDefinition;
13
+ "sign-out": IconDefinition;
14
+ menu: IconDefinition;
15
+ more: IconDefinition;
16
+ bell: IconDefinition;
17
+ docs: IconDefinition;
18
+ close: IconDefinition;
19
+ "chevron-down": IconDefinition;
20
+ "chevron-right": IconDefinition;
21
+ "chevron-left": IconDefinition;
22
+ "arrow-right": IconDefinition;
23
+ "arrow-left": IconDefinition;
24
+ external: IconDefinition;
25
+ members: IconDefinition;
26
+ team: IconDefinition;
27
+ user: IconDefinition;
28
+ organisation: IconDefinition;
29
+ role: IconDefinition;
30
+ invite: IconDefinition;
31
+ key: IconDefinition;
32
+ tokens: IconDefinition;
33
+ lock: IconDefinition;
34
+ shield: IconDefinition;
35
+ functions: IconDefinition;
36
+ build: IconDefinition;
37
+ deploys: IconDefinition;
38
+ code: IconDefinition;
39
+ logs: IconDefinition;
40
+ list: IconDefinition;
41
+ activity: IconDefinition;
42
+ settings: IconDefinition;
43
+ sliders: IconDefinition;
44
+ stats: IconDefinition;
45
+ jobs: IconDefinition;
46
+ play: IconDefinition;
47
+ sandboxes: IconDefinition;
48
+ terminal: IconDefinition;
49
+ pools: IconDefinition;
50
+ environments: IconDefinition;
51
+ workspaces: IconDefinition;
52
+ folder: IconDefinition;
53
+ "folder-open": IconDefinition;
54
+ egress: IconDefinition;
55
+ namespaces: IconDefinition;
56
+ database: IconDefinition;
57
+ pipelines: IconDefinition;
58
+ tunnels: IconDefinition;
59
+ ports: IconDefinition;
60
+ server: IconDefinition;
61
+ box: IconDefinition;
62
+ globe: IconDefinition;
63
+ git: IconDefinition;
64
+ fork: IconDefinition;
65
+ snapshot: IconDefinition;
66
+ copy: IconDefinition;
67
+ check: IconDefinition;
68
+ add: IconDefinition;
69
+ delete: IconDefinition;
70
+ edit: IconDefinition;
71
+ download: IconDefinition;
72
+ upload: IconDefinition;
73
+ file: IconDefinition;
74
+ "file-code": IconDefinition;
75
+ archive: IconDefinition;
76
+ pin: IconDefinition;
77
+ rerun: IconDefinition;
78
+ promote: IconDefinition;
79
+ stop: IconDefinition;
80
+ suspend: IconDefinition;
81
+ resume: IconDefinition;
82
+ sync: IconDefinition;
83
+ filter: IconDefinition;
84
+ clock: IconDefinition;
85
+ spinner: IconDefinition;
86
+ warn: IconDefinition;
87
+ error: IconDefinition;
88
+ info: IconDefinition;
89
+ reveal: IconDefinition;
90
+ hide: IconDefinition;
91
+ };
92
+ export type IconName = keyof typeof MAP;
93
+ export declare function extendIcons(more: Record<string, IconDefinition>): void;
94
+ export declare function Icon({ name, spin, size, style, className }: {
95
+ name: IconName | (string & {});
96
+ spin?: boolean | undefined;
97
+ size?: number | undefined;
98
+ style?: React.CSSProperties | undefined;
99
+ className?: string | undefined;
100
+ }): import("react").JSX.Element;
101
+ export {};
102
+ //# sourceMappingURL=Icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../src/kit/Icon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAoBxE,QAAA,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBiC,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,GAAG,CAAC;AAMxC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAEtE;AAKD,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IAC3D,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,+BASA"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
3
+ import { faGaugeHigh, faBolt, faRocket, faCode, faListUl, faUsers, faUserGroup, faKey, faClockRotateLeft, faGear, faMagnifyingGlass, faCircleHalfStroke, faRightFromBracket, faXmark, faChevronDown, faChevronRight, faChevronLeft, faCopy, faCheck, faPlus, faTrash, faPen, faDownload, faUpload, faFile, faFileCode, faFileZipper, faCodeBranch, faTriangleExclamation, faCircleExclamation, faCircleInfo, faGlobe, faArrowRotateRight, faArrowUpRightFromSquare, faFilter, faClock, faBox, faUser, faCircleNotch, faBars, faEllipsis, faLock, faEye, faEyeSlash, faServer, faFolder, faFolderOpen, faCircleUp, faPlay, faShieldHalved, faChartLine, faTerminal, faCubes, faLayerGroup, faThumbtack, faNetworkWired, faStop, faPause, faArrowsRotate, faCamera, faHouse, faTableCells, faDatabase, faEnvelope, faBell, faSun, faMoon, faDesktop, faArrowRight, faArrowLeft, faGrip, faSitemap, faDiagramProject, faBuilding, faIdBadge, faSliders, faBook, } from "@fortawesome/free-solid-svg-icons";
4
+ // One semantic icon map (ported pattern from the xmb kit): call sites name the
5
+ // concept, never the glyph, so swapping the underlying set is a one-file change.
6
+ // This is the union of the container-platform and functions maps plus the
7
+ // console shell's needs; product consoles add their own names via
8
+ // `extendIcons` rather than forking this file.
9
+ const MAP = {
10
+ // navigation / shell
11
+ home: faHouse, overview: faGaugeHigh, products: faTableCells, grid: faTableCells, launcher: faGrip,
12
+ search: faMagnifyingGlass, theme: faCircleHalfStroke, sun: faSun, moon: faMoon, system: faDesktop,
13
+ "sign-out": faRightFromBracket, menu: faBars, more: faEllipsis, bell: faBell, docs: faBook,
14
+ close: faXmark, "chevron-down": faChevronDown, "chevron-right": faChevronRight, "chevron-left": faChevronLeft,
15
+ "arrow-right": faArrowRight, "arrow-left": faArrowLeft, external: faArrowUpRightFromSquare,
16
+ // teams / identity
17
+ members: faUsers, team: faUserGroup, user: faUser, organisation: faBuilding, role: faIdBadge,
18
+ invite: faEnvelope, key: faKey, tokens: faKey, lock: faLock, shield: faShieldHalved,
19
+ // product nouns (generic enough to share)
20
+ functions: faBolt, build: faBolt, deploys: faRocket, code: faCode, logs: faListUl, list: faListUl,
21
+ activity: faClockRotateLeft, settings: faGear, sliders: faSliders, stats: faChartLine,
22
+ jobs: faPlay, play: faPlay, sandboxes: faTerminal, terminal: faTerminal, pools: faCubes,
23
+ environments: faLayerGroup, workspaces: faFolder, folder: faFolder, "folder-open": faFolderOpen,
24
+ egress: faShieldHalved, namespaces: faUsers, database: faDatabase, pipelines: faDiagramProject,
25
+ tunnels: faSitemap, ports: faNetworkWired, server: faServer, box: faBox, globe: faGlobe,
26
+ git: faCodeBranch, fork: faCodeBranch, snapshot: faCamera,
27
+ // actions
28
+ copy: faCopy, check: faCheck, add: faPlus, delete: faTrash, edit: faPen, download: faDownload,
29
+ upload: faUpload, file: faFile, "file-code": faFileCode, archive: faFileZipper, pin: faThumbtack,
30
+ rerun: faArrowRotateRight, promote: faCircleUp, stop: faStop, suspend: faPause, resume: faPlay,
31
+ sync: faArrowsRotate, filter: faFilter, clock: faClock, spinner: faCircleNotch,
32
+ // status
33
+ warn: faTriangleExclamation, error: faCircleExclamation, info: faCircleInfo, reveal: faEye, hide: faEyeSlash,
34
+ };
35
+ // Product consoles register extra glyphs under their own names at startup.
36
+ // Registered names are accepted by `Icon` at runtime; typed access stays on
37
+ // IconName so the shared kit never depends on a product's vocabulary.
38
+ const EXTRA = {};
39
+ export function extendIcons(more) {
40
+ Object.assign(EXTRA, more);
41
+ }
42
+ function lookup(name) {
43
+ return MAP[name] ?? EXTRA[name] ?? faCircleInfo;
44
+ }
45
+ export function Icon({ name, spin, size, style, className }) {
46
+ return (_jsx(FontAwesomeIcon, { icon: lookup(name), spin: spin, className: className, style: { width: size ?? "1em", height: size ?? "1em", ...style } }));
47
+ }
48
+ //# sourceMappingURL=Icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/kit/Icon.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function KVGrid({ items }: {
3
+ items: {
4
+ k: string;
5
+ v: ReactNode;
6
+ mono?: boolean | undefined;
7
+ }[];
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=KV.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KV.d.ts","sourceRoot":"","sources":["../../src/kit/KV.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAoBvC,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,EAAE,CAAA;CAAE,+BAWrG"}
package/dist/kit/KV.js ADDED
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment } from "react";
3
+ import styled from "styled-components";
4
+ import { v } from "../theme/tokens.js";
5
+ const Grid = styled.div `
6
+ display: grid;
7
+ grid-template-columns: minmax(110px, max-content) 1fr;
8
+ gap: 7px 14px;
9
+ font-size: 12px;
10
+ align-items: baseline;
11
+ `;
12
+ const K = styled.span `color: ${v.faint};`;
13
+ const V = styled.span `
14
+ color: ${v.text};
15
+ font-variant-numeric: tabular-nums;
16
+ min-width: 0;
17
+ word-break: break-all;
18
+ ${(p) => (p.$mono ? `font-family: ${v.mono}; font-size: 11.5px;` : "")}
19
+ `;
20
+ export function KVGrid({ items }) {
21
+ return (_jsx(Grid, { children: items.map((it) => (_jsxs(Fragment, { children: [_jsx(K, { children: it.k }), _jsx(V, { "$mono": it.mono, children: it.v ?? "—" })] }, it.k))) }));
22
+ }
23
+ //# sourceMappingURL=KV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KV.js","sourceRoot":"","sources":["../../src/kit/KV.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;CAMtB,CAAC;AAEF,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAA,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC;AAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAA6C;WACvD,CAAC,CAAC,IAAI;;;;IAIb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;CACvE,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAwE;IACpG,OAAO,CACL,KAAC,IAAI,cACF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CACjB,MAAC,QAAQ,eACP,KAAC,CAAC,cAAE,EAAE,CAAC,CAAC,GAAK,EACb,KAAC,CAAC,aAAQ,EAAE,CAAC,IAAI,YAAG,EAAE,CAAC,CAAC,IAAI,GAAG,GAAK,KAFvB,EAAE,CAAC,CAAC,CAGR,CACZ,CAAC,GACG,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface LogLine {
2
+ at?: string | undefined;
3
+ text: string;
4
+ stderr?: boolean | undefined;
5
+ }
6
+ export declare function LogSurface({ lines, height, follow, placeholder }: {
7
+ lines: LogLine[];
8
+ height?: number | undefined;
9
+ follow?: boolean | undefined;
10
+ placeholder?: string | undefined;
11
+ }): import("react").JSX.Element;
12
+ /** LogPanel: LogSurface inside a Panel with a follow toggle and status slot. */
13
+ export declare function LogPanel({ title, lines, status, height, actions, placeholder }: {
14
+ title: string;
15
+ lines: LogLine[];
16
+ status?: React.ReactNode | undefined;
17
+ height?: number | undefined;
18
+ actions?: React.ReactNode | undefined;
19
+ placeholder?: string | undefined;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=LogView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAmBD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAa,EAAE,WAAmC,EAAE,EAAE;IAChG,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,+BAgBA;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,+BAiBA"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import styled from "styled-components";
4
+ import { v } from "../theme/tokens.js";
5
+ import { PanelHead, PanelTitle, PanelActions, Panel } from "./Panel.js";
6
+ import { AppButton } from "./Button.js";
7
+ const Sur = styled.pre `
8
+ margin: 0;
9
+ padding: 12px 16px;
10
+ background: ${v.logBg};
11
+ color: ${v.logText};
12
+ font-family: ${v.mono};
13
+ font-size: 11.5px;
14
+ line-height: 1.75;
15
+ overflow: auto;
16
+ height: ${(p) => p.$h ?? 420}px;
17
+ white-space: pre-wrap;
18
+ word-break: break-word;
19
+ `;
20
+ const Ts = styled.span `color: ${v.logDim}; user-select: none;`;
21
+ const Err = styled.span `color: ${v.danger};`;
22
+ export function LogSurface({ lines, height, follow = true, placeholder = "waiting for output…" }) {
23
+ const ref = useRef(null);
24
+ useEffect(() => {
25
+ if (follow && ref.current)
26
+ ref.current.scrollTop = ref.current.scrollHeight;
27
+ }, [lines, follow]);
28
+ return (_jsxs(Sur, { ref: ref, "$h": height, children: [lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null, lines.map((l, i) => (_jsxs("div", { children: [l.at ? _jsxs(Ts, { children: [l.at, " "] }) : null, l.stderr ? _jsx(Err, { children: l.text }) : l.text] }, i)))] }));
29
+ }
30
+ /** LogPanel: LogSurface inside a Panel with a follow toggle and status slot. */
31
+ export function LogPanel({ title, lines, status, height, actions, placeholder }) {
32
+ const [follow, setFollow] = useState(true);
33
+ return (_jsxs(Panel, { children: [_jsxs(PanelHead, { children: [_jsx(PanelTitle, { children: title }), status, _jsxs(PanelActions, { children: [actions, _jsx(AppButton, { size: "xs", variant: follow ? "quiet" : "ghost", onClick: () => setFollow(!follow), children: follow ? "Following" : "Follow" })] })] }), _jsx(LogSurface, { lines: lines, height: height, follow: follow, ...(placeholder !== undefined ? { placeholder } : {}) })] }));
34
+ }
35
+ //# sourceMappingURL=LogView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { type ReactNode } from "react";
2
+ declare const sizes: {
3
+ readonly sm: 420;
4
+ readonly md: 560;
5
+ readonly lg: 760;
6
+ };
7
+ export declare function EntityModal({ title, sub, size, onClose, dismissable, children }: {
8
+ title: string;
9
+ sub?: string | undefined;
10
+ size?: keyof typeof sizes | undefined;
11
+ onClose: () => void;
12
+ /** false for one-time-secret flows: no backdrop/Esc close, explicit button only */
13
+ dismissable?: boolean | undefined;
14
+ children: ReactNode;
15
+ }): import("react").JSX.Element;
16
+ /**
17
+ * ConfirmDialog: two-step confirmation for destructive actions. Pass typedValue
18
+ * to require the operator to type the entity name (function deletes, team
19
+ * deletes) before the destructive button arms.
20
+ */
21
+ export declare function ConfirmDialog({ title, body, actionLabel, typedValue, danger, busy, extra, onConfirm, onClose }: {
22
+ title: string;
23
+ body: ReactNode;
24
+ actionLabel: string;
25
+ typedValue?: string | undefined;
26
+ danger?: boolean | undefined;
27
+ busy?: boolean | undefined;
28
+ extra?: ReactNode | undefined;
29
+ onConfirm: () => void;
30
+ onClose: () => void;
31
+ }): import("react").JSX.Element;
32
+ /**
33
+ * PromptDialog: a one-field modal for naming things (new file, rename) — the
34
+ * kit's replacement for window.prompt, which cannot be styled or validated.
35
+ */
36
+ export declare function PromptDialog({ title, body, label, initial, placeholder, actionLabel, busy, validate, onSubmit, onClose }: {
37
+ title: string;
38
+ body?: ReactNode | undefined;
39
+ label: string;
40
+ initial?: string | undefined;
41
+ placeholder?: string;
42
+ actionLabel?: string | undefined;
43
+ busy?: boolean | undefined;
44
+ /** returns why the value is invalid, or null */
45
+ validate?: ((value: string) => string | null) | undefined;
46
+ onSubmit: (value: string) => void;
47
+ onClose: () => void;
48
+ }): import("react").JSX.Element;
49
+ export {};
50
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBpE,QAAA,MAAM,KAAK;;;;CAAyC,CAAC;AAgDrD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAW,EAAE,OAAO,EAAE,WAAkB,EAAE,QAAQ,EAAE,EAAE;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAkCA;AASD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAa,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IACtH,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAqBA;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAY,EAAE,WAAW,EAAE,WAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IACrI,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BA6BA"}