@xeonr/platform-ui 0.3.1 → 0.3.3

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 (57) hide show
  1. package/dist/editor.d.ts +2 -0
  2. package/dist/editor.d.ts.map +1 -0
  3. package/dist/editor.js +6 -0
  4. package/dist/editor.js.map +1 -0
  5. package/dist/index.d.ts +7 -3
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +11 -3
  8. package/dist/index.js.map +1 -1
  9. package/dist/kit/Badge.d.ts +2 -1
  10. package/dist/kit/Badge.d.ts.map +1 -1
  11. package/dist/kit/Badge.js +23 -0
  12. package/dist/kit/Badge.js.map +1 -1
  13. package/dist/kit/Blocks.d.ts +22 -2
  14. package/dist/kit/Blocks.d.ts.map +1 -1
  15. package/dist/kit/Blocks.js +108 -17
  16. package/dist/kit/Blocks.js.map +1 -1
  17. package/dist/kit/CodeEditor.d.ts +34 -0
  18. package/dist/kit/CodeEditor.d.ts.map +1 -0
  19. package/dist/kit/CodeEditor.js +96 -0
  20. package/dist/kit/CodeEditor.js.map +1 -0
  21. package/dist/kit/Combobox.d.ts +24 -0
  22. package/dist/kit/Combobox.d.ts.map +1 -0
  23. package/dist/kit/Combobox.js +91 -0
  24. package/dist/kit/Combobox.js.map +1 -0
  25. package/dist/kit/DataTable.d.ts +14 -1
  26. package/dist/kit/DataTable.d.ts.map +1 -1
  27. package/dist/kit/DataTable.js +87 -5
  28. package/dist/kit/DataTable.js.map +1 -1
  29. package/dist/kit/Drawer.d.ts +16 -0
  30. package/dist/kit/Drawer.d.ts.map +1 -0
  31. package/dist/kit/Drawer.js +72 -0
  32. package/dist/kit/Drawer.js.map +1 -0
  33. package/dist/kit/Icon.d.ts +27 -1
  34. package/dist/kit/Icon.d.ts.map +1 -1
  35. package/dist/kit/Icon.js +13 -5
  36. package/dist/kit/Icon.js.map +1 -1
  37. package/dist/kit/Layout.d.ts +21 -0
  38. package/dist/kit/Layout.d.ts.map +1 -0
  39. package/dist/kit/Layout.js +27 -0
  40. package/dist/kit/Layout.js.map +1 -0
  41. package/dist/kit/Menu.d.ts +32 -0
  42. package/dist/kit/Menu.d.ts.map +1 -0
  43. package/dist/kit/Menu.js +92 -0
  44. package/dist/kit/Menu.js.map +1 -0
  45. package/dist/kit/Secret.d.ts +10 -0
  46. package/dist/kit/Secret.d.ts.map +1 -1
  47. package/dist/kit/Secret.js +33 -0
  48. package/dist/kit/Secret.js.map +1 -1
  49. package/dist/kit/Text.d.ts +32 -0
  50. package/dist/kit/Text.d.ts.map +1 -1
  51. package/dist/kit/Text.js +82 -1
  52. package/dist/kit/Text.js.map +1 -1
  53. package/dist/theme/tokens.d.ts +2 -0
  54. package/dist/theme/tokens.d.ts.map +1 -1
  55. package/dist/theme/tokens.js +12 -0
  56. package/dist/theme/tokens.js.map +1 -1
  57. package/package.json +18 -2
