@xeonr/platform-ui 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor.d.ts +2 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +6 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/kit/Button.d.ts +2 -0
- package/dist/kit/Button.d.ts.map +1 -1
- package/dist/kit/Button.js +4 -2
- package/dist/kit/Button.js.map +1 -1
- package/dist/kit/CodeEditor.d.ts +34 -0
- package/dist/kit/CodeEditor.d.ts.map +1 -0
- package/dist/kit/CodeEditor.js +96 -0
- package/dist/kit/CodeEditor.js.map +1 -0
- package/dist/kit/Combobox.d.ts +24 -0
- package/dist/kit/Combobox.d.ts.map +1 -0
- package/dist/kit/Combobox.js +91 -0
- package/dist/kit/Combobox.js.map +1 -0
- package/dist/kit/DataTable.d.ts +14 -1
- package/dist/kit/DataTable.d.ts.map +1 -1
- package/dist/kit/DataTable.js +87 -5
- package/dist/kit/DataTable.js.map +1 -1
- package/dist/kit/Drawer.d.ts +16 -0
- package/dist/kit/Drawer.d.ts.map +1 -0
- package/dist/kit/Drawer.js +72 -0
- package/dist/kit/Drawer.js.map +1 -0
- package/dist/kit/EntityHeader.d.ts +7 -2
- package/dist/kit/EntityHeader.d.ts.map +1 -1
- package/dist/kit/EntityHeader.js +9 -2
- package/dist/kit/EntityHeader.js.map +1 -1
- package/dist/kit/Icon.d.ts +20 -1
- package/dist/kit/Icon.d.ts.map +1 -1
- package/dist/kit/Icon.js +11 -5
- package/dist/kit/Icon.js.map +1 -1
- package/dist/kit/Layout.d.ts +21 -0
- package/dist/kit/Layout.d.ts.map +1 -0
- package/dist/kit/Layout.js +27 -0
- package/dist/kit/Layout.js.map +1 -0
- package/dist/kit/List.d.ts +9 -3
- package/dist/kit/List.d.ts.map +1 -1
- package/dist/kit/List.js +24 -6
- package/dist/kit/List.js.map +1 -1
- package/dist/kit/Menu.d.ts +32 -0
- package/dist/kit/Menu.d.ts.map +1 -0
- package/dist/kit/Menu.js +92 -0
- package/dist/kit/Menu.js.map +1 -0
- package/dist/kit/Text.d.ts +32 -0
- package/dist/kit/Text.d.ts.map +1 -1
- package/dist/kit/Text.js +82 -1
- package/dist/kit/Text.js.map +1 -1
- package/package.json +18 -2
package/dist/editor.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/editor.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// @xeonr/platform-ui/editor — the Monaco surface, behind its own entry point.
|
|
2
|
+
//
|
|
3
|
+
// monaco-editor and @monaco-editor/react are optional peers: a console that
|
|
4
|
+
// never shows code never installs them, and never resolves this module.
|
|
5
|
+
export { CodeEditor, defineXeonrTheme, XEONR_MONACO_THEME } from "./kit/CodeEditor.js";
|
|
6
|
+
//# sourceMappingURL=editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAsB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export { LogSurface, LogPanel, type LogLine } from "./kit/LogView.tsx";
|
|
|
16
16
|
export { KVGrid } from "./kit/KV.tsx";
|
|
17
17
|
export { SecretField, CopyIcon, Digest } from "./kit/Secret.tsx";
|
|
18
18
|
export { ToastProvider, useToast, toastError, type ToastKind } from "./kit/Toast.tsx";
|
|
19
|
-
export { Mono, Num, Hint, InlineHint, Cell, InlineLink } from "./kit/Text.tsx";
|
|
19
|
+
export { Mono, Num, Hint, InlineHint, Cell, InlineLink, Muted, Faint, InlineCode, Prose, Ago, toDate, relative, } from "./kit/Text.tsx";
|
|
20
20
|
export { RowList, ListRow, RowActions, SelectableList, Breadcrumbs } from "./kit/List.tsx";
|
|
21
21
|
export { FilterBar, FilterField, Chip, EditableChip } from "./kit/Chip.tsx";
|
|
22
22
|
export { StatGrid, StatTile, StatValue, Meter } from "./kit/Stat.tsx";
|
|
@@ -26,4 +26,8 @@ export { SearchBox } from "./kit/Search.tsx";
|
|
|
26
26
|
export { RangePicker, RANGE_PRESETS, DEFAULT_RANGE, presetMinutes, rangeBounds, rangeMinutes, describeRange, type TimeRange, type RangePreset } from "./kit/Range.tsx";
|
|
27
27
|
export { Histogram, LineChart, type HistogramBucket, type ChartSeries, type ChartTone } from "./kit/Charts.tsx";
|
|
28
28
|
export { CardGrid, ListCard, type ListCardProps } from "./kit/Card.tsx";
|
|
29
|
+
export { Stack, Row, Grid } from "./kit/Layout.tsx";
|
|
30
|
+
export { Menu, MenuItem, MenuLabel, MenuDivider } from "./kit/Menu.tsx";
|
|
31
|
+
export { Combobox, type ComboOption } from "./kit/Combobox.tsx";
|
|
32
|
+
export { Drawer } from "./kit/Drawer.tsx";
|
|
29
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIlI,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3H,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EACtE,WAAW,EAAE,WAAW,EAAE,WAAW,EACrC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,GAClD,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAItF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@ export { SecretField, CopyIcon, Digest } from "./kit/Secret.js";
|
|
|
24
24
|
export { ToastProvider, useToast, toastError } from "./kit/Toast.js";
|
|
25
25
|
// Added for the Container Platform adoption (2026-09-26): the widgets every
|
|
26
26
|
// list and detail screen grows locally, now shared.
|
|
27
|
-
export { Mono, Num, Hint, InlineHint, Cell, InlineLink } from "./kit/Text.js";
|
|
27
|
+
export { Mono, Num, Hint, InlineHint, Cell, InlineLink, Muted, Faint, InlineCode, Prose, Ago, toDate, relative, } from "./kit/Text.js";
|
|
28
28
|
export { RowList, ListRow, RowActions, SelectableList, Breadcrumbs } from "./kit/List.js";
|
|
29
29
|
export { FilterBar, FilterField, Chip, EditableChip } from "./kit/Chip.js";
|
|
30
30
|
export { StatGrid, StatTile, StatValue, Meter } from "./kit/Stat.js";
|
|
@@ -38,4 +38,12 @@ export { Histogram, LineChart } from "./kit/Charts.js";
|
|
|
38
38
|
// Added for the Dev adoption (2026-09-26): the card list three consoles had
|
|
39
39
|
// each grown their own Grid+Card pair for.
|
|
40
40
|
export { CardGrid, ListCard } from "./kit/Card.js";
|
|
41
|
+
// Added for the fer adoption (2026-09-26): the registry console's layout
|
|
42
|
+
// primitives, the overflow menu, the typeahead and the right-hand drawer.
|
|
43
|
+
// The Monaco surface is `@xeonr/platform-ui/editor` — its own entry point, so
|
|
44
|
+
// the peer stays optional.
|
|
45
|
+
export { Stack, Row, Grid } from "./kit/Layout.js";
|
|
46
|
+
export { Menu, MenuItem, MenuLabel, MenuDivider } from "./kit/Menu.js";
|
|
47
|
+
export { Combobox } from "./kit/Combobox.js";
|
|
48
|
+
export { Drawer } from "./kit/Drawer.js";
|
|
41
49
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAA8C,MAAM,0BAA2B,CAAC;AAElI,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAiB,MAAM,eAAgB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAuB,MAAM,iBAAkB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAa,MAAM,gBAAiB,CAAC;AAClG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC;AAC3H,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAoB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAkB,CAAC;AAC1C,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EACtE,WAAW,EAAE,WAAW,EAAE,WAAW,EACrC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAe,QAAQ,GAClD,MAAM,eAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAe,MAAM,oBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,qBAAsB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAwB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAgB,MAAM,kBAAmB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAkB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAkB,MAAM,gBAAiB,CAAC;AAEtF,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/kit/Button.d.ts
CHANGED
|
@@ -16,10 +16,12 @@ export interface AppButtonProps extends Omit<ComponentProps<"button">, "ref"> {
|
|
|
16
16
|
rel?: string | undefined;
|
|
17
17
|
}
|
|
18
18
|
export declare function AppButton({ variant, size, icon, loading, children, disabled, ...rest }: AppButtonProps): import("react").JSX.Element;
|
|
19
|
+
/** `$on` marks a toggled icon button — a pin, a star, a filter that is applied. */
|
|
19
20
|
export declare const IconButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "style"> & {
|
|
20
21
|
style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
21
22
|
}, {
|
|
22
23
|
$size?: number | undefined;
|
|
24
|
+
$on?: boolean | undefined;
|
|
23
25
|
}>> & string;
|
|
24
26
|
export declare const ButtonRow: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
|
|
25
27
|
style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
package/dist/kit/Button.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/kit/Button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,KAAK,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AACrD,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAuD/B,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAC3E,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,sDAAsD;IACtD,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,EAAE,OAAiB,EAAE,IAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAOvH;AAED,eAAO,MAAM,UAAU;;;YAA2B,MAAM,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/kit/Button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,KAAK,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AACrD,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAuD/B,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAC3E,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,sDAAsD;IACtD,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,EAAE,OAAiB,EAAE,IAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAOvH;AAED,mFAAmF;AACnF,eAAO,MAAM,UAAU;;;YAA2B,MAAM,GAAG,SAAS;UAAQ,OAAO,GAAG,SAAS;YAa9F,CAAC;AAEF,eAAO,MAAM,SAAS;;WAIrB,CAAC"}
|
package/dist/kit/Button.js
CHANGED
|
@@ -52,6 +52,7 @@ const Base = styled.button `
|
|
|
52
52
|
export function AppButton({ variant = "ghost", size = "sm", icon, loading, children, disabled, ...rest }) {
|
|
53
53
|
return (_jsxs(Base, { "$variant": variant, "$size": size, disabled: disabled || loading, ...rest, children: [loading ? _jsx(Icon, { name: "spinner", spin: true }) : icon ? _jsx(Icon, { name: icon }) : null, children] }));
|
|
54
54
|
}
|
|
55
|
+
/** `$on` marks a toggled icon button — a pin, a star, a filter that is applied. */
|
|
55
56
|
export const IconButton = styled.button `
|
|
56
57
|
display: inline-flex;
|
|
57
58
|
align-items: center;
|
|
@@ -59,10 +60,11 @@ export const IconButton = styled.button `
|
|
|
59
60
|
width: ${(p) => p.$size ?? 30}px;
|
|
60
61
|
height: ${(p) => p.$size ?? 30}px;
|
|
61
62
|
border-radius: ${v.rCtl};
|
|
62
|
-
color: ${v.muted};
|
|
63
|
+
color: ${(p) => (p.$on ? v.brand : v.muted)};
|
|
64
|
+
background: ${(p) => (p.$on ? v.brand12 : "transparent")};
|
|
63
65
|
border: 1px solid transparent;
|
|
64
66
|
transition: background 0.14s ease, color 0.14s ease;
|
|
65
|
-
&:hover { background: ${v.hover}; color: ${v.text}; }
|
|
67
|
+
&:hover { background: ${(p) => (p.$on ? v.brand16 : v.hover)}; color: ${(p) => (p.$on ? v.brand : v.text)}; }
|
|
66
68
|
&:active { transform: translateY(1px); }
|
|
67
69
|
`;
|
|
68
70
|
export const ButtonRow = styled.div `
|
package/dist/kit/Button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/kit/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAY,CAAC;AAKjD,MAAM,KAAK,GAAyC;IAClD,EAAE,EAAE,GAAG,CAAA,mDAAmD;IAC1D,EAAE,EAAE,GAAG,CAAA,iDAAiD;IACxD,EAAE,EAAE,GAAG,CAAA,mDAAmD;CAC3D,CAAC;AAEF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAoC;;;;;mBAK3C,CAAC,CAAC,IAAI;;;;;;IAMrB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;;;;IAIrB,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,MAAM;IACrB,GAAG,CAAA;oBACa,CAAC,CAAC,IAAI;eACX,CAAC,CAAC,OAAO;qCACa,CAAC,CAAC,OAAO;;KAEzC;IACD,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,OAAO;IACtB,GAAG,CAAA;sBACe,CAAC,CAAC,KAAK;oBACT,CAAC,CAAC,OAAO;eACd,CAAC,CAAC,IAAI;+CAC0B,CAAC,CAAC,OAAO;KACnD;IACD,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,OAAO;IACtB,GAAG,CAAA;oBACa,CAAC,CAAC,KAAK;eACZ,CAAC,CAAC,IAAI;6CACwB,CAAC,CAAC,OAAO;KACjD;IACD,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,QAAQ;IACvB,GAAG,CAAA;oBACa,CAAC,CAAC,QAAQ;eACf,CAAC,CAAC,MAAM;yEACkD,CAAC,CAAC,MAAM;KAC5E;CACJ,CAAC;AAgBF,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAkB;IACtH,OAAO,CACL,MAAC,IAAI,gBAAW,OAAO,WAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,KAAM,IAAI,aAC1E,OAAO,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,SAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,EAC3E,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/kit/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAY,CAAC;AAKjD,MAAM,KAAK,GAAyC;IAClD,EAAE,EAAE,GAAG,CAAA,mDAAmD;IAC1D,EAAE,EAAE,GAAG,CAAA,iDAAiD;IACxD,EAAE,EAAE,GAAG,CAAA,mDAAmD;CAC3D,CAAC;AAEF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAoC;;;;;mBAK3C,CAAC,CAAC,IAAI;;;;;;IAMrB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;;;;IAIrB,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,MAAM;IACrB,GAAG,CAAA;oBACa,CAAC,CAAC,IAAI;eACX,CAAC,CAAC,OAAO;qCACa,CAAC,CAAC,OAAO;;KAEzC;IACD,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,OAAO;IACtB,GAAG,CAAA;sBACe,CAAC,CAAC,KAAK;oBACT,CAAC,CAAC,OAAO;eACd,CAAC,CAAC,IAAI;+CAC0B,CAAC,CAAC,OAAO;KACnD;IACD,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,OAAO;IACtB,GAAG,CAAA;oBACa,CAAC,CAAC,KAAK;eACZ,CAAC,CAAC,IAAI;6CACwB,CAAC,CAAC,OAAO;KACjD;IACD,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,QAAQ,KAAK,QAAQ;IACvB,GAAG,CAAA;oBACa,CAAC,CAAC,QAAQ;eACf,CAAC,CAAC,MAAM;yEACkD,CAAC,CAAC,MAAM;KAC5E;CACJ,CAAC;AAgBF,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAkB;IACtH,OAAO,CACL,MAAC,IAAI,gBAAW,OAAO,WAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,KAAM,IAAI,aAC1E,OAAO,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,SAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,EAC3E,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAA2D;;;;WAIvF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;YACnB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;mBACb,CAAC,CAAC,IAAI;WACd,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;;0BAGhC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;CAE1G,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;;;;CAIlC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type EditorProps } from "@monaco-editor/react";
|
|
2
|
+
/** The theme name `CodeEditor` renders with. */
|
|
3
|
+
export declare const XEONR_MONACO_THEME = "xeonr-dark";
|
|
4
|
+
/**
|
|
5
|
+
* defineXeonrTheme registers `xeonr-dark` on the caller's monaco namespace.
|
|
6
|
+
* A console calls it once at startup, in the same module where it configures
|
|
7
|
+
* the loader with its bundled monaco:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import * as monaco from "monaco-editor";
|
|
11
|
+
* import { loader } from "@monaco-editor/react";
|
|
12
|
+
* import { defineXeonrTheme } from "@xeonr/platform-ui/editor";
|
|
13
|
+
* loader.config({ monaco });
|
|
14
|
+
* defineXeonrTheme(monaco);
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function defineXeonrTheme(monaco: {
|
|
18
|
+
editor: {
|
|
19
|
+
defineTheme: (name: string, theme: unknown) => void;
|
|
20
|
+
};
|
|
21
|
+
}): void;
|
|
22
|
+
/**
|
|
23
|
+
* CodeEditor: the shared Monaco surface. Always dark — code and log surfaces
|
|
24
|
+
* stay dark in light mode across the suite — and always fed the consumer's
|
|
25
|
+
* bundled monaco, never a CDN copy.
|
|
26
|
+
*/
|
|
27
|
+
export declare function CodeEditor({ height, language, value, onChange, readOnly, options, ...rest }: {
|
|
28
|
+
height?: number | string | undefined;
|
|
29
|
+
language?: string | undefined;
|
|
30
|
+
value: string;
|
|
31
|
+
onChange?: ((value: string) => void) | undefined;
|
|
32
|
+
readOnly?: boolean | undefined;
|
|
33
|
+
} & Omit<EditorProps, "height" | "language" | "value" | "onChange" | "theme">): import("react").JSX.Element;
|
|
34
|
+
//# sourceMappingURL=CodeEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../src/kit/CodeEditor.tsx"],"names":[],"mappings":"AAAA,OAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA4CtE,gDAAgD;AAChD,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE;QAAE,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAElH;AAiBD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,MAAY,EAAE,QAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;IAChH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,+BA8B5E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import MonacoEditor, {} from "@monaco-editor/react";
|
|
3
|
+
import styled from "styled-components";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { useTheme } from "../theme/ThemeProvider.js";
|
|
6
|
+
import { Skeleton } from "./Skeleton.js";
|
|
7
|
+
// The shared Monaco surface. It is behind its own entry point
|
|
8
|
+
// (`@xeonr/platform-ui/editor`) because monaco is a large optional peer: a
|
|
9
|
+
// console that never shows code never resolves it.
|
|
10
|
+
//
|
|
11
|
+
// `monaco-editor`'s own types are not imported here — the theme is defined
|
|
12
|
+
// through the namespace the consumer already holds, so this file does not
|
|
13
|
+
// force a second copy of monaco into the graph.
|
|
14
|
+
/** The monaco surface of the --x-log-* tokens. Registered by `defineXeonrTheme`. */
|
|
15
|
+
const XEONR_DARK = {
|
|
16
|
+
base: "vs-dark",
|
|
17
|
+
inherit: true,
|
|
18
|
+
rules: [
|
|
19
|
+
{ token: "comment", foreground: "6f6585", fontStyle: "italic" },
|
|
20
|
+
{ token: "keyword", foreground: "d8a3d7" },
|
|
21
|
+
{ token: "keyword.type", foreground: "a354a2" },
|
|
22
|
+
{ token: "type.identifier", foreground: "c6bad8" },
|
|
23
|
+
{ token: "string", foreground: "3ad29f" },
|
|
24
|
+
{ token: "number", foreground: "ffc46b" },
|
|
25
|
+
{ token: "identifier", foreground: "c6bad8" },
|
|
26
|
+
],
|
|
27
|
+
colors: {
|
|
28
|
+
"editor.background": "#100d17",
|
|
29
|
+
"editor.foreground": "#c6bad8",
|
|
30
|
+
"editorLineNumber.foreground": "#4a4259",
|
|
31
|
+
"editorLineNumber.activeForeground": "#8a8298",
|
|
32
|
+
"editor.lineHighlightBackground": "#181324",
|
|
33
|
+
"editor.selectionBackground": "#3a2458",
|
|
34
|
+
"editorIndentGuide.background1": "#221c30",
|
|
35
|
+
"editorGutter.background": "#100d17",
|
|
36
|
+
"editorWidget.background": "#17131f",
|
|
37
|
+
"editorWidget.border": "#2a2338",
|
|
38
|
+
"diffEditor.insertedTextBackground": "#1f9d6b22",
|
|
39
|
+
"diffEditor.removedTextBackground": "#c0362f22",
|
|
40
|
+
"scrollbarSlider.background": "#ffffff14",
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
/** The theme name `CodeEditor` renders with. */
|
|
44
|
+
export const XEONR_MONACO_THEME = "xeonr-dark";
|
|
45
|
+
/**
|
|
46
|
+
* defineXeonrTheme registers `xeonr-dark` on the caller's monaco namespace.
|
|
47
|
+
* A console calls it once at startup, in the same module where it configures
|
|
48
|
+
* the loader with its bundled monaco:
|
|
49
|
+
*
|
|
50
|
+
* ```ts
|
|
51
|
+
* import * as monaco from "monaco-editor";
|
|
52
|
+
* import { loader } from "@monaco-editor/react";
|
|
53
|
+
* import { defineXeonrTheme } from "@xeonr/platform-ui/editor";
|
|
54
|
+
* loader.config({ monaco });
|
|
55
|
+
* defineXeonrTheme(monaco);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export function defineXeonrTheme(monaco) {
|
|
59
|
+
monaco.editor.defineTheme(XEONR_MONACO_THEME, XEONR_DARK);
|
|
60
|
+
}
|
|
61
|
+
const Frame = styled.div `
|
|
62
|
+
height: ${(p) => (typeof p.$h === "number" ? `${p.$h}px` : p.$h)};
|
|
63
|
+
border-radius: ${v.rCtl};
|
|
64
|
+
border: 1px solid ${v.line};
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
background: ${v.logBg};
|
|
67
|
+
`;
|
|
68
|
+
const Loading = styled.div `
|
|
69
|
+
padding: 14px;
|
|
70
|
+
display: flex;
|
|
71
|
+
flex-direction: column;
|
|
72
|
+
gap: 9px;
|
|
73
|
+
`;
|
|
74
|
+
/**
|
|
75
|
+
* CodeEditor: the shared Monaco surface. Always dark — code and log surfaces
|
|
76
|
+
* stay dark in light mode across the suite — and always fed the consumer's
|
|
77
|
+
* bundled monaco, never a CDN copy.
|
|
78
|
+
*/
|
|
79
|
+
export function CodeEditor({ height = 420, language = "plaintext", value, onChange, readOnly, options, ...rest }) {
|
|
80
|
+
// The editor chrome is dark in both schemes, but the surrounding frame is
|
|
81
|
+
// themed, so re-key on the resolved scheme to force a re-measure when the
|
|
82
|
+
// page switches (monaco caches its container metrics).
|
|
83
|
+
const { resolved } = useTheme();
|
|
84
|
+
return (_jsx(Frame, { "$h": height, children: _jsx(MonacoEditor, { height: "100%", language: language, value: value, theme: XEONR_MONACO_THEME, onChange: (val) => onChange?.(val ?? ""), loading: _jsxs(Loading, { children: [_jsx(Skeleton, { "$w": "42%" }), _jsx(Skeleton, { "$w": "68%" }), _jsx(Skeleton, { "$w": "30%" }), _jsx(Skeleton, { "$w": "55%" })] }), options: {
|
|
85
|
+
...(readOnly === undefined ? {} : { readOnly }),
|
|
86
|
+
minimap: { enabled: false },
|
|
87
|
+
fontSize: 12,
|
|
88
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",
|
|
89
|
+
scrollBeyondLastLine: false,
|
|
90
|
+
renderLineHighlight: readOnly ? "none" : "line",
|
|
91
|
+
automaticLayout: true,
|
|
92
|
+
padding: { top: 10, bottom: 10 },
|
|
93
|
+
...options,
|
|
94
|
+
}, ...rest }, resolved) }));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=CodeEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../src/kit/CodeEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
package/dist/kit/DataTable.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/kit/DataTable.js
CHANGED
|
@@ -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 &&
|
|
63
|
-
|
|
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,
|
|
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
|