@powered-by-array/ui 1.83.0 → 1.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/KeyStatsCard/KeyStatsCard.d.ts.map +1 -1
- package/dist/components/KeyStatsCard/KeyStatsCard.js +2 -1
- package/dist/components/KeyStatsCard/KeyStatsCard.js.map +1 -1
- package/dist/components/KeyStatsCard/KeyStatsCard.types.d.ts +4 -2
- package/dist/components/KeyStatsCard/KeyStatsCard.types.d.ts.map +1 -1
- package/dist/components/SideSheet/SideSheet.d.ts +6 -4
- package/dist/components/SideSheet/SideSheet.d.ts.map +1 -1
- package/dist/components/SideSheet/SideSheet.js +13 -6
- package/dist/components/SideSheet/SideSheet.js.map +1 -1
- package/dist/components/SideSheet/SideSheet.variants.d.ts +4 -1
- package/dist/components/SideSheet/SideSheet.variants.d.ts.map +1 -1
- package/dist/components/SideSheet/SideSheet.variants.js +9 -1
- package/dist/components/SideSheet/SideSheet.variants.js.map +1 -1
- package/dist/components/SideSheet/hooks/useSideSheetResize.d.ts +14 -0
- package/dist/components/SideSheet/hooks/useSideSheetResize.d.ts.map +1 -0
- package/dist/components/SideSheet/hooks/useSideSheetResize.js +52 -0
- package/dist/components/SideSheet/hooks/useSideSheetResize.js.map +1 -0
- package/dist/components/StatCard/StatCard.js +1 -1
- package/dist/components/StatCard/StatCard.js.map +1 -1
- package/dist/components/StatCard/StatCard.skeleton.d.ts +10 -1
- package/dist/components/StatCard/StatCard.skeleton.d.ts.map +1 -1
- package/dist/components/StatCard/StatCard.skeleton.js +4 -2
- package/dist/components/StatCard/StatCard.skeleton.js.map +1 -1
- package/dist/components/StatCard/StatCard.types.d.ts +5 -2
- package/dist/components/StatCard/StatCard.types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyStatsCard.d.ts","sourceRoot":"","sources":["../../../src/components/KeyStatsCard/KeyStatsCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KeyStatsCard.d.ts","sourceRoot":"","sources":["../../../src/components/KeyStatsCard/KeyStatsCard.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAOjE,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA+GpD"}
|
|
@@ -3,6 +3,7 @@ import * as React from "react";
|
|
|
3
3
|
import { cn } from "../../lib/cn.js";
|
|
4
4
|
import { Badge } from "../Badge/index.js";
|
|
5
5
|
import { CardContainer } from "../CardContainer/index.js";
|
|
6
|
+
import { Skeleton } from "../Skeleton/index.js";
|
|
6
7
|
import { KeyStatsCardSkeleton } from "./KeyStatsCard.skeleton.js";
|
|
7
8
|
import { getStatStripClass, keyStatsCardStatToneClass, keyStatsCardVariants, } from "./KeyStatsCard.variants.js";
|
|
8
9
|
export function KeyStatsCard(props) {
|
|
@@ -12,7 +13,7 @@ export function KeyStatsCard(props) {
|
|
|
12
13
|
const { title, subtitle, status, stats, footerItems, onClick, ref, className, } = props;
|
|
13
14
|
return (_jsx(CardContainer, { asChild: true, children: _jsxs("button", { ref: ref, type: "button", "data-slot": "key-stats-card", className: cn(keyStatsCardVariants.root, className), onClick: onClick, children: [_jsxs("div", { "data-slot": "key-stats-card-title-block", className: cn(keyStatsCardVariants.titleBlock), children: [_jsxs("div", { className: cn(keyStatsCardVariants.titleGroup), children: [_jsxs("div", { "data-slot": "key-stats-card-primary-row", className: cn(keyStatsCardVariants.primaryRow), children: [_jsx("span", { "data-slot": "key-stats-card-title", className: cn(keyStatsCardVariants.title), children: title }), status ? _jsx(Badge, { variant: status }) : null] }), subtitle ? (_jsx("span", { "data-slot": "key-stats-card-subtitle", className: cn(keyStatsCardVariants.subtitle), children: subtitle })) : null] }), _jsx("div", { "data-slot": "key-stats-card-stat-strip", className: cn(getStatStripClass(stats.length)), children: stats.map((stat, i) => {
|
|
14
15
|
const slotKey = stat.slot ?? stat.label;
|
|
15
|
-
return (_jsx("div", { "data-slot": "key-stats-card-stat", "data-stat": slotKey, className: cn(keyStatsCardVariants.stat), children: _jsxs("div", { className: cn(keyStatsCardVariants.statInner), children: [_jsx("span", { "data-slot": "key-stats-card-stat-label", className: cn(keyStatsCardVariants.statLabel), children: stat.label }), _jsx("span", { "data-slot": "key-stats-card-stat-value", className: cn(keyStatsCardVariants.statValue, keyStatsCardStatToneClass[stat.tone ?? "neutral"]), children: stat.value })] }) }, slotKey + i));
|
|
16
|
+
return (_jsx("div", { "data-slot": "key-stats-card-stat", "data-stat": slotKey, className: cn(keyStatsCardVariants.stat), children: _jsxs("div", { className: cn(keyStatsCardVariants.statInner), children: [_jsx("span", { "data-slot": "key-stats-card-stat-label", className: cn(keyStatsCardVariants.statLabel), children: stat.label }), stat.loading ? (_jsx(Skeleton, { className: cn(keyStatsCardVariants.skeleton.statValue), "aria-hidden": "true" })) : (_jsx("span", { "data-slot": "key-stats-card-stat-value", className: cn(keyStatsCardVariants.statValue, keyStatsCardStatToneClass[stat.tone ?? "neutral"]), children: stat.value }))] }) }, slotKey + i));
|
|
16
17
|
}) })] }), footerItems && footerItems.length > 0 ? (_jsx("div", { "data-slot": "key-stats-card-context-strip", className: cn(keyStatsCardVariants.contextStrip), children: footerItems.map((item, i) => (_jsxs(React.Fragment, { children: [i > 0 ? _jsx("span", { "aria-hidden": "true", children: "\u2022" }) : null, _jsx("span", { children: item })] }, i))) })) : null] }) }));
|
|
17
18
|
}
|
|
18
19
|
//# sourceMappingURL=KeyStatsCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyStatsCard.js","sourceRoot":"","sources":["../../../src/components/KeyStatsCard/KeyStatsCard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,KAAC,oBAAoB,IAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,GAAI,CAAC;IACvE,CAAC;IAED,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,WAAW,EACX,OAAO,EACP,GAAG,EACH,SAAS,GACV,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,KAAC,aAAa,IAAC,OAAO,kBACpB,kBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,eACH,gBAAgB,EAC1B,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,EACnD,OAAO,EAAE,OAAO,aAEhB,4BACY,4BAA4B,EACtC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,aAE9C,eAAK,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,aACjD,4BACY,4BAA4B,EACtC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,aAE9C,4BACY,sBAAsB,EAChC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAExC,KAAK,GACD,EACN,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,OAAO,EAAE,MAAM,GAAI,CAAC,CAAC,CAAC,IAAI,IACvC,EACL,QAAQ,CAAC,CAAC,CAAC,CACV,4BACY,yBAAyB,EACnC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,YAE3C,QAAQ,GACJ,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,EAEN,2BACY,2BAA2B,EACrC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAE7C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gCACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;gCACxC,OAAO,CACL,2BAEY,qBAAqB,eACpB,OAAO,EAClB,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAExC,eAAK,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,aAChD,4BACY,2BAA2B,EACrC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,YAE5C,IAAI,CAAC,KAAK,GACN,
|
|
1
|
+
{"version":3,"file":"KeyStatsCard.js","sourceRoot":"","sources":["../../../src/components/KeyStatsCard/KeyStatsCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,14 @@ export type KeyStatsCardStatus = "active" | "paused";
|
|
|
7
7
|
export type KeyStatItem = {
|
|
8
8
|
/** Short label rendered above the value in uppercase. */
|
|
9
9
|
label: string;
|
|
10
|
-
/** The value to display — accepts strings or rich React nodes. */
|
|
11
|
-
value
|
|
10
|
+
/** The value to display — accepts strings or rich React nodes. Omit when `loading` is true. */
|
|
11
|
+
value?: React.ReactNode;
|
|
12
12
|
/** Color tone applied to the value. Defaults to `"neutral"`. */
|
|
13
13
|
tone?: KeyStatsCardStatTone;
|
|
14
14
|
/** Optional key used as `data-stat` on the tile element. Falls back to the label. */
|
|
15
15
|
slot?: string;
|
|
16
|
+
/** When true, renders a skeleton shimmer in place of the value while data loads. */
|
|
17
|
+
loading?: boolean;
|
|
16
18
|
};
|
|
17
19
|
type KeyStatsCardData = {
|
|
18
20
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyStatsCard.types.d.ts","sourceRoot":"","sources":["../../../src/components/KeyStatsCard/KeyStatsCard.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG;IACxB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd
|
|
1
|
+
{"version":3,"file":"KeyStatsCard.types.d.ts","sourceRoot":"","sources":["../../../src/components/KeyStatsCard/KeyStatsCard.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG;IACxB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,gEAAgE;IAChE,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,kFAAkF;IAClF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC/C,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,CAAC;IAAE,OAAO,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,gBAAgB,CAAC,GACxC,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
|
|
@@ -9,10 +9,12 @@ import { SideSheetHeader } from "./SideSheetHeader/index.js";
|
|
|
9
9
|
* provided (omit it to hide the close button). With a `SideSheet.Header` it
|
|
10
10
|
* lives in its own column on the right of the header, so header content can
|
|
11
11
|
* never overlap it. Without a header it lives at the top-right of the scrollable
|
|
12
|
-
* `SideSheet.Content` and scrolls away with it. The panel
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* `SideSheet.Content` and scrolls away with it. The panel opens to a width
|
|
13
|
+
* selected by the `size` prop (`default` = 34% of the screen, `wide` = 40%) and
|
|
14
|
+
* can then be resized by dragging the handle on its left edge (clamped between
|
|
15
|
+
* 25% and 60% of the viewport); the dragged width persists while the panel
|
|
16
|
+
* stays mounted. The consuming app supplies the portal slot and "push" padding —
|
|
17
|
+
* this component is only the visual panel.
|
|
16
18
|
*/
|
|
17
19
|
declare function SideSheet({ isOpen, children, title, onClose, size }: SideSheetProps): import("react/jsx-runtime").JSX.Element;
|
|
18
20
|
declare namespace SideSheet {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideSheet.d.ts","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"SideSheet.d.ts","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI7D;;;;;;;;;;;;;GAaG;AACH,iBAAS,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAgB,EAAE,EAAE,cAAc,2CAuCxF;kBAvCQ,SAAS;;;;;AA6ClB,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { cn } from "../../lib/cn.js";
|
|
5
5
|
import { sideSheetOpenWidth, sideSheetSlotVariants as sv } from "./SideSheet.variants.js";
|
|
@@ -7,6 +7,7 @@ import { SideSheetContent } from "./SideSheetContent/index.js";
|
|
|
7
7
|
import { SideSheetContext } from "./SideSheetContext.js";
|
|
8
8
|
import { SideSheetFooter } from "./SideSheetFooter/index.js";
|
|
9
9
|
import { SideSheetHeader } from "./SideSheetHeader/index.js";
|
|
10
|
+
import { useSideSheetResize } from "./hooks/useSideSheetResize.js";
|
|
10
11
|
/**
|
|
11
12
|
* Docked side sheet for master-detail layouts.
|
|
12
13
|
*
|
|
@@ -14,15 +15,21 @@ import { SideSheetHeader } from "./SideSheetHeader/index.js";
|
|
|
14
15
|
* provided (omit it to hide the close button). With a `SideSheet.Header` it
|
|
15
16
|
* lives in its own column on the right of the header, so header content can
|
|
16
17
|
* never overlap it. Without a header it lives at the top-right of the scrollable
|
|
17
|
-
* `SideSheet.Content` and scrolls away with it. The panel
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* `SideSheet.Content` and scrolls away with it. The panel opens to a width
|
|
19
|
+
* selected by the `size` prop (`default` = 34% of the screen, `wide` = 40%) and
|
|
20
|
+
* can then be resized by dragging the handle on its left edge (clamped between
|
|
21
|
+
* 25% and 60% of the viewport); the dragged width persists while the panel
|
|
22
|
+
* stays mounted. The consuming app supplies the portal slot and "push" padding —
|
|
23
|
+
* this component is only the visual panel.
|
|
21
24
|
*/
|
|
22
25
|
function SideSheet({ isOpen, children, title, onClose, size = "default" }) {
|
|
23
26
|
const hasHeader = React.Children.toArray(children).some((child) => React.isValidElement(child) && child.type === SideSheetHeader);
|
|
24
27
|
const openWidth = sideSheetOpenWidth[size];
|
|
25
|
-
|
|
28
|
+
const resize = useSideSheetResize();
|
|
29
|
+
return (_jsx(SideSheetContext.Provider, { value: { onClose, hasHeader }, children: _jsx("div", { ref: resize.panelRef, "data-slot": "side-sheet", className: cn(sv.root), style: {
|
|
30
|
+
width: isOpen ? (resize.width ?? openWidth) : "0px",
|
|
31
|
+
transition: resize.isResizing ? "none" : undefined,
|
|
32
|
+
}, "aria-hidden": !isOpen, "aria-label": title, children: isOpen && (_jsxs(_Fragment, { children: [_jsx("div", { "data-slot": "side-sheet-body", className: cn(sv.body), children: children }), _jsx("div", { "data-slot": "side-sheet-resize-handle", role: "separator", "aria-orientation": "vertical", "aria-label": "Resize side sheet", className: cn(sv.resizeHandle), ...resize.handleProps })] })) }) }));
|
|
26
33
|
}
|
|
27
34
|
SideSheet.Header = SideSheetHeader;
|
|
28
35
|
SideSheet.Content = SideSheetContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideSheet.js","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,IAAI,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"SideSheet.js","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,IAAI,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE;;;;;;;;;;;;;GAaG;AACH,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,SAAS,EAAkB;IACvF,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CACrD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CACzE,CAAC;IAEF,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IAEpC,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,YACtD,cACE,GAAG,EAAE,MAAM,CAAC,QAAQ,eACV,YAAY,EACtB,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EACtB,KAAK,EAAE;gBACL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;gBACnD,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;aACnD,iBACY,CAAC,MAAM,gBACR,KAAK,YAEhB,MAAM,IAAI,CACT,8BACE,2BAAe,iBAAiB,EAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YACpD,QAAQ,GACL,EACN,2BACY,0BAA0B,EACpC,IAAI,EAAC,WAAW,sBACC,UAAU,gBAChB,mBAAmB,EAC9B,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,KAC1B,MAAM,CAAC,WAAW,GACtB,IACD,CACJ,GACG,GACoB,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC;AACnC,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC;AACrC,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { SideSheetSize } from "./SideSheet.types.js";
|
|
2
2
|
export declare const sideSheetSlotVariants: {
|
|
3
|
-
readonly root: readonly ["flex h-full shrink-0 flex-col overflow-hidden", "bg-[var(--color-semantic-side-sheet-bg)]", "transition-[width] duration-300 ease-out"];
|
|
3
|
+
readonly root: readonly ["relative flex h-full shrink-0 flex-col overflow-hidden", "bg-[var(--color-semantic-side-sheet-bg)]", "transition-[width] duration-300 ease-out"];
|
|
4
4
|
readonly body: "relative flex h-full min-h-0 flex-col overflow-hidden";
|
|
5
|
+
readonly resizeHandle: readonly ["absolute inset-y-0 left-0 z-20 w-[6px]", "cursor-col-resize touch-none select-none", "bg-transparent hover:bg-[var(--color-semantic-side-sheet-border)]", "transition-colors"];
|
|
5
6
|
};
|
|
6
7
|
/** Open width per `size`, as a share of the viewport. */
|
|
7
8
|
export declare const sideSheetOpenWidth: Record<SideSheetSize, string>;
|
|
9
|
+
export declare const sideSheetMinWidth = "25vw";
|
|
10
|
+
export declare const sideSheetMaxWidth = "60vw";
|
|
8
11
|
//# sourceMappingURL=SideSheet.variants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideSheet.variants.d.ts","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"SideSheet.variants.d.ts","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,eAAO,MAAM,qBAAqB;;;;CAaxB,CAAC;AAEX,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAG5D,CAAC;AAEF,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,iBAAiB,SAAS,CAAC"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
export const sideSheetSlotVariants = {
|
|
2
2
|
root: [
|
|
3
|
-
"flex h-full shrink-0 flex-col overflow-hidden",
|
|
3
|
+
"relative flex h-full shrink-0 flex-col overflow-hidden",
|
|
4
4
|
"bg-[var(--color-semantic-side-sheet-bg)]",
|
|
5
5
|
"transition-[width] duration-300 ease-out",
|
|
6
6
|
],
|
|
7
7
|
body: "relative flex h-full min-h-0 flex-col overflow-hidden",
|
|
8
|
+
resizeHandle: [
|
|
9
|
+
"absolute inset-y-0 left-0 z-20 w-[6px]",
|
|
10
|
+
"cursor-col-resize touch-none select-none",
|
|
11
|
+
"bg-transparent hover:bg-[var(--color-semantic-side-sheet-border)]",
|
|
12
|
+
"transition-colors",
|
|
13
|
+
],
|
|
8
14
|
};
|
|
9
15
|
/** Open width per `size`, as a share of the viewport. */
|
|
10
16
|
export const sideSheetOpenWidth = {
|
|
11
17
|
default: "34vw",
|
|
12
18
|
wide: "40vw",
|
|
13
19
|
};
|
|
20
|
+
export const sideSheetMinWidth = "25vw";
|
|
21
|
+
export const sideSheetMaxWidth = "60vw";
|
|
14
22
|
//# sourceMappingURL=SideSheet.variants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideSheet.variants.js","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.variants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE;QACJ
|
|
1
|
+
{"version":3,"file":"SideSheet.variants.js","sourceRoot":"","sources":["../../../src/components/SideSheet/SideSheet.variants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE;QACJ,wDAAwD;QACxD,0CAA0C;QAC1C,0CAA0C;KAC3C;IACD,IAAI,EAAE,uDAAuD;IAC7D,YAAY,EAAE;QACZ,wCAAwC;QACxC,0CAA0C;QAC1C,mEAAmE;QACnE,mBAAmB;KACpB;CACO,CAAC;AAEX,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAkC;IAC/D,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface UseSideSheetResizeResult {
|
|
3
|
+
panelRef: React.RefObject<HTMLDivElement | null>;
|
|
4
|
+
width: string | null;
|
|
5
|
+
isResizing: boolean;
|
|
6
|
+
handleProps: {
|
|
7
|
+
onPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;
|
|
8
|
+
onPointerMove: (event: React.PointerEvent<HTMLDivElement>) => void;
|
|
9
|
+
onPointerUp: (event: React.PointerEvent<HTMLDivElement>) => void;
|
|
10
|
+
onPointerCancel: (event: React.PointerEvent<HTMLDivElement>) => void;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare function useSideSheetResize(): UseSideSheetResizeResult;
|
|
14
|
+
//# sourceMappingURL=useSideSheetResize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSideSheetResize.d.ts","sourceRoot":"","sources":["../../../../src/components/SideSheet/hooks/useSideSheetResize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACjD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE;QACX,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;QACnE,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;QACnE,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;QACjE,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;KACtE,CAAC;CACH;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAyC7D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { sideSheetMaxWidth, sideSheetMinWidth } from "../SideSheet.variants.js";
|
|
3
|
+
function vwToPx(vw) {
|
|
4
|
+
return (vw / 100) * window.innerWidth;
|
|
5
|
+
}
|
|
6
|
+
function clampWidth(px) {
|
|
7
|
+
const min = vwToPx(Number.parseFloat(sideSheetMinWidth));
|
|
8
|
+
const max = vwToPx(Number.parseFloat(sideSheetMaxWidth));
|
|
9
|
+
return Math.min(Math.max(px, min), max);
|
|
10
|
+
}
|
|
11
|
+
export function useSideSheetResize() {
|
|
12
|
+
const panelRef = React.useRef(null);
|
|
13
|
+
const dragRef = React.useRef(null);
|
|
14
|
+
const [widthPx, setWidthPx] = React.useState(null);
|
|
15
|
+
const [isResizing, setIsResizing] = React.useState(false);
|
|
16
|
+
const onPointerDown = (event) => {
|
|
17
|
+
const panel = panelRef.current;
|
|
18
|
+
if (!panel)
|
|
19
|
+
return;
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
event.currentTarget.setPointerCapture?.(event.pointerId);
|
|
22
|
+
dragRef.current = { startX: event.clientX, startWidth: panel.getBoundingClientRect().width };
|
|
23
|
+
setIsResizing(true);
|
|
24
|
+
};
|
|
25
|
+
const onPointerMove = (event) => {
|
|
26
|
+
const drag = dragRef.current;
|
|
27
|
+
if (!drag)
|
|
28
|
+
return;
|
|
29
|
+
setWidthPx(clampWidth(drag.startWidth + (drag.startX - event.clientX)));
|
|
30
|
+
};
|
|
31
|
+
const endResize = (event) => {
|
|
32
|
+
if (!dragRef.current)
|
|
33
|
+
return;
|
|
34
|
+
dragRef.current = null;
|
|
35
|
+
setIsResizing(false);
|
|
36
|
+
if (event.currentTarget.hasPointerCapture?.(event.pointerId)) {
|
|
37
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
panelRef,
|
|
42
|
+
width: widthPx === null ? null : `${widthPx}px`,
|
|
43
|
+
isResizing,
|
|
44
|
+
handleProps: {
|
|
45
|
+
onPointerDown,
|
|
46
|
+
onPointerMove,
|
|
47
|
+
onPointerUp: endResize,
|
|
48
|
+
onPointerCancel: endResize,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=useSideSheetResize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSideSheetResize.js","sourceRoot":"","sources":["../../../../src/components/SideSheet/hooks/useSideSheetResize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,SAAS,MAAM,CAAC,EAAU;IACxB,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AACxC,CAAC;AAED,SAAS,UAAU,CAAC,EAAU;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAcD,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAgD,IAAI,CAAC,CAAC;IAClF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,CAAC,KAAyC,EAAE,EAAE;QAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACzD,OAAO,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,CAAC;QAC7F,aAAa,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAyC,EAAE,EAAE;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAyC,EAAE,EAAE;QAC9D,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO;QAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI;QAC/C,UAAU;QACV,WAAW,EAAE;YACX,aAAa;YACb,aAAa;YACb,WAAW,EAAE,SAAS;YACtB,eAAe,EAAE,SAAS;SAC3B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -12,7 +12,7 @@ const TrendIcon = {
|
|
|
12
12
|
};
|
|
13
13
|
export function StatCard(props) {
|
|
14
14
|
if (props.loading) {
|
|
15
|
-
return _jsx(StatCardSkeleton, {});
|
|
15
|
+
return _jsx(StatCardSkeleton, { title: props.title });
|
|
16
16
|
}
|
|
17
17
|
const { title, value, lookbackWindow, trend, change } = props;
|
|
18
18
|
const hasTrend = trend != null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatCard.js","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,IAAI,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGxF,MAAM,SAAS,GAA6C;IAC1D,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,KAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"StatCard.js","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,IAAI,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGxF,MAAM,SAAS,GAA6C;IAC1D,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,KAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,CAAC;IAClD,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC;IAC/B,MAAM,SAAS,GAAG,cAAc,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC;IAEzE,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,OAAO,CACL,KAAC,aAAa,iBAAW,WAAW,YAClC,eAAK,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aACxB,yBAAa,iBAAiB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAClD,KAAK,GACJ,EAEJ,4BAAe,qBAAqB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAC5D,4BAAgB,iBAAiB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YACrD,KAAK,GACD,EACN,IAAI,IAAI,IAAI,IAAI,CACf,KAAC,IAAI,iBACO,iBAAiB,iBACf,MAAM,EAClB,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,GACtC,CACH,IACG,EAEL,SAAS,IAAI,CACZ,4BAAe,kBAAkB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aACtD,cAAc,IAAI,IAAI,IAAI,CACzB,4BAAgB,oBAAoB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAC3D,cAAc,GACV,CACR,EACA,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,CAC7B,4BAAgB,kBAAkB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,YACnE,MAAM,GACF,CACR,IACG,CACP,IACG,GACQ,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
type StatCardSkeletonProps = {
|
|
2
|
+
/**
|
|
3
|
+
* When provided, the title renders normally and only the value row and footer
|
|
4
|
+
* shimmer — partial loading while async metric data is fetched.
|
|
5
|
+
*/
|
|
6
|
+
title?: string;
|
|
7
|
+
};
|
|
1
8
|
/**
|
|
2
9
|
* Loading placeholder for {@link StatCard}. Reuses the card's `CardContainer`
|
|
3
10
|
* surface and layout slots, replacing each piece of content with a `Skeleton`
|
|
4
11
|
* block so the placeholder matches the card's footprint with no layout shift.
|
|
12
|
+
* Pass `title` for partial loading (label visible, value/footer skeleton).
|
|
5
13
|
*/
|
|
6
|
-
export declare function StatCardSkeleton(): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function StatCardSkeleton({ title }?: StatCardSkeletonProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
7
16
|
//# sourceMappingURL=StatCard.skeleton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatCard.skeleton.d.ts","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.skeleton.tsx"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"StatCard.skeleton.d.ts","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.skeleton.tsx"],"names":[],"mappings":"AAKA,KAAK,qBAAqB,GAAG;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAE,qBAA0B,2CAgCrE"}
|
|
@@ -7,8 +7,10 @@ import { statCardVariants as s } from "./StatCard.variants.js";
|
|
|
7
7
|
* Loading placeholder for {@link StatCard}. Reuses the card's `CardContainer`
|
|
8
8
|
* surface and layout slots, replacing each piece of content with a `Skeleton`
|
|
9
9
|
* block so the placeholder matches the card's footprint with no layout shift.
|
|
10
|
+
* Pass `title` for partial loading (label visible, value/footer skeleton).
|
|
10
11
|
*/
|
|
11
|
-
export function StatCardSkeleton() {
|
|
12
|
-
|
|
12
|
+
export function StatCardSkeleton({ title } = {}) {
|
|
13
|
+
const isPartial = title != null;
|
|
14
|
+
return (_jsx(CardContainer, { "data-slot": isPartial ? "stat-card" : "stat-card-skeleton", children: _jsxs("div", { className: cn(s.root), "aria-busy": "true", "aria-live": "polite", children: [_jsx("span", { className: "sr-only", children: "Loading stat" }), isPartial ? (_jsx("p", { "data-slot": "stat-card-title", className: cn(s.title), children: title })) : (_jsx(Skeleton, { className: cn(s.skeleton.title), "aria-hidden": "true" })), _jsxs("div", { "data-slot": "stat-card-value-row", className: cn(s.valueRow), "aria-hidden": "true", children: [_jsx(Skeleton, { className: cn(s.skeleton.value) }), _jsx(Skeleton, { className: cn(s.skeleton.trendIcon) })] }), _jsxs("div", { "data-slot": "stat-card-footer", className: cn(s.footer), "aria-hidden": "true", children: [_jsx(Skeleton, { className: cn(s.skeleton.lookback) }), _jsx(Skeleton, { className: cn(s.skeleton.change) })] })] }) }));
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=StatCard.skeleton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatCard.skeleton.js","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.skeleton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,IAAI,CAAC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"StatCard.skeleton.js","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.skeleton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,IAAI,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAU/D;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,KAAK,KAA4B,EAAE;IACpE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC;IAEhC,OAAO,CACL,KAAC,aAAa,iBAAY,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,YACtE,eAAK,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAY,MAAM,eAAW,QAAQ,aAC7D,eAAM,SAAS,EAAC,SAAS,6BAAoB,EAE5C,SAAS,CAAC,CAAC,CAAC,CACX,yBAAa,iBAAiB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAClD,KAAK,GACJ,CACL,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,IAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAc,MAAM,GAAG,CACjE,EAED,4BACY,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBACb,MAAM,aAElB,KAAC,QAAQ,IAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAI,EAC7C,KAAC,QAAQ,IAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,IAC7C,EAEN,4BAAe,kBAAkB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAc,MAAM,aAC3E,KAAC,QAAQ,IAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAI,EAChD,KAAC,QAAQ,IAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAI,IAC1C,IACF,GACQ,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -22,8 +22,11 @@ type StatCardData = {
|
|
|
22
22
|
change?: string;
|
|
23
23
|
};
|
|
24
24
|
/**
|
|
25
|
-
* Either a fully populated stat card, or a loading placeholder. When `loading`
|
|
26
|
-
* true the card renders its own skeleton and data props are not required.
|
|
25
|
+
* Either a fully populated stat card, or a loading placeholder. When `loading`
|
|
26
|
+
* is true the card renders its own skeleton and data props are not required.
|
|
27
|
+
* If `title` is provided alongside `loading`, the title stays visible while
|
|
28
|
+
* the value row and footer shimmer — useful when the label is known before
|
|
29
|
+
* async metric data arrives.
|
|
27
30
|
*/
|
|
28
31
|
export type StatCardProps = ({
|
|
29
32
|
loading?: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatCard.types.d.ts","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD,KAAK,YAAY,GAAG;IAClB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"StatCard.types.d.ts","sourceRoot":"","sources":["../../../src/components/StatCard/StatCard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD,KAAK,YAAY,GAAG;IAClB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GACrB,CAAC;IAAE,OAAO,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,YAAY,CAAC,GACpC,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC"}
|