@@ -0,0 +1,24 @@
1
+ import { type ReactNode } from "react";
2
+ export interface ComboOption<T> {
3
+ key: string;
4
+ value: T;
5
+ render: ReactNode;
6
+ }
7
+ /**
8
+ * Combobox: typeahead over a caller-supplied option list. The caller owns the
9
+ * query (so it can debounce and hit whichever RPC it needs) — this only owns
10
+ * the open/highlight/keyboard behaviour.
11
+ */
12
+ export declare function Combobox<T>({ value, onQueryChange, options, onPick, placeholder, label, loading, emptyNote, autoFocus }: {
13
+ value: string;
14
+ onQueryChange: (q: string) => void;
15
+ options: ComboOption<T>[];
16
+ onPick: (value: T, key: string) => void;
17
+ placeholder?: string | undefined;
18
+ label?: string | undefined;
19
+ loading?: boolean | undefined;
20
+ /** shown in place of the list when the query returns nothing */
21
+ emptyNote?: ReactNode | undefined;
22
+ autoFocus?: boolean | undefined;
23
+ }): import("react").JSX.Element;
24
+ //# sourceMappingURL=Combobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../src/kit/Combobox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAoDpE,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;IACxH,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,gEAAgE;IAChE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC,+BAmDA"}
@@ -0,0 +1,91 @@
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 { Input } from "./Form.js";
6
+ import { Icon } from "./Icon.js";
7
+ const Wrap = styled.div `position: relative;`;
8
+ const List = styled.div `
9
+ position: absolute;
10
+ top: calc(100% + 5px);
11
+ left: 0;
12
+ right: 0;
13
+ z-index: ${v.zPop};
14
+ max-height: 300px;
15
+ overflow-y: auto;
16
+ background: ${v.surface};
17
+ border: 1px solid ${v.line2};
18
+ border-radius: ${v.rCard};
19
+ box-shadow: ${v.elev};
20
+ padding: 4px;
21
+ `;
22
+ const Option = styled.button `
23
+ display: flex;
24
+ align-items: center;
25
+ gap: 8px;
26
+ width: 100%;
27
+ text-align: left;
28
+ padding: 7px 9px;
29
+ border-radius: 7px;
30
+ font-size: 12px;
31
+ color: ${v.text};
32
+ background: ${(p) => (p.$on ? v.brand12 : "transparent")};
33
+ &:hover { background: ${v.hover}; }
34
+ `;
35
+ const Note = styled.div `
36
+ padding: 9px 10px;
37
+ font-size: 11.5px;
38
+ color: ${v.faint};
39
+ `;
40
+ const Spin = styled.span `
41
+ position: absolute;
42
+ right: 10px;
43
+ top: 50%;
44
+ transform: translateY(-50%);
45
+ color: ${v.faint};
46
+ font-size: 11px;
47
+ `;
48
+ /**
49
+ * Combobox: typeahead over a caller-supplied option list. The caller owns the
50
+ * query (so it can debounce and hit whichever RPC it needs) — this only owns
51
+ * the open/highlight/keyboard behaviour.
52
+ */
53
+ export function Combobox({ value, onQueryChange, options, onPick, placeholder, label, loading, emptyNote, autoFocus }) {
54
+ const [open, setOpen] = useState(false);
55
+ const [active, setActive] = useState(0);
56
+ const ref = useRef(null);
57
+ useEffect(() => { setActive(0); }, [options]);
58
+ useEffect(() => {
59
+ if (!open)
60
+ return;
61
+ const onDown = (e) => { if (!ref.current?.contains(e.target))
62
+ setOpen(false); };
63
+ document.addEventListener("mousedown", onDown);
64
+ return () => document.removeEventListener("mousedown", onDown);
65
+ }, [open]);
66
+ const pick = (i) => {
67
+ const opt = options[i];
68
+ if (!opt)
69
+ return;
70
+ onPick(opt.value, opt.key);
71
+ setOpen(false);
72
+ };
73
+ return (_jsxs(Wrap, { ref: ref, children: [_jsx(Input, { value: value, autoFocus: autoFocus, placeholder: placeholder, "aria-label": label ?? placeholder, autoComplete: "off", onChange: (e) => { onQueryChange(e.target.value); setOpen(true); }, onFocus: () => setOpen(true), onKeyDown: (e) => {
74
+ if (e.key === "ArrowDown") {
75
+ e.preventDefault();
76
+ setOpen(true);
77
+ setActive((a) => Math.min(a + 1, options.length - 1));
78
+ }
79
+ else if (e.key === "ArrowUp") {
80
+ e.preventDefault();
81
+ setActive((a) => Math.max(a - 1, 0));
82
+ }
83
+ else if (e.key === "Enter" && open && options.length) {
84
+ e.preventDefault();
85
+ pick(active);
86
+ }
87
+ else if (e.key === "Escape")
88
+ setOpen(false);
89
+ } }), loading ? _jsx(Spin, { children: _jsx(Icon, { name: "spinner", spin: true }) }) : null, open && (options.length > 0 || emptyNote) ? (_jsxs(List, { role: "listbox", children: [options.map((o, i) => (_jsx(Option, { role: "option", "aria-selected": i === active, "$on": i === active, onMouseEnter: () => setActive(i), onClick: () => pick(i), children: o.render }, o.key))), options.length === 0 && emptyNote ? _jsx(Note, { children: emptyNote }) : null] })) : null] }));
90
+ }
91
+ //# sourceMappingURL=Combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.js","sourceRoot":"","sources":["../../src/kit/Combobox.tsx"],"names":[],"mappings":"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"}
@@ -7,8 +7,10 @@ export interface Column<T> {
7
7
  align?: "left" | "right" | undefined;
8
8
  /** hide below this viewport width (px) */
9
9
  hideBelow?: number | undefined;
10
+ /** sortable when supplied — returns the value this column compares on */
11
+ sortBy?: ((row: T) => string | number | bigint | undefined) | undefined;
10
12
  }
