@mastra/playground-ui 51.1.0 → 51.2.0-alpha.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 +66 -0
- package/dist/components/Comment.cjs.js +170 -0
- package/dist/components/Comment.cjs.js.map +1 -0
- package/dist/components/Comment.d.ts +2 -0
- package/dist/components/Comment.es.js +156 -0
- package/dist/components/Comment.es.js.map +1 -0
- package/dist/components/DataList.cjs.js +9 -9
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +9 -9
- package/dist/components/DataList.es.js.map +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +6 -6
- package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +6 -6
- package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +1 -1
- package/dist/components/FormFieldBlocks.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +1 -1
- package/dist/components/JSONSchemaForm.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -3
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +2 -3
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/SettingsRow.cjs.js +35 -14
- package/dist/components/SettingsRow.cjs.js.map +1 -1
- package/dist/components/SettingsRow.es.js +35 -14
- package/dist/components/SettingsRow.es.js.map +1 -1
- package/dist/{data-list-CfsEAR2E.js → data-list-BOI8fRuk.js} +7 -9
- package/dist/data-list-BOI8fRuk.js.map +1 -0
- package/dist/{data-list-BK_lJxMN.cjs → data-list-CCacNODd.cjs} +7 -9
- package/dist/data-list-CCacNODd.cjs.map +1 -0
- package/dist/{data-list-skeleton-dVbplSiW.cjs → data-list-skeleton-BHBSIQHN.cjs} +8 -4
- package/dist/data-list-skeleton-BHBSIQHN.cjs.map +1 -0
- package/dist/{data-list-skeleton-DQp3KwVO.js → data-list-skeleton-DDO_OE14.js} +8 -4
- package/dist/data-list-skeleton-DDO_OE14.js.map +1 -0
- package/dist/{data-list-top-cell-DyBSefIr.cjs → data-list-top-cell-BOXO5s7I.cjs} +55 -104
- package/dist/data-list-top-cell-BOXO5s7I.cjs.map +1 -0
- package/dist/{data-list-top-cell-DZiX9cTb.js → data-list-top-cell-CC5jjv5s.js} +54 -104
- package/dist/data-list-top-cell-CC5jjv5s.js.map +1 -0
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
- package/dist/domains/logs/components/logs-list-view.es.js +2 -2
- package/dist/domains/metrics/components/memory-card-view.cjs.js +3 -3
- package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +3 -3
- package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +2 -2
- package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +4 -4
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +4 -4
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
- package/dist/{logs-data-list-COfm0LbS.js → logs-data-list-DRXJ89IZ.js} +7 -7
- package/dist/logs-data-list-DRXJ89IZ.js.map +1 -0
- package/dist/{logs-data-list-CEPdgKxp.cjs → logs-data-list-Xayqbjw4.cjs} +7 -7
- package/dist/logs-data-list-Xayqbjw4.cjs.map +1 -0
- package/dist/metrics-kpi-card-AhIw9eyu.js.map +1 -1
- package/dist/metrics-kpi-card-tAReOFYk.cjs.map +1 -1
- package/dist/src/ds/components/Comment/comment-composer.d.ts +12 -0
- package/dist/src/ds/components/Comment/comment-context.d.ts +3 -0
- package/dist/src/ds/components/Comment/comment.d.ts +21 -0
- package/dist/src/ds/components/Comment/comment.stories.d.ts +10 -0
- package/dist/src/ds/components/Comment/index.d.ts +5 -0
- package/dist/src/ds/components/DataList/data-list-cells.d.ts +16 -18
- package/dist/src/ds/components/DataList/data-list-root.d.ts +6 -7
- package/dist/src/ds/components/DataList/data-list-row-link.d.ts +1 -1
- package/dist/src/ds/components/DataList/data-list-row-wrapper.d.ts +2 -2
- package/dist/src/ds/components/DataList/data-list.d.ts +2 -2
- package/dist/src/ds/components/DataList/data-list.stories.d.ts +1 -1
- package/dist/src/ds/components/DataList/shared.d.ts +18 -18
- package/dist/src/ds/components/MetricsKpiCard/metrics-kpi-card-value.d.ts +2 -1
- package/dist/src/ds/components/SettingsRow/settings-row.d.ts +8 -3
- package/dist/src/ds/components/SettingsRow/settings-row.stories.d.ts +1 -0
- package/dist/style.css +58 -232
- package/dist/{text-field-block-BGlwSFYC.cjs → text-field-block-B4CvIwKh.cjs} +2 -1
- package/dist/text-field-block-B4CvIwKh.cjs.map +1 -0
- package/dist/{text-field-block-DOiM0dpY.js → text-field-block-Ddl2tJ6D.js} +2 -1
- package/dist/{text-field-block-DOiM0dpY.js.map → text-field-block-Ddl2tJ6D.js.map} +1 -1
- package/dist/{traces-data-list-CyaLRi1n.cjs → traces-data-list-BLZgf-Es.cjs} +7 -7
- package/dist/traces-data-list-BLZgf-Es.cjs.map +1 -0
- package/dist/{traces-data-list-BURMAmFH.js → traces-data-list-DmXGwe4Q.js} +7 -7
- package/dist/traces-data-list-DmXGwe4Q.js.map +1 -0
- package/package.json +7 -7
- package/theme.css +7 -0
- package/dist/data-list-BK_lJxMN.cjs.map +0 -1
- package/dist/data-list-CfsEAR2E.js.map +0 -1
- package/dist/data-list-skeleton-DQp3KwVO.js.map +0 -1
- package/dist/data-list-skeleton-dVbplSiW.cjs.map +0 -1
- package/dist/data-list-top-cell-DZiX9cTb.js.map +0 -1
- package/dist/data-list-top-cell-DyBSefIr.cjs.map +0 -1
- package/dist/logs-data-list-CEPdgKxp.cjs.map +0 -1
- package/dist/logs-data-list-COfm0LbS.js.map +0 -1
- package/dist/text-field-block-BGlwSFYC.cjs.map +0 -1
- package/dist/traces-data-list-BURMAmFH.js.map +0 -1
- package/dist/traces-data-list-CyaLRi1n.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# @mastra/playground-ui
|
|
2
2
|
|
|
3
|
+
## 51.2.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Refreshed the DataList look: rows no longer draw separators, the sticky header and group subheaders share one lighter, theme-tuned band, and every corner uses the same radius. ([#22383](https://github.com/mastra-ai/mastra/pull/22383))
|
|
8
|
+
|
|
9
|
+
**Every row in a list is now the same height.** Row height used to be whatever the tallest cell happened to be, so a list with an actions column or a roomier cell drifted a few pixels away from the list next to it. The row owns its height now, and skeleton rows match the real ones — no jump when data lands.
|
|
10
|
+
|
|
11
|
+
**Typography follows the content.** Headers and name cells are medium weight instead of semibold, and the letter-spacing tightening is gone. IDs and timestamps left the monospace face — IDs get wider tracking to stay scannable, timestamps get tabular figures so their columns still line up.
|
|
12
|
+
|
|
13
|
+
**Row controls only appear on hover.** Selection checkboxes on unselected rows, and the new `DataList.ActionsCell`, stay hidden until you hover the row or reach it with the keyboard, so a resting list reads as content. The column keeps its width, so nothing shifts. On a touch screen, where nothing ever hovers, they stay visible.
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
// Trailing row actions — alignment, spacing and the hover reveal come with the cell
|
|
17
|
+
<DataList.RowWrapper>
|
|
18
|
+
<DataList.RowButton colEnd={-2} onClick={open}>
|
|
19
|
+
{cells}
|
|
20
|
+
</DataList.RowButton>
|
|
21
|
+
<DataList.ActionsCell>
|
|
22
|
+
<Button variant="ghost" size="icon-xs" aria-label="Delete">
|
|
23
|
+
<Trash2 />
|
|
24
|
+
</Button>
|
|
25
|
+
</DataList.ActionsCell>
|
|
26
|
+
</DataList.RowWrapper>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Breaking:** a variant, three props and a component that no longer decide anything are gone.
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
// Before
|
|
33
|
+
<DataList columns={columns} variant="lined">
|
|
34
|
+
<DataList.RowButton flushLeft flushRight colEnd={-2}>
|
|
35
|
+
<DataList.Cell height="compact">{status}</DataList.Cell>
|
|
36
|
+
<DataList.MonoCell>{path}</DataList.MonoCell>
|
|
37
|
+
|
|
38
|
+
// After — rows are borderless, full-bleed and uniformly tall by default
|
|
39
|
+
<DataList columns={columns}>
|
|
40
|
+
<DataList.RowButton colEnd={-2}>
|
|
41
|
+
<DataList.Cell>{status}</DataList.Cell>
|
|
42
|
+
<DataList.TextCell font="mono">{path}</DataList.TextCell>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- `variant="lined"` existed only to draw row separators. Lists that want row banding can still ask for `variant="striped"`.
|
|
46
|
+
- `height` on cells set row height one cell at a time, which is what let rows drift apart.
|
|
47
|
+
- `flushLeft` / `flushRight` dropped a row margin that no longer exists.
|
|
48
|
+
- `DataList.MonoCell` was a cell that only changed the typeface. `DataList.TextCell font="mono"` replaces it — same rendering, one less component.
|
|
49
|
+
|
|
50
|
+
### Patch Changes
|
|
51
|
+
|
|
52
|
+
- Added a `Comment` family of compound components for text-only comment threads: `Comment`, `CommentList`, `CommentItem` (with header, author, timestamp, body and actions slots) and `CommentComposer` (input + send button). The root `variant` prop switches between `default`, a flat thread with hover-revealed per-item actions, and `embed`, the same thread on a bordered card surface with a compact composer and no per-item actions. ([#22396](https://github.com/mastra-ai/mastra/pull/22396))
|
|
53
|
+
|
|
54
|
+
- Improved the experiment page in Studio with a horizontal metadata bar showing when the run started, how long it took, the dataset it ran against, and which scorers were used ([#22377](https://github.com/mastra-ai/mastra/pull/22377))
|
|
55
|
+
|
|
56
|
+
- Added a `factory` variant to the `SettingsRow` component so settings rows can render the denser card-row layout (row padding, 12px description text) instead of only the studio spacing. ([#22375](https://github.com/mastra-ai/mastra/pull/22375))
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<SettingsRow variant="factory" label="Auto-approve tools" description="Run tool calls without asking">
|
|
60
|
+
<Switch checked={autoApprove} onCheckedChange={setAutoApprove} />
|
|
61
|
+
</SettingsRow>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- Updated dependencies [[`7176362`](https://github.com/mastra-ai/mastra/commit/717636281a3339911a05ea2cc8ae38afe4fd2cef), [`e3b796d`](https://github.com/mastra-ai/mastra/commit/e3b796d29a63f0d5c97dd815aadec40687346d70), [`49ccd14`](https://github.com/mastra-ai/mastra/commit/49ccd142268a61fb55ea75bc76287643a21f3677), [`3855b38`](https://github.com/mastra-ai/mastra/commit/3855b38c4c25af32ab8e298e148becc963abe92c)]:
|
|
65
|
+
- @mastra/core@1.63.0-alpha.0
|
|
66
|
+
- @mastra/client-js@1.42.2-alpha.0
|
|
67
|
+
- @mastra/react@1.4.7-alpha.0
|
|
68
|
+
|
|
3
69
|
## 51.1.0
|
|
4
70
|
|
|
5
71
|
### Minor Changes
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
const index = require('../index-C-Lt4Bx_.cjs');
|
|
7
|
+
const React = require('react');
|
|
8
|
+
const Txt = require('../Txt-I5lK8zy7.cjs');
|
|
9
|
+
const utils_cn = require('../cn-vA5sWo9W.cjs');
|
|
10
|
+
const lucideReact = require('lucide-react');
|
|
11
|
+
const inputGroup = require('../input-group-4EQi2l7H.cjs');
|
|
12
|
+
|
|
13
|
+
const CommentContext = React.createContext(null);
|
|
14
|
+
function useCommentVariant() {
|
|
15
|
+
const variant = React.useContext(CommentContext);
|
|
16
|
+
if (!variant) throw new Error("Comment compounds must be rendered within Comment");
|
|
17
|
+
return variant;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const commentVariants = index.cva("flex flex-col", {
|
|
21
|
+
variants: {
|
|
22
|
+
variant: {
|
|
23
|
+
default: "gap-2",
|
|
24
|
+
embed: "gap-1 rounded-xl border border-border1 bg-surface3 p-3"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
defaultVariants: {
|
|
28
|
+
variant: "default"
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
const Comment = React.forwardRef(({ className, variant = "default", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(CommentContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
ref,
|
|
35
|
+
"data-slot": "comment",
|
|
36
|
+
"data-variant": variant,
|
|
37
|
+
className: utils_cn.cn(commentVariants({ variant }), className),
|
|
38
|
+
...props
|
|
39
|
+
}
|
|
40
|
+
) }));
|
|
41
|
+
Comment.displayName = "Comment";
|
|
42
|
+
const commentListGap = {
|
|
43
|
+
default: "gap-3",
|
|
44
|
+
embed: "gap-2"
|
|
45
|
+
};
|
|
46
|
+
const CommentList = React.forwardRef(({ className, ...props }, ref) => {
|
|
47
|
+
const variant = useCommentVariant();
|
|
48
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
49
|
+
"ul",
|
|
50
|
+
{
|
|
51
|
+
ref,
|
|
52
|
+
"data-slot": "comment-list",
|
|
53
|
+
className: utils_cn.cn("flex flex-col", commentListGap[variant], className),
|
|
54
|
+
...props
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
CommentList.displayName = "CommentList";
|
|
59
|
+
const CommentItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
60
|
+
"li",
|
|
61
|
+
{
|
|
62
|
+
ref,
|
|
63
|
+
"data-slot": "comment-item",
|
|
64
|
+
className: utils_cn.cn("group/comment-item flex flex-col gap-1", className),
|
|
65
|
+
...props
|
|
66
|
+
}
|
|
67
|
+
));
|
|
68
|
+
CommentItem.displayName = "CommentItem";
|
|
69
|
+
const CommentItemHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "comment-item-header", className: utils_cn.cn("flex items-center gap-2", className), ...props }));
|
|
70
|
+
CommentItemHeader.displayName = "CommentItemHeader";
|
|
71
|
+
const CommentItemAuthor = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
72
|
+
Txt.Txt,
|
|
73
|
+
{
|
|
74
|
+
ref,
|
|
75
|
+
as: "span",
|
|
76
|
+
variant: "ui-md",
|
|
77
|
+
"data-slot": "comment-item-author",
|
|
78
|
+
className: utils_cn.cn("font-medium text-neutral6", className),
|
|
79
|
+
...props
|
|
80
|
+
}
|
|
81
|
+
));
|
|
82
|
+
CommentItemAuthor.displayName = "CommentItemAuthor";
|
|
83
|
+
const CommentItemTimestamp = React.forwardRef(
|
|
84
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
"time",
|
|
86
|
+
{
|
|
87
|
+
ref,
|
|
88
|
+
"data-slot": "comment-item-timestamp",
|
|
89
|
+
className: utils_cn.cn("text-ui-sm leading-ui-sm text-neutral3", className),
|
|
90
|
+
...props
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
);
|
|
94
|
+
CommentItemTimestamp.displayName = "CommentItemTimestamp";
|
|
95
|
+
const commentItemBodyRule = {
|
|
96
|
+
default: "border-l border-border1 pl-3",
|
|
97
|
+
embed: ""
|
|
98
|
+
};
|
|
99
|
+
const CommentItemBody = React.forwardRef(({ className, ...props }, ref) => {
|
|
100
|
+
const variant = useCommentVariant();
|
|
101
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
Txt.Txt,
|
|
103
|
+
{
|
|
104
|
+
ref,
|
|
105
|
+
variant: "ui-md",
|
|
106
|
+
"data-slot": "comment-item-body",
|
|
107
|
+
className: utils_cn.cn("whitespace-pre-wrap text-neutral6", commentItemBodyRule[variant], className),
|
|
108
|
+
...props
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
});
|
|
112
|
+
CommentItemBody.displayName = "CommentItemBody";
|
|
113
|
+
const CommentItemActions = React.forwardRef(
|
|
114
|
+
({ className, ...props }, ref) => {
|
|
115
|
+
const variant = useCommentVariant();
|
|
116
|
+
if (variant === "embed") return null;
|
|
117
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
+
"div",
|
|
119
|
+
{
|
|
120
|
+
ref,
|
|
121
|
+
"data-slot": "comment-item-actions",
|
|
122
|
+
className: utils_cn.cn(
|
|
123
|
+
"flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100",
|
|
124
|
+
"motion-safe:transition-opacity",
|
|
125
|
+
className
|
|
126
|
+
),
|
|
127
|
+
...props
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
CommentItemActions.displayName = "CommentItemActions";
|
|
133
|
+
|
|
134
|
+
const CommentComposer = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("form", { ref, "data-slot": "comment-composer", className: utils_cn.cn("flex w-full items-center gap-2", className), ...props }));
|
|
135
|
+
CommentComposer.displayName = "CommentComposer";
|
|
136
|
+
const composerSize = {
|
|
137
|
+
default: "md",
|
|
138
|
+
embed: "sm"
|
|
139
|
+
};
|
|
140
|
+
const composerInputVariant = {
|
|
141
|
+
default: "outline",
|
|
142
|
+
embed: "default"
|
|
143
|
+
};
|
|
144
|
+
const CommentComposerInput = React.forwardRef(
|
|
145
|
+
({ groupClassName, children, ...props }, ref) => {
|
|
146
|
+
const variant = useCommentVariant();
|
|
147
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(inputGroup.InputGroup, { size: composerSize[variant], variant: composerInputVariant[variant], className: groupClassName, children: [
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsx(inputGroup.InputGroupInput, { ref, "data-slot": "comment-composer-input", ...props }),
|
|
149
|
+
children
|
|
150
|
+
] });
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
CommentComposerInput.displayName = "CommentComposerInput";
|
|
154
|
+
const CommentComposerSend = React.forwardRef(
|
|
155
|
+
({ "aria-label": ariaLabel = "Send comment", type = "submit", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(inputGroup.InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsxRuntime.jsx(inputGroup.InputGroupButton, { ref, "data-slot": "comment-composer-send", type, "aria-label": ariaLabel, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, {}) }) })
|
|
156
|
+
);
|
|
157
|
+
CommentComposerSend.displayName = "CommentComposerSend";
|
|
158
|
+
|
|
159
|
+
exports.Comment = Comment;
|
|
160
|
+
exports.CommentComposer = CommentComposer;
|
|
161
|
+
exports.CommentComposerInput = CommentComposerInput;
|
|
162
|
+
exports.CommentComposerSend = CommentComposerSend;
|
|
163
|
+
exports.CommentItem = CommentItem;
|
|
164
|
+
exports.CommentItemActions = CommentItemActions;
|
|
165
|
+
exports.CommentItemAuthor = CommentItemAuthor;
|
|
166
|
+
exports.CommentItemBody = CommentItemBody;
|
|
167
|
+
exports.CommentItemHeader = CommentItemHeader;
|
|
168
|
+
exports.CommentItemTimestamp = CommentItemTimestamp;
|
|
169
|
+
exports.CommentList = CommentList;
|
|
170
|
+
//# sourceMappingURL=Comment.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Comment.cjs.js","sources":["../../src/ds/components/Comment/comment-context.ts","../../src/ds/components/Comment/comment.tsx","../../src/ds/components/Comment/comment-composer.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type CommentVariant = 'default' | 'embed';\n\nexport const CommentContext = createContext<CommentVariant | null>(null);\n\nexport function useCommentVariant(): CommentVariant {\n const variant = useContext(CommentContext);\n if (!variant) throw new Error('Comment compounds must be rendered within Comment');\n return variant;\n}\n","import { cva } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { CommentContext, useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst commentVariants = cva('flex flex-col', {\n variants: {\n variant: {\n default: 'gap-2',\n embed: 'gap-1 rounded-xl border border-border1 bg-surface3 p-3',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface CommentProps extends ComponentPropsWithoutRef<'div'> {\n variant?: CommentVariant;\n}\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(({ className, variant = 'default', ...props }, ref) => (\n <CommentContext.Provider value={variant}>\n <div\n ref={ref}\n data-slot=\"comment\"\n data-variant={variant}\n className={cn(commentVariants({ variant }), className)}\n {...props}\n />\n </CommentContext.Provider>\n));\nComment.displayName = 'Comment';\n\nconst commentListGap: Record<CommentVariant, string> = {\n default: 'gap-3',\n embed: 'gap-2',\n};\n\nexport type CommentListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport const CommentList = forwardRef<HTMLUListElement, CommentListProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <ul\n ref={ref}\n data-slot=\"comment-list\"\n className={cn('flex flex-col', commentListGap[variant], className)}\n {...props}\n />\n );\n});\nCommentList.displayName = 'CommentList';\n\nexport type CommentItemProps = ComponentPropsWithoutRef<'li'>;\n\nexport const CommentItem = forwardRef<HTMLLIElement, CommentItemProps>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-slot=\"comment-item\"\n className={cn('group/comment-item flex flex-col gap-1', className)}\n {...props}\n />\n));\nCommentItem.displayName = 'CommentItem';\n\nexport type CommentItemHeaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const CommentItemHeader = forwardRef<HTMLDivElement, CommentItemHeaderProps>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-header\" className={cn('flex items-center gap-2', className)} {...props} />\n));\nCommentItemHeader.displayName = 'CommentItemHeader';\n\nexport type CommentItemAuthorProps = ComponentPropsWithoutRef<'span'>;\n\nexport const CommentItemAuthor = forwardRef<HTMLElement, CommentItemAuthorProps>(({ className, ...props }, ref) => (\n <Txt\n ref={ref}\n as=\"span\"\n variant=\"ui-md\"\n data-slot=\"comment-item-author\"\n className={cn('font-medium text-neutral6', className)}\n {...props}\n />\n));\nCommentItemAuthor.displayName = 'CommentItemAuthor';\n\nexport type CommentItemTimestampProps = ComponentPropsWithoutRef<'time'>;\n\nexport const CommentItemTimestamp = forwardRef<HTMLTimeElement, CommentItemTimestampProps>(\n ({ className, ...props }, ref) => (\n <time\n ref={ref}\n data-slot=\"comment-item-timestamp\"\n className={cn('text-ui-sm leading-ui-sm text-neutral3', className)}\n {...props}\n />\n ),\n);\nCommentItemTimestamp.displayName = 'CommentItemTimestamp';\n\nconst commentItemBodyRule: Record<CommentVariant, string> = {\n default: 'border-l border-border1 pl-3',\n embed: '',\n};\n\nexport type CommentItemBodyProps = ComponentPropsWithoutRef<'p'>;\n\nexport const CommentItemBody = forwardRef<HTMLElement, CommentItemBodyProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n variant=\"ui-md\"\n data-slot=\"comment-item-body\"\n className={cn('whitespace-pre-wrap text-neutral6', commentItemBodyRule[variant], className)}\n {...props}\n />\n );\n});\nCommentItemBody.displayName = 'CommentItemBody';\n\nexport type CommentItemActionsProps = ComponentPropsWithoutRef<'div'>;\n\n/** Hidden in the `embed` variant, which drops per-item actions. */\nexport const CommentItemActions = forwardRef<HTMLDivElement, CommentItemActionsProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n if (variant === 'embed') return null;\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-actions\"\n className={cn(\n 'flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100',\n 'motion-safe:transition-opacity',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCommentItemActions.displayName = 'CommentItemActions';\n","import { ArrowUp } from 'lucide-react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport { useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupButtonProps, InputGroupInputProps } from '@/ds/components/InputGroup';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { cn } from '@/lib/utils';\n\nexport type CommentComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport const CommentComposer = forwardRef<HTMLFormElement, CommentComposerProps>(({ className, ...props }, ref) => (\n <form ref={ref} data-slot=\"comment-composer\" className={cn('flex w-full items-center gap-2', className)} {...props} />\n));\nCommentComposer.displayName = 'CommentComposer';\n\nconst composerSize: Record<CommentVariant, ControlSize> = {\n default: 'md',\n embed: 'sm',\n};\n\nconst composerInputVariant: Record<CommentVariant, 'default' | 'outline'> = {\n default: 'outline',\n embed: 'default',\n};\n\nexport interface CommentComposerInputProps extends InputGroupInputProps {\n /** Layout classes for the surrounding InputGroup. */\n groupClassName?: string;\n children?: ReactNode;\n}\n\nexport const CommentComposerInput = forwardRef<HTMLInputElement, CommentComposerInputProps>(\n ({ groupClassName, children, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <InputGroup size={composerSize[variant]} variant={composerInputVariant[variant]} className={groupClassName}>\n <InputGroupInput ref={ref} data-slot=\"comment-composer-input\" {...props} />\n {children}\n </InputGroup>\n );\n },\n);\nCommentComposerInput.displayName = 'CommentComposerInput';\n\nexport type CommentComposerSendProps = Omit<InputGroupButtonProps, 'children'>;\n\nexport const CommentComposerSend = forwardRef<HTMLButtonElement, CommentComposerSendProps>(\n ({ 'aria-label': ariaLabel = 'Send comment', type = 'submit', ...props }, ref) => (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton ref={ref} data-slot=\"comment-composer-send\" type={type} aria-label={ariaLabel} {...props}>\n <ArrowUp />\n </InputGroupButton>\n </InputGroupAddon>\n ),\n);\nCommentComposerSend.displayName = 'CommentComposerSend';\n"],"names":["createContext","useContext","cva","forwardRef","jsx","cn","Txt","jsxs","InputGroup","InputGroupInput","InputGroupAddon","InputGroupButton","ArrowUp"],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { c as cva } from '../index-CSm06eOE.js';
|
|
3
|
+
import { createContext, useContext, forwardRef } from 'react';
|
|
4
|
+
import { T as Txt } from '../Txt-Df42XG5p.js';
|
|
5
|
+
import { c as cn } from '../cn-BakJzhuv.js';
|
|
6
|
+
import { ArrowUp } from 'lucide-react';
|
|
7
|
+
import { I as InputGroup, c as InputGroupInput, a as InputGroupAddon, b as InputGroupButton } from '../input-group-U2f3A4Ya.js';
|
|
8
|
+
|
|
9
|
+
const CommentContext = createContext(null);
|
|
10
|
+
function useCommentVariant() {
|
|
11
|
+
const variant = useContext(CommentContext);
|
|
12
|
+
if (!variant) throw new Error("Comment compounds must be rendered within Comment");
|
|
13
|
+
return variant;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const commentVariants = cva("flex flex-col", {
|
|
17
|
+
variants: {
|
|
18
|
+
variant: {
|
|
19
|
+
default: "gap-2",
|
|
20
|
+
embed: "gap-1 rounded-xl border border-border1 bg-surface3 p-3"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
variant: "default"
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
const Comment = forwardRef(({ className, variant = "default", ...props }, ref) => /* @__PURE__ */ jsx(CommentContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
ref,
|
|
31
|
+
"data-slot": "comment",
|
|
32
|
+
"data-variant": variant,
|
|
33
|
+
className: cn(commentVariants({ variant }), className),
|
|
34
|
+
...props
|
|
35
|
+
}
|
|
36
|
+
) }));
|
|
37
|
+
Comment.displayName = "Comment";
|
|
38
|
+
const commentListGap = {
|
|
39
|
+
default: "gap-3",
|
|
40
|
+
embed: "gap-2"
|
|
41
|
+
};
|
|
42
|
+
const CommentList = forwardRef(({ className, ...props }, ref) => {
|
|
43
|
+
const variant = useCommentVariant();
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
"ul",
|
|
46
|
+
{
|
|
47
|
+
ref,
|
|
48
|
+
"data-slot": "comment-list",
|
|
49
|
+
className: cn("flex flex-col", commentListGap[variant], className),
|
|
50
|
+
...props
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
CommentList.displayName = "CommentList";
|
|
55
|
+
const CommentItem = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
56
|
+
"li",
|
|
57
|
+
{
|
|
58
|
+
ref,
|
|
59
|
+
"data-slot": "comment-item",
|
|
60
|
+
className: cn("group/comment-item flex flex-col gap-1", className),
|
|
61
|
+
...props
|
|
62
|
+
}
|
|
63
|
+
));
|
|
64
|
+
CommentItem.displayName = "CommentItem";
|
|
65
|
+
const CommentItemHeader = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, "data-slot": "comment-item-header", className: cn("flex items-center gap-2", className), ...props }));
|
|
66
|
+
CommentItemHeader.displayName = "CommentItemHeader";
|
|
67
|
+
const CommentItemAuthor = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
68
|
+
Txt,
|
|
69
|
+
{
|
|
70
|
+
ref,
|
|
71
|
+
as: "span",
|
|
72
|
+
variant: "ui-md",
|
|
73
|
+
"data-slot": "comment-item-author",
|
|
74
|
+
className: cn("font-medium text-neutral6", className),
|
|
75
|
+
...props
|
|
76
|
+
}
|
|
77
|
+
));
|
|
78
|
+
CommentItemAuthor.displayName = "CommentItemAuthor";
|
|
79
|
+
const CommentItemTimestamp = forwardRef(
|
|
80
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
81
|
+
"time",
|
|
82
|
+
{
|
|
83
|
+
ref,
|
|
84
|
+
"data-slot": "comment-item-timestamp",
|
|
85
|
+
className: cn("text-ui-sm leading-ui-sm text-neutral3", className),
|
|
86
|
+
...props
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
);
|
|
90
|
+
CommentItemTimestamp.displayName = "CommentItemTimestamp";
|
|
91
|
+
const commentItemBodyRule = {
|
|
92
|
+
default: "border-l border-border1 pl-3",
|
|
93
|
+
embed: ""
|
|
94
|
+
};
|
|
95
|
+
const CommentItemBody = forwardRef(({ className, ...props }, ref) => {
|
|
96
|
+
const variant = useCommentVariant();
|
|
97
|
+
return /* @__PURE__ */ jsx(
|
|
98
|
+
Txt,
|
|
99
|
+
{
|
|
100
|
+
ref,
|
|
101
|
+
variant: "ui-md",
|
|
102
|
+
"data-slot": "comment-item-body",
|
|
103
|
+
className: cn("whitespace-pre-wrap text-neutral6", commentItemBodyRule[variant], className),
|
|
104
|
+
...props
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
});
|
|
108
|
+
CommentItemBody.displayName = "CommentItemBody";
|
|
109
|
+
const CommentItemActions = forwardRef(
|
|
110
|
+
({ className, ...props }, ref) => {
|
|
111
|
+
const variant = useCommentVariant();
|
|
112
|
+
if (variant === "embed") return null;
|
|
113
|
+
return /* @__PURE__ */ jsx(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
ref,
|
|
117
|
+
"data-slot": "comment-item-actions",
|
|
118
|
+
className: cn(
|
|
119
|
+
"flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100",
|
|
120
|
+
"motion-safe:transition-opacity",
|
|
121
|
+
className
|
|
122
|
+
),
|
|
123
|
+
...props
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
CommentItemActions.displayName = "CommentItemActions";
|
|
129
|
+
|
|
130
|
+
const CommentComposer = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("form", { ref, "data-slot": "comment-composer", className: cn("flex w-full items-center gap-2", className), ...props }));
|
|
131
|
+
CommentComposer.displayName = "CommentComposer";
|
|
132
|
+
const composerSize = {
|
|
133
|
+
default: "md",
|
|
134
|
+
embed: "sm"
|
|
135
|
+
};
|
|
136
|
+
const composerInputVariant = {
|
|
137
|
+
default: "outline",
|
|
138
|
+
embed: "default"
|
|
139
|
+
};
|
|
140
|
+
const CommentComposerInput = forwardRef(
|
|
141
|
+
({ groupClassName, children, ...props }, ref) => {
|
|
142
|
+
const variant = useCommentVariant();
|
|
143
|
+
return /* @__PURE__ */ jsxs(InputGroup, { size: composerSize[variant], variant: composerInputVariant[variant], className: groupClassName, children: [
|
|
144
|
+
/* @__PURE__ */ jsx(InputGroupInput, { ref, "data-slot": "comment-composer-input", ...props }),
|
|
145
|
+
children
|
|
146
|
+
] });
|
|
147
|
+
}
|
|
148
|
+
);
|
|
149
|
+
CommentComposerInput.displayName = "CommentComposerInput";
|
|
150
|
+
const CommentComposerSend = forwardRef(
|
|
151
|
+
({ "aria-label": ariaLabel = "Send comment", type = "submit", ...props }, ref) => /* @__PURE__ */ jsx(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsx(InputGroupButton, { ref, "data-slot": "comment-composer-send", type, "aria-label": ariaLabel, ...props, children: /* @__PURE__ */ jsx(ArrowUp, {}) }) })
|
|
152
|
+
);
|
|
153
|
+
CommentComposerSend.displayName = "CommentComposerSend";
|
|
154
|
+
|
|
155
|
+
export { Comment, CommentComposer, CommentComposerInput, CommentComposerSend, CommentItem, CommentItemActions, CommentItemAuthor, CommentItemBody, CommentItemHeader, CommentItemTimestamp, CommentList };
|
|
156
|
+
//# sourceMappingURL=Comment.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Comment.es.js","sources":["../../src/ds/components/Comment/comment-context.ts","../../src/ds/components/Comment/comment.tsx","../../src/ds/components/Comment/comment-composer.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type CommentVariant = 'default' | 'embed';\n\nexport const CommentContext = createContext<CommentVariant | null>(null);\n\nexport function useCommentVariant(): CommentVariant {\n const variant = useContext(CommentContext);\n if (!variant) throw new Error('Comment compounds must be rendered within Comment');\n return variant;\n}\n","import { cva } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { CommentContext, useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst commentVariants = cva('flex flex-col', {\n variants: {\n variant: {\n default: 'gap-2',\n embed: 'gap-1 rounded-xl border border-border1 bg-surface3 p-3',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface CommentProps extends ComponentPropsWithoutRef<'div'> {\n variant?: CommentVariant;\n}\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(({ className, variant = 'default', ...props }, ref) => (\n <CommentContext.Provider value={variant}>\n <div\n ref={ref}\n data-slot=\"comment\"\n data-variant={variant}\n className={cn(commentVariants({ variant }), className)}\n {...props}\n />\n </CommentContext.Provider>\n));\nComment.displayName = 'Comment';\n\nconst commentListGap: Record<CommentVariant, string> = {\n default: 'gap-3',\n embed: 'gap-2',\n};\n\nexport type CommentListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport const CommentList = forwardRef<HTMLUListElement, CommentListProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <ul\n ref={ref}\n data-slot=\"comment-list\"\n className={cn('flex flex-col', commentListGap[variant], className)}\n {...props}\n />\n );\n});\nCommentList.displayName = 'CommentList';\n\nexport type CommentItemProps = ComponentPropsWithoutRef<'li'>;\n\nexport const CommentItem = forwardRef<HTMLLIElement, CommentItemProps>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-slot=\"comment-item\"\n className={cn('group/comment-item flex flex-col gap-1', className)}\n {...props}\n />\n));\nCommentItem.displayName = 'CommentItem';\n\nexport type CommentItemHeaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const CommentItemHeader = forwardRef<HTMLDivElement, CommentItemHeaderProps>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-header\" className={cn('flex items-center gap-2', className)} {...props} />\n));\nCommentItemHeader.displayName = 'CommentItemHeader';\n\nexport type CommentItemAuthorProps = ComponentPropsWithoutRef<'span'>;\n\nexport const CommentItemAuthor = forwardRef<HTMLElement, CommentItemAuthorProps>(({ className, ...props }, ref) => (\n <Txt\n ref={ref}\n as=\"span\"\n variant=\"ui-md\"\n data-slot=\"comment-item-author\"\n className={cn('font-medium text-neutral6', className)}\n {...props}\n />\n));\nCommentItemAuthor.displayName = 'CommentItemAuthor';\n\nexport type CommentItemTimestampProps = ComponentPropsWithoutRef<'time'>;\n\nexport const CommentItemTimestamp = forwardRef<HTMLTimeElement, CommentItemTimestampProps>(\n ({ className, ...props }, ref) => (\n <time\n ref={ref}\n data-slot=\"comment-item-timestamp\"\n className={cn('text-ui-sm leading-ui-sm text-neutral3', className)}\n {...props}\n />\n ),\n);\nCommentItemTimestamp.displayName = 'CommentItemTimestamp';\n\nconst commentItemBodyRule: Record<CommentVariant, string> = {\n default: 'border-l border-border1 pl-3',\n embed: '',\n};\n\nexport type CommentItemBodyProps = ComponentPropsWithoutRef<'p'>;\n\nexport const CommentItemBody = forwardRef<HTMLElement, CommentItemBodyProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n variant=\"ui-md\"\n data-slot=\"comment-item-body\"\n className={cn('whitespace-pre-wrap text-neutral6', commentItemBodyRule[variant], className)}\n {...props}\n />\n );\n});\nCommentItemBody.displayName = 'CommentItemBody';\n\nexport type CommentItemActionsProps = ComponentPropsWithoutRef<'div'>;\n\n/** Hidden in the `embed` variant, which drops per-item actions. */\nexport const CommentItemActions = forwardRef<HTMLDivElement, CommentItemActionsProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n if (variant === 'embed') return null;\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-actions\"\n className={cn(\n 'flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100',\n 'motion-safe:transition-opacity',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCommentItemActions.displayName = 'CommentItemActions';\n","import { ArrowUp } from 'lucide-react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport { useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupButtonProps, InputGroupInputProps } from '@/ds/components/InputGroup';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { cn } from '@/lib/utils';\n\nexport type CommentComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport const CommentComposer = forwardRef<HTMLFormElement, CommentComposerProps>(({ className, ...props }, ref) => (\n <form ref={ref} data-slot=\"comment-composer\" className={cn('flex w-full items-center gap-2', className)} {...props} />\n));\nCommentComposer.displayName = 'CommentComposer';\n\nconst composerSize: Record<CommentVariant, ControlSize> = {\n default: 'md',\n embed: 'sm',\n};\n\nconst composerInputVariant: Record<CommentVariant, 'default' | 'outline'> = {\n default: 'outline',\n embed: 'default',\n};\n\nexport interface CommentComposerInputProps extends InputGroupInputProps {\n /** Layout classes for the surrounding InputGroup. */\n groupClassName?: string;\n children?: ReactNode;\n}\n\nexport const CommentComposerInput = forwardRef<HTMLInputElement, CommentComposerInputProps>(\n ({ groupClassName, children, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <InputGroup size={composerSize[variant]} variant={composerInputVariant[variant]} className={groupClassName}>\n <InputGroupInput ref={ref} data-slot=\"comment-composer-input\" {...props} />\n {children}\n </InputGroup>\n );\n },\n);\nCommentComposerInput.displayName = 'CommentComposerInput';\n\nexport type CommentComposerSendProps = Omit<InputGroupButtonProps, 'children'>;\n\nexport const CommentComposerSend = forwardRef<HTMLButtonElement, CommentComposerSendProps>(\n ({ 'aria-label': ariaLabel = 'Send comment', type = 'submit', ...props }, ref) => (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton ref={ref} data-slot=\"comment-composer-send\" type={type} aria-label={ariaLabel} {...props}>\n <ArrowUp />\n </InputGroupButton>\n </InputGroupAddon>\n ),\n);\nCommentComposerSend.displayName = 'CommentComposerSend';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
-
const dataList = require('../data-list-
|
|
6
|
-
const dataListSkeleton = require('../data-list-skeleton-
|
|
5
|
+
const dataList = require('../data-list-CCacNODd.cjs');
|
|
6
|
+
const dataListSkeleton = require('../data-list-skeleton-BHBSIQHN.cjs');
|
|
7
7
|
const jsxRuntime = require('react/jsx-runtime');
|
|
8
|
-
const dataListTopCell = require('../data-list-top-cell-
|
|
8
|
+
const dataListTopCell = require('../data-list-top-cell-BOXO5s7I.cjs');
|
|
9
9
|
const dateFns = require('date-fns');
|
|
10
|
-
const tracesDataList = require('../traces-data-list-
|
|
10
|
+
const tracesDataList = require('../traces-data-list-BLZgf-Es.cjs');
|
|
11
11
|
const useDataListKeyboard = require('../use-data-list-keyboard-k5D-WlNX.cjs');
|
|
12
12
|
|
|
13
13
|
function toDate(value) {
|
|
@@ -16,23 +16,23 @@ function toDate(value) {
|
|
|
16
16
|
}
|
|
17
17
|
function ScoresDataListDateCell({ timestamp }) {
|
|
18
18
|
const date = toDate(timestamp);
|
|
19
|
-
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, {
|
|
19
|
+
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, { className: "text-ui-smd text-neutral2", children: date ? dateFns.isToday(date) ? "Today" : dateFns.format(date, "MMM dd") : "-" });
|
|
20
20
|
}
|
|
21
21
|
function ScoresDataListTimeCell({ timestamp }) {
|
|
22
22
|
const date = toDate(timestamp);
|
|
23
|
-
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, {
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, { className: "text-ui-smd text-neutral3", children: date ? dateFns.format(date, "h:mm:ss aaa") : "-" });
|
|
24
24
|
}
|
|
25
25
|
function ScoresDataListInputCell({ input }) {
|
|
26
26
|
const display = input != null ? JSON.stringify(input) : "-";
|
|
27
|
-
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, {
|
|
27
|
+
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono", title: display, children: display }) });
|
|
28
28
|
}
|
|
29
29
|
function ScoresDataListEntityCell({ entityId }) {
|
|
30
30
|
const display = entityId || "-";
|
|
31
|
-
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, {
|
|
31
|
+
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui-smd block max-w-full min-w-0 truncate", title: display, children: display }) });
|
|
32
32
|
}
|
|
33
33
|
function ScoresDataListScoreCell({ score }) {
|
|
34
34
|
const display = score == null ? "-" : typeof score === "object" ? JSON.stringify(score) : String(score);
|
|
35
|
-
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, {
|
|
35
|
+
return /* @__PURE__ */ jsxRuntime.jsx(dataListTopCell.DataListCell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono", title: display, children: display }) });
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
function ScoresDataListRoot(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataList.cjs.js","sources":["../../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx"],"sourcesContent":["import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\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\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell
|
|
1
|
+
{"version":3,"file":"DataList.cjs.js","sources":["../../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx"],"sourcesContent":["import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\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\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell className=\"text-ui-smd text-neutral2\">\n {date ? (isToday(date) ? 'Today' : format(date, 'MMM dd')) : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n const date = toDate(timestamp);\n return <DataListCell className=\"text-ui-smd text-neutral3\">{date ? format(date, 'h:mm:ss aaa') : '-'}</DataListCell>;\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n const display = input != null ? JSON.stringify(input) : '-';\n return (\n <DataListCell>\n <span className=\"text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono\" title={display}>\n {display}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n const display = entityId || '-';\n return (\n <DataListCell>\n <span className=\"text-ui-smd block max-w-full min-w-0 truncate\" title={display}>\n {display}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell>\n <span className=\"text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono\" title={display}>\n {display}\n </span>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n"],"names":["jsx","DataListCell","isToday","format","DataListRoot","DataListTop","DataListTopCell","DataListRowButton","DataListNoMatch","DataListNextPageLoading"],"mappings":";;;;;;;;;;;;AAOA,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;AAUO,SAAS,sBAAA,CAAuB,EAAE,SAAA,EAAU,EAAgC;AACjF,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,uBACEA,cAAA,CAACC,4BAAA,EAAA,EAAa,SAAA,EAAU,2BAAA,EACrB,QAAA,EAAA,IAAA,GAAQC,eAAA,CAAQ,IAAI,CAAA,GAAI,OAAA,GAAUC,cAAA,CAAO,IAAA,EAAM,QAAQ,IAAK,GAAA,EAC/D,CAAA;AAEJ;AAUO,SAAS,sBAAA,CAAuB,EAAE,SAAA,EAAU,EAAgC;AACjF,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,uBAAOH,cAAA,CAACC,gCAAa,SAAA,EAAU,2BAAA,EAA6B,iBAAOE,cAAA,CAAO,IAAA,EAAM,aAAa,CAAA,GAAI,GAAA,EAAI,CAAA;AACvG;AAUO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,MAAM,UAAU,KAAA,IAAS,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,GAAA;AACxD,EAAA,uBACEH,cAAA,CAACC,gCACC,QAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uEAAA,EAAwE,KAAA,EAAO,OAAA,EAC5F,QAAA,EAAA,OAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAUO,SAAS,wBAAA,CAAyB,EAAE,QAAA,EAAS,EAAkC;AACpF,EAAA,MAAM,UAAU,QAAA,IAAY,GAAA;AAC5B,EAAA,uBACEA,cAAA,CAACC,gCACC,QAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+CAAA,EAAgD,KAAA,EAAO,OAAA,EACpE,QAAA,EAAA,OAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAUO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,MAAM,OAAA,GAAU,KAAA,IAAS,IAAA,GAAO,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AACtG,EAAA,uBACEA,cAAA,CAACC,gCACC,QAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uEAAA,EAAwE,KAAA,EAAO,OAAA,EAC5F,QAAA,EAAA,OAAA,EACH,CAAA,EACF,CAAA;AAEJ;;AClFA,SAAS,mBAAmB,KAAA,EAA4C;AACtE,EAAA,uBAAOA,cAAA,CAACI,4BAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEO,MAAM,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA,EAC9D,GAAA,EAAKC,2BAAA;AAAA,EACL,OAAA,EAASC,+BAAA;AAAA,EACT,SAAA,EAAWC,iCAAA;AAAA,EACX,OAAA,EAASC,+BAAA;AAAA,EACT,eAAA,EAAiBC,uCAAA;AAAA,EACjB,QAAA,EAAU,sBAAA;AAAA,EACV,QAAA,EAAU,sBAAA;AAAA,EACV,SAAA,EAAW,uBAAA;AAAA,EACX,UAAA,EAAY,wBAAA;AAAA,EACZ,SAAA,EAAW;AACb,CAAC;;;;;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { D as DataList } from '../data-list-
|
|
2
|
-
export { D as DataListSkeleton } from '../data-list-skeleton-
|
|
1
|
+
export { D as DataList } from '../data-list-BOI8fRuk.js';
|
|
2
|
+
export { D as DataListSkeleton } from '../data-list-skeleton-DDO_OE14.js';
|
|
3
3
|
import { jsx } from 'react/jsx-runtime';
|
|
4
|
-
import { a as DataListCell, c as DataListNextPageLoading,
|
|
4
|
+
import { a as DataListCell, c as DataListNextPageLoading, g as DataListNoMatch, j as DataListRowButton, n as DataListTopCell, o as DataListTop, D as DataListRoot } from '../data-list-top-cell-CC5jjv5s.js';
|
|
5
5
|
import { format, isToday } from 'date-fns';
|
|
6
|
-
export { T as TracesDataList } from '../traces-data-list-
|
|
6
|
+
export { T as TracesDataList } from '../traces-data-list-DmXGwe4Q.js';
|
|
7
7
|
export { u as useDataListKeyboard } from '../use-data-list-keyboard-BzZmvqE_.js';
|
|
8
8
|
|
|
9
9
|
function toDate(value) {
|
|
@@ -12,23 +12,23 @@ function toDate(value) {
|
|
|
12
12
|
}
|
|
13
13
|
function ScoresDataListDateCell({ timestamp }) {
|
|
14
14
|
const date = toDate(timestamp);
|
|
15
|
-
return /* @__PURE__ */ jsx(DataListCell, {
|
|
15
|
+
return /* @__PURE__ */ jsx(DataListCell, { className: "text-ui-smd text-neutral2", children: date ? isToday(date) ? "Today" : format(date, "MMM dd") : "-" });
|
|
16
16
|
}
|
|
17
17
|
function ScoresDataListTimeCell({ timestamp }) {
|
|
18
18
|
const date = toDate(timestamp);
|
|
19
|
-
return /* @__PURE__ */ jsx(DataListCell, {
|
|
19
|
+
return /* @__PURE__ */ jsx(DataListCell, { className: "text-ui-smd text-neutral3", children: date ? format(date, "h:mm:ss aaa") : "-" });
|
|
20
20
|
}
|
|
21
21
|
function ScoresDataListInputCell({ input }) {
|
|
22
22
|
const display = input != null ? JSON.stringify(input) : "-";
|
|
23
|
-
return /* @__PURE__ */ jsx(DataListCell, {
|
|
23
|
+
return /* @__PURE__ */ jsx(DataListCell, { children: /* @__PURE__ */ jsx("span", { className: "text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono", title: display, children: display }) });
|
|
24
24
|
}
|
|
25
25
|
function ScoresDataListEntityCell({ entityId }) {
|
|
26
26
|
const display = entityId || "-";
|
|
27
|
-
return /* @__PURE__ */ jsx(DataListCell, {
|
|
27
|
+
return /* @__PURE__ */ jsx(DataListCell, { children: /* @__PURE__ */ jsx("span", { className: "text-ui-smd block max-w-full min-w-0 truncate", title: display, children: display }) });
|
|
28
28
|
}
|
|
29
29
|
function ScoresDataListScoreCell({ score }) {
|
|
30
30
|
const display = score == null ? "-" : typeof score === "object" ? JSON.stringify(score) : String(score);
|
|
31
|
-
return /* @__PURE__ */ jsx(DataListCell, {
|
|
31
|
+
return /* @__PURE__ */ jsx(DataListCell, { children: /* @__PURE__ */ jsx("span", { className: "text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono", title: display, children: display }) });
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function ScoresDataListRoot(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataList.es.js","sources":["../../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx"],"sourcesContent":["import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\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\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell
|
|
1
|
+
{"version":3,"file":"DataList.es.js","sources":["../../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx"],"sourcesContent":["import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\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\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell className=\"text-ui-smd text-neutral2\">\n {date ? (isToday(date) ? 'Today' : format(date, 'MMM dd')) : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n const date = toDate(timestamp);\n return <DataListCell className=\"text-ui-smd text-neutral3\">{date ? format(date, 'h:mm:ss aaa') : '-'}</DataListCell>;\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n const display = input != null ? JSON.stringify(input) : '-';\n return (\n <DataListCell>\n <span className=\"text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono\" title={display}>\n {display}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n const display = entityId || '-';\n return (\n <DataListCell>\n <span className=\"text-ui-smd block max-w-full min-w-0 truncate\" title={display}>\n {display}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell>\n <span className=\"text-ui-smd text-neutral3 block max-w-full min-w-0 truncate font-mono\" title={display}>\n {display}\n </span>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n"],"names":[],"mappings":";;;;;;;;AAOA,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;AAUO,SAAS,sBAAA,CAAuB,EAAE,SAAA,EAAU,EAAgC;AACjF,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,2BAAA,EACrB,QAAA,EAAA,IAAA,GAAQ,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAA,GAAU,MAAA,CAAO,IAAA,EAAM,QAAQ,IAAK,GAAA,EAC/D,CAAA;AAEJ;AAUO,SAAS,sBAAA,CAAuB,EAAE,SAAA,EAAU,EAAgC;AACjF,EAAA,MAAM,IAAA,GAAO,OAAO,SAAS,CAAA;AAC7B,EAAA,uBAAO,GAAA,CAAC,gBAAa,SAAA,EAAU,2BAAA,EAA6B,iBAAO,MAAA,CAAO,IAAA,EAAM,aAAa,CAAA,GAAI,GAAA,EAAI,CAAA;AACvG;AAUO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,MAAM,UAAU,KAAA,IAAS,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,GAAA;AACxD,EAAA,uBACE,GAAA,CAAC,gBACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uEAAA,EAAwE,KAAA,EAAO,OAAA,EAC5F,QAAA,EAAA,OAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAUO,SAAS,wBAAA,CAAyB,EAAE,QAAA,EAAS,EAAkC;AACpF,EAAA,MAAM,UAAU,QAAA,IAAY,GAAA;AAC5B,EAAA,uBACE,GAAA,CAAC,gBACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+CAAA,EAAgD,KAAA,EAAO,OAAA,EACpE,QAAA,EAAA,OAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAUO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,MAAM,OAAA,GAAU,KAAA,IAAS,IAAA,GAAO,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AACtG,EAAA,uBACE,GAAA,CAAC,gBACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uEAAA,EAAwE,KAAA,EAAO,OAAA,EAC5F,QAAA,EAAA,OAAA,EACH,CAAA,EACF,CAAA;AAEJ;;AClFA,SAAS,mBAAmB,KAAA,EAA4C;AACtE,EAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEO,MAAM,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA,EAC9D,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,SAAA,EAAW,iBAAA;AAAA,EACX,OAAA,EAAS,eAAA;AAAA,EACT,eAAA,EAAiB,uBAAA;AAAA,EACjB,QAAA,EAAU,sBAAA;AAAA,EACV,QAAA,EAAU,sBAAA;AAAA,EACV,SAAA,EAAW,uBAAA;AAAA,EACX,UAAA,EAAY,wBAAA;AAAA,EACZ,SAAA,EAAW;AACb,CAAC;;;;"}
|