@mastra/playground-ui 33.0.0 → 34.0.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/CHANGELOG.md +38 -0
- package/dist/components/DataList.cjs.js +2 -2
- package/dist/components/DataList.es.js +2 -2
- package/dist/components/HorizontalBars.cjs.js +1 -1
- package/dist/components/HorizontalBars.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -2
- package/dist/components/LogsDataList.es.js +2 -2
- package/dist/components/MainSidebar.cjs.js +1 -1
- package/dist/components/MainSidebar.es.js +1 -1
- package/dist/components/MetricsDataTable.cjs.js +1 -1
- package/dist/components/MetricsDataTable.es.js +1 -1
- package/dist/components/ScrollArea.cjs.js +1 -1
- package/dist/components/ScrollArea.es.js +1 -1
- package/dist/{data-list-skeleton-C9Ncz3jM.js → data-list-skeleton-B3bHGBlU.js} +91 -13
- package/dist/data-list-skeleton-B3bHGBlU.js.map +1 -0
- package/dist/{data-list-skeleton-Bges_t5u.cjs → data-list-skeleton-DR7cqfzq.cjs} +91 -12
- package/dist/data-list-skeleton-DR7cqfzq.cjs.map +1 -0
- package/dist/{horizontal-bars-DkJlf6-x.cjs → horizontal-bars-C9qp4r47.cjs} +2 -2
- package/dist/{horizontal-bars-DkJlf6-x.cjs.map → horizontal-bars-C9qp4r47.cjs.map} +1 -1
- package/dist/{horizontal-bars-B43f5B_S.js → horizontal-bars-DjLETHvH.js} +2 -2
- package/dist/{horizontal-bars-B43f5B_S.js.map → horizontal-bars-DjLETHvH.js.map} +1 -1
- package/dist/index.cjs.js +10 -9
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +153 -1
- package/dist/index.es.js +12 -11
- package/dist/index.es.js.map +1 -1
- package/dist/{logs-data-list-B0Y5AHWL.js → logs-data-list-Be970xP6.js} +2 -2
- package/dist/{logs-data-list-B0Y5AHWL.js.map → logs-data-list-Be970xP6.js.map} +1 -1
- package/dist/{logs-data-list-DikL8ZQ0.cjs → logs-data-list-De4DHIW9.cjs} +2 -2
- package/dist/{logs-data-list-DikL8ZQ0.cjs.map → logs-data-list-De4DHIW9.cjs.map} +1 -1
- package/dist/{main-sidebar-0q7MXh2j.js → main-sidebar-Bk2U9O57.js} +2 -2
- package/dist/{main-sidebar-0q7MXh2j.js.map → main-sidebar-Bk2U9O57.js.map} +1 -1
- package/dist/{main-sidebar-H8NQ7njm.cjs → main-sidebar-CWoM-yrH.cjs} +2 -2
- package/dist/{main-sidebar-H8NQ7njm.cjs.map → main-sidebar-CWoM-yrH.cjs.map} +1 -1
- package/dist/{metrics-data-table-BpEAlJi0.cjs → metrics-data-table-D7vx2WEJ.cjs} +2 -2
- package/dist/{metrics-data-table-BpEAlJi0.cjs.map → metrics-data-table-D7vx2WEJ.cjs.map} +1 -1
- package/dist/{metrics-data-table-Dds2TkvE.js → metrics-data-table-DryqJWoI.js} +2 -2
- package/dist/{metrics-data-table-Dds2TkvE.js.map → metrics-data-table-DryqJWoI.js.map} +1 -1
- package/dist/{scroll-area-KogxLVrV.cjs → scroll-area-BqJfcT94.cjs} +11 -2
- package/dist/scroll-area-BqJfcT94.cjs.map +1 -0
- package/dist/{scroll-area-BCZiAvhR.js → scroll-area-BtDqmqBK.js} +11 -2
- package/dist/scroll-area-BtDqmqBK.js.map +1 -0
- package/dist/src/ds/components/DataList/data-list-root.d.ts +10 -1
- package/dist/src/ds/components/DataList/data-list-row-link.d.ts +1 -1
- package/dist/src/ds/components/DataList/data-list.stories.d.ts +16 -1
- package/dist/src/ds/components/DataList/shared.d.ts +13 -0
- package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +12 -0
- package/dist/{traces-data-list-Dru2XnRN.js → traces-data-list-JWUFbWnS.js} +7 -4
- package/dist/traces-data-list-JWUFbWnS.js.map +1 -0
- package/dist/{traces-data-list-5GA3JumQ.cjs → traces-data-list-kc8O_Yyd.cjs} +7 -4
- package/dist/traces-data-list-kc8O_Yyd.cjs.map +1 -0
- package/package.json +18 -18
- package/dist/data-list-skeleton-Bges_t5u.cjs.map +0 -1
- package/dist/data-list-skeleton-C9Ncz3jM.js.map +0 -1
- package/dist/scroll-area-BCZiAvhR.js.map +0 -1
- package/dist/scroll-area-KogxLVrV.cjs.map +0 -1
- package/dist/traces-data-list-5GA3JumQ.cjs.map +0 -1
- package/dist/traces-data-list-Dru2XnRN.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# @mastra/playground-ui
|
|
2
2
|
|
|
3
|
+
## 34.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added a `striped` variant to the `DataList` component for a flat, full-bleed table look: zebra-striped rows, a contrasting sticky header with column separators, rounded corners, and edge fade masks via an overlay scrollbar (virtualization preserved). Also added a per-row `error` tone. ([#18023](https://github.com/mastra-ai/mastra/pull/18023))
|
|
8
|
+
|
|
9
|
+
Studio now uses this variant on the Observability, Scorers, Agents, Workflows, Tools, Datasets, MCP Servers, Processors, Prompts, Experiments, Schedules, and Logs tables for a consistent, denser browse experience.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
// Whole-list look
|
|
13
|
+
<DataList columns="auto 1fr auto" variant="striped">
|
|
14
|
+
<DataList.Top>…</DataList.Top>
|
|
15
|
+
|
|
16
|
+
{/* Per-row tone — error rows get a subtle destructive tint */}
|
|
17
|
+
<DataList.RowButton variant="error">…</DataList.RowButton>
|
|
18
|
+
</DataList>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- dependencies updates: ([#17147](https://github.com/mastra-ai/mastra/pull/17147))
|
|
24
|
+
- Updated dependency [`@codemirror/autocomplete@^6.20.3` ↗︎](https://www.npmjs.com/package/@codemirror/autocomplete/v/6.20.3) (from `^6.20.1`, in `dependencies`)
|
|
25
|
+
- Updated dependency [`@codemirror/legacy-modes@^6.5.3` ↗︎](https://www.npmjs.com/package/@codemirror/legacy-modes/v/6.5.3) (from `^6.5.2`, in `dependencies`)
|
|
26
|
+
- Updated dependency [`@codemirror/merge@^6.12.2` ↗︎](https://www.npmjs.com/package/@codemirror/merge/v/6.12.2) (from `^6.12.1`, in `dependencies`)
|
|
27
|
+
- Updated dependency [`@codemirror/search@^6.7.0` ↗︎](https://www.npmjs.com/package/@codemirror/search/v/6.7.0) (from `^6.6.0`, in `dependencies`)
|
|
28
|
+
- Updated dependency [`@codemirror/view@^6.43.1` ↗︎](https://www.npmjs.com/package/@codemirror/view/v/6.43.1) (from `^6.40.0`, in `dependencies`)
|
|
29
|
+
- Updated dependency [`@uiw/codemirror-theme-dracula@^4.25.10` ↗︎](https://www.npmjs.com/package/@uiw/codemirror-theme-dracula/v/4.25.10) (from `^4.25.9`, in `dependencies`)
|
|
30
|
+
- Updated dependency [`@uiw/react-codemirror@^4.25.10` ↗︎](https://www.npmjs.com/package/@uiw/react-codemirror/v/4.25.10) (from `^4.25.9`, in `dependencies`)
|
|
31
|
+
|
|
32
|
+
- Republished clean patch versions after compromised npm releases were published outside of the trusted release workflow. ([#18049](https://github.com/mastra-ai/mastra/pull/18049))
|
|
33
|
+
|
|
34
|
+
These packages must be released as clean versions higher than the compromised versions currently present on npm so semver ranges resolve to trusted tarballs.
|
|
35
|
+
|
|
36
|
+
- Updated dependencies [[`de66bb0`](https://github.com/mastra-ai/mastra/commit/de66bb040570444c702ce4d8e1e228a5de2949cb), [`67bf8e2`](https://github.com/mastra-ai/mastra/commit/67bf8e206dfe583954d96015cf0d09f7ac50e45f), [`8216d05`](https://github.com/mastra-ai/mastra/commit/8216d0528d866eb9a07f5d4c87ea3bb1e1139b45), [`d18b23c`](https://github.com/mastra-ai/mastra/commit/d18b23c5e29dfc381e73e3c51fcf6c779afd1823), [`5eb94eb`](https://github.com/mastra-ai/mastra/commit/5eb94ebcf66d4e28c9e26d5821ac93379bab20a0), [`1fa3e12`](https://github.com/mastra-ai/mastra/commit/1fa3e123582b63cfe49de4ee52dc6a065e8d956a), [`f9ee2ac`](https://github.com/mastra-ai/mastra/commit/f9ee2ac661af584e61bc063ac208c9035cd752ef), [`c853d53`](https://github.com/mastra-ai/mastra/commit/c853d535d2df84ab89db1adb4c28900c54c9a2d2), [`d8df1f8`](https://github.com/mastra-ai/mastra/commit/d8df1f8e947e1966c9d4e54713df56d0d0d65226), [`641d50a`](https://github.com/mastra-ai/mastra/commit/641d50a2b253a84406cae04f1842b9cb2b392ba6), [`9192ddb`](https://github.com/mastra-ai/mastra/commit/9192ddbced8949113b30de444cbe763f075b59f5), [`42b0dba`](https://github.com/mastra-ai/mastra/commit/42b0dba42577bca39c82984354f193404b889db3), [`ae96523`](https://github.com/mastra-ai/mastra/commit/ae965231f562d9766b0c90c49a69fc68acaa031c), [`17d5a92`](https://github.com/mastra-ai/mastra/commit/17d5a9211aa293b4d4418de3de70dc0394d58101), [`5573693`](https://github.com/mastra-ai/mastra/commit/5573693b589822250e20dfe6cf66e9ff3bc96da8), [`ec4da8a`](https://github.com/mastra-ai/mastra/commit/ec4da8a09e0d2ab452c6ee2c786042ea826b77e5), [`adc44e1`](https://github.com/mastra-ai/mastra/commit/adc44e13c7e570b91e86b20ea7556e61d819db31), [`ed346c0`](https://github.com/mastra-ai/mastra/commit/ed346c0bee2d8496690a4e538bfba1e46894660f), [`c9ce1b2`](https://github.com/mastra-ai/mastra/commit/c9ce1b28d10871110648f9d7b6d76e880b9fa999), [`3ef01fd`](https://github.com/mastra-ai/mastra/commit/3ef01fd130b53d5bd4f828beb174e516a2eb1158), [`245a9a3`](https://github.com/mastra-ai/mastra/commit/245a9a315705fce17ddd980f78a92504b6615c4a), [`dc0b611`](https://github.com/mastra-ai/mastra/commit/dc0b6119b769bd00ee2c5df9259fb376fe63077a), [`38b5de8`](https://github.com/mastra-ai/mastra/commit/38b5de8e5d1d41a69522addf53d96f4b3a1d5bf0), [`dc0b611`](https://github.com/mastra-ai/mastra/commit/dc0b6119b769bd00ee2c5df9259fb376fe63077a), [`dd6a66e`](https://github.com/mastra-ai/mastra/commit/dd6a66ea0b32e0dea8059aec6b35d151e2c87dc4), [`d785c59`](https://github.com/mastra-ai/mastra/commit/d785c593b67fcb4cdc4fab9fdbde5f3b7665efc0), [`641d50a`](https://github.com/mastra-ai/mastra/commit/641d50a2b253a84406cae04f1842b9cb2b392ba6), [`1fa3e12`](https://github.com/mastra-ai/mastra/commit/1fa3e123582b63cfe49de4ee52dc6a065e8d956a), [`8b984f4`](https://github.com/mastra-ai/mastra/commit/8b984f4361c202270ceb69257185c4756c9a7c56), [`bf08402`](https://github.com/mastra-ai/mastra/commit/bf084022374fa5d06ca70ed67a86dd64e379071b), [`81fe587`](https://github.com/mastra-ai/mastra/commit/81fe587275035715c1720ddf3fee0505cf053036), [`1fa3e12`](https://github.com/mastra-ai/mastra/commit/1fa3e123582b63cfe49de4ee52dc6a065e8d956a), [`403c438`](https://github.com/mastra-ai/mastra/commit/403c438e417278989ce247233d2c465b8d902cdd), [`44123de`](https://github.com/mastra-ai/mastra/commit/44123def4cc81cf1042a77db2c095a47bbf5275e), [`f8ba195`](https://github.com/mastra-ai/mastra/commit/f8ba1954e27ee2b20586cc6cd9cf13c002c232f2)]:
|
|
37
|
+
- @mastra/core@1.43.0
|
|
38
|
+
- @mastra/client-js@1.25.0
|
|
39
|
+
- @mastra/react@0.7.0
|
|
40
|
+
|
|
3
41
|
## 33.0.0
|
|
4
42
|
|
|
5
43
|
### Minor Changes
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
-
const tracesDataList = require('../traces-data-list-
|
|
6
|
-
const dataListSkeleton = require('../data-list-skeleton-
|
|
5
|
+
const tracesDataList = require('../traces-data-list-kc8O_Yyd.cjs');
|
|
6
|
+
const dataListSkeleton = require('../data-list-skeleton-DR7cqfzq.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { D as DataList, S as ScoresDataList, T as TracesDataList } from '../traces-data-list-
|
|
2
|
-
export { D as DataListSkeleton } from '../data-list-skeleton-
|
|
1
|
+
export { D as DataList, S as ScoresDataList, T as TracesDataList } from '../traces-data-list-JWUFbWnS.js';
|
|
2
|
+
export { D as DataListSkeleton } from '../data-list-skeleton-B3bHGBlU.js';
|
|
3
3
|
//# sourceMappingURL=DataList.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { H as HorizontalBars } from '../horizontal-bars-
|
|
1
|
+
export { H as HorizontalBars } from '../horizontal-bars-DjLETHvH.js';
|
|
2
2
|
//# sourceMappingURL=HorizontalBars.es.js.map
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
-
const logsDataList = require('../logs-data-list-
|
|
6
|
-
const dataListSkeleton = require('../data-list-skeleton-
|
|
5
|
+
const logsDataList = require('../logs-data-list-De4DHIW9.cjs');
|
|
6
|
+
const dataListSkeleton = require('../data-list-skeleton-DR7cqfzq.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { L as LogsDataList } from '../logs-data-list-
|
|
2
|
-
export { D as LogsDataListSkeleton } from '../data-list-skeleton-
|
|
1
|
+
export { L as LogsDataList } from '../logs-data-list-Be970xP6.js';
|
|
2
|
+
export { D as LogsDataListSkeleton } from '../data-list-skeleton-B3bHGBlU.js';
|
|
3
3
|
//# sourceMappingURL=LogsDataList.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { M as MainSidebar, a as MainSidebarMobileTrigger, b as MainSidebarProvider, c as MainSidebarTrigger, g as getIsLinkActive, n as navItemClasses, u as useMainSidebar, d as useMaybeSidebar } from '../main-sidebar-
|
|
1
|
+
export { M as MainSidebar, a as MainSidebarMobileTrigger, b as MainSidebarProvider, c as MainSidebarTrigger, g as getIsLinkActive, n as navItemClasses, u as useMainSidebar, d as useMaybeSidebar } from '../main-sidebar-Bk2U9O57.js';
|
|
2
2
|
//# sourceMappingURL=MainSidebar.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { M as MetricsDataTable } from '../metrics-data-table-
|
|
1
|
+
export { M as MetricsDataTable } from '../metrics-data-table-DryqJWoI.js';
|
|
2
2
|
//# sourceMappingURL=MetricsDataTable.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as ScrollArea, a as ScrollBar } from '../scroll-area-
|
|
1
|
+
export { S as ScrollArea, a as ScrollBar } from '../scroll-area-BtDqmqBK.js';
|
|
2
2
|
//# sourceMappingURL=ScrollArea.es.js.map
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { c as cn } from './utils-CzYGxqbG.js';
|
|
3
3
|
import { Children, isValidElement, cloneElement, useContext, createContext, forwardRef } from 'react';
|
|
4
|
+
import { c as cva } from './index-CsyK0ihk.js';
|
|
4
5
|
import { C as Checkbox } from './checkbox-DmKlRClz.js';
|
|
5
6
|
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-DehuxlSR.js';
|
|
6
7
|
import { format, isToday } from 'date-fns';
|
|
8
|
+
import { S as ScrollArea } from './scroll-area-BtDqmqBK.js';
|
|
7
9
|
|
|
8
10
|
const AgentIcon = (props) => /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 8.82265 8.51434", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [
|
|
9
11
|
/* @__PURE__ */ jsx(
|
|
@@ -166,19 +168,64 @@ function DataListNoMatch({ message = "Nothing matches your search", className })
|
|
|
166
168
|
return /* @__PURE__ */ jsx("div", { className: cn("col-span-full flex flex-col items-center justify-center gap-2 py-12 text-neutral3", className), children: /* @__PURE__ */ jsx("p", { className: "text-ui-md", children: message }) });
|
|
167
169
|
}
|
|
168
170
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
+
const dataListRootVariants = cva("grid min-w-0 max-w-full content-start", {
|
|
172
|
+
variants: {
|
|
173
|
+
variant: {
|
|
174
|
+
default: "bg-surface2 border border-border1 rounded-xl",
|
|
175
|
+
striped: cn(
|
|
176
|
+
"gap-y-px",
|
|
177
|
+
// The header is sticky, so it must be opaque to occlude rows scrolling
|
|
178
|
+
// behind it (a translucent overlay would show ghosted content through it).
|
|
179
|
+
// Rows keep the translucent tints — only the header needs to be solid.
|
|
180
|
+
"[&_.data-list-top]:mx-0 [&_.data-list-top]:bg-surface4 [&_.data-list-top]:after:hidden",
|
|
181
|
+
"[&_.data-list-top]:rounded-t-xl [&_.data-list-top]:rounded-b-md",
|
|
182
|
+
// header column separators: a short, faint vertical line centered in the gap
|
|
183
|
+
// to the left of every header cell but the first. A `before` pseudo (not a
|
|
184
|
+
// `border-l` + padding) keeps header text aligned with the row cells below.
|
|
185
|
+
// The cell's default `overflow-hidden` would clip a gap-positioned pseudo, so
|
|
186
|
+
// these cells switch to `overflow-visible`; the title text still truncates via
|
|
187
|
+
// its inner `truncate` span, so nothing else spills.
|
|
188
|
+
"[&_.data-list-top>*:not(:first-child)]:relative [&_.data-list-top>*:not(:first-child)]:overflow-visible",
|
|
189
|
+
'[&_.data-list-top>*:not(:first-child)]:before:absolute [&_.data-list-top>*:not(:first-child)]:before:-left-4 [&_.data-list-top>*:not(:first-child)]:before:top-1/2 [&_.data-list-top>*:not(:first-child)]:before:-translate-y-1/2 [&_.data-list-top>*:not(:first-child)]:before:h-4 [&_.data-list-top>*:not(:first-child)]:before:w-px [&_.data-list-top>*:not(:first-child)]:before:bg-border2 [&_.data-list-top>*:not(:first-child)]:before:content-[""]',
|
|
190
|
+
"[&_.data-list-row]:mx-0 [&_.data-list-row]:my-0 [&_.data-list-row]:rounded-md [&_.data-list-row]:after:hidden",
|
|
191
|
+
"[&_.data-list-row]:even:bg-surface-overlay-soft",
|
|
192
|
+
"[&_.data-list-row]:hover:bg-surface-overlay-strong!",
|
|
193
|
+
"[&_.data-list-row]:focus-visible:bg-surface-overlay-strong!"
|
|
194
|
+
)
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
defaultVariants: {
|
|
198
|
+
variant: "default"
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
function DataListRoot({ children, columns, className, variant = "default", scrollRef }) {
|
|
202
|
+
const isStriped = variant === "striped";
|
|
203
|
+
const grid = /* @__PURE__ */ jsx(
|
|
171
204
|
"div",
|
|
172
205
|
{
|
|
173
|
-
ref: scrollRef,
|
|
206
|
+
ref: isStriped ? void 0 : scrollRef,
|
|
174
207
|
className: cn(
|
|
175
|
-
|
|
176
|
-
|
|
208
|
+
dataListRootVariants({ variant }),
|
|
209
|
+
// Default is its own scroll container; striped delegates scrolling to the
|
|
210
|
+
// ScrollArea viewport, so the grid just lays out.
|
|
211
|
+
!isStriped && "max-h-full overflow-auto",
|
|
212
|
+
!isStriped && className
|
|
177
213
|
),
|
|
178
214
|
style: { gridTemplateColumns: columns },
|
|
179
215
|
children
|
|
180
216
|
}
|
|
181
217
|
);
|
|
218
|
+
if (!isStriped) return grid;
|
|
219
|
+
return /* @__PURE__ */ jsx(
|
|
220
|
+
ScrollArea,
|
|
221
|
+
{
|
|
222
|
+
orientation: "both",
|
|
223
|
+
mask: { top: false },
|
|
224
|
+
viewportRef: scrollRef,
|
|
225
|
+
className: cn("h-full w-full rounded-t-xl", className),
|
|
226
|
+
children: grid
|
|
227
|
+
}
|
|
228
|
+
);
|
|
182
229
|
}
|
|
183
230
|
|
|
184
231
|
const DataListRowWrapperContext = createContext(false);
|
|
@@ -199,9 +246,32 @@ const dataListRowInteractiveStyles = [
|
|
|
199
246
|
];
|
|
200
247
|
const dataListRowStyles = ["mx-1", ...dataListRowInteractiveStyles, ...dataListRowOuterStyles];
|
|
201
248
|
const dataListRowStaticStyles = ["mx-1 grid grid-cols-subgrid gap-8 px-5", ...dataListRowOuterStyles];
|
|
249
|
+
const dataListRowVariants = cva("", {
|
|
250
|
+
variants: {
|
|
251
|
+
variant: {
|
|
252
|
+
default: "",
|
|
253
|
+
error: "bg-notice-destructive/10! hover:bg-notice-destructive/15!"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
defaultVariants: {
|
|
257
|
+
variant: "default"
|
|
258
|
+
}
|
|
259
|
+
});
|
|
202
260
|
|
|
203
261
|
const DataListRowButton = forwardRef(
|
|
204
|
-
({
|
|
262
|
+
({
|
|
263
|
+
children,
|
|
264
|
+
className,
|
|
265
|
+
type = "button",
|
|
266
|
+
flushLeft,
|
|
267
|
+
flushRight,
|
|
268
|
+
colStart,
|
|
269
|
+
colEnd,
|
|
270
|
+
featured,
|
|
271
|
+
variant,
|
|
272
|
+
style,
|
|
273
|
+
...rest
|
|
274
|
+
}, ref) => {
|
|
205
275
|
const isWrapped = useDataListRowWrapperContext();
|
|
206
276
|
const hasColumnOverride = colStart !== void 0 || colEnd !== void 0;
|
|
207
277
|
const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;
|
|
@@ -215,7 +285,10 @@ const DataListRowButton = forwardRef(
|
|
|
215
285
|
"text-left",
|
|
216
286
|
!isWrapped && flushLeft && "ml-0!",
|
|
217
287
|
!isWrapped && flushRight && "mr-0!",
|
|
218
|
-
|
|
288
|
+
// `!` so the selection fill wins over the striped variant's zebra tint
|
|
289
|
+
// (a higher-specificity root descendant rule); same color in `default`.
|
|
290
|
+
featured && "bg-surface4!",
|
|
291
|
+
dataListRowVariants({ variant }),
|
|
219
292
|
className
|
|
220
293
|
),
|
|
221
294
|
style: resolvedStyle,
|
|
@@ -237,7 +310,8 @@ function DataListRowLink({
|
|
|
237
310
|
flushRight,
|
|
238
311
|
colStart,
|
|
239
312
|
colEnd,
|
|
240
|
-
featured
|
|
313
|
+
featured,
|
|
314
|
+
variant
|
|
241
315
|
}) {
|
|
242
316
|
const isWrapped = useDataListRowWrapperContext();
|
|
243
317
|
const hasColumnOverride = colStart !== void 0 || colEnd !== void 0;
|
|
@@ -250,7 +324,10 @@ function DataListRowLink({
|
|
|
250
324
|
...isWrapped ? dataListRowInteractiveStyles : dataListRowStyles,
|
|
251
325
|
!isWrapped && flushLeft && "ml-0!",
|
|
252
326
|
!isWrapped && flushRight && "mr-0!",
|
|
253
|
-
|
|
327
|
+
// `!` so the selection fill wins over the striped variant's zebra tint
|
|
328
|
+
// (a higher-specificity root descendant rule); same color in `default`.
|
|
329
|
+
featured && "bg-surface4!",
|
|
330
|
+
dataListRowVariants({ variant }),
|
|
254
331
|
className
|
|
255
332
|
),
|
|
256
333
|
style: resolvedStyle,
|
|
@@ -296,16 +373,17 @@ function DataListTop({ children, className, hasLeadingCell }) {
|
|
|
296
373
|
const DataListTopCell = forwardRef(
|
|
297
374
|
({ children, className, as, ...rest }, ref) => {
|
|
298
375
|
const Component = as || "span";
|
|
376
|
+
const isText = typeof children === "string" || typeof children === "number";
|
|
299
377
|
return /* @__PURE__ */ jsx(
|
|
300
378
|
Component,
|
|
301
379
|
{
|
|
302
380
|
ref,
|
|
303
381
|
className: cn(
|
|
304
|
-
"h-8 min-w-0 max-w-full overflow-hidden py-1 flex items-center
|
|
382
|
+
"h-8 min-w-0 max-w-full overflow-hidden py-1 flex items-center whitespace-nowrap text-neutral2 font-semibold tracking-tight text-ui-sm",
|
|
305
383
|
className
|
|
306
384
|
),
|
|
307
385
|
...rest,
|
|
308
|
-
children
|
|
386
|
+
children: isText ? /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children }) : children
|
|
309
387
|
}
|
|
310
388
|
);
|
|
311
389
|
}
|
|
@@ -385,5 +463,5 @@ function DataListSkeleton({ columns = "auto 1fr auto auto", numberOfRows = 3 })
|
|
|
385
463
|
)) });
|
|
386
464
|
}
|
|
387
465
|
|
|
388
|
-
export { AgentIcon as A, DataListSkeleton as D, WorkflowIcon as W, DataListCell as a, DataListMonoCell as b, DataListRoot as c, DataListNextPageLoading as d, DataListTimeCell as e, DataListDateCell as f, DataListNoMatch as g, DataListSpacer as h, DataListRowLink as i, DataListRowButton as j, DataListRowWrapper as k, DataListTopCellSmart as l, DataListTopCellWithTooltip as m, DataListTopCell as n, DataListTop as o,
|
|
389
|
-
//# sourceMappingURL=data-list-skeleton-
|
|
466
|
+
export { AgentIcon as A, DataListSkeleton as D, WorkflowIcon as W, DataListCell as a, DataListMonoCell as b, DataListRoot as c, DataListNextPageLoading as d, DataListTimeCell as e, DataListDateCell as f, DataListNoMatch as g, DataListSpacer as h, DataListRowLink as i, DataListRowButton as j, DataListRowWrapper as k, DataListTopCellSmart as l, DataListTopCellWithTooltip as m, DataListTopCell as n, DataListTop as o, dataListRowVariants as p, dataListRowStaticStyles as q, DataListTopSelectCell as r, DataListSelectCell as s, DataListIdCell as t, useDataListRowWrapperContext as u, DataListDescriptionCell as v, DataListNameCell as w, DataListTextCell as x };
|
|
467
|
+
//# sourceMappingURL=data-list-skeleton-B3bHGBlU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-list-skeleton-B3bHGBlU.js","sources":["../src/ds/icons/AgentIcon.tsx","../src/ds/icons/WorkflowIcon.tsx","../src/ds/components/DataList/data-list-cells.tsx","../src/ds/components/DataList/data-list-next-page-loading.tsx","../src/ds/components/DataList/data-list-no-match.tsx","../src/ds/components/DataList/data-list-root.tsx","../src/ds/components/DataList/data-list-row-wrapper-context.ts","../src/ds/components/DataList/shared.ts","../src/ds/components/DataList/data-list-row-button.tsx","../src/ds/components/DataList/data-list-row-link.tsx","../src/ds/components/DataList/data-list-row-wrapper.tsx","../src/ds/components/DataList/data-list-spacer.tsx","../src/ds/components/DataList/data-list-top.tsx","../src/ds/components/DataList/data-list-top-cell.tsx","../src/ds/components/DataList/data-list-skeleton.tsx"],"sourcesContent":["import React from 'react';\n\nexport const AgentIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 8.82265 8.51434\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6.76646 6.16953C6.56909 6.10559 6.40521 5.96585 6.31087 5.78107C6.21653 5.5963 6.19945 5.38161 6.2634 5.18424C6.32735 4.98687 6.46708 4.82299 6.65186 4.72865C6.83663 4.63431 7.05132 4.61723 7.24869 4.68118C7.45933 4.74996 7.6849 4.75913 7.90043 4.70768C8.11596 4.65622 8.31306 4.54615 8.46992 4.38963C8.62678 4.23312 8.73729 4.03626 8.78921 3.82084C8.84114 3.60542 8.83246 3.37984 8.76414 3.16904C8.69582 2.95825 8.57052 2.77046 8.4021 2.62646C8.23368 2.48246 8.02871 2.38785 7.80986 2.35311C7.59101 2.31836 7.36681 2.34484 7.16208 2.4296C6.95734 2.51436 6.78004 2.6541 6.64979 2.83337C6.39274 3.18567 6.05613 3.47228 5.66736 3.66987C5.27858 3.86747 4.84864 3.97046 4.41254 3.97046C3.97643 3.97046 3.54649 3.86747 3.15772 3.66987C2.76895 3.47228 2.43234 3.18567 2.17528 2.83337C2.04528 2.65368 1.86807 2.51346 1.66329 2.42826C1.45852 2.34306 1.23415 2.3162 1.01505 2.35065C0.795944 2.3851 0.590648 2.47951 0.421892 2.62344C0.253137 2.76736 0.127507 2.95519 0.0589124 3.16611C-0.00968171 3.37703 -0.0185632 3.60282 0.0332514 3.81848C0.0850661 4.03414 0.195555 4.23125 0.352484 4.38799C0.509413 4.54472 0.706659 4.65497 0.92238 4.70652C1.1381 4.75808 1.36388 4.74892 1.57472 4.68007C1.77224 4.61634 1.98698 4.63369 2.1717 4.72829C2.35643 4.82289 2.49601 4.987 2.55973 5.18452C2.62346 5.38203 2.60611 5.59677 2.51151 5.7815C2.41691 5.96623 2.2528 6.10581 2.05528 6.16953C1.84456 6.23788 1.65684 6.36317 1.51288 6.53155C1.36893 6.69993 1.27434 6.90485 1.23959 7.12364C1.20483 7.34242 1.23126 7.56656 1.31596 7.77126C1.40065 7.97597 1.5403 8.15326 1.71948 8.28354C1.89865 8.41382 2.11036 8.49201 2.33121 8.50946C2.55205 8.52692 2.77342 8.48296 2.97083 8.38244C3.16825 8.28193 3.33402 8.12877 3.44981 7.93992C3.56561 7.75106 3.62692 7.53386 3.62697 7.31233C3.62697 7.10501 3.70933 6.90619 3.85592 6.7596C4.00251 6.613 4.20134 6.53065 4.40865 6.53065C4.61596 6.53065 4.81479 6.613 4.96138 6.7596C5.10797 6.90619 5.19033 7.10501 5.19033 7.31233C5.19027 7.53399 5.25152 7.75136 5.36731 7.94037C5.4831 8.12939 5.64892 8.2827 5.84642 8.38334C6.04392 8.48399 6.26541 8.52804 6.4864 8.51063C6.70738 8.49322 6.91924 8.41502 7.09854 8.28469C7.27785 8.15436 7.41761 7.97698 7.50237 7.77216C7.58713 7.56734 7.61359 7.34307 7.57882 7.12414C7.54404 6.90522 7.44939 6.70018 7.30534 6.53171C7.16128 6.36323 6.97344 6.23789 6.76257 6.16953H6.76646Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4.41198 2.40337C5.07565 2.40337 5.61367 1.86536 5.61367 1.20168C5.61367 0.538012 5.07565 0 4.41198 0C3.74831 0 3.2103 0.538012 3.2103 1.20168C3.2103 1.86536 3.74831 2.40337 4.41198 2.40337Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const WorkflowIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.08789 8.97168\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M1.98047 5.00977C2.17347 5.00977 2.33002 5.16639 2.33008 5.35938C2.33008 5.55242 2.17351 5.70898 1.98047 5.70898C1.27292 5.70915 0.699436 6.2827 0.699219 6.99023C0.699219 7.69795 1.27279 8.2723 1.98047 8.27246C2.68829 8.27246 3.2627 7.69805 3.2627 6.99023C3.26291 6.79738 3.4194 6.64063 3.6123 6.64062C3.80503 6.64084 3.9617 6.79751 3.96191 6.99023C3.96191 8.08413 3.07437 8.97168 1.98047 8.97168C0.886706 8.97152 0 8.08403 0 6.99023C0.000217392 5.89662 0.886841 5.00993 1.98047 5.00977ZM7.10742 5.00977C8.20105 5.00992 9.08767 5.89662 9.08789 6.99023C9.08789 8.08404 8.20119 8.97152 7.10742 8.97168C6.01359 8.97159 5.12598 8.08408 5.12598 6.99023C5.1262 6.79757 5.28294 6.64092 5.47559 6.64062C5.66849 6.64063 5.82497 6.79738 5.8252 6.99023C5.8252 7.698 6.39968 8.27238 7.10742 8.27246C7.81511 8.2723 8.38867 7.69796 8.38867 6.99023C8.38845 6.2827 7.81497 5.70914 7.10742 5.70898C6.91445 5.7089 6.75781 5.55236 6.75781 5.35938C6.75788 5.16644 6.91449 5.00985 7.10742 5.00977ZM4.54395 0C5.44471 0 6.17465 0.730134 6.1748 1.63086C6.1748 2.27964 5.79613 2.83941 5.24768 3.102C5.0501 3.1966 4.89355 3.37979 4.89355 3.59885V4.08919C4.89355 4.21279 4.94266 4.33133 5.03006 4.41873L6.80071 6.18938C6.87996 6.26863 6.99535 6.29199 7.10742 6.29199C7.49331 6.29206 7.80642 6.60438 7.80664 6.99023C7.80664 7.37627 7.49344 7.68938 7.10742 7.68945C6.72134 7.68945 6.4082 7.37632 6.4082 6.99023C6.40827 6.87818 6.38483 6.76276 6.3056 6.68353L4.8726 5.25053C4.69056 5.06849 4.39541 5.06853 4.21343 5.25061L2.78139 6.68339C2.70211 6.76271 2.67963 6.87809 2.67969 6.99023C2.67969 7.37632 2.36655 7.68945 1.98047 7.68945C1.59452 7.68929 1.28125 7.37622 1.28125 6.99023C1.28146 6.60443 1.59466 6.29215 1.98047 6.29199C2.09246 6.29199 2.2079 6.26771 2.28711 6.18854L4.05776 4.41874C4.1452 4.33133 4.19434 4.21276 4.19434 4.08912V3.59881C4.19434 3.37977 4.03781 3.19659 3.84026 3.10199C3.29183 2.83937 2.91309 2.2796 2.91309 1.63086C2.91324 0.730162 3.64322 4.61864e-05 4.54395 0Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import { format, isToday } from 'date-fns';\nimport { Children, cloneElement, isValidElement } from 'react';\nimport type { ComponentPropsWithoutRef, ElementType, ReactNode } from 'react';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { cn } from '@/lib/utils';\n\nexport type DataListCellProps = {\n children?: ReactNode;\n className?: string;\n height?: 'default' | 'compact';\n /**\n * HTML element rendered for the cell. Defaults to `span`. Use `'label'` when\n * the cell wraps a labelable control (e.g. a Checkbox), so the whole cell\n * area acts as the click/hover target.\n */\n as?: ElementType;\n} & Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'className'>;\n\nexport function DataListCell({ children, className, height = 'default', as, ...rest }: DataListCellProps) {\n const Component = as || 'span';\n return (\n <Component\n className={cn(\n 'relative grid min-w-0 max-w-full items-center overflow-hidden text-ui-md whitespace-nowrap text-neutral3 empty:before:content-[\"—\"] empty:before:text-neutral2',\n height === 'compact' ? 'py-1.5' : 'py-2.5',\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n}\n\nconst dataListTruncateContentStyles =\n 'block min-w-0 max-w-full truncate empty:before:content-[\"—\"] empty:before:text-neutral2 [&>*]:min-w-0 [&>*]:max-w-full [&>*]:overflow-hidden [&>*]:text-ellipsis [&>*]:whitespace-nowrap';\nconst dataListInlineTextTruncateStyles = 'min-w-0 flex-1 truncate';\n\nfunction DataListInlineText({ children }: { children: string | number }) {\n return <span className={dataListInlineTextTruncateStyles}>{children}</span>;\n}\n\nfunction DataListTruncatedTextNodes({ children }: { children: ReactNode }) {\n return Children.map(children, child => {\n if (typeof child === 'string' || typeof child === 'number') {\n return <DataListInlineText>{child}</DataListInlineText>;\n }\n\n return child;\n });\n}\n\nfunction DataListTruncatedCellContent({ children }: { children: ReactNode }) {\n return Children.map(children, child => {\n if (!isValidElement<{ children?: ReactNode; className?: string }>(child) || typeof child.type !== 'string') {\n return child;\n }\n\n return cloneElement(child, {\n className: cn('min-w-0 max-w-full overflow-hidden', child.props.className),\n children: <DataListTruncatedTextNodes>{child.props.children}</DataListTruncatedTextNodes>,\n });\n });\n}\n\nexport function DataListTextCell({ children, className, ...rest }: DataListCellProps) {\n return (\n <DataListCell className={className} {...rest}>\n <span className={dataListTruncateContentStyles}>\n <DataListTruncatedCellContent>{children}</DataListTruncatedCellContent>\n </span>\n </DataListCell>\n );\n}\n\nexport function DataListNameCell({ children, className }: DataListCellProps) {\n return (\n <DataListCell className={cn('text-left text-neutral4', className)}>\n <span className={dataListTruncateContentStyles}>\n <DataListTruncatedCellContent>{children}</DataListTruncatedCellContent>\n </span>\n </DataListCell>\n );\n}\n\nexport function DataListDescriptionCell({ children, className }: DataListCellProps) {\n return (\n <DataListCell className={cn('text-neutral2', className)}>\n <span className={dataListTruncateContentStyles}>\n <DataListTruncatedCellContent>{children}</DataListTruncatedCellContent>\n </span>\n </DataListCell>\n );\n}\n\nfunction getShortId(id: string | undefined): string {\n if (!id) return '';\n return id.length > 8 ? id.slice(0, 8) : id;\n}\n\nexport interface DataListIdCellProps {\n id: string;\n}\n\nexport function DataListIdCell({ id }: DataListIdCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd font-mono text-neutral3\">\n {getShortId(id)}\n </DataListCell>\n );\n}\n\nexport interface DataListSelectCellProps {\n checked: boolean;\n /**\n * Called when the checkbox is clicked. Receives the click event's `shiftKey`\n * so callers can implement range-select. The event's propagation is stopped\n * before `onToggle` runs, so the host row's `onClick` doesn't fire.\n */\n onToggle: (shiftKey: boolean) => void;\n 'aria-label'?: string;\n}\n\nexport function DataListSelectCell({ checked, onToggle, ...rest }: DataListSelectCellProps) {\n return (\n <DataListCell\n as=\"label\"\n height=\"compact\"\n className=\"h-8 w-8 self-center cursor-pointer justify-items-center overflow-visible px-0 py-0!\"\n onClick={e => e.stopPropagation()}\n >\n <Checkbox\n checked={checked}\n onCheckedChange={() => {}} // no-op: selection handled by onClick to capture shiftKey\n onClick={e => {\n e.stopPropagation();\n onToggle(e.shiftKey);\n }}\n aria-label={rest['aria-label']}\n />\n </DataListCell>\n );\n}\n\nexport interface DataListMonoCellProps {\n children: ReactNode;\n /** Override classes on the inner span (e.g. swap the default `text-neutral3` tone). */\n className?: string;\n /** Cell vertical padding. Defaults to `compact` to match other identifier cells. */\n height?: 'default' | 'compact';\n}\n\n/**\n * Mono-typography cell with truncation. Shared by any column that\n * shows code-like text (input previews, JSON summaries, identifiers, etc.).\n */\nexport function DataListMonoCell({ children, className, height = 'compact' }: DataListMonoCellProps) {\n return (\n <DataListCell height={height}>\n <span\n className={cn(\n 'block min-w-0 max-w-full text-ui-smd font-mono text-neutral3 truncate empty:before:content-[\"—\"]',\n className,\n )}\n >\n {children}\n </span>\n </DataListCell>\n );\n}\n\nfunction toDate(value: Date | string): Date | null {\n const date = value instanceof Date ? value : new Date(value);\n return isNaN(date.getTime()) ? null : date;\n}\n\nexport interface DataListDateCellProps {\n timestamp: Date | string;\n}\n\n/** Compact date cell — `Today` or `MMM dd` (e.g. `May 19`). */\nexport function DataListDateCell({ timestamp }: DataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral2\">\n {date ? (isToday(date) ? 'Today' : format(date, 'MMM dd')) : null}\n </DataListCell>\n );\n}\n\nexport interface DataListTimeCellProps {\n timestamp: Date | string;\n}\n\n/** Compact monospace time cell — `HH:mm:ss.SSS` with the millisecond portion tinted. */\nexport function DataListTimeCell({ timestamp }: DataListTimeCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd font-mono text-neutral3 flex\">\n {date ? (\n <>\n {format(date, 'HH:mm:ss')}\n <span className=\"text-neutral2\">.{String(date.getMilliseconds()).padStart(3, '0')}</span>\n </>\n ) : null}\n </DataListCell>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type DataListNextPageLoadingProps = {\n isLoading?: boolean;\n hasMore?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n loadingText?: string;\n};\n\nexport function DataListNextPageLoading({\n isLoading,\n setEndOfListElement,\n hasMore,\n loadingText = 'Loading more data...',\n}: DataListNextPageLoadingProps) {\n if (!setEndOfListElement) {\n return null;\n }\n\n return (\n <div\n ref={setEndOfListElement}\n className={cn('col-span-full text-ui-md text-neutral3 opacity-50 flex justify-center min-h-1', {\n 'py-4': isLoading,\n 'py-0': !hasMore,\n })}\n >\n {isLoading && loadingText}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type DataListNoMatchProps = {\n message?: string;\n className?: string;\n};\n\nexport function DataListNoMatch({ message = 'Nothing matches your search', className }: DataListNoMatchProps) {\n return (\n <div className={cn('col-span-full flex flex-col items-center justify-center gap-2 py-12 text-neutral3', className)}>\n <p className=\"text-ui-md\">{message}</p>\n </div>\n );\n}\n","import { cva } from 'class-variance-authority';\nimport type { ReactNode, RefObject } from 'react';\nimport { ScrollArea } from '@/ds/components/ScrollArea/scroll-area';\nimport { cn } from '@/lib/utils';\n\n/**\n * Visual treatment for the whole list.\n *\n * - `default`: bordered card, `surface2` body, hairline row separators.\n * - `striped`: borderless and full-bleed, zebra-striped rows (every other row\n * tinted), contrasting sticky header band, no row separators.\n */\nexport type DataListVariant = 'default' | 'striped';\n\nexport type DataListRootProps = {\n children: ReactNode;\n columns: string;\n className?: string;\n variant?: DataListVariant;\n /**\n * Ref to the scroll container — pass this to TanStack Virtual's\n * `getScrollElement` when virtualizing. Without it, the list behaves as a\n * normal scrollable grid.\n */\n scrollRef?: RefObject<HTMLDivElement | null>;\n};\n\n/**\n * Root grid styling per `variant`. Kept module-private (an exported cva in a\n * `.tsx` trips react-refresh). The striped treatment is driven entirely from the\n * root with CSS descendant selectors on the `.data-list-top` / `.data-list-row`\n * markers — the header and row primitives stay untouched, no JS per-row index:\n * - no container fill or border: the stripes are translucent neutral overlays\n * (`surface-overlay-*`, theme-aware) so the list composites over any view.\n * - `gap-y-px`: a uniform 1px gap between every grid track (header and rows).\n * - header: a contrasting band that owns the radius (the container no longer\n * rounds/clips) — `rounded-t-xl` top, `rounded-b-md` bottom to match the rows\n * sitting below the 1px gap, no hairline.\n * - rows: full-bleed, `rounded-md` (last row included), no separators; rows zero\n * their own margins so the grid gap is the only spacing.\n * - zebra: tint every other row with `:even`; hover & focus use `!` so they\n * still win over the zebra tint.\n */\nconst dataListRootVariants = cva('grid min-w-0 max-w-full content-start', {\n variants: {\n variant: {\n default: 'bg-surface2 border border-border1 rounded-xl',\n striped: cn(\n 'gap-y-px',\n // The header is sticky, so it must be opaque to occlude rows scrolling\n // behind it (a translucent overlay would show ghosted content through it).\n // Rows keep the translucent tints — only the header needs to be solid.\n '[&_.data-list-top]:mx-0 [&_.data-list-top]:bg-surface4 [&_.data-list-top]:after:hidden',\n '[&_.data-list-top]:rounded-t-xl [&_.data-list-top]:rounded-b-md',\n // header column separators: a short, faint vertical line centered in the gap\n // to the left of every header cell but the first. A `before` pseudo (not a\n // `border-l` + padding) keeps header text aligned with the row cells below.\n // The cell's default `overflow-hidden` would clip a gap-positioned pseudo, so\n // these cells switch to `overflow-visible`; the title text still truncates via\n // its inner `truncate` span, so nothing else spills.\n '[&_.data-list-top>*:not(:first-child)]:relative [&_.data-list-top>*:not(:first-child)]:overflow-visible',\n '[&_.data-list-top>*:not(:first-child)]:before:absolute [&_.data-list-top>*:not(:first-child)]:before:-left-4 [&_.data-list-top>*:not(:first-child)]:before:top-1/2 [&_.data-list-top>*:not(:first-child)]:before:-translate-y-1/2 [&_.data-list-top>*:not(:first-child)]:before:h-4 [&_.data-list-top>*:not(:first-child)]:before:w-px [&_.data-list-top>*:not(:first-child)]:before:bg-border2 [&_.data-list-top>*:not(:first-child)]:before:content-[\"\"]',\n '[&_.data-list-row]:mx-0 [&_.data-list-row]:my-0 [&_.data-list-row]:rounded-md [&_.data-list-row]:after:hidden',\n '[&_.data-list-row]:even:bg-surface-overlay-soft',\n '[&_.data-list-row]:hover:bg-surface-overlay-strong!',\n '[&_.data-list-row]:focus-visible:bg-surface-overlay-strong!',\n ),\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport function DataListRoot({ children, columns, className, variant = 'default', scrollRef }: DataListRootProps) {\n const isStriped = variant === 'striped';\n\n const grid = (\n <div\n // Striped scrolls inside the ScrollArea viewport (below); default scrolls the\n // grid natively, so it owns `scrollRef`.\n ref={isStriped ? undefined : scrollRef}\n className={cn(\n dataListRootVariants({ variant }),\n // Default is its own scroll container; striped delegates scrolling to the\n // ScrollArea viewport, so the grid just lays out.\n !isStriped && 'max-h-full overflow-auto',\n !isStriped && className,\n )}\n style={{ gridTemplateColumns: columns }}\n >\n {children}\n </div>\n );\n\n if (!isStriped) return grid;\n\n // Striped always uses the DS ScrollArea: an overlay scrollbar (no reserved\n // gutter, so the sticky header spans the full width and both top corners clip\n // cleanly) plus the default edge fades. When the list virtualizes it passes a\n // `scrollRef`; forwarding it as `viewportRef` makes the virtualizer scroll this\n // viewport, so virtualization works without a native scrollbar.\n //\n // `rounded-t-xl` clips the viewport top. Masks default to every overflowing\n // edge except the top — a top fade would fade the opaque sticky header.\n return (\n <ScrollArea\n orientation=\"both\"\n mask={{ top: false }}\n viewportRef={scrollRef}\n className={cn('h-full w-full rounded-t-xl', className)}\n >\n {grid}\n </ScrollArea>\n );\n}\n","import { createContext, useContext } from 'react';\n\nexport const DataListRowWrapperContext = createContext(false);\n\nexport function useDataListRowWrapperContext() {\n return useContext(DataListRowWrapperContext);\n}\n","/**\n * Row-level styling for the element that participates in the row sibling\n * chain — applied to `DataList.RowButton` / `DataList.RowLink` when used\n * standalone, and to `DataList.RowWrapper` when used as a shell around them.\n *\n * Contains the `.data-list-row` marker class (used by the sibling-aware\n * separator rules), the full-width separator treatment, and rounded corners.\n */\nexport const dataListRowOuterStyles = [\n 'data-list-row col-span-full relative mt-[3px] mb-1',\n 'after:absolute after:inset-x-[-0.25rem] after:bottom-[-0.25rem] after:h-px after:bg-border1 after:content-[\"\"] after:pointer-events-none',\n '[&:has(+.data-list-subheader)]:after:hidden [&:not(:has(~.data-list-row))]:after:hidden',\n 'transition-colors duration-200 rounded-lg',\n] as const;\n\nexport const dataListRowInteractiveStyles = [\n 'grid grid-cols-subgrid gap-8 px-5 outline-none cursor-pointer',\n 'hover:bg-surface4 focus-visible:bg-surface4 focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-accent1',\n 'transition-colors duration-200 rounded-lg',\n] as const;\n\nexport const dataListRowStyles = ['mx-1', ...dataListRowInteractiveStyles, ...dataListRowOuterStyles] as const;\n\nexport const dataListRowStaticStyles = ['mx-1 grid grid-cols-subgrid gap-8 px-5', ...dataListRowOuterStyles] as const;\n\nimport { cva } from 'class-variance-authority';\n\n/** Tone for a single row. `error` lays a subtle, theme-aware destructive tint\n * over whatever background the row already has. */\nexport type DataListRowVariant = 'default' | 'error';\n\n/**\n * Per-row tone. Kept as a `.ts` cva (safe to export — no react-refresh concern).\n * The error tint uses `!` so it wins over the striped variant's root-level zebra\n * (a higher-specificity descendant rule) and over the base row hover.\n */\nexport const dataListRowVariants = cva('', {\n variants: {\n variant: {\n default: '',\n error: 'bg-notice-destructive/10! hover:bg-notice-destructive/15!',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\n/**\n * Layout/state modifiers shared by interactive row primitives\n * (`DataList.RowButton`, `DataList.RowLink`).\n */\nexport type DataListRowSharedProps = {\n /** Row tone — `error` applies a subtle destructive background tint. */\n variant?: DataListRowVariant;\n /**\n * Drop the row's default left margin. Use when the row is wrapped in a\n * `DataList.RowWrapper` that owns the leading inset (e.g. for selection rows where\n * the checkbox cell sits on the left).\n */\n flushLeft?: boolean;\n /**\n * Drop the row's default right margin. Use when the row is wrapped in a\n * `DataList.RowWrapper` that owns the trailing inset (e.g. for rows with a\n * trailing actions cell on the right).\n */\n flushRight?: boolean;\n /**\n * Place the row starting at this column line. Defaults to column 1. Use\n * when the row sits beside a leading cell that owns column 1.\n */\n colStart?: number;\n /**\n * Place the row ending at this column line (use negative values to count\n * from the end, e.g. `-2`). Defaults to `-1` (the last line). Use when the\n * row sits beside a trailing cell that owns the last column.\n */\n colEnd?: number;\n /**\n * Apply the highlighted background. Use to mark the row that is currently\n * featured (e.g. the row whose detail is open in a side panel).\n */\n featured?: boolean;\n};\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useDataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowInteractiveStyles, dataListRowStyles, dataListRowVariants } from './shared';\nimport type { DataListRowSharedProps } from './shared';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowButtonProps = ComponentPropsWithoutRef<'button'> & DataListRowSharedProps;\n\n/**\n * Forwarded ref + spread props so virtualizers (`useVirtualizer.measureElement`)\n * can attach a ref and `data-index` to each rendered row.\n */\nexport const DataListRowButton = forwardRef<HTMLButtonElement, DataListRowButtonProps>(\n (\n {\n children,\n className,\n type = 'button',\n flushLeft,\n flushRight,\n colStart,\n colEnd,\n featured,\n variant,\n style,\n ...rest\n },\n ref,\n ) => {\n const isWrapped = useDataListRowWrapperContext();\n const hasColumnOverride = colStart !== undefined || colEnd !== undefined;\n const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n ...(isWrapped ? dataListRowInteractiveStyles : dataListRowStyles),\n 'text-left',\n !isWrapped && flushLeft && 'ml-0!',\n !isWrapped && flushRight && 'mr-0!',\n // `!` so the selection fill wins over the striped variant's zebra tint\n // (a higher-specificity root descendant rule); same color in `default`.\n featured && 'bg-surface4!',\n dataListRowVariants({ variant }),\n className,\n )}\n style={resolvedStyle}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nDataListRowButton.displayName = 'DataListRowButton';\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useDataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowInteractiveStyles, dataListRowStyles, dataListRowVariants } from './shared';\nimport type { DataListRowSharedProps } from './shared';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowLinkProps = DataListRowSharedProps & {\n children: ReactNode;\n to: string;\n className?: string;\n style?: CSSProperties;\n LinkComponent: LinkComponent;\n};\n\nexport function DataListRowLink({\n children,\n to,\n className,\n style,\n LinkComponent: Link,\n flushLeft,\n flushRight,\n colStart,\n colEnd,\n featured,\n variant,\n}: DataListRowLinkProps) {\n const isWrapped = useDataListRowWrapperContext();\n const hasColumnOverride = colStart !== undefined || colEnd !== undefined;\n const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;\n return (\n <Link\n href={to}\n className={cn(\n ...(isWrapped ? dataListRowInteractiveStyles : dataListRowStyles),\n !isWrapped && flushLeft && 'ml-0!',\n !isWrapped && flushRight && 'mr-0!',\n // `!` so the selection fill wins over the striped variant's zebra tint\n // (a higher-specificity root descendant rule); same color in `default`.\n featured && 'bg-surface4!',\n dataListRowVariants({ variant }),\n className,\n )}\n style={resolvedStyle}\n >\n {children}\n </Link>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { DataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowOuterStyles } from './shared';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowWrapperProps = ComponentPropsWithoutRef<'div'>;\n\n/**\n * Non-interactive grid wrapper. Used to host a leading or trailing cell (e.g. a\n * selection checkbox or row actions) alongside a `DataList.RowButton` so\n * hover/focus/click only apply to the button portion. For standalone\n * interactive rows, use `DataList.RowButton` directly without this wrapper.\n *\n * Carries the row-level border + `.data-list-row` marker so separators and\n * sibling-aware rules behave the same in wrapped and standalone rows.\n */\nexport const DataListRowWrapper = forwardRef<HTMLDivElement, DataListRowWrapperProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <DataListRowWrapperContext.Provider value>\n <div\n ref={ref}\n className={cn('grid grid-cols-subgrid gap-0 mx-1', ...dataListRowOuterStyles, className)}\n {...rest}\n >\n {children}\n </div>\n </DataListRowWrapperContext.Provider>\n );\n },\n);\n\nDataListRowWrapper.displayName = 'DataListRowWrapper';\n","export type DataListSpacerProps = {\n /** Pixel height of the spacer. Pass 0 to render nothing. */\n height: number;\n};\n\n/**\n * Pads top/bottom of the visible window when virtualizing — preserves the\n * grid's total scroll height for the rows that aren't currently rendered.\n * Spans the full grid width so it doesn't disturb column layout.\n */\nexport function DataListSpacer({ height }: DataListSpacerProps) {\n if (height <= 0) return null;\n return <div className=\"col-span-full\" style={{ height }} />;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListTopProps = {\n children: ReactNode;\n className?: string;\n /**\n * Switch to a \"leading cell\" layout: drops the default gap between children\n * and the default left padding, so a leading cell (e.g. `TopSelectCell`)\n * sits flush against the grid edge and an inner `TopCells` group owns the\n * remaining column spacing. Mirrors how `Row` + `RowButton` compose.\n */\n hasLeadingCell?: boolean;\n};\n\nexport function DataListTop({ children, className, hasLeadingCell }: DataListTopProps) {\n return (\n <div\n className={cn(\n 'data-list-top mx-1 grid grid-cols-subgrid gap-8 col-span-full relative px-5 bg-surface2 sticky top-0 z-10 after:absolute after:inset-x-[-0.25rem] after:bottom-0 after:h-px after:bg-border1 after:content-[\"\"] after:pointer-events-none',\n hasLeadingCell && 'gap-0 pl-0!',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef, ElementType, ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { Tooltip, TooltipTrigger, TooltipContent } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\nexport type DataListTopCellProps = {\n children: ReactNode;\n className?: string;\n /**\n * HTML element rendered for the top cell. Defaults to `span`. Use `'label'`\n * when the cell wraps a labelable control (e.g. a select-all Checkbox).\n */\n as?: ElementType;\n} & Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'className' | 'ref'>;\n\nexport const DataListTopCell = forwardRef<HTMLSpanElement, DataListTopCellProps>(\n ({ children, className, as, ...rest }, ref) => {\n const Component = as || 'span';\n const isText = typeof children === 'string' || typeof children === 'number';\n return (\n <Component\n ref={ref}\n className={cn(\n 'h-8 min-w-0 max-w-full overflow-hidden py-1 flex items-center whitespace-nowrap text-neutral2 font-semibold tracking-tight text-ui-sm',\n className,\n )}\n {...rest}\n >\n {/* Plain string/number titles truncate with an ellipsis; element children\n (icons, smart long/short labels, checkboxes) render as-is. */}\n {isText ? <span className=\"min-w-0 truncate\">{children}</span> : children}\n </Component>\n );\n },\n);\n\nexport type DataListTopCellWithTooltipProps = {\n children: ReactNode;\n tooltip: ReactNode;\n className?: string;\n};\n\nexport function DataListTopCellWithTooltip({ children, tooltip, className }: DataListTopCellWithTooltipProps) {\n return (\n <Tooltip>\n <TooltipTrigger>\n <DataListTopCell className={className}>{children}</DataListTopCell>\n </TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n}\n\nexport type DataListTopCellSmartProps = {\n long: ReactNode;\n short: ReactNode;\n tooltip?: string;\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n className?: string;\n};\n\nconst breakpointClasses: Record<string, { show: string; hide: string }> = {\n sm: { show: 'hidden sm:inline-flex', hide: 'inline-flex sm:hidden' },\n md: { show: 'hidden md:inline-flex', hide: 'inline-flex md:hidden' },\n lg: { show: 'hidden lg:inline-flex', hide: 'inline-flex lg:hidden' },\n xl: { show: 'hidden xl:inline-flex', hide: 'inline-flex xl:hidden' },\n '2xl': { show: 'hidden 2xl:inline-flex', hide: 'inline-flex 2xl:hidden' },\n};\n\nexport function DataListTopCellSmart({\n long,\n short,\n tooltip,\n breakpoint = '2xl',\n className,\n}: DataListTopCellSmartProps) {\n const tooltipText = tooltip ?? (typeof long === 'string' ? long : undefined);\n const bp = breakpointClasses[breakpoint];\n\n const content = (\n <>\n <span className={cn('items-center gap-1', bp.show)}>{long}</span>\n <span className={cn('items-center gap-1', bp.hide)}>{short}</span>\n </>\n );\n\n if (tooltipText) {\n return (\n <DataListTopCellWithTooltip\n tooltip={tooltipText}\n className={cn('flex [&_svg]:w-[1.3em] [&_svg]:h-[1.3em]', className)}\n >\n {content}\n </DataListTopCellWithTooltip>\n );\n }\n\n return (\n <DataListTopCell className={cn('flex [&_svg]:w-[1.3em] [&_svg]:h-[1.3em]', className)}>{content}</DataListTopCell>\n );\n}\n\nexport interface DataListTopSelectCellProps {\n /** Pass `'indeterminate'` when some — but not all — rows are selected. */\n checked: boolean | 'indeterminate';\n /** Toggles the global selection. Typically clears when fully selected, otherwise selects all. */\n onToggle: () => void;\n 'aria-label'?: string;\n}\n\nexport function DataListTopSelectCell({ checked, onToggle, ...rest }: DataListTopSelectCellProps) {\n return (\n <DataListTopCell\n as=\"label\"\n className=\"w-8 cursor-pointer justify-center overflow-visible px-0 py-0!\"\n onClick={e => e.stopPropagation()}\n >\n <Checkbox checked={checked} onCheckedChange={() => onToggle()} aria-label={rest['aria-label']} />\n </DataListTopCell>\n );\n}\n","import { DataListCell } from './data-list-cells';\nimport { DataListRoot } from './data-list-root';\n\nconst widths = ['75%', '50%', '65%', '90%', '60%', '80%'];\n\nexport type DataListSkeletonProps = {\n columns?: string;\n numberOfRows?: number;\n};\n\nexport function DataListSkeleton({ columns = 'auto 1fr auto auto', numberOfRows = 3 }: DataListSkeletonProps) {\n const columnParts = columns.trim().split(/\\s+/);\n const columnCount = columnParts.length;\n const skeletonColumns = columnParts.map(col => (col === 'auto' ? 'minmax(6rem, auto)' : col)).join(' ');\n\n const getPseudoRandomWidth = (rowIdx: number, colIdx: number) => {\n const index = (rowIdx + colIdx + columnCount + numberOfRows) % widths.length;\n return widths[index];\n };\n\n return (\n <DataListRoot columns={skeletonColumns}>\n {Array.from({ length: numberOfRows }).map((_, rowIdx) => (\n <div\n key={rowIdx}\n className=\"data-list-row grid grid-cols-subgrid gap-6 lg:gap-8 xl:gap-10 2xl:gap-12 3xl:gap-14 col-span-full px-5 border-y border-b-border1 border-t-transparent transition-colors duration-200 rounded-lg\"\n >\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListCell key={colIdx}>\n <div\n className=\"bg-surface4 rounded-md animate-pulse text-transparent h-[1rem] select-none\"\n style={{ width: getPseudoRandomWidth(rowIdx, colIdx) }}\n />\n </DataListCell>\n ))}\n </div>\n ))}\n </DataListRoot>\n );\n}\n"],"names":["_"],"mappings":";;;;;;;;;AAEO,MAAM,YAAY,CAAC,KAAA,qBACxB,IAAA,CAAC,KAAA,EAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,uBAAsB,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC3G,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,yxEAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,gMAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA;AACP,CAAA,EACF;;ACVK,MAAM,eAAe,CAAC,KAAA,qBAC3B,GAAA,CAAC,KAAA,EAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,uBAAsB,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC3G,QAAA,kBAAA,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,CAAA,EAAE,06DAAA;AAAA,IACF,IAAA,EAAK;AAAA;AACP,CAAA,EACF;;ACUK,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,SAAA,EAAW,SAAS,SAAA,EAAW,EAAA,EAAI,GAAG,IAAA,EAAK,EAAsB;AACxG,EAAA,MAAM,YAAY,EAAA,IAAM,MAAA;AACxB,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,gKAAA;AAAA,QACA,MAAA,KAAW,YAAY,QAAA,GAAW,QAAA;AAAA,QAClC;AAAA,OACF;AAAA,MACC,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEA,MAAM,6BAAA,GACJ,0LAAA;AACF,MAAM,gCAAA,GAAmC,yBAAA;AAEzC,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAS,EAAkC;AACvE,EAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,gCAAA,EAAmC,QAAA,EAAS,CAAA;AACtE;AAEA,SAAS,0BAAA,CAA2B,EAAE,QAAA,EAAS,EAA4B;AACzE,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAA,KAAA,KAAS;AACrC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC1D,MAAA,uBAAO,GAAA,CAAC,sBAAoB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,SAAS,4BAAA,CAA6B,EAAE,QAAA,EAAS,EAA4B;AAC3E,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAA,KAAA,KAAS;AACrC,IAAA,IAAI,CAAC,cAAA,CAA6D,KAAK,KAAK,OAAO,KAAA,CAAM,SAAS,QAAA,EAAU;AAC1G,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,aAAa,KAAA,EAAO;AAAA,MACzB,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,MACzE,QAAA,kBAAU,GAAA,CAAC,0BAAA,EAAA,EAA4B,QAAA,EAAA,KAAA,CAAM,MAAM,QAAA,EAAS;AAAA,KAC7D,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAEO,SAAS,iBAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,EAAsB;AACpF,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAuB,GAAG,IAAA,EACtC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,6BAAA,EACf,QAAA,kBAAA,GAAA,CAAC,4BAAA,EAAA,EAA8B,QAAA,EAAS,GAC1C,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAU,EAAsB;AAC3E,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,EAAA,CAAG,2BAA2B,SAAS,CAAA,EAC9D,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAW,6BAAA,EACf,QAAA,kBAAA,GAAA,CAAC,4BAAA,EAAA,EAA8B,QAAA,EAAS,GAC1C,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,uBAAA,CAAwB,EAAE,QAAA,EAAU,SAAA,EAAU,EAAsB;AAClF,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,EAAA,CAAG,iBAAiB,SAAS,CAAA,EACpD,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAW,6BAAA,EACf,QAAA,kBAAA,GAAA,CAAC,4BAAA,EAAA,EAA8B,QAAA,EAAS,GAC1C,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,WAAW,EAAA,EAAgC;AAClD,EAAA,IAAI,CAAC,IAAI,OAAO,EAAA;AAChB,EAAA,OAAO,GAAG,MAAA,GAAS,CAAA,GAAI,GAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,EAAA;AAC1C;AAMO,SAAS,cAAA,CAAe,EAAE,EAAA,EAAG,EAAwB;AAC1D,EAAA,uBACE,GAAA,CAAC,gBAAa,MAAA,EAAO,SAAA,EAAU,WAAU,qCAAA,EACtC,QAAA,EAAA,UAAA,CAAW,EAAE,CAAA,EAChB,CAAA;AAEJ;AAaO,SAAS,mBAAmB,EAAE,OAAA,EAAS,QAAA,EAAU,GAAG,MAAK,EAA4B;AAC1F,EAAA,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,OAAA;AAAA,MACH,MAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAU,qFAAA;AAAA,MACV,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA,EAAgB;AAAA,MAEhC,QAAA,kBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,iBAAiB,MAAM;AAAA,UAAC,CAAA;AAAA,UACxB,SAAS,CAAA,CAAA,KAAK;AACZ,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,QAAA,CAAS,EAAE,QAAQ,CAAA;AAAA,UACrB,CAAA;AAAA,UACA,YAAA,EAAY,KAAK,YAAY;AAAA;AAAA;AAC/B;AAAA,GACF;AAEJ;AAcO,SAAS,iBAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,MAAA,GAAS,WAAU,EAA0B;AACnG,EAAA,uBACE,GAAA,CAAC,gBAAa,MAAA,EACZ,QAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,kGAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEA,SAAS,OAAO,KAAA,EAAmC;AACjD,EAAA,MAAM,OAAO,KAAA,YAAiB,IAAA,GAAO,KAAA,GAAQ,IAAI,KAAK,KAAK,CAAA;AAC3D,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAI,IAAA,GAAO,IAAA;AACxC;AAOO,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAU,EAA0B;AACrE,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAO,SAAA,EAAU,WAAU,2BAAA,EACtC,QAAA,EAAA,IAAA,GAAQ,OAAA,CAAQ,IAAI,IAAI,OAAA,GAAU,MAAA,CAAO,IAAA,EAAM,QAAQ,IAAK,IAAA,EAC/D,CAAA;AAEJ;AAOO,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAU,EAA0B;AACrE,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,2BACG,YAAA,EAAA,EAAa,MAAA,EAAO,WAAU,SAAA,EAAU,0CAAA,EACtC,iCACC,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,oBACxB,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,MAAE,OAAO,IAAA,CAAK,eAAA,EAAiB,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG;AAAA,KAAA,EAAE;AAAA,GAAA,EACpF,IACE,IAAA,EACN,CAAA;AAEJ;;ACtMO,SAAS,uBAAA,CAAwB;AAAA,EACtC,SAAA;AAAA,EACA,mBAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAAiC;AAC/B,EAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,mBAAA;AAAA,MACL,SAAA,EAAW,GAAG,+EAAA,EAAiF;AAAA,QAC7F,MAAA,EAAQ,SAAA;AAAA,QACR,QAAQ,CAAC;AAAA,OACV,CAAA;AAAA,MAEA,QAAA,EAAA,SAAA,IAAa;AAAA;AAAA,GAChB;AAEJ;;ACvBO,SAAS,eAAA,CAAgB,EAAE,OAAA,GAAU,6BAAA,EAA+B,WAAU,EAAyB;AAC5G,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,mFAAA,EAAqF,SAAS,CAAA,EAC/G,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,YAAA,EAAc,QAAA,EAAA,OAAA,EAAQ,CAAA,EACrC,CAAA;AAEJ;;AC8BA,MAAM,oBAAA,GAAuB,IAAI,uCAAA,EAAyC;AAAA,EACxE,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,8CAAA;AAAA,MACT,OAAA,EAAS,EAAA;AAAA,QACP,UAAA;AAAA;AAAA;AAAA;AAAA,QAIA,wFAAA;AAAA,QACA,iEAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,yGAAA;AAAA,QACA,4bAAA;AAAA,QACA,+GAAA;AAAA,QACA,iDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC,CAAA;AAEM,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,OAAA,EAAS,WAAW,OAAA,GAAU,SAAA,EAAW,WAAU,EAAsB;AAChH,EAAA,MAAM,YAAY,OAAA,KAAY,SAAA;AAE9B,EAAA,MAAM,IAAA,mBACJ,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAGC,GAAA,EAAK,YAAY,MAAA,GAAY,SAAA;AAAA,MAC7B,SAAA,EAAW,EAAA;AAAA,QACT,oBAAA,CAAqB,EAAE,OAAA,EAAS,CAAA;AAAA;AAAA;AAAA,QAGhC,CAAC,SAAA,IAAa,0BAAA;AAAA,QACd,CAAC,SAAA,IAAa;AAAA,OAChB;AAAA,MACA,KAAA,EAAO,EAAE,mBAAA,EAAqB,OAAA,EAAQ;AAAA,MAErC;AAAA;AAAA,GACH;AAGF,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAUvB,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAY,MAAA;AAAA,MACZ,IAAA,EAAM,EAAE,GAAA,EAAK,KAAA,EAAM;AAAA,MACnB,WAAA,EAAa,SAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MAEpD,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;;ACjHO,MAAM,yBAAA,GAA4B,cAAc,KAAK,CAAA;AAErD,SAAS,4BAAA,GAA+B;AAC7C,EAAA,OAAO,WAAW,yBAAyB,CAAA;AAC7C;;ACEO,MAAM,sBAAA,GAAyB;AAAA,EACpC,oDAAA;AAAA,EACA,0IAAA;AAAA,EACA,yFAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,4BAAA,GAA+B;AAAA,EAC1C,+DAAA;AAAA,EACA,sHAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,oBAAoB,CAAC,MAAA,EAAQ,GAAG,4BAAA,EAA8B,GAAG,sBAAsB,CAAA;AAE7F,MAAM,uBAAA,GAA0B,CAAC,wCAAA,EAA0C,GAAG,sBAAsB;AAapG,MAAM,mBAAA,GAAsB,IAAI,EAAA,EAAI;AAAA,EACzC,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAA;AAAA,MACT,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;;ACjCM,MAAM,iBAAA,GAAoB,UAAA;AAAA,EAC/B,CACE;AAAA,IACE,QAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA,GAAO,QAAA;AAAA,IACP,SAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,YAAY,4BAAA,EAA6B;AAC/C,IAAA,MAAM,iBAAA,GAAoB,QAAA,KAAa,MAAA,IAAa,MAAA,KAAW,MAAA;AAC/D,IAAA,MAAM,aAAA,GAAgB,iBAAA,GAAoB,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAA,EAAG,QAAA,IAAY,CAAC,CAAA,GAAA,EAAM,MAAA,IAAU,EAAE,IAAG,GAAI,KAAA;AAC3G,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,GAAI,YAAY,4BAAA,GAA+B,iBAAA;AAAA,UAC/C,WAAA;AAAA,UACA,CAAC,aAAa,SAAA,IAAa,OAAA;AAAA,UAC3B,CAAC,aAAa,UAAA,IAAc,OAAA;AAAA;AAAA;AAAA,UAG5B,QAAA,IAAY,cAAA;AAAA,UACZ,mBAAA,CAAoB,EAAE,OAAA,EAAS,CAAA;AAAA,UAC/B;AAAA,SACF;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACN,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;;AC1CzB,SAAS,eAAA,CAAgB;AAAA,EAC9B,QAAA;AAAA,EACA,EAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA,EAAe,IAAA;AAAA,EACf,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,YAAY,4BAAA,EAA6B;AAC/C,EAAA,MAAM,iBAAA,GAAoB,QAAA,KAAa,MAAA,IAAa,MAAA,KAAW,MAAA;AAC/D,EAAA,MAAM,aAAA,GAAgB,iBAAA,GAAoB,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAA,EAAG,QAAA,IAAY,CAAC,CAAA,GAAA,EAAM,MAAA,IAAU,EAAE,IAAG,GAAI,KAAA;AAC3G,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,EAAA;AAAA,MACN,SAAA,EAAW,EAAA;AAAA,QACT,GAAI,YAAY,4BAAA,GAA+B,iBAAA;AAAA,QAC/C,CAAC,aAAa,SAAA,IAAa,OAAA;AAAA,QAC3B,CAAC,aAAa,UAAA,IAAc,OAAA;AAAA;AAAA;AAAA,QAG5B,QAAA,IAAY,cAAA;AAAA,QACZ,mBAAA,CAAoB,EAAE,OAAA,EAAS,CAAA;AAAA,QAC/B;AAAA,OACF;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MAEN;AAAA;AAAA,GACH;AAEJ;;AChCO,MAAM,kBAAA,GAAqB,UAAA;AAAA,EAChC,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,KAAQ;AACzC,IAAA,uBACE,GAAA,CAAC,yBAAA,CAA0B,QAAA,EAA1B,EAAmC,OAAK,IAAA,EACvC,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,GAAG,wBAAwB,SAAS,CAAA;AAAA,QACtF,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;;ACvB1B,SAAS,cAAA,CAAe,EAAE,MAAA,EAAO,EAAwB;AAC9D,EAAA,IAAI,MAAA,IAAU,GAAG,OAAO,IAAA;AACxB,EAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,EAAE,QAAO,EAAG,CAAA;AAC3D;;ACEO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,SAAA,EAAW,gBAAe,EAAqB;AACrF,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,2OAAA;AAAA,QACA,cAAA,IAAkB,aAAA;AAAA,QAClB;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;;ACXO,MAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,IAAI,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAC7C,IAAA,MAAM,YAAY,EAAA,IAAM,MAAA;AACxB,IAAA,MAAM,MAAA,GAAS,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA;AACnE,IAAA,uBACE,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,uIAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,QAIH,mCAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,UAAS,CAAA,GAAU;AAAA;AAAA,KACnE;AAAA,EAEJ;AACF;AAQO,SAAS,0BAAA,CAA2B,EAAE,QAAA,EAAU,OAAA,EAAS,WAAU,EAAoC;AAC5G,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAuB,UAAS,CAAA,EACnD,CAAA;AAAA,oBACA,GAAA,CAAC,kBAAgB,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EAC3B,CAAA;AAEJ;AAUA,MAAM,iBAAA,GAAoE;AAAA,EACxE,EAAA,EAAI,EAAE,IAAA,EAAM,uBAAA,EAAyB,MAAM,uBAAA,EAAwB;AAAA,EACnE,EAAA,EAAI,EAAE,IAAA,EAAM,uBAAA,EAAyB,MAAM,uBAAA,EAAwB;AAAA,EACnE,EAAA,EAAI,EAAE,IAAA,EAAM,uBAAA,EAAyB,MAAM,uBAAA,EAAwB;AAAA,EACnE,EAAA,EAAI,EAAE,IAAA,EAAM,uBAAA,EAAyB,MAAM,uBAAA,EAAwB;AAAA,EACnE,KAAA,EAAO,EAAE,IAAA,EAAM,wBAAA,EAA0B,MAAM,wBAAA;AACjD,CAAA;AAEO,SAAS,oBAAA,CAAqB;AAAA,EACnC,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,WAAA,GAAc,OAAA,KAAY,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,MAAA,CAAA;AAClE,EAAA,MAAM,EAAA,GAAK,kBAAkB,UAAU,CAAA;AAEvC,EAAA,MAAM,0BACJ,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,sBAAsB,EAAA,CAAG,IAAI,GAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBAC1D,GAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,sBAAsB,EAAA,CAAG,IAAI,GAAI,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAC7D,CAAA;AAGF,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,uBACE,GAAA;AAAA,MAAC,0BAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,QAElE,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,2BACG,eAAA,EAAA,EAAgB,SAAA,EAAW,GAAG,0CAAA,EAA4C,SAAS,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAEpG;AAUO,SAAS,sBAAsB,EAAE,OAAA,EAAS,QAAA,EAAU,GAAG,MAAK,EAA+B;AAChG,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,OAAA;AAAA,MACH,SAAA,EAAU,+DAAA;AAAA,MACV,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,eAAA,EAAgB;AAAA,MAEhC,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAkB,eAAA,EAAiB,MAAM,UAAS,EAAG,YAAA,EAAY,IAAA,CAAK,YAAY,CAAA,EAAG;AAAA;AAAA,GACjG;AAEJ;;ACtHA,MAAM,SAAS,CAAC,KAAA,EAAO,OAAO,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAOjD,SAAS,iBAAiB,EAAE,OAAA,GAAU,oBAAA,EAAsB,YAAA,GAAe,GAAE,EAA0B;AAC5G,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,IAAA,EAAK,CAAE,MAAM,KAAK,CAAA;AAC9C,EAAA,MAAM,cAAc,WAAA,CAAY,MAAA;AAChC,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,GAAA,CAAI,CAAA,GAAA,KAAQ,GAAA,KAAQ,SAAS,oBAAA,GAAuB,GAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAEtG,EAAA,MAAM,oBAAA,GAAuB,CAAC,MAAA,EAAgB,MAAA,KAAmB;AAC/D,IAAA,MAAM,KAAA,GAAA,CAAS,MAAA,GAAS,MAAA,GAAS,WAAA,GAAc,gBAAgB,MAAA,CAAO,MAAA;AACtE,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,eAAA,EACpB,gBAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,YAAA,EAAc,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,MAAA,qBAC5C,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEC,SAAA,EAAU,iMAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,WAAA,EAAa,CAAA,CAAE,GAAA,CAAI,CAACA,EAAAA,EAAG,MAAA,qBAC3C,GAAA,CAAC,YAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,4EAAA;AAAA,UACV,OAAO,EAAE,KAAA,EAAO,oBAAA,CAAqB,MAAA,EAAQ,MAAM,CAAA;AAAE;AAAA,OACvD,EAAA,EAJiB,MAKnB,CACD;AAAA,KAAA;AAAA,IAVI;AAAA,GAYR,CAAA,EACH,CAAA;AAEJ;;;;"}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
const utils = require('./utils-vA5sWo9W.cjs');
|
|
5
5
|
const React = require('react');
|
|
6
|
+
const index = require('./index-DPkWrpVb.cjs');
|
|
6
7
|
const checkbox = require('./checkbox-Bda6srNY.cjs');
|
|
7
8
|
const tooltip = require('./tooltip-j8gUR1Qk.cjs');
|
|
8
9
|
const dateFns = require('date-fns');
|
|
10
|
+
const scrollArea = require('./scroll-area-BqJfcT94.cjs');
|
|
9
11
|
|
|
10
12
|
const AgentIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 8.82265 8.51434", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [
|
|
11
13
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -168,19 +170,64 @@ function DataListNoMatch({ message = "Nothing matches your search", className })
|
|
|
168
170
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("col-span-full flex flex-col items-center justify-center gap-2 py-12 text-neutral3", className), children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-ui-md", children: message }) });
|
|
169
171
|
}
|
|
170
172
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
+
const dataListRootVariants = index.cva("grid min-w-0 max-w-full content-start", {
|
|
174
|
+
variants: {
|
|
175
|
+
variant: {
|
|
176
|
+
default: "bg-surface2 border border-border1 rounded-xl",
|
|
177
|
+
striped: utils.cn(
|
|
178
|
+
"gap-y-px",
|
|
179
|
+
// The header is sticky, so it must be opaque to occlude rows scrolling
|
|
180
|
+
// behind it (a translucent overlay would show ghosted content through it).
|
|
181
|
+
// Rows keep the translucent tints — only the header needs to be solid.
|
|
182
|
+
"[&_.data-list-top]:mx-0 [&_.data-list-top]:bg-surface4 [&_.data-list-top]:after:hidden",
|
|
183
|
+
"[&_.data-list-top]:rounded-t-xl [&_.data-list-top]:rounded-b-md",
|
|
184
|
+
// header column separators: a short, faint vertical line centered in the gap
|
|
185
|
+
// to the left of every header cell but the first. A `before` pseudo (not a
|
|
186
|
+
// `border-l` + padding) keeps header text aligned with the row cells below.
|
|
187
|
+
// The cell's default `overflow-hidden` would clip a gap-positioned pseudo, so
|
|
188
|
+
// these cells switch to `overflow-visible`; the title text still truncates via
|
|
189
|
+
// its inner `truncate` span, so nothing else spills.
|
|
190
|
+
"[&_.data-list-top>*:not(:first-child)]:relative [&_.data-list-top>*:not(:first-child)]:overflow-visible",
|
|
191
|
+
'[&_.data-list-top>*:not(:first-child)]:before:absolute [&_.data-list-top>*:not(:first-child)]:before:-left-4 [&_.data-list-top>*:not(:first-child)]:before:top-1/2 [&_.data-list-top>*:not(:first-child)]:before:-translate-y-1/2 [&_.data-list-top>*:not(:first-child)]:before:h-4 [&_.data-list-top>*:not(:first-child)]:before:w-px [&_.data-list-top>*:not(:first-child)]:before:bg-border2 [&_.data-list-top>*:not(:first-child)]:before:content-[""]',
|
|
192
|
+
"[&_.data-list-row]:mx-0 [&_.data-list-row]:my-0 [&_.data-list-row]:rounded-md [&_.data-list-row]:after:hidden",
|
|
193
|
+
"[&_.data-list-row]:even:bg-surface-overlay-soft",
|
|
194
|
+
"[&_.data-list-row]:hover:bg-surface-overlay-strong!",
|
|
195
|
+
"[&_.data-list-row]:focus-visible:bg-surface-overlay-strong!"
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
defaultVariants: {
|
|
200
|
+
variant: "default"
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
function DataListRoot({ children, columns, className, variant = "default", scrollRef }) {
|
|
204
|
+
const isStriped = variant === "striped";
|
|
205
|
+
const grid = /* @__PURE__ */ jsxRuntime.jsx(
|
|
173
206
|
"div",
|
|
174
207
|
{
|
|
175
|
-
ref: scrollRef,
|
|
208
|
+
ref: isStriped ? void 0 : scrollRef,
|
|
176
209
|
className: utils.cn(
|
|
177
|
-
|
|
178
|
-
|
|
210
|
+
dataListRootVariants({ variant }),
|
|
211
|
+
// Default is its own scroll container; striped delegates scrolling to the
|
|
212
|
+
// ScrollArea viewport, so the grid just lays out.
|
|
213
|
+
!isStriped && "max-h-full overflow-auto",
|
|
214
|
+
!isStriped && className
|
|
179
215
|
),
|
|
180
216
|
style: { gridTemplateColumns: columns },
|
|
181
217
|
children
|
|
182
218
|
}
|
|
183
219
|
);
|
|
220
|
+
if (!isStriped) return grid;
|
|
221
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
222
|
+
scrollArea.ScrollArea,
|
|
223
|
+
{
|
|
224
|
+
orientation: "both",
|
|
225
|
+
mask: { top: false },
|
|
226
|
+
viewportRef: scrollRef,
|
|
227
|
+
className: utils.cn("h-full w-full rounded-t-xl", className),
|
|
228
|
+
children: grid
|
|
229
|
+
}
|
|
230
|
+
);
|
|
184
231
|
}
|
|
185
232
|
|
|
186
233
|
const DataListRowWrapperContext = React.createContext(false);
|
|
@@ -201,9 +248,32 @@ const dataListRowInteractiveStyles = [
|
|
|
201
248
|
];
|
|
202
249
|
const dataListRowStyles = ["mx-1", ...dataListRowInteractiveStyles, ...dataListRowOuterStyles];
|
|
203
250
|
const dataListRowStaticStyles = ["mx-1 grid grid-cols-subgrid gap-8 px-5", ...dataListRowOuterStyles];
|
|
251
|
+
const dataListRowVariants = index.cva("", {
|
|
252
|
+
variants: {
|
|
253
|
+
variant: {
|
|
254
|
+
default: "",
|
|
255
|
+
error: "bg-notice-destructive/10! hover:bg-notice-destructive/15!"
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
defaultVariants: {
|
|
259
|
+
variant: "default"
|
|
260
|
+
}
|
|
261
|
+
});
|
|
204
262
|
|
|
205
263
|
const DataListRowButton = React.forwardRef(
|
|
206
|
-
({
|
|
264
|
+
({
|
|
265
|
+
children,
|
|
266
|
+
className,
|
|
267
|
+
type = "button",
|
|
268
|
+
flushLeft,
|
|
269
|
+
flushRight,
|
|
270
|
+
colStart,
|
|
271
|
+
colEnd,
|
|
272
|
+
featured,
|
|
273
|
+
variant,
|
|
274
|
+
style,
|
|
275
|
+
...rest
|
|
276
|
+
}, ref) => {
|
|
207
277
|
const isWrapped = useDataListRowWrapperContext();
|
|
208
278
|
const hasColumnOverride = colStart !== void 0 || colEnd !== void 0;
|
|
209
279
|
const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;
|
|
@@ -217,7 +287,10 @@ const DataListRowButton = React.forwardRef(
|
|
|
217
287
|
"text-left",
|
|
218
288
|
!isWrapped && flushLeft && "ml-0!",
|
|
219
289
|
!isWrapped && flushRight && "mr-0!",
|
|
220
|
-
|
|
290
|
+
// `!` so the selection fill wins over the striped variant's zebra tint
|
|
291
|
+
// (a higher-specificity root descendant rule); same color in `default`.
|
|
292
|
+
featured && "bg-surface4!",
|
|
293
|
+
dataListRowVariants({ variant }),
|
|
221
294
|
className
|
|
222
295
|
),
|
|
223
296
|
style: resolvedStyle,
|
|
@@ -239,7 +312,8 @@ function DataListRowLink({
|
|
|
239
312
|
flushRight,
|
|
240
313
|
colStart,
|
|
241
314
|
colEnd,
|
|
242
|
-
featured
|
|
315
|
+
featured,
|
|
316
|
+
variant
|
|
243
317
|
}) {
|
|
244
318
|
const isWrapped = useDataListRowWrapperContext();
|
|
245
319
|
const hasColumnOverride = colStart !== void 0 || colEnd !== void 0;
|
|
@@ -252,7 +326,10 @@ function DataListRowLink({
|
|
|
252
326
|
...isWrapped ? dataListRowInteractiveStyles : dataListRowStyles,
|
|
253
327
|
!isWrapped && flushLeft && "ml-0!",
|
|
254
328
|
!isWrapped && flushRight && "mr-0!",
|
|
255
|
-
|
|
329
|
+
// `!` so the selection fill wins over the striped variant's zebra tint
|
|
330
|
+
// (a higher-specificity root descendant rule); same color in `default`.
|
|
331
|
+
featured && "bg-surface4!",
|
|
332
|
+
dataListRowVariants({ variant }),
|
|
256
333
|
className
|
|
257
334
|
),
|
|
258
335
|
style: resolvedStyle,
|
|
@@ -298,16 +375,17 @@ function DataListTop({ children, className, hasLeadingCell }) {
|
|
|
298
375
|
const DataListTopCell = React.forwardRef(
|
|
299
376
|
({ children, className, as, ...rest }, ref) => {
|
|
300
377
|
const Component = as || "span";
|
|
378
|
+
const isText = typeof children === "string" || typeof children === "number";
|
|
301
379
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
302
380
|
Component,
|
|
303
381
|
{
|
|
304
382
|
ref,
|
|
305
383
|
className: utils.cn(
|
|
306
|
-
"h-8 min-w-0 max-w-full overflow-hidden py-1 flex items-center
|
|
384
|
+
"h-8 min-w-0 max-w-full overflow-hidden py-1 flex items-center whitespace-nowrap text-neutral2 font-semibold tracking-tight text-ui-sm",
|
|
307
385
|
className
|
|
308
386
|
),
|
|
309
387
|
...rest,
|
|
310
|
-
children
|
|
388
|
+
children: isText ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate", children }) : children
|
|
311
389
|
}
|
|
312
390
|
);
|
|
313
391
|
}
|
|
@@ -412,5 +490,6 @@ exports.DataListTopCellWithTooltip = DataListTopCellWithTooltip;
|
|
|
412
490
|
exports.DataListTopSelectCell = DataListTopSelectCell;
|
|
413
491
|
exports.WorkflowIcon = WorkflowIcon;
|
|
414
492
|
exports.dataListRowStaticStyles = dataListRowStaticStyles;
|
|
493
|
+
exports.dataListRowVariants = dataListRowVariants;
|
|
415
494
|
exports.useDataListRowWrapperContext = useDataListRowWrapperContext;
|
|
416
|
-
//# sourceMappingURL=data-list-skeleton-
|
|
495
|
+
//# sourceMappingURL=data-list-skeleton-DR7cqfzq.cjs.map
|