11
- export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail }: {
13
+ export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail, search, searchPlaceholder, toolbar, pageSize, defaultSort, }: {
12
14
  columns: Column<T>[];
13
15
  rows: T[] | undefined;
14
16
  rowKey: (row: T) => string;
@@ -25,5 +27,16 @@ export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonR
25
27
  hideHead?: boolean | undefined;
26
28
  /** an expanded row under this one (a log line's attributes); null/undefined for none — the caller keeps the open state */
27
29
  detail?: ((row: T) => ReactNode) | undefined;
30
+ /** enables the in-table filter box; returns the haystack for one row */
31
+ search?: ((row: T) => string) | undefined;
32
+ searchPlaceholder?: string | undefined;
33
+ /** extra controls in the toolbar band, right of the filter */
34
+ toolbar?: ReactNode | undefined;
35
+ /** client-side pagination; omit for "show everything" */
36
+ pageSize?: number | undefined;
37
+ defaultSort?: {
38
+ key: string;
39
+ dir?: "asc" | "desc" | undefined;
40
+ } | undefined;
28
41
  }): import("react").JSX.Element;
29
42
  //# sourceMappingURL=DataTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjD,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AA4DD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IAC1J,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5D,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,0HAA0H;IAC1H,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;CAC9C,+BAmDA"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AASpE,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yEAAyE;IACzE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CACzE;AAqHD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAA6B,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,GACjG,EAAE;IACD,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5D,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,0HAA0H;IAC1H,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC7C,wEAAwE;IACxE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,8DAA8D;IAC9D,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;CAC7E,+BAkIA"}
@@ -1,10 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Fragment } from "react";
2
+ import { Fragment, useMemo, useState } from "react";
3
3
  import styled, { css } from "styled-components";
4
4
  import { useNavigate } from "react-router-dom";
5
5
  import { v } from "../theme/tokens.js";
6
6
  import { Panel } from "./Panel.js";
7
7
  import { Skeleton, SkeletonRow } from "./Skeleton.js";
8
+ import { Icon } from "./Icon.js";
9
+ import { Input } from "./Form.js";
8
10
  const Table = styled.table `
9
11
  border-collapse: collapse;
10
12
  width: 100%;
@@ -21,7 +23,9 @@ const Th = styled.th `
21
23
  border-bottom: 1px solid ${v.line};
22
24
  padding: 9px 16px;
23
25
  white-space: nowrap;
26
+ ${(p) => p.$sortable && css `cursor: pointer; user-select: none; &:hover { color: ${v.text}; }`}
24
27
  ${(p) => p.$hide && css `@media (max-width: ${p.$hide}px) { display: none; }`}
28
+ svg { margin-left: 5px; opacity: 0.8; font-size: 9px; }
25
29
  `;
26
30
  const Td = styled.td `
27
31
  text-align: ${(p) => p.$align ?? "left"};
@@ -46,6 +50,55 @@ const FootRow = styled.div `
46
50
  border-top: 1px solid ${v.line};
47
51
  `;
48
52
  const Scroll = styled.div `overflow-x: auto;`;
53
+ const Toolbar = styled.div `
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 10px;
57
+ padding: 10px 12px;
58
+ border-bottom: 1px solid ${v.line};
59
+ `;
60
+ const SearchWrap = styled.div `
61
+ position: relative;
62
+ flex: 1;
63
+ max-width: 320px;
64
+ svg { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); color: ${v.faint}; font-size: 11px; }
65
+ input { padding-left: 29px; height: 30px; }
66
+ `;
67
+ const ToolbarEnd = styled.div `
68
+ margin-left: auto;
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 8px;
72
+ `;
73
+ const Pager = styled.div `
74
+ margin-left: auto;
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 4px;
78
+ `;
79
+ const PageCount = styled.span `margin-right: 6px;`;
80
+ const PageBtn = styled.button `
81
+ min-width: 26px;
82
+ height: 26px;
83
+ padding: 0 7px;
84
+ border-radius: 6px;
85
+ font-size: 11.5px;
86
+ font-weight: 600;
87
+ color: ${(p) => (p.$on ? v.text : v.muted)};
88
+ background: ${(p) => (p.$on ? v.brand12 : "transparent")};
89
+ &:hover:not(:disabled) { background: ${v.hover}; color: ${v.text}; }
90
+ &:disabled { opacity: 0.4; cursor: not-allowed; }
91
+ `;
92
+ /** undefined sorts last in either direction; strings compare by locale. */
93
+ function cmp(a, b) {
94
+ if (a === undefined)
95
+ return b === undefined ? 0 : 1;
96
+ if (b === undefined)
97
+ return -1;
98
+ if (typeof a === "string" || typeof b === "string")
99
+ return String(a).localeCompare(String(b));
100
+ return a < b ? -1 : a > b ? 1 : 0;
101
+ }
49
102
  const Bare = styled.div `
50
103
  table td { padding: 7px 12px; }
51
104
  table th { padding: 7px 12px; background: transparent; }
@@ -55,16 +108,45 @@ const DetailTd = styled.td `
55
108
  background: ${v.surface2};
