@xeonr/platform-ui 0.2.5 → 0.3.1
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/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -5
- package/dist/index.js.map +1 -1
- package/dist/kit/Card.d.ts +44 -0
- package/dist/kit/Card.d.ts.map +1 -0
- package/dist/kit/Card.js +95 -0
- package/dist/kit/Card.js.map +1 -0
- package/dist/kit/Charts.d.ts +44 -0
- package/dist/kit/Charts.d.ts.map +1 -0
- package/dist/kit/Charts.js +164 -0
- package/dist/kit/Charts.js.map +1 -0
- package/dist/kit/DataTable.d.ts +3 -1
- package/dist/kit/DataTable.d.ts.map +1 -1
- package/dist/kit/DataTable.js +8 -2
- package/dist/kit/DataTable.js.map +1 -1
- package/dist/kit/Facet.d.ts +37 -0
- package/dist/kit/Facet.d.ts.map +1 -0
- package/dist/kit/Facet.js +126 -0
- package/dist/kit/Facet.js.map +1 -0
- package/dist/kit/Form.d.ts +8 -0
- package/dist/kit/Form.d.ts.map +1 -1
- package/dist/kit/Form.js +17 -0
- package/dist/kit/Form.js.map +1 -1
- package/dist/kit/Icon.d.ts +10 -0
- package/dist/kit/Icon.d.ts.map +1 -1
- package/dist/kit/Icon.js +4 -1
- package/dist/kit/Icon.js.map +1 -1
- package/dist/kit/Range.d.ts +30 -0
- package/dist/kit/Range.d.ts.map +1 -0
- package/dist/kit/Range.js +137 -0
- package/dist/kit/Range.js.map +1 -0
- package/dist/kit/Search.d.ts +9 -0
- package/dist/kit/Search.d.ts.map +1 -0
- package/dist/kit/Search.js +59 -0
- package/dist/kit/Search.js.map +1 -0
- package/dist/kit/Skeleton.d.ts +6 -0
- package/dist/kit/Skeleton.d.ts.map +1 -1
- package/dist/kit/Skeleton.js +15 -0
- package/dist/kit/Skeleton.js.map +1 -1
- package/dist/kit/Toast.d.ts +10 -2
- package/dist/kit/Toast.d.ts.map +1 -1
- package/dist/kit/Toast.js +9 -2
- package/dist/kit/Toast.js.map +1 -1
- package/dist/theme/ThemeProvider.d.ts +15 -2
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js +43 -53
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/tokens.d.ts +1 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +47 -0
- package/dist/theme/tokens.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { BRAND, GRAD, GRAD_90, cssVariables, v } from "./theme/tokens.ts";
|
|
2
|
-
export { AppThemeProvider, useTheme, type ThemePref } from "./theme/ThemeProvider.tsx";
|
|
1
|
+
export { BRAND, GRAD, GRAD_90, cssVariables, globalCss, v } from "./theme/tokens.ts";
|
|
2
|
+
export { AppThemeProvider, useTheme, useThemeMaybe, type ThemePref, type AppThemeProviderProps } from "./theme/ThemeProvider.tsx";
|
|
3
3
|
export { Icon, extendIcons, type IconName } from "./kit/Icon.tsx";
|
|
4
4
|
export { AppButton, IconButton, ButtonRow, type AppButtonProps } from "./kit/Button.tsx";
|
|
5
5
|
export { StatusPill, Tag, LiveDot, InitialsTile, RemovableTag, type Tone } from "./kit/Badge.tsx";
|
|
6
6
|
export { Panel, PanelHead, PanelTitle, PanelActions, PanelBody, MicroLabel, SectionHead, Hairline } from "./kit/Panel.tsx";
|
|
7
|
-
export { Skeleton, SkeletonRow } from "./kit/Skeleton.tsx";
|
|
7
|
+
export { Skeleton, SkeletonRow, Spinner } from "./kit/Skeleton.tsx";
|
|
8
8
|
export { EmptyState } from "./kit/EmptyState.tsx";
|
|
9
9
|
export { Splash } from "./kit/Splash.tsx";
|
|
10
|
-
export { FormGrid, Field, Input, MonoInput, Select, TextArea, Segmented, Toggle, FormSection, FormActions, InlineError, KVEditor, kvToMap, mapToKv, type KVPair, } from "./kit/Form.tsx";
|
|
10
|
+
export { FormGrid, Field, Input, MonoInput, Select, TextArea, Segmented, Toggle, FormSection, FormActions, InlineError, KVEditor, kvToMap, mapToKv, type KVPair, CheckRow, } from "./kit/Form.tsx";
|
|
11
11
|
export { EntityModal, ConfirmDialog, PromptDialog } from "./kit/Modal.tsx";
|
|
12
12
|
export { DataTable, type Column } from "./kit/DataTable.tsx";
|
|
13
13
|
export { PageHead, PageTitle, PageActions, FactLine, PageBody, SubNav } from "./kit/PageHeader.tsx";
|
|
@@ -15,10 +15,15 @@ export { EntityHeader, CodeChip } from "./kit/EntityHeader.tsx";
|
|
|
15
15
|
export { LogSurface, LogPanel, type LogLine } from "./kit/LogView.tsx";
|
|
16
16
|
export { KVGrid } from "./kit/KV.tsx";
|
|
17
17
|
export { SecretField, CopyIcon } from "./kit/Secret.tsx";
|
|
18
|
-
export { ToastProvider, useToast } from "./kit/Toast.tsx";
|
|
18
|
+
export { ToastProvider, useToast, toastError, type ToastKind } from "./kit/Toast.tsx";
|
|
19
19
|
export { Mono, Num, Hint, InlineHint, Cell, InlineLink } 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";
|
|
23
23
|
export { Tabs, Disclosure, Subpanel, SubpanelHead, AddPanel, Callout, RepeaterRows, CodeBlock, StepList, Steps, Step, Divider, CopyField, PanelHeadMeta, LoadMoreFooter, DarkSurface, } from "./kit/Blocks.tsx";
|
|
24
|
+
export { FacetSelect, RankList, fmtCount, fmtShare, type FacetOption } from "./kit/Facet.tsx";
|
|
25
|
+
export { SearchBox } from "./kit/Search.tsx";
|
|
26
|
+
export { RangePicker, RANGE_PRESETS, DEFAULT_RANGE, presetMinutes, rangeBounds, rangeMinutes, describeRange, type TimeRange, type RangePreset } from "./kit/Range.tsx";
|
|
27
|
+
export { Histogram, LineChart, type HistogramBucket, type ChartSeries, type ChartTone } from "./kit/Charts.tsx";
|
|
28
|
+
export { CardGrid, ListCard, type ListCardProps } from "./kit/Card.tsx";
|
|
24
29
|
//# 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,CAAC,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
//
|
|
3
3
|
// Tokens + theme: the --x-* custom-property sheet (dark-first, first-class
|
|
4
4
|
// light), the tri-state ThemeProvider, and `v` for styled-components.
|
|
5
|
-
export { BRAND, GRAD, GRAD_90, cssVariables, v } from "./theme/tokens.js";
|
|
6
|
-
export { AppThemeProvider, useTheme } from "./theme/ThemeProvider.js";
|
|
5
|
+
export { BRAND, GRAD, GRAD_90, cssVariables, globalCss, v } from "./theme/tokens.js";
|
|
6
|
+
export { AppThemeProvider, useTheme, useThemeMaybe } from "./theme/ThemeProvider.js";
|
|
7
7
|
// Kit: the same names and props container-platform/ui and functions/ui use,
|
|
8
8
|
// so adopting the package is an import-path change.
|
|
9
9
|
export { Icon, extendIcons } from "./kit/Icon.js";
|
|
10
10
|
export { AppButton, IconButton, ButtonRow } from "./kit/Button.js";
|
|
11
11
|
export { StatusPill, Tag, LiveDot, InitialsTile, RemovableTag } from "./kit/Badge.js";
|
|
12
12
|
export { Panel, PanelHead, PanelTitle, PanelActions, PanelBody, MicroLabel, SectionHead, Hairline } from "./kit/Panel.js";
|
|
13
|
-
export { Skeleton, SkeletonRow } from "./kit/Skeleton.js";
|
|
13
|
+
export { Skeleton, SkeletonRow, Spinner } from "./kit/Skeleton.js";
|
|
14
14
|
export { EmptyState } from "./kit/EmptyState.js";
|
|
15
15
|
export { Splash } from "./kit/Splash.js";
|
|
16
|
-
export { FormGrid, Field, Input, MonoInput, Select, TextArea, Segmented, Toggle, FormSection, FormActions, InlineError, KVEditor, kvToMap, mapToKv, } from "./kit/Form.js";
|
|
16
|
+
export { FormGrid, Field, Input, MonoInput, Select, TextArea, Segmented, Toggle, FormSection, FormActions, InlineError, KVEditor, kvToMap, mapToKv, CheckRow, } from "./kit/Form.js";
|
|
17
17
|
export { EntityModal, ConfirmDialog, PromptDialog } from "./kit/Modal.js";
|
|
18
18
|
export { DataTable } from "./kit/DataTable.js";
|
|
19
19
|
export { PageHead, PageTitle, PageActions, FactLine, PageBody, SubNav } from "./kit/PageHeader.js";
|
|
@@ -21,7 +21,7 @@ export { EntityHeader, CodeChip } from "./kit/EntityHeader.js";
|
|
|
21
21
|
export { LogSurface, LogPanel } from "./kit/LogView.js";
|
|
22
22
|
export { KVGrid } from "./kit/KV.js";
|
|
23
23
|
export { SecretField, CopyIcon } from "./kit/Secret.js";
|
|
24
|
-
export { ToastProvider, useToast } from "./kit/Toast.js";
|
|
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
27
|
export { Mono, Num, Hint, InlineHint, Cell, InlineLink } from "./kit/Text.js";
|
|
@@ -29,4 +29,13 @@ export { RowList, ListRow, RowActions, SelectableList, Breadcrumbs } from "./kit
|
|
|
29
29
|
export { FilterBar, FilterField, Chip, EditableChip } from "./kit/Chip.js";
|
|
30
30
|
export { StatGrid, StatTile, StatValue, Meter } from "./kit/Stat.js";
|
|
31
31
|
export { Tabs, Disclosure, Subpanel, SubpanelHead, AddPanel, Callout, RepeaterRows, CodeBlock, StepList, Steps, Step, Divider, CopyField, PanelHeadMeta, LoadMoreFooter, DarkSurface, } from "./kit/Blocks.js";
|
|
32
|
+
// Added for the Forest adoption (2026-09-26): faceted filtering, the time
|
|
33
|
+
// window, and the two charts an observability console needs.
|
|
34
|
+
export { FacetSelect, RankList, fmtCount, fmtShare } from "./kit/Facet.js";
|
|
35
|
+
export { SearchBox } from "./kit/Search.js";
|
|
36
|
+
export { RangePicker, RANGE_PRESETS, DEFAULT_RANGE, presetMinutes, rangeBounds, rangeMinutes, describeRange } from "./kit/Range.js";
|
|
37
|
+
export { Histogram, LineChart } from "./kit/Charts.js";
|
|
38
|
+
// Added for the Dev adoption (2026-09-26): the card list three consoles had
|
|
39
|
+
// each grown their own Grid+Card pair for.
|
|
40
|
+
export { CardGrid, ListCard } from "./kit/Card.js";
|
|
32
41
|
//# 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,CAAC,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type IconName } from "./Icon.tsx";
|
|
3
|
+
/** CardGrid: auto-fill columns that reflow; `$min` is the narrowest a card gets. */
|
|
4
|
+
export declare const CardGrid: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
|
|
5
|
+
style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
6
|
+
}, {
|
|
7
|
+
$min?: number | undefined;
|
|
8
|
+
$gap?: number | undefined;
|
|
9
|
+
}>> & string;
|
|
10
|
+
export interface ListCardProps {
|
|
11
|
+
title: ReactNode;
|
|
12
|
+
/** semantic icon left of the title */
|
|
13
|
+
icon?: IconName | (string & {}) | undefined;
|
|
14
|
+
/** mono title, for a technical name */
|
|
15
|
+
mono?: boolean | undefined;
|
|
16
|
+
/** right of the title — a StatusPill or a Tag */
|
|
17
|
+
status?: ReactNode | undefined;
|
|
18
|
+
/** the small row under the title — Tags, a fact or two */
|
|
19
|
+
facts?: ReactNode | undefined;
|
|
20
|
+
/** the footer row — a ButtonRow. A card with actions is never itself clickable. */
|
|
21
|
+
actions?: ReactNode | undefined;
|
|
22
|
+
/** a severity edge, matching DataTable's `severity` tones */
|
|
23
|
+
tone?: "crit" | "warn" | undefined;
|
|
24
|
+
/** router destination — the whole card becomes the link */
|
|
25
|
+
to?: string | undefined;
|
|
26
|
+
/** external or same-origin href — the whole card becomes the link */
|
|
27
|
+
href?: string | undefined;
|
|
28
|
+
target?: string | undefined;
|
|
29
|
+
rel?: string | undefined;
|
|
30
|
+
children?: ReactNode | undefined;
|
|
31
|
+
className?: string | undefined;
|
|
32
|
+
/** the full value behind a truncated title */
|
|
33
|
+
tooltip?: string | undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* ListCard: one card in a CardGrid.
|
|
37
|
+
*
|
|
38
|
+
* `to`/`href` make the whole card the link. `actions` and a whole-card link are
|
|
39
|
+
* mutually exclusive by construction — a link wrapping buttons is invalid
|
|
40
|
+
* markup and unusable by keyboard — so a card with actions renders as a plain
|
|
41
|
+
* surface and the actions carry the navigation.
|
|
42
|
+
*/
|
|
43
|
+
export declare function ListCard({ title, icon, mono, status, facts, actions, tone, to, href, target, rel, children, className, tooltip, }: ListCardProps): import("react").JSX.Element;
|
|
44
|
+
//# sourceMappingURL=Card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/kit/Card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQjD,oFAAoF;AACpF,eAAO,MAAM,QAAQ;;;WAAuB,MAAM,GAAG,SAAS;WAAS,MAAM,GAAG,SAAS;YAIxF,CAAC;AAuEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,sCAAsC;IACtC,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IAC5C,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,iDAAiD;IACjD,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,mFAAmF;IACnF,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnC,2DAA2D;IAC3D,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,GACrG,EAAE,aAAa,+BAoBf"}
|
package/dist/kit/Card.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import styled, { css } from "styled-components";
|
|
3
|
+
import { Link } from "react-router-dom";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { Icon } from "./Icon.js";
|
|
6
|
+
// The card list. A list of things too few and too visual for a DataTable — a
|
|
7
|
+
// team picker, a project picker, a handful of environments — reads as cards,
|
|
8
|
+
// and three consoles had grown their own `Grid`/`Card` pair for it
|
|
9
|
+
// (container-platform's pools, dbaas' teams, dev's environments). This is that
|
|
10
|
+
// pair, with the differences between them as props.
|
|
11
|
+
/** CardGrid: auto-fill columns that reflow; `$min` is the narrowest a card gets. */
|
|
12
|
+
export const CardGrid = styled.div `
|
|
13
|
+
display: grid;
|
|
14
|
+
gap: ${(p) => p.$gap ?? 12}px;
|
|
15
|
+
grid-template-columns: repeat(auto-fill, minmax(${(p) => p.$min ?? 300}px, 1fr));
|
|
16
|
+
`;
|
|
17
|
+
const shell = css `
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
background: ${v.surface};
|
|
22
|
+
border: 1px solid ${(p) => (p.$tone === "crit" ? v.danger : p.$tone === "warn" ? v.warning : v.line)};
|
|
23
|
+
border-radius: ${v.rCard};
|
|
24
|
+
box-shadow: inset 0 1px 0 0 ${v.brand08}, ${v.elev};
|
|
25
|
+
color: inherit;
|
|
26
|
+
text-align: left;
|
|
27
|
+
text-decoration: none;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
${(p) => p.$interactive &&
|
|
30
|
+
css `
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
transition: border-color 0.14s ease, transform 0.14s ease;
|
|
33
|
+
&:hover { border-color: ${v.brand55}; transform: translateY(-1px); }
|
|
34
|
+
&:focus-visible { outline: 2px solid ${v.brand55}; outline-offset: 2px; }
|
|
35
|
+
`}
|
|
36
|
+
`;
|
|
37
|
+
const DivShell = styled.div `${shell}`;
|
|
38
|
+
const AShell = styled.a `${shell}`;
|
|
39
|
+
const LinkShell = styled(Link) `${shell}`;
|
|
40
|
+
const Head = styled.div `
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: 10px;
|
|
44
|
+
padding: 14px 16px 0;
|
|
45
|
+
svg { flex: none; color: ${v.brand}; }
|
|
46
|
+
`;
|
|
47
|
+
const Title = styled.div `
|
|
48
|
+
flex: 1;
|
|
49
|
+
min-width: 0;
|
|
50
|
+
font-weight: 600;
|
|
51
|
+
font-size: 14px;
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
text-overflow: ellipsis;
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
${(p) => p.$mono && css `font-family: ${v.mono}; font-size: 13px;`}
|
|
56
|
+
`;
|
|
57
|
+
const Facts = styled.div `
|
|
58
|
+
display: flex;
|
|
59
|
+
flex-wrap: wrap;
|
|
60
|
+
align-items: center;
|
|
61
|
+
gap: 6px;
|
|
62
|
+
padding: 10px 16px 0;
|
|
63
|
+
color: ${v.muted};
|
|
64
|
+
font-size: 12px;
|
|
65
|
+
`;
|
|
66
|
+
const Body = styled.div `
|
|
67
|
+
padding: 12px 16px 0;
|
|
68
|
+
min-width: 0;
|
|
69
|
+
`;
|
|
70
|
+
const Actions = styled.div `
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
gap: 8px;
|
|
74
|
+
padding: 14px 16px;
|
|
75
|
+
margin-top: auto;
|
|
76
|
+
`;
|
|
77
|
+
/**
|
|
78
|
+
* ListCard: one card in a CardGrid.
|
|
79
|
+
*
|
|
80
|
+
* `to`/`href` make the whole card the link. `actions` and a whole-card link are
|
|
81
|
+
* mutually exclusive by construction — a link wrapping buttons is invalid
|
|
82
|
+
* markup and unusable by keyboard — so a card with actions renders as a plain
|
|
83
|
+
* surface and the actions carry the navigation.
|
|
84
|
+
*/
|
|
85
|
+
export function ListCard({ title, icon, mono, status, facts, actions, tone, to, href, target, rel, children, className, tooltip, }) {
|
|
86
|
+
const inner = (_jsxs(_Fragment, { children: [_jsxs(Head, { children: [icon ? _jsx(Icon, { name: icon }) : null, _jsx(Title, { "$mono": mono, title: tooltip ?? (typeof title === "string" ? title : undefined), children: title }), status] }), facts ? _jsx(Facts, { children: facts }) : null, children ? _jsx(Body, { children: children }) : null, actions ? _jsx(Actions, { children: actions }) : null] }));
|
|
87
|
+
if (to && !actions) {
|
|
88
|
+
return _jsx(LinkShell, { to: to, "$tone": tone, "$interactive": true, className: className, children: inner });
|
|
89
|
+
}
|
|
90
|
+
if (href && !actions) {
|
|
91
|
+
return _jsx(AShell, { href: href, target: target, rel: rel, "$tone": tone, "$interactive": true, className: className, children: inner });
|
|
92
|
+
}
|
|
93
|
+
return _jsx(DivShell, { "$tone": tone, className: className, children: inner });
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=Card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../src/kit/Card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface HistogramBucket {
|
|
2
|
+
/** bucket start, ms since epoch */
|
|
3
|
+
t: number;
|
|
4
|
+
/** stacked parts, in stack order */
|
|
5
|
+
parts: {
|
|
6
|
+
name: string;
|
|
7
|
+
value: number;
|
|
8
|
+
}[];
|
|
9
|
+
}
|
|
10
|
+
/** Tones a part may take; unnamed parts use the brand colour. */
|
|
11
|
+
export type ChartTone = "brand" | "ok" | "warn" | "crit" | "info" | "mut";
|
|
12
|
+
/**
|
|
13
|
+
* Histogram: a stacked bar per bucket over time, so the shape of what you are
|
|
14
|
+
* looking at is visible before you read a single row. `tones` maps a part
|
|
15
|
+
* name to its tone (e.g. error → crit) so a spike reads without a legend.
|
|
16
|
+
*/
|
|
17
|
+
export declare function Histogram({ buckets, tones, height, label, empty }: {
|
|
18
|
+
buckets: HistogramBucket[];
|
|
19
|
+
tones?: Record<string, ChartTone> | undefined;
|
|
20
|
+
height?: number | undefined;
|
|
21
|
+
label?: string | undefined;
|
|
22
|
+
empty?: string | undefined;
|
|
23
|
+
}): import("react").JSX.Element;
|
|
24
|
+
export interface ChartSeries {
|
|
25
|
+
name: string;
|
|
26
|
+
points: {
|
|
27
|
+
t: number;
|
|
28
|
+
v: number;
|
|
29
|
+
}[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* LineChart: n series over a shared time axis. Axes to read a value off, a
|
|
33
|
+
* crosshair to compare series at one instant, a legend that mutes lines, and
|
|
34
|
+
* a drag that selects a window (`onZoom`) — the natural gesture once a spike
|
|
35
|
+
* is visible.
|
|
36
|
+
*/
|
|
37
|
+
export declare function LineChart({ series, onZoom, label, empty }: {
|
|
38
|
+
series: ChartSeries[];
|
|
39
|
+
/** Given a dragged selection. Omit to leave the chart read-only. */
|
|
40
|
+
onZoom?: ((from: Date, to: Date) => void) | undefined;
|
|
41
|
+
label?: string | undefined;
|
|
42
|
+
empty?: string | undefined;
|
|
43
|
+
}): import("react").JSX.Element;
|
|
44
|
+
//# sourceMappingURL=Charts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Charts.d.ts","sourceRoot":"","sources":["../../src/kit/Charts.tsx"],"names":[],"mappings":"AAiBA,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAUD,iEAAiE;AACjE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAK1E;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAU,EAAE,MAAM,EAAE,KAA4B,EAAE,KAA8B,EAAE,EAAE;IACvH,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BA6BA;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpC;AA0DD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAgB,EAAE,KAA6B,EAAE,EAAE;IAC7F,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BA8GA"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useRef, useState } from "react";
|
|
3
|
+
import styled from "styled-components";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { fmtCount } from "./Facet.js";
|
|
6
|
+
// Two charts in raw SVG, themed with the tokens so they sit in the same visual
|
|
7
|
+
// system as everything else. No charting library: the need is "n series over a
|
|
8
|
+
// shared time axis" and "a stacked histogram", and a dependency for that costs
|
|
9
|
+
// more in bundle size and theming friction than the code it saves.
|
|
10
|
+
const hhmm = (t) => new Date(t).toLocaleTimeString(undefined, { hour: "2-digit", minute: "2-digit", hour12: false });
|
|
11
|
+
const HistWrap = styled.div `padding: 12px 14px 8px;`;
|
|
12
|
+
const HistSvg = styled.svg `display: block; width: 100%; height: 84px;`;
|
|
13
|
+
const Axis = styled.div `
|
|
14
|
+
display: flex; justify-content: space-between;
|
|
15
|
+
color: ${v.faint}; font-size: 11px; margin-top: 4px; font-variant-numeric: tabular-nums;
|
|
16
|
+
`;
|
|
17
|
+
const Note = styled.div `color: ${v.faint}; font-size: 12px; padding: 22px 0; text-align: center;`;
|
|
18
|
+
const TONE_FILL = {
|
|
19
|
+
brand: v.brand, ok: v.success, warn: v.warning, crit: v.danger, info: v.info, mut: v.faint,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Histogram: a stacked bar per bucket over time, so the shape of what you are
|
|
23
|
+
* looking at is visible before you read a single row. `tones` maps a part
|
|
24
|
+
* name to its tone (e.g. error → crit) so a spike reads without a legend.
|
|
25
|
+
*/
|
|
26
|
+
export function Histogram({ buckets, tones = {}, height, label = "Activity over time", empty = "No activity in range" }) {
|
|
27
|
+
const sorted = useMemo(() => [...buckets].sort((a, b) => a.t - b.t), [buckets]);
|
|
28
|
+
if (sorted.length === 0)
|
|
29
|
+
return _jsx(HistWrap, { children: _jsx(Note, { children: empty }) });
|
|
30
|
+
const totals = sorted.map((b) => b.parts.reduce((s, p) => s + p.value, 0));
|
|
31
|
+
const max = Math.max(...totals, 1);
|
|
32
|
+
const w = 100 / sorted.length;
|
|
33
|
+
return (_jsxs(HistWrap, { children: [_jsx(HistSvg, { viewBox: "0 0 100 40", preserveAspectRatio: "none", role: "img", "aria-label": label, style: height ? { height } : undefined, children: sorted.map((b, i) => {
|
|
34
|
+
let y = 40;
|
|
35
|
+
return (_jsxs("g", { children: [_jsx("title", { children: `${hhmm(b.t)} — ${fmtCount(totals[i] ?? 0)}` }), b.parts.map((p) => {
|
|
36
|
+
const h = (p.value / max) * 40;
|
|
37
|
+
y -= h;
|
|
38
|
+
return _jsx("rect", { x: i * w + w * 0.12, y: y, width: w * 0.76, height: h, fill: TONE_FILL[tones[p.name] ?? "brand"] }, p.name);
|
|
39
|
+
})] }, b.t));
|
|
40
|
+
}) }), _jsxs(Axis, { children: [_jsx("span", { children: hhmm(sorted[0].t) }), _jsx("span", { children: hhmm(sorted[sorted.length - 1].t) })] })] }));
|
|
41
|
+
}
|
|
42
|
+
const Wrap = styled.div `padding: 14px;`;
|
|
43
|
+
const Plot = styled.div `position: relative;`;
|
|
44
|
+
const Svg = styled.svg `display: block; width: 100%; height: 220px; cursor: crosshair; user-select: none;`;
|
|
45
|
+
const Legend = styled.div `display: flex; flex-wrap: wrap; gap: 12px; margin-top: 10px; font-size: 12px; color: ${v.muted};`;
|
|
46
|
+
// Series colours come from the theme's accent ramp rather than a chart palette.
|
|
47
|
+
const STROKES = [v.brand, v.success, v.warning, v.info, v.danger];
|
|
48
|
+
// A legend entry is a control: clicking isolates or restores a series, which is
|
|
49
|
+
// the only way to read a chart split into a dozen sessions.
|
|
50
|
+
const Key = styled.button `
|
|
51
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
52
|
+
font: inherit; font-size: 12px;
|
|
53
|
+
color: ${(p) => (p.$off ? v.faint : v.muted)};
|
|
54
|
+
opacity: ${(p) => (p.$off ? 0.55 : 1)};
|
|
55
|
+
&::before { content: ""; width: 9px; height: 3px; border-radius: 2px; background: ${(p) => (p.$off ? v.faint : STROKES[p.$i % STROKES.length])}; }
|
|
56
|
+
&:hover { color: ${v.text}; }
|
|
57
|
+
`;
|
|
58
|
+
const ChartHint = styled.div `margin-top: 8px; font-size: 11px; color: ${v.faint};`;
|
|
59
|
+
const Tip = styled.div `
|
|
60
|
+
position: absolute;
|
|
61
|
+
top: 6px;
|
|
62
|
+
left: ${(p) => p.$left}%;
|
|
63
|
+
transform: translateX(${(p) => (p.$flip ? "-100%" : "0")});
|
|
64
|
+
margin-left: ${(p) => (p.$flip ? "-10px" : "10px")};
|
|
65
|
+
pointer-events: none;
|
|
66
|
+
background: ${v.surface2};
|
|
67
|
+
border: 1px solid ${v.line2};
|
|
68
|
+
border-radius: ${v.rCard};
|
|
69
|
+
box-shadow: ${v.elev};
|
|
70
|
+
padding: 7px 9px;
|
|
71
|
+
font-size: 11px;
|
|
72
|
+
color: ${v.text};
|
|
73
|
+
white-space: nowrap;
|
|
74
|
+
z-index: ${v.zPop};
|
|
75
|
+
.t { color: ${v.faint}; margin-bottom: 4px; }
|
|
76
|
+
.val { margin-left: auto; padding-left: 12px; font-variant-numeric: tabular-nums; }
|
|
77
|
+
`;
|
|
78
|
+
const TipRow = styled.div `
|
|
79
|
+
display: flex; align-items: center; gap: 6px;
|
|
80
|
+
&::before { content: ""; width: 8px; height: 3px; border-radius: 2px; background: ${(p) => STROKES[p.$i % STROKES.length]}; }
|
|
81
|
+
`;
|
|
82
|
+
const W = 600;
|
|
83
|
+
const H = 200;
|
|
84
|
+
const PAD_L = 44;
|
|
85
|
+
const PAD_B = 18;
|
|
86
|
+
const PAD_T = 8;
|
|
87
|
+
function tickValue(x) {
|
|
88
|
+
if (Math.abs(x) >= 1000)
|
|
89
|
+
return fmtCount(Math.round(x));
|
|
90
|
+
return Number.isInteger(x) ? String(x) : x.toFixed(2);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* LineChart: n series over a shared time axis. Axes to read a value off, a
|
|
94
|
+
* crosshair to compare series at one instant, a legend that mutes lines, and
|
|
95
|
+
* a drag that selects a window (`onZoom`) — the natural gesture once a spike
|
|
96
|
+
* is visible.
|
|
97
|
+
*/
|
|
98
|
+
export function LineChart({ series, onZoom, label = "Series", empty = "No samples in range" }) {
|
|
99
|
+
const svg = useRef(null);
|
|
100
|
+
const [hidden, setHidden] = useState(new Set());
|
|
101
|
+
const [hoverX, setHoverX] = useState(null);
|
|
102
|
+
const [drag, setDrag] = useState(null);
|
|
103
|
+
const shown = useMemo(() => series.filter((s) => !hidden.has(s.name)), [series, hidden]);
|
|
104
|
+
const points = shown.flatMap((s) => s.points);
|
|
105
|
+
const all = series.flatMap((s) => s.points.map((p) => p.t));
|
|
106
|
+
if (all.length === 0)
|
|
107
|
+
return _jsx(Wrap, { children: _jsx(Note, { children: empty }) });
|
|
108
|
+
// The time axis spans every series, so hiding one does not move the x axis
|
|
109
|
+
// under the reader; only the value axis rescales to what is shown.
|
|
110
|
+
const tMin = Math.min(...all);
|
|
111
|
+
const tMax = Math.max(...all);
|
|
112
|
+
const vMax = Math.max(...points.map((p) => p.v), 0);
|
|
113
|
+
const vMin = Math.min(...points.map((p) => p.v), 0);
|
|
114
|
+
const tSpan = tMax - tMin || 1;
|
|
115
|
+
const vSpan = vMax - vMin || 1;
|
|
116
|
+
const x = (t) => PAD_L + ((t - tMin) / tSpan) * (W - PAD_L);
|
|
117
|
+
const y = (val) => (H - PAD_B) - ((val - vMin) / vSpan) * (H - PAD_B - PAD_T);
|
|
118
|
+
const frac = (t) => (x(t) - PAD_L) / (W - PAD_L);
|
|
119
|
+
const timeAt = (fraction) => tMin + fraction * tSpan;
|
|
120
|
+
const gridValues = [vMin, vMin + vSpan / 2, vMax];
|
|
121
|
+
const fractionOf = (clientX) => {
|
|
122
|
+
const rect = svg.current?.getBoundingClientRect();
|
|
123
|
+
if (!rect)
|
|
124
|
+
return null;
|
|
125
|
+
const plotLeft = rect.left + (PAD_L / W) * rect.width;
|
|
126
|
+
const plotWidth = rect.width * (1 - PAD_L / W);
|
|
127
|
+
return Math.min(1, Math.max(0, (clientX - plotLeft) / plotWidth));
|
|
128
|
+
};
|
|
129
|
+
// The nearest sample per series to the hovered instant.
|
|
130
|
+
const hovered = hoverX === null ? null : (() => {
|
|
131
|
+
const t = timeAt(hoverX);
|
|
132
|
+
const rows = shown.map((s) => {
|
|
133
|
+
let best = null;
|
|
134
|
+
for (const p of s.points)
|
|
135
|
+
if (!best || Math.abs(p.t - t) < Math.abs(best.t - t))
|
|
136
|
+
best = p;
|
|
137
|
+
return best ? { name: s.name, i: series.indexOf(s), v: best.v, t: best.t } : null;
|
|
138
|
+
}).filter((r) => r !== null);
|
|
139
|
+
return rows.length ? { t, rows } : null;
|
|
140
|
+
})();
|
|
141
|
+
const toggle = (name) => setHidden((prev) => {
|
|
142
|
+
const next = new Set(prev);
|
|
143
|
+
if (next.has(name))
|
|
144
|
+
next.delete(name);
|
|
145
|
+
else
|
|
146
|
+
next.add(name);
|
|
147
|
+
// Hiding everything leaves a chart with no axis to read; treat the last
|
|
148
|
+
// one as "show all again".
|
|
149
|
+
return next.size === series.length ? new Set() : next;
|
|
150
|
+
});
|
|
151
|
+
return (_jsxs(Wrap, { children: [_jsxs(Plot, { children: [_jsxs(Svg, { ref: svg, viewBox: `0 0 ${W} ${H}`, preserveAspectRatio: "none", role: "img", "aria-label": label, onMouseMove: (e) => { const f = fractionOf(e.clientX); if (f === null)
|
|
152
|
+
return; setHoverX(f); setDrag((d) => (d ? { ...d, to: f } : null)); }, onMouseLeave: () => { setHoverX(null); setDrag(null); }, onMouseDown: (e) => { if (!onZoom)
|
|
153
|
+
return; const f = fractionOf(e.clientX); if (f !== null)
|
|
154
|
+
setDrag({ from: f, to: f }); }, onMouseUp: () => {
|
|
155
|
+
if (drag && onZoom)
|
|
156
|
+
onZoom(new Date(timeAt(Math.min(drag.from, drag.to))), new Date(timeAt(Math.max(drag.from, drag.to))));
|
|
157
|
+
setDrag(null);
|
|
158
|
+
}, children: [gridValues.map((g) => (_jsxs("g", { children: [_jsx("line", { x1: PAD_L, x2: W, y1: y(g), y2: y(g), stroke: v.line, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }), _jsx("text", { x: PAD_L - 6, y: y(g) + 3, textAnchor: "end", fontSize: 9, fill: v.faint, children: tickValue(g) })] }, g))), _jsx("text", { x: PAD_L, y: H - 4, fontSize: 9, fill: v.faint, children: hhmm(tMin) }), _jsx("text", { x: W, y: H - 4, fontSize: 9, fill: v.faint, textAnchor: "end", children: hhmm(tMax) }), shown.map((s) => {
|
|
159
|
+
const i = series.indexOf(s);
|
|
160
|
+
const d = s.points.map((p, j) => `${j === 0 ? "M" : "L"} ${x(p.t)} ${y(p.v)}`).join(" ");
|
|
161
|
+
return _jsx("path", { d: d, fill: "none", stroke: STROKES[i % STROKES.length], strokeWidth: 1.5, vectorEffect: "non-scaling-stroke" }, s.name);
|
|
162
|
+
}), drag && Math.abs(drag.to - drag.from) > 0.002 ? (_jsx("rect", { x: PAD_L + Math.min(drag.from, drag.to) * (W - PAD_L), width: Math.abs(drag.to - drag.from) * (W - PAD_L), y: PAD_T, height: H - PAD_B - PAD_T, fill: v.brand12, stroke: v.brand55, strokeWidth: 1, vectorEffect: "non-scaling-stroke" })) : null, hoverX !== null && !drag ? (_jsx("line", { x1: PAD_L + hoverX * (W - PAD_L), x2: PAD_L + hoverX * (W - PAD_L), y1: PAD_T, y2: H - PAD_B, stroke: v.line2, strokeWidth: 1, vectorEffect: "non-scaling-stroke" })) : null, hovered && !drag ? hovered.rows.map((r) => _jsx("circle", { cx: x(r.t), cy: y(r.v), r: 2.5, fill: STROKES[r.i % STROKES.length] }, r.name)) : null] }), hovered && !drag ? (_jsxs(Tip, { "$left": frac(hovered.t) * 100, "$flip": frac(hovered.t) > 0.6, children: [_jsx("div", { className: "t", children: new Date(hovered.t).toLocaleString() }), hovered.rows.map((r) => _jsxs(TipRow, { "$i": r.i, children: [r.name, _jsx("span", { className: "val", children: tickValue(r.v) })] }, r.name))] })) : null] }), _jsx(Legend, { children: series.map((s, i) => (_jsx(Key, { type: "button", "$i": i, "$off": hidden.has(s.name), onClick: () => toggle(s.name), title: hidden.has(s.name) ? "Show this series" : "Hide this series", children: s.name }, s.name))) }), onZoom ? _jsx(ChartHint, { children: "Drag across the chart to zoom into a window." }) : null] }));
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=Charts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Charts.js","sourceRoot":"","sources":["../../src/kit/Charts.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/DataTable.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface Column<T> {
|
|
|
8
8
|
/** hide below this viewport width (px) */
|
|
9
9
|
hideBelow?: number | undefined;
|
|
10
10
|
}
|
|
11
|
-
export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer, variant, hideHead }: {
|
|
11
|
+
export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail }: {
|
|
12
12
|
columns: Column<T>[];
|
|
13
13
|
rows: T[] | undefined;
|
|
14
14
|
rowKey: (row: T) => string;
|
|
@@ -23,5 +23,7 @@ export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonR
|
|
|
23
23
|
variant?: "panel" | "bare" | undefined;
|
|
24
24
|
/** omit the header row (short bare lists whose columns are self-evident) */
|
|
25
25
|
hideHead?: boolean | undefined;
|
|
26
|
+
/** an expanded row under this one (a log line's attributes); null/undefined for none — the caller keeps the open state */
|
|
27
|
+
detail?: ((row: T) => ReactNode) | undefined;
|
|
26
28
|
}): import("react").JSX.Element;
|
|
27
29
|
//# 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;
|
|
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"}
|
package/dist/kit/DataTable.js
CHANGED
|
@@ -50,7 +50,12 @@ const Bare = styled.div `
|
|
|
50
50
|
table td { padding: 7px 12px; }
|
|
51
51
|
table th { padding: 7px 12px; background: transparent; }
|
|
52
52
|
`;
|
|
53
|
-
|
|
53
|
+
const DetailTd = styled.td `
|
|
54
|
+
padding: 12px 16px 16px;
|
|
55
|
+
background: ${v.surface2};
|
|
56
|
+
border-bottom: 1px solid ${v.line};
|
|
57
|
+
`;
|
|
58
|
+
export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail }) {
|
|
54
59
|
const navigate = useNavigate();
|
|
55
60
|
const Wrap = variant === "bare" ? Bare : Panel;
|
|
56
61
|
const showSkeleton = loading && (!rows || rows.length === 0);
|
|
@@ -58,7 +63,8 @@ export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, em
|
|
|
58
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) => {
|
|
59
64
|
const href = rowHref?.(r) ?? null;
|
|
60
65
|
const click = !!href || !!onRowClick;
|
|
61
|
-
|
|
66
|
+
const extra = detail?.(r);
|
|
67
|
+
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)));
|
|
62
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] }));
|
|
63
69
|
}
|
|
64
70
|
//# sourceMappingURL=DataTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAgB,CAAC;AAYvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;CAIzB,CAAC;AAEF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAuE;gBAC3E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM;;;;;WAK9B,CAAC,CAAC,KAAK;gBACF,CAAC,CAAC,QAAQ;6BACG,CAAC,CAAC,IAAI;;;IAG/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,sBAAsB,CAAC,CAAC,KAAK,wBAAwB;CAC7E,CAAC;AAEF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAuE;gBAC3E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM;;6BAEZ,CAAC,CAAC,IAAI;;IAE/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,sBAAsB,CAAC,CAAC,KAAK,wBAAwB;CAC7E,CAAC;AAEF,iFAAiF;AACjF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAA8E;IAC9F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAA,6CAA6C,CAAC,CAAC,KAAK,KAAK;;IAE/E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,gDAAgD,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK;CACtH,CAAC;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;WAMf,CAAC,CAAC,KAAK;0BACQ,CAAC,CAAC,IAAI;CAC/B,CAAC;AAEF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA,mBAAmB,CAAC;AAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;;;CAGtB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface FacetOption {
|
|
3
|
+
value: string;
|
|
4
|
+
count: number | bigint;
|
|
5
|
+
/** 0..1 fraction of the total */
|
|
6
|
+
share: number;
|
|
7
|
+
}
|
|
8
|
+
/** compact count: 1234 → "1.2k" */
|
|
9
|
+
export declare function fmtCount(n: number | bigint): string;
|
|
10
|
+
/** share as a percentage: 0.0421 → "4.2%" */
|
|
11
|
+
export declare function fmtShare(share: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* FacetSelect: a multi-select over the values a field takes, each with its
|
|
14
|
+
* count and share. Clearing from the chip is the common case once a filter is
|
|
15
|
+
* set, so the trailing × clears without opening the menu.
|
|
16
|
+
*/
|
|
17
|
+
export declare function FacetSelect({ label, options, selected, onChange, loading, unavailable }: {
|
|
18
|
+
label: ReactNode;
|
|
19
|
+
options: FacetOption[];
|
|
20
|
+
selected: string[];
|
|
21
|
+
onChange: (values: string[]) => void;
|
|
22
|
+
loading?: boolean | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Why this field cannot be offered for what is being viewed. Distinct from
|
|
25
|
+
* having no options: "nothing matched" and "you cannot filter on this here"
|
|
26
|
+
* look identical in an empty menu, and only one is the user's to fix.
|
|
27
|
+
*/
|
|
28
|
+
unavailable?: string | undefined;
|
|
29
|
+
}): import("react").JSX.Element;
|
|
30
|
+
/** RankList: ranked rows with a share bar behind each — "top events", "top clients". */
|
|
31
|
+
export declare function RankList({ items, onPick, empty, limit }: {
|
|
32
|
+
items: FacetOption[];
|
|
33
|
+
onPick?: ((value: string) => void) | undefined;
|
|
34
|
+
empty?: string | undefined;
|
|
35
|
+
limit?: number | undefined;
|
|
36
|
+
}): import("react").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=Facet.d.ts.map
|