56
109
  border-bottom: 1px solid ${v.line};
57
110
  `;
58
- export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail }) {
111
+ export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail, search, searchPlaceholder = "Filter…", toolbar, pageSize, defaultSort, }) {
59
112
  const navigate = useNavigate();
60
113
  const Wrap = variant === "bare" ? Bare : Panel;
114
+ const [q, setQ] = useState("");
115
+ const [page, setPage] = useState(0);
116
+ const [sort, setSort] = useState(defaultSort ? { key: defaultSort.key, dir: defaultSort.dir ?? "asc" } : null);
117
+ const filtered = useMemo(() => {
118
+ let out = rows ?? [];
119
+ if (search && q.trim()) {
120
+ const needle = q.trim().toLowerCase();
121
+ out = out.filter((r) => search(r).toLowerCase().includes(needle));
122
+ }
123
+ if (sort) {
124
+ const col = columns.find((c) => c.key === sort.key);
125
+ if (col?.sortBy) {
126
+ const by = col.sortBy;
127
+ out = [...out].sort((a, b) => (sort.dir === "asc" ? 1 : -1) * cmp(by(a), by(b)));
128
+ }
129
+ }
130
+ return out;
131
+ }, [rows, q, search, sort, columns]);
132
+ const pages = pageSize ? Math.max(1, Math.ceil(filtered.length / pageSize)) : 1;
133
+ // A filter that shrinks the result set below the current page would leave the
134
+ // viewer on an empty page; clamp rather than reset, so paging stays stable.
135
+ const current = Math.min(page, pages - 1);
136
+ const visible = pageSize ? filtered.slice(current * pageSize, current * pageSize + pageSize) : filtered;
61
137
  const showSkeleton = loading && (!rows || rows.length === 0);
62
- const isEmpty = !loading && rows && rows.length === 0;
63
- return (_jsxs(Wrap, { children: [_jsx(Scroll, { children: _jsxs(Table, { children: [hideHead ? null : (_jsx("thead", { children: _jsx("tr", { children: columns.map((c) => _jsx(Th, { "$align": c.align, "$hide": c.hideBelow, style: c.width ? { width: c.width } : undefined, children: c.head }, c.key)) }) })), !showSkeleton && !isEmpty ? (_jsx("tbody", { style: loading ? { opacity: 0.55 } : undefined, children: (rows ?? []).map((r) => {
138
+ const isEmpty = !loading && rows && filtered.length === 0;
139
+ const showToolbar = !!search || !!toolbar;
140
+ const toggleSort = (c) => {
141
+ if (!c.sortBy)
142
+ return;
143
+ setSort((s) => (s?.key === c.key ? (s.dir === "asc" ? { key: c.key, dir: "desc" } : null) : { key: c.key, dir: "asc" }));
144
+ };
145
+ return (_jsxs(Wrap, { children: [showToolbar ? (_jsxs(Toolbar, { children: [search ? (_jsxs(SearchWrap, { children: [_jsx(Icon, { name: "search" }), _jsx(Input, { value: q, placeholder: searchPlaceholder, onChange: (e) => { setQ(e.target.value); setPage(0); }, "aria-label": searchPlaceholder })] })) : null, toolbar ? _jsx(ToolbarEnd, { children: toolbar }) : null] })) : null, _jsx(Scroll, { children: _jsxs(Table, { children: [hideHead ? null : (_jsx("thead", { children: _jsx("tr", { children: columns.map((c) => (_jsxs(Th, { "$align": c.align, "$hide": c.hideBelow, "$sortable": !!c.sortBy, onClick: () => toggleSort(c), style: c.width ? { width: c.width } : undefined, children: [c.head, c.sortBy && sort?.key === c.key ? _jsx(Icon, { name: sort.dir === "asc" ? "chevron-up" : "chevron-down" }) : null] }, c.key))) }) })), !showSkeleton && !isEmpty ? (_jsx("tbody", { style: loading ? { opacity: 0.55 } : undefined, children: visible.map((r) => {
64
146
  const href = rowHref?.(r) ?? null;
65
147
  const click = !!href || !!onRowClick;
66
148
  const extra = detail?.(r);
67
149
  return (_jsxs(Fragment, { children: [_jsx(Tr, { "$click": click, "$mark": severity?.(r) ?? null, onClick: click ? () => (href ? navigate(href) : onRowClick?.(r)) : undefined, children: columns.map((c) => _jsx(Td, { "$align": c.align, "$hide": c.hideBelow, children: c.render(r) }, c.key)) }), extra ? _jsx("tr", { children: _jsx(DetailTd, { colSpan: columns.length, children: extra }) }) : null] }, rowKey(r)));
68
- }) })) : null] }) }), showSkeleton ? (_jsx("div", { children: Array.from({ length: skeletonRows }).map((_, i) => (_jsxs(SkeletonRow, { children: [_jsx(Skeleton, { "$w": "26%" }), _jsx(Skeleton, { "$w": "12%" }), _jsx(Skeleton, { "$w": "8%" }), _jsx(Skeleton, { "$w": "16%" })] }, i))) })) : null, isEmpty ? _jsx(Fragment, { children: empty }) : null, footer && !showSkeleton && !isEmpty ? _jsx(FootRow, { children: footer }) : null] }));
150
+ }) })) : null] }) }), showSkeleton ? (_jsx("div", { children: Array.from({ length: skeletonRows }).map((_, i) => (_jsxs(SkeletonRow, { children: [_jsx(Skeleton, { "$w": "26%" }), _jsx(Skeleton, { "$w": "12%" }), _jsx(Skeleton, { "$w": "8%" }), _jsx(Skeleton, { "$w": "16%" })] }, i))) })) : null, isEmpty ? _jsx(Fragment, { children: empty }) : null, !showSkeleton && !isEmpty && (footer || pages > 1) ? (_jsxs(FootRow, { children: [footer, pages > 1 ? (_jsxs(Pager, { children: [_jsxs(PageCount, { children: [current * pageSize + 1, "\u2013", Math.min(filtered.length, (current + 1) * pageSize), " of ", filtered.length] }), _jsx(PageBtn, { onClick: () => setPage(current - 1), disabled: current === 0, "aria-label": "Previous page", children: _jsx(Icon, { name: "chevron-left" }) }), _jsx(PageBtn, { onClick: () => setPage(current + 1), disabled: current >= pages - 1, "aria-label": "Next page", children: _jsx(Icon, { name: "chevron-right" }) })] })) : null] })) : null] }));
69
151
  }
70
152
  //# sourceMappingURL=DataTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ReactNode } from "react";
2
+ /**
3
+ * Drawer: the right-hand working surface for a task that needs room but not a
4
+ * route — an API playground, a record's detail, a long form beside the list it
5
+ * came from. Modal: the backdrop closes it, so does Escape.
6
+ */
7
+ export declare function Drawer({ open, title, sub, width, onClose, children }: {
8
+ open: boolean;
9
+ title: string;
10
+ sub?: string | undefined;
11
+ /** the drawer's width in px; it never exceeds the viewport (default 720) */
12
+ width?: number | undefined;
13
+ onClose: () => void;
14
+ children: ReactNode;
15
+ }): import("react").JSX.Element | null;
16
+ //# sourceMappingURL=Drawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../src/kit/Drawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA4DlD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAC3E,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB,sCA0BA"}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import styled, { keyframes } from "styled-components";
4
+ import { v } from "../theme/tokens.js";
5
+ import { Icon } from "./Icon.js";
6
+ import { IconButton } from "./Button.js";
7
+ const fadeIn = keyframes `from { opacity: 0; }`;
8
+ const slideIn = keyframes `from { transform: translateX(24px); opacity: 0; }`;
9
+ const Backdrop = styled.div `
10
+ position: fixed;
11
+ inset: 0;
12
+ z-index: ${v.zModal};
13
+ background: ${v.scrim};
14
+ backdrop-filter: blur(2px);
15
+ animation: ${fadeIn} 0.14s ease;
16
+ `;
17
+ const Panel = styled.aside `
18
+ position: fixed;
19
+ top: 0;
20
+ right: 0;
21
+ bottom: 0;
22
+ z-index: calc(${v.zModal} + 1);
23
+ width: min(${(p) => p.$width}px, 100vw);
24
+ display: flex;
25
+ flex-direction: column;
26
+ background: ${v.surface};
27
+ border-left: 1px solid ${v.line2};
28
+ box-shadow: ${v.elev};
29
+ animation: ${slideIn} 0.18s cubic-bezier(0.2, 0.7, 0.3, 1);
30
+ `;
31
+ const Head = styled.header `
32
+ display: flex;
33
+ align-items: center;
34
+ gap: 10px;
35
+ padding: 14px 16px 12px;
36
+ border-bottom: 1px solid ${v.line};
37
+ flex: none;
38
+ `;
39
+ const Title = styled.h3 `
40
+ margin: 0;
41
+ font-size: 14px;
42
+ font-weight: 600;
43
+ `;
44
+ const Sub = styled.p `
45
+ margin: 1px 0 0;
46
+ font-size: 11.5px;
47
+ color: ${v.muted};
48
+ `;
49
+ const Body = styled.div `
50
+ padding: 16px;
51
+ overflow-y: auto;
52
+ flex: 1;
53
+ `;
54
+ /**
55
+ * Drawer: the right-hand working surface for a task that needs room but not a
56
+ * route — an API playground, a record's detail, a long form beside the list it
57
+ * came from. Modal: the backdrop closes it, so does Escape.
58
+ */
59
+ export function Drawer({ open, title, sub, width = 720, onClose, children }) {
60
+ useEffect(() => {
61
+ if (!open)
62
+ return;
63
+ const onKey = (e) => { if (e.key === "Escape")
64
+ onClose(); };
65
+ document.addEventListener("keydown", onKey);
66
+ return () => document.removeEventListener("keydown", onKey);
67
+ }, [open, onClose]);
68
+ if (!open)
69
+ return null;
70
+ return (_jsxs(_Fragment, { children: [_jsx(Backdrop, { onClick: onClose }), _jsxs(Panel, { "$width": width, role: "dialog", "aria-modal": "true", "aria-label": title, children: [_jsxs(Head, { children: [_jsxs("div", { style: { minWidth: 0 }, children: [_jsx(Title, { children: title }), sub ? _jsx(Sub, { children: sub }) : null] }), _jsx(IconButton, { onClick: onClose, "aria-label": "Close", style: { marginLeft: "auto" }, children: _jsx(Icon, { name: "close" }) })] }), _jsx(Body, { children: children })] })] }));
71
+ }
72
+ //# sourceMappingURL=Drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../src/kit/Drawer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAClD,OAAO,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAc,CAAC;AAE1C,MAAM,MAAM,GAAG,SAAS,CAAA,sBAAsB,CAAC;AAC/C,MAAM,OAAO,GAAG,SAAS,CAAA,mDAAmD,CAAC;AAE7E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;;aAGd,CAAC,CAAC,MAAM;gBACL,CAAC,CAAC,KAAK;;eAER,MAAM;CACpB,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAoB;;;;;kBAK5B,CAAC,CAAC,MAAM;eACX,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;;;gBAGd,CAAC,CAAC,OAAO;2BACE,CAAC,CAAC,KAAK;gBAClB,CAAC,CAAC,IAAI;eACP,OAAO;CACrB,CAAC;AAEF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;6BAKG,CAAC,CAAC,IAAI;;CAElC,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAA;;;;CAItB,CAAC;AAEF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAA;;;WAGT,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;;;;CAItB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,EAQxE;IACC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,CACL,8BACE,KAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,GAAI,EAC9B,MAAC,KAAK,cAAS,KAAK,EAAE,IAAI,EAAC,QAAQ,gBAAY,MAAM,gBAAa,KAAK,aACrE,MAAC,IAAI,eACH,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,aACzB,KAAC,KAAK,cAAE,KAAK,GAAS,EACrB,GAAG,CAAC,CAAC,CAAC,KAAC,GAAG,cAAE,GAAG,GAAO,CAAC,CAAC,CAAC,IAAI,IAC1B,EACN,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,gBAAa,OAAO,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,YAC5E,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACV,IACR,EACP,KAAC,IAAI,cAAE,QAAQ,GAAQ,IACjB,IACP,CACJ,CAAC;AACJ,CAAC"}
@@ -17,6 +17,7 @@ declare const MAP: {
17
17
  docs: IconDefinition;
18
18
  close: IconDefinition;
19
19
  "chevron-down": IconDefinition;
20
+ "chevron-up": IconDefinition;
20
21
  "chevron-right": IconDefinition;
21
22
  "chevron-left": IconDefinition;
22
23
  "arrow-right": IconDefinition;
@@ -42,6 +43,11 @@ declare const MAP: {
42
43
  palette: IconDefinition;
43
44
  audit: IconDefinition;
44
45
  policy: IconDefinition;
46
+ "lock-open": IconDefinition;
47
+ admin: IconDefinition;
48
+ bot: IconDefinition;
49
+ users: IconDefinition;
50
+ org: IconDefinition;
45
51
  functions: IconDefinition;
46
52
  build: IconDefinition;
47
53
  deploys: IconDefinition;
@@ -73,6 +79,23 @@ declare const MAP: {
73
79
  git: IconDefinition;
74
80
  fork: IconDefinition;
75
81
  snapshot: IconDefinition;
82
+ projects: IconDefinition;
83
+ versions: IconDefinition;
84
+ schema: IconDefinition;
85
+ sql: IconDefinition;
86
+ approvals: IconDefinition;
87
+ drift: IconDefinition;
88
+ migrations: IconDefinition;
89
+ module: IconDefinition;
90
+ modules: IconDefinition;
91
+ plugin: IconDefinition;
92
+ label: IconDefinition;
93
+ labels: IconDefinition;
94
+ commit: IconDefinition;
95
+ commits: IconDefinition;
96
+ compare: IconDefinition;
97
+ swap: IconDefinition;
98
+ link: IconDefinition;
76
99
  copy: IconDefinition;
77
100
  check: IconDefinition;
78
101
  add: IconDefinition;
@@ -96,17 +119,20 @@ declare const MAP: {
96
119
  warn: IconDefinition;
97
120
  error: IconDefinition;
98
121
  info: IconDefinition;
122
+ "check-circle": IconDefinition;
99
123
  reveal: IconDefinition;
100
124
  hide: IconDefinition;
101
125
  };
102
126
  export type IconName = keyof typeof MAP;
103
127
  export declare function extendIcons(more: Record<string, IconDefinition>): void;
104
- export declare function Icon({ name, spin, size, style, className }: {
128
+ export declare function Icon({ name, spin, size, style, className, fixedWidth }: {
105
129
  name: IconName | (string & {});
106
130
  spin?: boolean | undefined;
107
131
  size?: number | undefined;
108
132
  style?: React.CSSProperties | undefined;
109
133
  className?: string | undefined;
134
+ /** reserve one glyph width, so a column of rows with mixed icons lines up */
135
+ fixedWidth?: boolean | undefined;
110
136
  }): import("react").JSX.Element;
111
137
  export {};
112
138
  //# sourceMappingURL=Icon.d.ts.map
@@ -1 +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;AAqBxE,QAAA,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BiC,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"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../src/kit/Icon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAwBxE,QAAA,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCiC,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,UAAU,EAAE,EAAE;IACvE,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;IAC/B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC,+BAUA"}
package/dist/kit/Icon.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
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, faPalette, faPlug, faFingerprint, faAddressCard, faScaleBalanced, } from "@fortawesome/free-solid-svg-icons";
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, faPalette, faPlug, faFingerprint, faAddressCard, faScaleBalanced, faTableColumns, faStamp, faCube, faPuzzlePiece, faCodeCompare, faArrowRightArrowLeft, faLink, faRobot, faUserShield, faCircleCheck, faTags, faTag, faLockOpen, faChevronUp, } from "@fortawesome/free-solid-svg-icons";
4
4
  // One semantic icon map (ported pattern from the xmb kit): call sites name the
5
5
  // concept, never the glyph, so swapping the underlying set is a one-file change.
6
6
  // This is the union of the container-platform and functions maps plus the
@@ -11,7 +11,8 @@ const MAP = {
11
11
  home: faHouse, overview: faGaugeHigh, products: faTableCells, grid: faTableCells, launcher: faGrip,
12
12
  search: faMagnifyingGlass, theme: faCircleHalfStroke, sun: faSun, moon: faMoon, system: faDesktop,
13
13
  "sign-out": faRightFromBracket, menu: faBars, more: faEllipsis, bell: faBell, docs: faBook,
14
- close: faXmark, "chevron-down": faChevronDown, "chevron-right": faChevronRight, "chevron-left": faChevronLeft,
14
+ close: faXmark, "chevron-down": faChevronDown, "chevron-up": faChevronUp,
15
+ "chevron-right": faChevronRight, "chevron-left": faChevronLeft,
15
16
  "arrow-right": faArrowRight, "arrow-left": faArrowLeft, external: faArrowUpRightFromSquare,
16
17
  // teams / identity
17
18
  members: faUsers, team: faUserGroup, user: faUser, organisation: faBuilding, role: faIdBadge,
@@ -19,6 +20,7 @@ const MAP = {
19
20
  email: faEnvelope, passkey: faFingerprint, profile: faAddressCard, applications: faLayerGroup,
20
21
  clients: faPlug, integrations: faPlug, branding: faPalette, palette: faPalette,
21
22
  audit: faClockRotateLeft, policy: faScaleBalanced,
23
+ "lock-open": faLockOpen, admin: faUserShield, bot: faRobot, users: faUsers, org: faBuilding,
22
24
  // product nouns (generic enough to share)
23
25
  functions: faBolt, build: faBolt, deploys: faRocket, code: faCode, logs: faListUl, list: faListUl,
24
26
  activity: faClockRotateLeft, settings: faGear, sliders: faSliders, stats: faChartLine,
@@ -27,13 +29,19 @@ const MAP = {
27
29
  egress: faShieldHalved, namespaces: faUsers, database: faDatabase, pipelines: faDiagramProject,
28
30
  tunnels: faSitemap, ports: faNetworkWired, server: faServer, box: faBox, globe: faGlobe,
29
31
  git: faCodeBranch, fork: faCodeBranch, snapshot: faCamera,
32
+ projects: faFolder, versions: faCodeBranch, schema: faTableColumns, sql: faFileCode,
33
+ approvals: faStamp, drift: faTriangleExclamation, migrations: faLayerGroup,
34
+ module: faCube, modules: faCubes, plugin: faPuzzlePiece, label: faTag, labels: faTags,
35
+ commit: faCodeBranch, commits: faCodeBranch, compare: faCodeCompare,
36
+ swap: faArrowRightArrowLeft, link: faLink,
30
37
  // actions
31
38
  copy: faCopy, check: faCheck, add: faPlus, delete: faTrash, edit: faPen, download: faDownload,
32
39
  upload: faUpload, file: faFile, "file-code": faFileCode, archive: faFileZipper, pin: faThumbtack,
33
40
  rerun: faArrowRotateRight, promote: faCircleUp, stop: faStop, suspend: faPause, resume: faPlay,
34
41
  sync: faArrowsRotate, filter: faFilter, clock: faClock, spinner: faCircleNotch,
35
42
  // status
36
- warn: faTriangleExclamation, error: faCircleExclamation, info: faCircleInfo, reveal: faEye, hide: faEyeSlash,
43
+ warn: faTriangleExclamation, error: faCircleExclamation, info: faCircleInfo,
44
+ "check-circle": faCircleCheck, reveal: faEye, hide: faEyeSlash,
37
45
  };
38
46
  // Product consoles register extra glyphs under their own names at startup.
39
47
  // Registered names are accepted by `Icon` at runtime; typed access stays on
@@ -45,7 +53,7 @@ export function extendIcons(more) {
45
53
  function lookup(name) {
46
54
  return MAP[name] ?? EXTRA[name] ?? faCircleInfo;
47
55
  }
48
- export function Icon({ name, spin, size, style, className }) {
49
- return (_jsx(FontAwesomeIcon, { icon: lookup(name), spin: spin, className: className, style: { width: size ?? "1em", height: size ?? "1em", ...style } }));
56
+ export function Icon({ name, spin, size, style, className, fixedWidth }) {
57
+ return (_jsx(FontAwesomeIcon, { icon: lookup(name), spin: spin, fixedWidth: fixedWidth, className: className, style: { width: size ?? "1em", height: size ?? "1em", ...style } }));
50
58
  }
51
59
  //# sourceMappingURL=Icon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/kit/Icon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EACL,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAC5E,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EACpF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC9E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EACpF,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EACrF,wBAAwB,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EACjF,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EACnF,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EACnF,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAChF,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EACnF,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAC7E,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,GACjE,MAAM,mCAAmC,CAAC;AAE3C,+EAA+E;AAC/E,iFAAiF;AACjF,0EAA0E;AAC1E,kEAAkE;AAClE,+CAA+C;AAC/C,MAAM,GAAG,GAAG;IACV,qBAAqB;IACrB,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM;IAClG,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IACjG,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAC1F,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa;IAC7G,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,wBAAwB;IAC1F,mBAAmB;IACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS;IAC5F,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;IACnF,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY;IAC7F,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;IAC9E,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe;IACjD,0CAA0C;IAC1C,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ;IACjG,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW;IACrF,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO;IACvF,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY;IAC/F,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB;IAC9F,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IACvF,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ;IACzD,UAAU;IACV,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU;IAC7F,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW;IAChG,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAC9F,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;IAC9E,SAAS;IACT,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU;CACpE,CAAC;AAI3C,2EAA2E;AAC3E,4EAA4E;AAC5E,sEAAsE;AACtE,MAAM,KAAK,GAAmC,EAAE,CAAC;AACjD,MAAM,UAAU,WAAW,CAAC,IAAoC;IAC9D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AACD,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAQ,GAAsC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAMxD;IACC,OAAO,CACL,KAAC,eAAe,IACd,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,EAAE,GAAG,KAAK,EAAE,GAChE,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/kit/Icon.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** Stack: children in a column, evenly spaced. `$gap` in px (default 14). */
2
+ export declare const Stack: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
3
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
4
+ }, {
5
+ $gap?: number | undefined;
6
+ }>> & string;
7
+ /** Row: children on one line, centred, wrapping unless `$wrap={false}`. */
8
+ export declare const Row: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
9
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
10
+ }, {
11
+ $gap?: number | undefined;
12
+ $wrap?: boolean | undefined;
13
+ }>> & string;
14
+ /** Grid: auto-filling card grid; `$min` is the narrowest a card may get. */
15
+ export declare const Grid: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
16
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
17
+ }, {
18
+ $min?: number | undefined;
19
+ $gap?: number | undefined;
20
+ }>> & string;
21
+ //# sourceMappingURL=Layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../src/kit/Layout.tsx"],"names":[],"mappings":"AAOA,6EAA6E;AAC7E,eAAO,MAAM,KAAK;;;WAAuB,MAAM,GAAG,SAAS;YAK1D,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,GAAG;;;WAAuB,MAAM,GAAG,SAAS;YAAU,OAAO,GAAG,SAAS;YAMrF,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,IAAI;;;WAAuB,MAAM,GAAG,SAAS;WAAS,MAAM,GAAG,SAAS;YAIpF,CAAC"}