@cere/cere-design-system 0.0.44 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WorkflowNode-BnxXO6t_.d.mts +46 -0
- package/dist/WorkflowNode-BnxXO6t_.d.ts +46 -0
- package/dist/buttons.d.mts +114 -0
- package/dist/buttons.d.ts +114 -0
- package/dist/buttons.js +19 -0
- package/dist/buttons.js.map +1 -0
- package/dist/buttons.mjs +19 -0
- package/dist/buttons.mjs.map +1 -0
- package/dist/carousel.d.mts +51 -0
- package/dist/carousel.d.ts +51 -0
- package/dist/carousel.js +185 -0
- package/dist/carousel.js.map +1 -0
- package/dist/carousel.mjs +185 -0
- package/dist/carousel.mjs.map +1 -0
- package/dist/charts.d.mts +209 -0
- package/dist/charts.d.ts +209 -0
- package/dist/charts.js +20 -0
- package/dist/charts.js.map +1 -0
- package/dist/charts.mjs +20 -0
- package/dist/charts.mjs.map +1 -0
- package/dist/chunk-27JEWSWA.mjs +233 -0
- package/dist/chunk-27JEWSWA.mjs.map +1 -0
- package/dist/chunk-2EBCST6X.js +25 -0
- package/dist/chunk-2EBCST6X.js.map +1 -0
- package/dist/chunk-3WCMINE5.mjs +490 -0
- package/dist/chunk-3WCMINE5.mjs.map +1 -0
- package/dist/chunk-463SRKKD.js +111 -0
- package/dist/chunk-463SRKKD.js.map +1 -0
- package/dist/chunk-5ASG6G6U.mjs +40 -0
- package/dist/chunk-5ASG6G6U.mjs.map +1 -0
- package/dist/chunk-6EUAU67C.mjs +374 -0
- package/dist/chunk-6EUAU67C.mjs.map +1 -0
- package/dist/chunk-AIY6222Q.js +11 -0
- package/dist/chunk-AIY6222Q.js.map +1 -0
- package/dist/chunk-AJBM7IE6.mjs +2366 -0
- package/dist/chunk-AJBM7IE6.mjs.map +1 -0
- package/dist/chunk-ATIFLPH6.mjs +278 -0
- package/dist/chunk-ATIFLPH6.mjs.map +1 -0
- package/dist/chunk-BIZK6FUD.js +37 -0
- package/dist/chunk-BIZK6FUD.js.map +1 -0
- package/dist/chunk-CCN6M4LI.js +103 -0
- package/dist/chunk-CCN6M4LI.js.map +1 -0
- package/dist/chunk-CUCKULYC.mjs +2658 -0
- package/dist/chunk-CUCKULYC.mjs.map +1 -0
- package/dist/chunk-CWJ4OU6W.mjs +45 -0
- package/dist/chunk-CWJ4OU6W.mjs.map +1 -0
- package/dist/chunk-EOF3QNPF.js +2366 -0
- package/dist/chunk-EOF3QNPF.js.map +1 -0
- package/dist/chunk-FFZ5S7PQ.mjs +146 -0
- package/dist/chunk-FFZ5S7PQ.mjs.map +1 -0
- package/dist/chunk-FN5YL4BK.js +278 -0
- package/dist/chunk-FN5YL4BK.js.map +1 -0
- package/dist/chunk-HLH2VWXL.js +2658 -0
- package/dist/chunk-HLH2VWXL.js.map +1 -0
- package/dist/chunk-IE6GCHDI.mjs +530 -0
- package/dist/chunk-IE6GCHDI.mjs.map +1 -0
- package/dist/chunk-JBHRAAN3.js +31 -0
- package/dist/chunk-JBHRAAN3.js.map +1 -0
- package/dist/chunk-JS4IB5IU.mjs +162 -0
- package/dist/chunk-JS4IB5IU.mjs.map +1 -0
- package/dist/chunk-KF2Y7HO3.js +595 -0
- package/dist/chunk-KF2Y7HO3.js.map +1 -0
- package/dist/chunk-KPDYKK3V.js +162 -0
- package/dist/chunk-KPDYKK3V.js.map +1 -0
- package/dist/chunk-KVBMZNWT.mjs +103 -0
- package/dist/chunk-KVBMZNWT.mjs.map +1 -0
- package/dist/chunk-L2TIGA7I.js +530 -0
- package/dist/chunk-L2TIGA7I.js.map +1 -0
- package/dist/chunk-MNM6HE72.js +146 -0
- package/dist/chunk-MNM6HE72.js.map +1 -0
- package/dist/chunk-NXTVJ6PY.js +374 -0
- package/dist/chunk-NXTVJ6PY.js.map +1 -0
- package/dist/chunk-OWWDNDF4.js +40 -0
- package/dist/chunk-OWWDNDF4.js.map +1 -0
- package/dist/chunk-PHMNZK2R.mjs +18 -0
- package/dist/chunk-PHMNZK2R.mjs.map +1 -0
- package/dist/chunk-PWF2NJDB.mjs +377 -0
- package/dist/chunk-PWF2NJDB.mjs.map +1 -0
- package/dist/chunk-QBCRH7YF.mjs +37 -0
- package/dist/chunk-QBCRH7YF.mjs.map +1 -0
- package/dist/chunk-QD6RLAO2.mjs +11 -0
- package/dist/chunk-QD6RLAO2.mjs.map +1 -0
- package/dist/chunk-QY65OUAC.mjs +111 -0
- package/dist/chunk-QY65OUAC.mjs.map +1 -0
- package/dist/chunk-QYYQYZHV.js +45 -0
- package/dist/chunk-QYYQYZHV.js.map +1 -0
- package/dist/chunk-T7LPABOL.mjs +595 -0
- package/dist/chunk-T7LPABOL.mjs.map +1 -0
- package/dist/chunk-THQKYTQE.js +490 -0
- package/dist/chunk-THQKYTQE.js.map +1 -0
- package/dist/chunk-U2QHFISG.js +18 -0
- package/dist/chunk-U2QHFISG.js.map +1 -0
- package/dist/chunk-UPGFBPFX.mjs +25 -0
- package/dist/chunk-UPGFBPFX.mjs.map +1 -0
- package/dist/chunk-X7E6GMFL.js +233 -0
- package/dist/chunk-X7E6GMFL.js.map +1 -0
- package/dist/chunk-XF66WQZE.mjs +1535 -0
- package/dist/chunk-XF66WQZE.mjs.map +1 -0
- package/dist/chunk-YQOZPLTY.js +1535 -0
- package/dist/chunk-YQOZPLTY.js.map +1 -0
- package/dist/chunk-ZGCN5WCG.js +377 -0
- package/dist/chunk-ZGCN5WCG.js.map +1 -0
- package/dist/chunk-ZP26PGMS.mjs +31 -0
- package/dist/chunk-ZP26PGMS.mjs.map +1 -0
- package/dist/feedback.d.mts +356 -0
- package/dist/feedback.d.ts +356 -0
- package/dist/feedback.js +43 -0
- package/dist/feedback.js.map +1 -0
- package/dist/feedback.mjs +43 -0
- package/dist/feedback.mjs.map +1 -0
- package/dist/icons.d.mts +22 -0
- package/dist/icons.d.ts +22 -0
- package/dist/icons.js +23 -0
- package/dist/icons.js.map +1 -0
- package/dist/icons.mjs +23 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/index.d.mts +171 -3069
- package/dist/index.d.ts +171 -3069
- package/dist/index.js +320 -10077
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +262 -9978
- package/dist/index.mjs.map +1 -1
- package/dist/inputs.d.mts +109 -0
- package/dist/inputs.d.ts +109 -0
- package/dist/inputs.js +43 -0
- package/dist/inputs.js.map +1 -0
- package/dist/inputs.mjs +43 -0
- package/dist/inputs.mjs.map +1 -0
- package/dist/layout.d.mts +927 -0
- package/dist/layout.d.ts +927 -0
- package/dist/layout.js +122 -0
- package/dist/layout.js.map +1 -0
- package/dist/layout.mjs +122 -0
- package/dist/layout.mjs.map +1 -0
- package/dist/navigation.d.mts +716 -0
- package/dist/navigation.d.ts +716 -0
- package/dist/navigation.js +58 -0
- package/dist/navigation.js.map +1 -0
- package/dist/navigation.mjs +58 -0
- package/dist/navigation.mjs.map +1 -0
- package/dist/third-party.d.mts +637 -0
- package/dist/third-party.d.ts +637 -0
- package/dist/third-party.js +45 -0
- package/dist/third-party.js.map +1 -0
- package/dist/third-party.mjs +45 -0
- package/dist/third-party.mjs.map +1 -0
- package/dist/tokens.css +2 -1
- package/dist/utilities.d.mts +39 -0
- package/dist/utilities.d.ts +39 -0
- package/dist/utilities.js +19 -0
- package/dist/utilities.js.map +1 -0
- package/dist/utilities.mjs +19 -0
- package/dist/utilities.mjs.map +1 -0
- package/package.json +55 -1
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fontFamilyMono
|
|
3
|
+
} from "./chunk-PWF2NJDB.mjs";
|
|
4
|
+
|
|
5
|
+
// src/components/feedback/Chip.tsx
|
|
6
|
+
import React from "react";
|
|
7
|
+
import MuiChip from "@mui/material/Chip";
|
|
8
|
+
import { styled } from "@mui/material/styles";
|
|
9
|
+
|
|
10
|
+
// src/components/feedback/chipVariantStyles.ts
|
|
11
|
+
function getChipVariantStyles(variant, theme) {
|
|
12
|
+
switch (variant) {
|
|
13
|
+
case "active":
|
|
14
|
+
return {
|
|
15
|
+
backgroundColor: theme.palette.background.selected,
|
|
16
|
+
color: theme.palette.primary.main,
|
|
17
|
+
hoverBackgroundColor: theme.palette.background.selected
|
|
18
|
+
};
|
|
19
|
+
case "success":
|
|
20
|
+
return {
|
|
21
|
+
backgroundColor: theme.palette.success.main,
|
|
22
|
+
color: theme.palette.success.contrastText,
|
|
23
|
+
hoverBackgroundColor: theme.palette.success.dark
|
|
24
|
+
};
|
|
25
|
+
case "error":
|
|
26
|
+
return {
|
|
27
|
+
backgroundColor: theme.palette.error.main,
|
|
28
|
+
color: theme.palette.error.contrastText,
|
|
29
|
+
hoverBackgroundColor: theme.palette.error.dark
|
|
30
|
+
};
|
|
31
|
+
case "warning":
|
|
32
|
+
return {
|
|
33
|
+
backgroundColor: theme.palette.warning.main,
|
|
34
|
+
color: theme.palette.warning.contrastText,
|
|
35
|
+
hoverBackgroundColor: theme.palette.warning.dark
|
|
36
|
+
};
|
|
37
|
+
case "info":
|
|
38
|
+
return {
|
|
39
|
+
backgroundColor: theme.palette.info.main,
|
|
40
|
+
color: theme.palette.info.contrastText,
|
|
41
|
+
hoverBackgroundColor: theme.palette.info.dark
|
|
42
|
+
};
|
|
43
|
+
case "default":
|
|
44
|
+
default:
|
|
45
|
+
return {
|
|
46
|
+
backgroundColor: theme.palette.grey[100],
|
|
47
|
+
color: theme.palette.text.primary,
|
|
48
|
+
hoverBackgroundColor: theme.palette.grey[200]
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// src/components/feedback/Chip.tsx
|
|
54
|
+
import { jsx } from "react/jsx-runtime";
|
|
55
|
+
var StyledChip = styled(MuiChip, {
|
|
56
|
+
shouldForwardProp: (prop) => prop !== "dsVariant" && prop !== "dsTone"
|
|
57
|
+
})(({ theme, dsVariant, dsTone }) => {
|
|
58
|
+
if (dsTone === "onGradient") {
|
|
59
|
+
return {
|
|
60
|
+
height: 22,
|
|
61
|
+
color: "white",
|
|
62
|
+
backgroundColor: "rgba(0,0,0,0.25)",
|
|
63
|
+
border: "1px solid rgba(255,255,255,0.22)",
|
|
64
|
+
fontFamily: fontFamilyMono,
|
|
65
|
+
fontSize: 10,
|
|
66
|
+
textTransform: "uppercase",
|
|
67
|
+
letterSpacing: "0.05em",
|
|
68
|
+
"& .MuiChip-label": {
|
|
69
|
+
paddingLeft: 8,
|
|
70
|
+
paddingRight: 8
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const { backgroundColor, color, hoverBackgroundColor } = getChipVariantStyles(dsVariant, theme);
|
|
75
|
+
return {
|
|
76
|
+
backgroundColor,
|
|
77
|
+
color,
|
|
78
|
+
"&:hover": { backgroundColor: hoverBackgroundColor }
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
var Chip = React.forwardRef(function Chip2({ variant = "default", tone = "default", ...props }, ref) {
|
|
82
|
+
return /* @__PURE__ */ jsx(StyledChip, { ref, dsVariant: variant, dsTone: tone, ...props });
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// src/components/feedback/StatusDot.tsx
|
|
86
|
+
import React2 from "react";
|
|
87
|
+
import { styled as styled2, keyframes } from "@mui/material/styles";
|
|
88
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
89
|
+
function statusColor(status, theme) {
|
|
90
|
+
switch (status) {
|
|
91
|
+
case "success":
|
|
92
|
+
return theme.palette.success.main;
|
|
93
|
+
case "error":
|
|
94
|
+
return theme.palette.error.main;
|
|
95
|
+
case "warning":
|
|
96
|
+
return theme.palette.warning.main;
|
|
97
|
+
case "info":
|
|
98
|
+
return theme.palette.info.main;
|
|
99
|
+
case "primary":
|
|
100
|
+
return theme.palette.primary.main;
|
|
101
|
+
case "neutral":
|
|
102
|
+
default:
|
|
103
|
+
return theme.palette.grey[400];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
var pulseKeyframes = keyframes`
|
|
107
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
108
|
+
50% { opacity: 0.55; transform: scale(1.35); }
|
|
109
|
+
`;
|
|
110
|
+
var Dot = styled2("span", {
|
|
111
|
+
shouldForwardProp: (prop) => prop !== "status" && prop !== "size" && prop !== "pulse"
|
|
112
|
+
})(({ theme, status, size, pulse }) => ({
|
|
113
|
+
display: "inline-block",
|
|
114
|
+
flexShrink: 0,
|
|
115
|
+
width: size,
|
|
116
|
+
height: size,
|
|
117
|
+
borderRadius: "50%",
|
|
118
|
+
backgroundColor: statusColor(status, theme),
|
|
119
|
+
animation: pulse ? `${pulseKeyframes} 1.6s ease-in-out infinite` : void 0,
|
|
120
|
+
"@media (prefers-reduced-motion: reduce)": {
|
|
121
|
+
animation: "none"
|
|
122
|
+
}
|
|
123
|
+
}));
|
|
124
|
+
var StatusDot = React2.forwardRef(function StatusDot2({ status, size = 8, pulse = false, "aria-label": ariaLabel, ...rest }, ref) {
|
|
125
|
+
const a11yProps = ariaLabel ? { role: "img", "aria-label": ariaLabel } : { "aria-hidden": true };
|
|
126
|
+
return /* @__PURE__ */ jsx2(Dot, { ref, status, size, pulse, ...rest, ...a11yProps });
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// src/components/feedback/StatusLabel.tsx
|
|
130
|
+
import * as React3 from "react";
|
|
131
|
+
import Box from "@mui/material/Box";
|
|
132
|
+
import Typography from "@mui/material/Typography";
|
|
133
|
+
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
134
|
+
var SIZES = {
|
|
135
|
+
small: { dot: 6, typography: "caption" },
|
|
136
|
+
medium: { dot: 8, typography: "body2" }
|
|
137
|
+
};
|
|
138
|
+
var StatusLabel = React3.forwardRef(
|
|
139
|
+
function StatusLabel2({ status, label, size = "medium", pulse = false, ...rest }, ref) {
|
|
140
|
+
const { dot, typography } = SIZES[size];
|
|
141
|
+
return /* @__PURE__ */ jsxs(
|
|
142
|
+
Box,
|
|
143
|
+
{
|
|
144
|
+
ref,
|
|
145
|
+
...pulse ? { "aria-live": "polite" } : {},
|
|
146
|
+
...rest,
|
|
147
|
+
sx: (theme) => ({
|
|
148
|
+
display: "inline-flex",
|
|
149
|
+
alignItems: "center",
|
|
150
|
+
gap: theme.spacing(0.75)
|
|
151
|
+
}),
|
|
152
|
+
children: [
|
|
153
|
+
/* @__PURE__ */ jsx3(StatusDot, { status, size: dot, pulse }),
|
|
154
|
+
/* @__PURE__ */ jsx3(Typography, { variant: typography, component: "span", sx: { lineHeight: 1.2 }, children: label })
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
// src/components/feedback/CopyChip.tsx
|
|
162
|
+
import { useEffect, useRef, useState } from "react";
|
|
163
|
+
import Box2 from "@mui/material/Box";
|
|
164
|
+
import Tooltip from "@mui/material/Tooltip";
|
|
165
|
+
import CheckIcon from "@mui/icons-material/Check";
|
|
166
|
+
import ContentCopyIcon from "@mui/icons-material/ContentCopy";
|
|
167
|
+
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
168
|
+
var COPY_FEEDBACK_MS = 1200;
|
|
169
|
+
var CopyChip = ({
|
|
170
|
+
text,
|
|
171
|
+
maxWidth = 260,
|
|
172
|
+
"aria-label": ariaLabel,
|
|
173
|
+
tooltipLabel = "Copy",
|
|
174
|
+
tooltipCopiedLabel = "Copied",
|
|
175
|
+
onCopy
|
|
176
|
+
}) => {
|
|
177
|
+
const [copied, setCopied] = useState(false);
|
|
178
|
+
const timerRef = useRef(null);
|
|
179
|
+
useEffect(() => {
|
|
180
|
+
return () => {
|
|
181
|
+
if (timerRef.current != null) clearTimeout(timerRef.current);
|
|
182
|
+
};
|
|
183
|
+
}, []);
|
|
184
|
+
const handleCopy = async () => {
|
|
185
|
+
try {
|
|
186
|
+
await navigator.clipboard.writeText(text);
|
|
187
|
+
} catch {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
setCopied(true);
|
|
191
|
+
onCopy?.();
|
|
192
|
+
if (timerRef.current != null) clearTimeout(timerRef.current);
|
|
193
|
+
timerRef.current = setTimeout(() => setCopied(false), COPY_FEEDBACK_MS);
|
|
194
|
+
};
|
|
195
|
+
return /* @__PURE__ */ jsx4(Tooltip, { title: copied ? tooltipCopiedLabel : tooltipLabel, placement: "top", children: /* @__PURE__ */ jsxs2(
|
|
196
|
+
Box2,
|
|
197
|
+
{
|
|
198
|
+
component: "button",
|
|
199
|
+
type: "button",
|
|
200
|
+
onClick: handleCopy,
|
|
201
|
+
"aria-label": ariaLabel ?? `Copy ${text}`,
|
|
202
|
+
sx: {
|
|
203
|
+
display: "inline-flex",
|
|
204
|
+
alignItems: "center",
|
|
205
|
+
gap: 0.75,
|
|
206
|
+
bgcolor: "action.hover",
|
|
207
|
+
color: "text.primary",
|
|
208
|
+
border: "none",
|
|
209
|
+
borderRadius: 1,
|
|
210
|
+
px: 1,
|
|
211
|
+
py: 0.5,
|
|
212
|
+
fontFamily: "monospace",
|
|
213
|
+
fontSize: 12,
|
|
214
|
+
cursor: "pointer",
|
|
215
|
+
transition: "background-color 0.12s",
|
|
216
|
+
maxWidth: "100%",
|
|
217
|
+
"&:hover": { bgcolor: "action.selected" }
|
|
218
|
+
},
|
|
219
|
+
children: [
|
|
220
|
+
/* @__PURE__ */ jsx4(
|
|
221
|
+
Box2,
|
|
222
|
+
{
|
|
223
|
+
component: "span",
|
|
224
|
+
sx: {
|
|
225
|
+
overflow: "hidden",
|
|
226
|
+
textOverflow: "ellipsis",
|
|
227
|
+
whiteSpace: "nowrap",
|
|
228
|
+
maxWidth
|
|
229
|
+
},
|
|
230
|
+
children: text
|
|
231
|
+
}
|
|
232
|
+
),
|
|
233
|
+
copied ? /* @__PURE__ */ jsx4(CheckIcon, { sx: { fontSize: 14 } }) : /* @__PURE__ */ jsx4(ContentCopyIcon, { sx: { fontSize: 14 } })
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
) });
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
// src/components/feedback/Tooltip.tsx
|
|
240
|
+
import React5 from "react";
|
|
241
|
+
import MuiTooltip from "@mui/material/Tooltip";
|
|
242
|
+
import { styled as styled3 } from "@mui/material/styles";
|
|
243
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
244
|
+
var StyledTooltip = styled3(MuiTooltip)(({ theme }) => ({
|
|
245
|
+
"& .MuiTooltip-tooltip": {
|
|
246
|
+
backgroundColor: theme.palette.grey[800],
|
|
247
|
+
color: theme.palette.common.white,
|
|
248
|
+
fontSize: "12px",
|
|
249
|
+
padding: "8px 12px",
|
|
250
|
+
borderRadius: "4px"
|
|
251
|
+
},
|
|
252
|
+
"& .MuiTooltip-arrow": {
|
|
253
|
+
color: theme.palette.grey[800]
|
|
254
|
+
}
|
|
255
|
+
}));
|
|
256
|
+
var Tooltip2 = React5.forwardRef(function Tooltip3(props, ref) {
|
|
257
|
+
return /* @__PURE__ */ jsx5(StyledTooltip, { ref, ...props });
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
// src/components/feedback/Progress.tsx
|
|
261
|
+
import {
|
|
262
|
+
LinearProgress,
|
|
263
|
+
CircularProgress,
|
|
264
|
+
styled as styled4
|
|
265
|
+
} from "@mui/material";
|
|
266
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
267
|
+
var StyledLinearProgress = styled4(LinearProgress)(({ theme }) => ({
|
|
268
|
+
height: 4,
|
|
269
|
+
borderRadius: 2,
|
|
270
|
+
backgroundColor: theme.palette.grey[200],
|
|
271
|
+
"& .MuiLinearProgress-bar": {
|
|
272
|
+
backgroundColor: theme.palette.primary.main,
|
|
273
|
+
borderRadius: 2
|
|
274
|
+
}
|
|
275
|
+
}));
|
|
276
|
+
var StyledCircularProgress = styled4(CircularProgress)(({ theme }) => ({
|
|
277
|
+
color: theme.palette.primary.main
|
|
278
|
+
}));
|
|
279
|
+
var Progress = ({
|
|
280
|
+
variant = "linear",
|
|
281
|
+
value,
|
|
282
|
+
size = 40,
|
|
283
|
+
thickness = 4
|
|
284
|
+
}) => {
|
|
285
|
+
if (variant === "circular") {
|
|
286
|
+
return /* @__PURE__ */ jsx6(StyledCircularProgress, { size, thickness });
|
|
287
|
+
}
|
|
288
|
+
return /* @__PURE__ */ jsx6(
|
|
289
|
+
StyledLinearProgress,
|
|
290
|
+
{
|
|
291
|
+
variant: value !== void 0 ? "determinate" : "indeterminate",
|
|
292
|
+
value
|
|
293
|
+
}
|
|
294
|
+
);
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
// src/components/feedback/Alert.tsx
|
|
298
|
+
import React6 from "react";
|
|
299
|
+
import MuiAlert from "@mui/material/Alert";
|
|
300
|
+
import { AlertTitle as MuiAlertTitle } from "@mui/material";
|
|
301
|
+
import MuiSnackbar from "@mui/material/Snackbar";
|
|
302
|
+
import { styled as styled5 } from "@mui/material/styles";
|
|
303
|
+
import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
304
|
+
var StyledAlert = styled5(MuiAlert)({
|
|
305
|
+
borderRadius: 8,
|
|
306
|
+
"&.MuiAlert-filled": {
|
|
307
|
+
borderRadius: 8
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
var Alert = React6.forwardRef(function Alert2({ severity = "info", title, children, ...props }, ref) {
|
|
311
|
+
return /* @__PURE__ */ jsxs3(StyledAlert, { ref, severity, ...props, children: [
|
|
312
|
+
title && /* @__PURE__ */ jsx7(MuiAlertTitle, { children: title }),
|
|
313
|
+
children
|
|
314
|
+
] });
|
|
315
|
+
});
|
|
316
|
+
var StyledSnackbar = styled5(MuiSnackbar)({});
|
|
317
|
+
var StableFadeTransition = React6.forwardRef(
|
|
318
|
+
(props, ref) => {
|
|
319
|
+
return React6.cloneElement(props.children, {
|
|
320
|
+
ref,
|
|
321
|
+
style: {
|
|
322
|
+
...props.children.props.style,
|
|
323
|
+
transition: "opacity 0.3s ease-in-out"
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
);
|
|
328
|
+
StableFadeTransition.displayName = "StableFadeTransition";
|
|
329
|
+
var Snackbar = React6.forwardRef(function Snackbar2({
|
|
330
|
+
message,
|
|
331
|
+
severity = "info",
|
|
332
|
+
title,
|
|
333
|
+
variant = "filled",
|
|
334
|
+
onClose,
|
|
335
|
+
children,
|
|
336
|
+
anchorOrigin = { vertical: "bottom", horizontal: "center" },
|
|
337
|
+
autoHideDuration = 6e3,
|
|
338
|
+
...props
|
|
339
|
+
}, ref) {
|
|
340
|
+
const handleClose = (_event, reason) => {
|
|
341
|
+
if (reason === "clickaway" && onClose) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
onClose?.();
|
|
345
|
+
};
|
|
346
|
+
const content = children || (message ? /* @__PURE__ */ jsx7(
|
|
347
|
+
Alert,
|
|
348
|
+
{
|
|
349
|
+
onClose: onClose ? handleClose : void 0,
|
|
350
|
+
severity,
|
|
351
|
+
variant,
|
|
352
|
+
title,
|
|
353
|
+
sx: { width: "100%", borderRadius: 2 },
|
|
354
|
+
children: message
|
|
355
|
+
}
|
|
356
|
+
) : void 0);
|
|
357
|
+
if (!content) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
return /* @__PURE__ */ jsx7(
|
|
361
|
+
StyledSnackbar,
|
|
362
|
+
{
|
|
363
|
+
ref,
|
|
364
|
+
anchorOrigin,
|
|
365
|
+
autoHideDuration,
|
|
366
|
+
onClose: handleClose,
|
|
367
|
+
disableWindowBlurListener: true,
|
|
368
|
+
ClickAwayListenerProps: {
|
|
369
|
+
onClickAway: () => {
|
|
370
|
+
}
|
|
371
|
+
// Prevent scroll issues
|
|
372
|
+
},
|
|
373
|
+
TransitionComponent: StableFadeTransition,
|
|
374
|
+
...props,
|
|
375
|
+
children: content
|
|
376
|
+
}
|
|
377
|
+
);
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
// src/components/feedback/EmptyState.tsx
|
|
381
|
+
import React7 from "react";
|
|
382
|
+
import { Box as Box3, Typography as Typography2 } from "@mui/material";
|
|
383
|
+
import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
384
|
+
var EmptyState = React7.forwardRef(function EmptyState2({ title = "No items found", description, icon, action }, ref) {
|
|
385
|
+
return /* @__PURE__ */ jsxs4(
|
|
386
|
+
Box3,
|
|
387
|
+
{
|
|
388
|
+
ref,
|
|
389
|
+
sx: {
|
|
390
|
+
display: "flex",
|
|
391
|
+
flexDirection: "column",
|
|
392
|
+
alignItems: "center",
|
|
393
|
+
justifyContent: "center",
|
|
394
|
+
padding: 6,
|
|
395
|
+
textAlign: "center",
|
|
396
|
+
minHeight: 200
|
|
397
|
+
},
|
|
398
|
+
children: [
|
|
399
|
+
icon && /* @__PURE__ */ jsx8(
|
|
400
|
+
Box3,
|
|
401
|
+
{
|
|
402
|
+
sx: {
|
|
403
|
+
color: "text.secondary",
|
|
404
|
+
marginBottom: 2,
|
|
405
|
+
fontSize: 64
|
|
406
|
+
},
|
|
407
|
+
children: icon
|
|
408
|
+
}
|
|
409
|
+
),
|
|
410
|
+
/* @__PURE__ */ jsx8(Typography2, { variant: "h6", sx: { marginBottom: 1, color: "text.primary" }, children: title }),
|
|
411
|
+
description && /* @__PURE__ */ jsx8(Typography2, { variant: "body2", sx: { color: "text.secondary", marginBottom: 3 }, children: description }),
|
|
412
|
+
action && /* @__PURE__ */ jsx8(Box3, { children: action })
|
|
413
|
+
]
|
|
414
|
+
}
|
|
415
|
+
);
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
// src/components/feedback/Loading.tsx
|
|
419
|
+
import React8 from "react";
|
|
420
|
+
import { Box as Box4, CircularProgress as CircularProgress2, Typography as Typography3 } from "@mui/material";
|
|
421
|
+
import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
422
|
+
var Loading = React8.forwardRef(function Loading2({ message = "Loading...", size = 40, fullScreen = false }, ref) {
|
|
423
|
+
const content = /* @__PURE__ */ jsxs5(
|
|
424
|
+
Box4,
|
|
425
|
+
{
|
|
426
|
+
ref,
|
|
427
|
+
sx: {
|
|
428
|
+
display: "flex",
|
|
429
|
+
flexDirection: "column",
|
|
430
|
+
justifyContent: "center",
|
|
431
|
+
alignItems: "center",
|
|
432
|
+
gap: 2,
|
|
433
|
+
...fullScreen && {
|
|
434
|
+
height: "100vh",
|
|
435
|
+
width: "100vw",
|
|
436
|
+
position: "fixed",
|
|
437
|
+
top: 0,
|
|
438
|
+
left: 0,
|
|
439
|
+
backgroundColor: "background.default",
|
|
440
|
+
zIndex: 9999
|
|
441
|
+
},
|
|
442
|
+
...!fullScreen && {
|
|
443
|
+
padding: 4
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
children: [
|
|
447
|
+
/* @__PURE__ */ jsx9(CircularProgress2, { size, thickness: 4 }),
|
|
448
|
+
message && /* @__PURE__ */ jsx9(Typography3, { variant: "body2", color: "text.secondary", children: message })
|
|
449
|
+
]
|
|
450
|
+
}
|
|
451
|
+
);
|
|
452
|
+
return content;
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
// src/components/feedback/AppLoading.tsx
|
|
456
|
+
import { Box as Box5, CircularProgress as CircularProgress3, Typography as Typography4 } from "@mui/material";
|
|
457
|
+
import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
458
|
+
var AppLoading = ({
|
|
459
|
+
message = "Loading...",
|
|
460
|
+
logo = "/icons/logo.png",
|
|
461
|
+
sx = {}
|
|
462
|
+
}) => {
|
|
463
|
+
return /* @__PURE__ */ jsxs6(
|
|
464
|
+
Box5,
|
|
465
|
+
{
|
|
466
|
+
sx: [
|
|
467
|
+
{
|
|
468
|
+
display: "flex",
|
|
469
|
+
flexDirection: "column",
|
|
470
|
+
justifyContent: "center",
|
|
471
|
+
alignItems: "center",
|
|
472
|
+
height: "100vh",
|
|
473
|
+
width: "100vw",
|
|
474
|
+
position: "fixed",
|
|
475
|
+
top: 0,
|
|
476
|
+
left: 0,
|
|
477
|
+
backgroundColor: "grey.50",
|
|
478
|
+
zIndex: 9999
|
|
479
|
+
},
|
|
480
|
+
...Array.isArray(sx) ? sx : [sx]
|
|
481
|
+
],
|
|
482
|
+
children: [
|
|
483
|
+
logo && /* @__PURE__ */ jsx10(
|
|
484
|
+
Box5,
|
|
485
|
+
{
|
|
486
|
+
component: "img",
|
|
487
|
+
src: logo,
|
|
488
|
+
alt: "Logo",
|
|
489
|
+
sx: {
|
|
490
|
+
height: 80,
|
|
491
|
+
width: "auto",
|
|
492
|
+
mb: 4
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
),
|
|
496
|
+
/* @__PURE__ */ jsx10(CircularProgress3, { size: 40, thickness: 4, sx: { mb: 2 } }),
|
|
497
|
+
/* @__PURE__ */ jsx10(Typography4, { variant: "body1", color: "text.secondary", children: message })
|
|
498
|
+
]
|
|
499
|
+
}
|
|
500
|
+
);
|
|
501
|
+
};
|
|
502
|
+
|
|
503
|
+
// src/components/feedback/CircularProgress.tsx
|
|
504
|
+
import React9 from "react";
|
|
505
|
+
import {
|
|
506
|
+
CircularProgress as MuiCircularProgress
|
|
507
|
+
} from "@mui/material";
|
|
508
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
509
|
+
var CircularProgress4 = React9.forwardRef(
|
|
510
|
+
function CircularProgress5({ size = 40, thickness = 4, ...props }, ref) {
|
|
511
|
+
return /* @__PURE__ */ jsx11(MuiCircularProgress, { ref, size, thickness, ...props });
|
|
512
|
+
}
|
|
513
|
+
);
|
|
514
|
+
|
|
515
|
+
export {
|
|
516
|
+
getChipVariantStyles,
|
|
517
|
+
Chip,
|
|
518
|
+
StatusDot,
|
|
519
|
+
StatusLabel,
|
|
520
|
+
CopyChip,
|
|
521
|
+
Tooltip2 as Tooltip,
|
|
522
|
+
Progress,
|
|
523
|
+
Alert,
|
|
524
|
+
Snackbar,
|
|
525
|
+
EmptyState,
|
|
526
|
+
Loading,
|
|
527
|
+
AppLoading,
|
|
528
|
+
CircularProgress4 as CircularProgress
|
|
529
|
+
};
|
|
530
|
+
//# sourceMappingURL=chunk-IE6GCHDI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/Chip.tsx","../src/components/feedback/chipVariantStyles.ts","../src/components/feedback/StatusDot.tsx","../src/components/feedback/StatusLabel.tsx","../src/components/feedback/CopyChip.tsx","../src/components/feedback/Tooltip.tsx","../src/components/feedback/Progress.tsx","../src/components/feedback/Alert.tsx","../src/components/feedback/EmptyState.tsx","../src/components/feedback/Loading.tsx","../src/components/feedback/AppLoading.tsx","../src/components/feedback/CircularProgress.tsx"],"sourcesContent":["import React from 'react';\nimport MuiChip, { ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled } from '@mui/material/styles';\nimport { getChipVariantStyles, type ChipVariant } from './chipVariantStyles';\nimport { fontFamilyMono } from '../../theme/typography';\n\nexport type { ChipVariant };\n\nexport type ChipTone = 'default' | 'onGradient';\n\nexport interface ChipProps extends Omit<MuiChipProps, 'color' | 'variant'> {\n variant?: ChipVariant;\n /**\n * Visual tone overlay. `onGradient` styles the chip to read on a dark\n * gradient surface (white text, mono caps, translucent border + bg).\n * Positioning is the consumer's job.\n * @default 'default'\n */\n tone?: ChipTone;\n}\n\nconst StyledChip = styled(MuiChip, {\n shouldForwardProp: (prop) => prop !== 'dsVariant' && prop !== 'dsTone',\n})<{ dsVariant: ChipVariant; dsTone: ChipTone }>(({ theme, dsVariant, dsTone }) => {\n if (dsTone === 'onGradient') {\n return {\n height: 22,\n color: 'white',\n backgroundColor: 'rgba(0,0,0,0.25)',\n border: '1px solid rgba(255,255,255,0.22)',\n fontFamily: fontFamilyMono,\n fontSize: 10,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n '& .MuiChip-label': {\n paddingLeft: 8,\n paddingRight: 8,\n },\n };\n }\n const { backgroundColor, color, hoverBackgroundColor } = getChipVariantStyles(dsVariant, theme);\n return {\n backgroundColor,\n color,\n '&:hover': { backgroundColor: hoverBackgroundColor },\n };\n});\n\nexport const Chip = React.forwardRef<HTMLDivElement, ChipProps>(function Chip(\n { variant = 'default', tone = 'default', ...props },\n ref,\n) {\n return <StyledChip ref={ref} dsVariant={variant} dsTone={tone} {...props} />;\n});\n","import type { Theme } from '@mui/material/styles';\n\nexport type ChipVariant = 'default' | 'active' | 'success' | 'error' | 'warning' | 'info';\n\nexport interface ChipVariantStyles {\n backgroundColor: string;\n color: string;\n hoverBackgroundColor: string;\n}\n\n/**\n * Resolve a Chip variant to its themed background/foreground/hover colors.\n *\n * Status variants (success/error/warning/info) use the `main` surface with\n * `contrastText` (typically white) so chips read as loud solid pills.\n * `default` is neutral grey; `active` uses the brand-selected background.\n */\nexport function getChipVariantStyles(variant: ChipVariant, theme: Theme): ChipVariantStyles {\n switch (variant) {\n case 'active':\n return {\n backgroundColor: theme.palette.background.selected,\n color: theme.palette.primary.main,\n hoverBackgroundColor: theme.palette.background.selected,\n };\n case 'success':\n return {\n backgroundColor: theme.palette.success.main,\n color: theme.palette.success.contrastText,\n hoverBackgroundColor: theme.palette.success.dark,\n };\n case 'error':\n return {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n hoverBackgroundColor: theme.palette.error.dark,\n };\n case 'warning':\n return {\n backgroundColor: theme.palette.warning.main,\n color: theme.palette.warning.contrastText,\n hoverBackgroundColor: theme.palette.warning.dark,\n };\n case 'info':\n return {\n backgroundColor: theme.palette.info.main,\n color: theme.palette.info.contrastText,\n hoverBackgroundColor: theme.palette.info.dark,\n };\n case 'default':\n default:\n return {\n backgroundColor: theme.palette.grey[100],\n color: theme.palette.text.primary,\n hoverBackgroundColor: theme.palette.grey[200],\n };\n }\n}\n","import React from 'react';\nimport { styled, keyframes, type Theme } from '@mui/material/styles';\n\nexport type StatusDotStatus = 'success' | 'error' | 'warning' | 'info' | 'primary' | 'neutral';\n\nexport interface StatusDotProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'> {\n /** Which themed color to render. `neutral` uses a grey for idle/queued states. */\n status: StatusDotStatus;\n /** Diameter in pixels. @default 8 */\n size?: number;\n /**\n * Pulse animation for in-progress states (e.g., a running run). Respects\n * `prefers-reduced-motion` and falls back to a static dot.\n */\n pulse?: boolean;\n /**\n * When provided, the dot becomes an accessible image with this label. When\n * omitted, the dot is marked `aria-hidden` — assume an adjacent element\n * carries the status semantics.\n */\n 'aria-label'?: string;\n}\n\nfunction statusColor(status: StatusDotStatus, theme: Theme): string {\n switch (status) {\n case 'success': return theme.palette.success.main;\n case 'error': return theme.palette.error.main;\n case 'warning': return theme.palette.warning.main;\n case 'info': return theme.palette.info.main;\n case 'primary': return theme.palette.primary.main;\n case 'neutral':\n default:\n return theme.palette.grey[400];\n }\n}\n\nconst pulseKeyframes = keyframes`\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.55; transform: scale(1.35); }\n`;\n\nconst Dot = styled('span', {\n shouldForwardProp: (prop) => prop !== 'status' && prop !== 'size' && prop !== 'pulse',\n})<{ status: StatusDotStatus; size: number; pulse: boolean }>(({ theme, status, size, pulse }) => ({\n display: 'inline-block',\n flexShrink: 0,\n width: size,\n height: size,\n borderRadius: '50%',\n backgroundColor: statusColor(status, theme),\n animation: pulse ? `${pulseKeyframes} 1.6s ease-in-out infinite` : undefined,\n '@media (prefers-reduced-motion: reduce)': {\n animation: 'none',\n },\n}));\n\n/**\n * StatusDot — a small colored circle indicating entity status.\n *\n * Use alongside a text label for a labeled status; use with `aria-label` to\n * make the dot itself a standalone accessible indicator.\n *\n * @example\n * ```tsx\n * // Labeled context — the dot is decorative\n * <>\n * <StatusDot status=\"success\" />\n * <span>Succeeded</span>\n * </>\n *\n * // Standalone — dot carries the status meaning\n * <StatusDot status=\"info\" pulse aria-label=\"Running\" />\n * ```\n */\nexport const StatusDot = React.forwardRef<HTMLSpanElement, StatusDotProps>(function StatusDot(\n { status, size = 8, pulse = false, 'aria-label': ariaLabel, ...rest },\n ref,\n) {\n const a11yProps = ariaLabel\n ? { role: 'img' as const, 'aria-label': ariaLabel }\n : { 'aria-hidden': true as const };\n // a11y props spread last so consumer cannot silently override role / aria-hidden.\n // Invariant guarded by StatusDot.test.tsx > 'ignores consumer attempts to override the a11y contract'.\n return <Dot ref={ref} status={status} size={size} pulse={pulse} {...rest} {...a11yProps} />;\n});\n","import * as React from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { StatusDot, type StatusDotStatus } from './StatusDot';\n\nexport type StatusLabelSize = 'small' | 'medium';\n\nexport interface StatusLabelProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Themed status; forwarded to StatusDot. */\n status: StatusDotStatus;\n /** Text rendered next to the dot. */\n label: string;\n /** Sizes the dot + text pair. @default 'medium' */\n size?: StatusLabelSize;\n /**\n * Adds a pulsing animation on the dot for in-progress states. When true,\n * the row also exposes an `aria-live=\"polite\"` region so SR users hear\n * updates.\n */\n pulse?: boolean;\n}\n\nconst SIZES: Record<StatusLabelSize, { dot: number; typography: 'caption' | 'body2' }> = {\n small: { dot: 6, typography: 'caption' },\n medium: { dot: 8, typography: 'body2' },\n};\n\n/**\n * StatusLabel — a flex row pairing `StatusDot` with a text label.\n *\n * Use this when a status indicator needs an accompanying label; the row\n * keeps the dot baseline-aligned with the text at all sizes.\n */\nexport const StatusLabel = React.forwardRef<HTMLDivElement, StatusLabelProps>(\n function StatusLabel({ status, label, size = 'medium', pulse = false, ...rest }, ref) {\n const { dot, typography } = SIZES[size];\n return (\n <Box\n ref={ref}\n {...(pulse ? { 'aria-live': 'polite' as const } : {})}\n {...rest}\n sx={(theme) => ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n })}\n >\n <StatusDot status={status} size={dot} pulse={pulse} />\n <Typography variant={typography} component=\"span\" sx={{ lineHeight: 1.2 }}>\n {label}\n </Typography>\n </Box>\n );\n },\n);\n","import React, { useEffect, useRef, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Tooltip from '@mui/material/Tooltip';\nimport CheckIcon from '@mui/icons-material/Check';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\n\nconst COPY_FEEDBACK_MS = 1200;\n\nexport interface CopyChipProps {\n /** The text to display and copy to the clipboard. */\n text: string;\n /** Max width in pixels for the (ellipsized) text label. @default 260 */\n maxWidth?: number;\n /**\n * Accessible label for the button. Defaults to `Copy <text>`. Override when\n * the raw text would be unclear to a screen-reader user (e.g., long hex IDs).\n */\n 'aria-label'?: string;\n /** Tooltip copy shown before clicking. @default 'Copy' */\n tooltipLabel?: string;\n /** Tooltip copy shown after a successful copy. @default 'Copied' */\n tooltipCopiedLabel?: string;\n /** Fires after the clipboard write succeeds. */\n onCopy?: () => void;\n}\n\n/**\n * CopyChip — compact inline copy-to-clipboard control.\n *\n * Shows a monospace text label with an adjacent copy icon that toggles to a\n * check mark for a moment after a successful copy. Use in dense metadata\n * rows where an `IDBlock` would be visually too heavy; use `IDBlock` when\n * the identifier is the primary affordance on the surface and deserves a\n * full boxed treatment with snackbar feedback.\n *\n * @example\n * ```tsx\n * <CopyChip text=\"run_abc123\" />\n * <CopyChip text={longHexId} aria-label=\"Copy workspace ID\" onCopy={track} />\n * ```\n */\nexport const CopyChip: React.FC<CopyChipProps> = ({\n text,\n maxWidth = 260,\n 'aria-label': ariaLabel,\n tooltipLabel = 'Copy',\n tooltipCopiedLabel = 'Copied',\n onCopy,\n}) => {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current != null) clearTimeout(timerRef.current);\n };\n }, []);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n } catch {\n // Clipboard unavailable (no permission, non-secure context, older UA).\n // Leave the button in its idle state and skip the onCopy callback.\n return;\n }\n setCopied(true);\n onCopy?.();\n if (timerRef.current != null) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), COPY_FEEDBACK_MS);\n };\n\n return (\n <Tooltip title={copied ? tooltipCopiedLabel : tooltipLabel} placement=\"top\">\n <Box\n component=\"button\"\n type=\"button\"\n onClick={handleCopy}\n aria-label={ariaLabel ?? `Copy ${text}`}\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.75,\n bgcolor: 'action.hover',\n color: 'text.primary',\n border: 'none',\n borderRadius: 1,\n px: 1,\n py: 0.5,\n fontFamily: 'monospace',\n fontSize: 12,\n cursor: 'pointer',\n transition: 'background-color 0.12s',\n maxWidth: '100%',\n '&:hover': { bgcolor: 'action.selected' },\n }}\n >\n <Box\n component=\"span\"\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth,\n }}\n >\n {text}\n </Box>\n {copied ? <CheckIcon sx={{ fontSize: 14 }} /> : <ContentCopyIcon sx={{ fontSize: 14 }} />}\n </Box>\n </Tooltip>\n );\n};\n","import React from 'react';\nimport MuiTooltip, { TooltipProps as MuiTooltipProps } from '@mui/material/Tooltip';\nimport { styled } from '@mui/material/styles';\n\nexport type TooltipProps = MuiTooltipProps\n\nconst StyledTooltip = styled(MuiTooltip)(({ theme }) => ({\n '& .MuiTooltip-tooltip': {\n backgroundColor: theme.palette.grey[800],\n color: theme.palette.common.white,\n fontSize: '12px',\n padding: '8px 12px',\n borderRadius: '4px',\n },\n '& .MuiTooltip-arrow': {\n color: theme.palette.grey[800],\n },\n}));\n\nexport const Tooltip = React.forwardRef<HTMLElement, TooltipProps>(function Tooltip(props, ref) {\n // MUI Tooltip forwards the ref to its child trigger element. Since the child\n // is consumer-provided, we type the ref as a generic HTMLElement.\n return <StyledTooltip ref={ref as React.Ref<HTMLElement>} {...props} />;\n});\n\n","import React from 'react';\nimport {\n LinearProgress,\n CircularProgress,\n styled,\n} from '@mui/material';\n\nexport type ProgressVariant = 'linear' | 'circular';\n\nexport interface ProgressProps {\n variant?: ProgressVariant;\n value?: number;\n size?: number;\n thickness?: number;\n}\n\nconst StyledLinearProgress = styled(LinearProgress)(({ theme }) => ({\n height: 4,\n borderRadius: 2,\n backgroundColor: theme.palette.grey[200],\n '& .MuiLinearProgress-bar': {\n backgroundColor: theme.palette.primary.main,\n borderRadius: 2,\n },\n}));\n\nconst StyledCircularProgress = styled(CircularProgress)(({ theme }) => ({\n color: theme.palette.primary.main,\n}));\n\nexport const Progress: React.FC<ProgressProps> = ({\n variant = 'linear',\n value,\n size = 40,\n thickness = 4,\n}) => {\n if (variant === 'circular') {\n return <StyledCircularProgress size={size} thickness={thickness} />;\n }\n\n return (\n <StyledLinearProgress\n variant={value !== undefined ? 'determinate' : 'indeterminate'}\n value={value}\n />\n );\n};\n\n","import React from 'react';\nimport MuiAlert, { AlertProps as MuiAlertProps } from '@mui/material/Alert';\nimport { AlertTitle as MuiAlertTitle } from '@mui/material';\nimport MuiSnackbar, { SnackbarProps as MuiSnackbarProps } from '@mui/material/Snackbar';\nimport { styled } from '@mui/material/styles';\n\nexport type AlertSeverity = 'success' | 'error' | 'warning' | 'info';\n\nexport interface AlertProps extends Omit<MuiAlertProps, 'severity'> {\n severity?: AlertSeverity;\n /**\n * Title to display above the alert message\n */\n title?: string;\n}\n\nconst StyledAlert = styled(MuiAlert)({\n borderRadius: 8,\n '&.MuiAlert-filled': {\n borderRadius: 8,\n },\n});\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { severity = 'info', title, children, ...props },\n ref,\n) {\n return (\n <StyledAlert ref={ref} severity={severity} {...props}>\n {title && <MuiAlertTitle>{title}</MuiAlertTitle>}\n {children}\n </StyledAlert>\n );\n});\n\nexport { MuiAlertTitle as AlertTitle };\n\nexport interface SnackbarProps extends Omit<MuiSnackbarProps, 'children'> {\n /**\n * Message to display in the snackbar\n */\n message?: string;\n /**\n * Severity of the alert inside snackbar\n */\n severity?: AlertSeverity;\n /**\n * Title to display in the alert (optional)\n */\n title?: string;\n /**\n * Alert variant\n * @default 'filled'\n */\n variant?: 'filled' | 'standard' | 'outlined';\n /**\n * Callback when snackbar is closed\n */\n onClose?: () => void;\n /**\n * Children to render instead of message (allows custom content)\n * Must be a ReactElement to match MuiSnackbar requirements\n */\n children?: React.ReactElement;\n}\n\nconst StyledSnackbar = styled(MuiSnackbar)({});\n\n// Module-scoped TransitionComponent. Bypasses MUI's enter/exit Transition\n// (which re-mounts the inner Alert on every parent re-render, killing\n// autoHide timers and re-firing aria-live) and instead lets the inner Alert\n// fade via a plain CSS opacity transition. Defined once so MUI keeps the\n// same component identity across Snackbar re-renders.\nconst StableFadeTransition = React.forwardRef<HTMLDivElement, { children: React.ReactElement }>(\n (props, ref) => {\n return React.cloneElement(props.children, {\n ref,\n style: {\n ...props.children.props.style,\n transition: 'opacity 0.3s ease-in-out',\n },\n });\n },\n);\nStableFadeTransition.displayName = 'StableFadeTransition';\n\nexport const Snackbar = React.forwardRef<HTMLDivElement, SnackbarProps>(function Snackbar(\n {\n message,\n severity = 'info',\n title,\n variant = 'filled',\n onClose,\n children,\n anchorOrigin = { vertical: 'bottom', horizontal: 'center' },\n autoHideDuration = 6000,\n ...props\n },\n ref,\n) {\n const handleClose = (_event?: React.SyntheticEvent | Event, reason?: string) => {\n // Prevent closing on clickaway if we have a custom onClose handler\n if (reason === 'clickaway' && onClose) {\n return;\n }\n onClose?.();\n };\n\n const content = children || (message ? (\n <Alert\n onClose={onClose ? handleClose : undefined}\n severity={severity}\n variant={variant}\n title={title}\n sx={{ width: '100%', borderRadius: 2 }}\n >\n {message}\n </Alert>\n ) : undefined);\n\n if (!content) {\n return null;\n }\n\n return (\n <StyledSnackbar\n ref={ref}\n anchorOrigin={anchorOrigin}\n autoHideDuration={autoHideDuration}\n onClose={handleClose}\n disableWindowBlurListener\n ClickAwayListenerProps={{\n onClickAway: () => {} // Prevent scroll issues\n }}\n TransitionComponent={StableFadeTransition}\n {...props}\n >\n {content}\n </StyledSnackbar>\n );\n});\n\n","import React from 'react';\nimport { Box, Typography } from '@mui/material';\n\nexport interface EmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { title = 'No items found', description, icon, action },\n ref,\n) {\n return (\n <Box\n ref={ref}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 6,\n textAlign: 'center',\n minHeight: 200,\n }}\n >\n {icon && (\n <Box\n sx={{\n color: 'text.secondary',\n marginBottom: 2,\n fontSize: 64,\n }}\n >\n {icon}\n </Box>\n )}\n <Typography variant=\"h6\" sx={{ marginBottom: 1, color: 'text.primary' }}>\n {title}\n </Typography>\n {description && (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', marginBottom: 3 }}>\n {description}\n </Typography>\n )}\n {action && <Box>{action}</Box>}\n </Box>\n );\n});\n\n","import React from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\n\nexport interface LoadingProps {\n message?: string;\n size?: number;\n fullScreen?: boolean;\n}\n\nexport const Loading = React.forwardRef<HTMLDivElement, LoadingProps>(function Loading(\n { message = 'Loading...', size = 40, fullScreen = false },\n ref,\n) {\n const content = (\n <Box\n ref={ref}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 2,\n ...(fullScreen && {\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: 'background.default',\n zIndex: 9999,\n }),\n ...(!fullScreen && {\n padding: 4,\n }),\n }}\n >\n <CircularProgress size={size} thickness={4} />\n {message && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {message}\n </Typography>\n )}\n </Box>\n );\n\n return content;\n});\n\n","import React from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\n\nexport interface AppLoadingProps {\n /**\n * Loading message to display\n * @default \"Loading...\"\n */\n message?: string;\n /**\n * Logo source URL or path\n * @default \"/icons/logo.png\"\n */\n logo?: string;\n /**\n * Custom styles\n */\n sx?: any;\n}\n\n/**\n * AppLoading component - Full-screen loading indicator with logo\n * \n * @example\n * ```tsx\n * <AppLoading message=\"Initializing application...\" />\n * ```\n */\nexport const AppLoading: React.FC<AppLoadingProps> = ({\n message = 'Loading...',\n logo = '/icons/logo.png',\n sx = {},\n}) => {\n return (\n <Box\n sx={[\n {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: 'grey.50',\n zIndex: 9999,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {logo && (\n <Box\n component=\"img\"\n src={logo}\n alt=\"Logo\"\n sx={{\n height: 80,\n width: 'auto',\n mb: 4,\n }}\n />\n )}\n\n <CircularProgress size={40} thickness={4} sx={{ mb: 2 }} />\n\n <Typography variant=\"body1\" color=\"text.secondary\">\n {message}\n </Typography>\n </Box>\n );\n};\n\nexport default AppLoading;\n\n","import React from 'react';\nimport {\n CircularProgress as MuiCircularProgress,\n CircularProgressProps as MuiCircularProgressProps,\n} from '@mui/material';\n\nexport interface CircularProgressProps extends MuiCircularProgressProps {\n /**\n * Size of the progress indicator\n * @default 40\n */\n size?: number | string;\n /**\n * Thickness of the progress indicator\n * @default 4\n */\n thickness?: number;\n}\n\n/**\n * CircularProgress component - wrapper around MUI CircularProgress\n * \n * @example\n * ```tsx\n * <CircularProgress size={40} thickness={4} />\n * ```\n */\nexport const CircularProgress = React.forwardRef<HTMLSpanElement, CircularProgressProps>(\n function CircularProgress({ size = 40, thickness = 4, ...props }, ref) {\n return <MuiCircularProgress ref={ref} size={size} thickness={thickness} {...props} />;\n },\n);\n\nexport default CircularProgress;\n\n"],"mappings":"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","names":["Chip","React","styled","jsx","StatusDot","React","jsx","StatusLabel","Box","jsx","jsxs","React","styled","jsx","Tooltip","styled","jsx","React","styled","jsx","jsxs","Alert","styled","React","Snackbar","jsx","React","Box","Typography","jsx","jsxs","EmptyState","React","Box","CircularProgress","Typography","jsx","jsxs","Loading","Box","CircularProgress","Typography","jsx","jsxs","React","jsx","CircularProgress"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/components/inputs/TextField.tsx
|
|
2
|
+
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
3
|
+
var _TextField = require('@mui/material/TextField'); var _TextField2 = _interopRequireDefault(_TextField);
|
|
4
|
+
var _styles = require('@mui/material/styles');
|
|
5
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
6
|
+
var StyledTextField = _styles.styled.call(void 0, (0, _TextField2.default))(({ theme, error }) => ({
|
|
7
|
+
"& .MuiOutlinedInput-root": {
|
|
8
|
+
"&:hover fieldset": {
|
|
9
|
+
borderColor: error ? theme.palette.error.main : theme.palette.primary.main
|
|
10
|
+
},
|
|
11
|
+
"&.Mui-focused fieldset": {
|
|
12
|
+
borderColor: error ? theme.palette.error.main : theme.palette.primary.main
|
|
13
|
+
},
|
|
14
|
+
"&.Mui-error fieldset": {
|
|
15
|
+
borderColor: theme.palette.error.main
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"& .MuiInputLabel-root": {
|
|
19
|
+
"&.Mui-focused": {
|
|
20
|
+
color: error ? theme.palette.error.main : theme.palette.primary.main
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
var TextField = _react2.default.forwardRef(function TextField2({ size = "medium", ...props }, ref) {
|
|
25
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, StyledTextField, { ref, size: size === "medium" ? "medium" : "small", ...props });
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
exports.TextField = TextField;
|
|
31
|
+
//# sourceMappingURL=chunk-JBHRAAN3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-JBHRAAN3.js","../src/components/inputs/TextField.tsx"],"names":["TextField"],"mappings":"AAAA;ACAA,4EAAkB;AAClB,0GAAkE;AAClE,8CAAuB;AAgCnB,+CAAA;AAxBJ,IAAM,gBAAA,EAAkB,4BAAA,wBAAmB,CAAA,CAAE,CAAC,EAAE,KAAA,EAAO,MAAM,CAAA,EAAA,GAAA,CAAO;AAAA,EAClE,0BAAA,EAA4B;AAAA,IAC1B,kBAAA,EAAoB;AAAA,MAClB,WAAA,EAAa,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA,IACxE,CAAA;AAAA,IACA,wBAAA,EAA0B;AAAA,MACxB,WAAA,EAAa,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA,IACxE,CAAA;AAAA,IACA,sBAAA,EAAwB;AAAA,MACtB,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM;AAAA,IACnC;AAAA,EACF,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA,IAClE;AAAA,EACF;AACF,CAAA,CAAE,CAAA;AAEK,IAAM,UAAA,EAAY,eAAA,CAAM,UAAA,CAA2C,SAASA,UAAAA,CACjF,EAAE,KAAA,EAAO,QAAA,EAAU,GAAG,MAAM,CAAA,EAC5B,GAAA,EACA;AACA,EAAA,uBACE,6BAAA,eAAC,EAAA,EAAgB,GAAA,EAAU,IAAA,EAAM,KAAA,IAAS,SAAA,EAAW,SAAA,EAAW,OAAA,EAAU,GAAG,MAAA,CAAO,CAAA;AAExF,CAAC,CAAA;ADVD;AACA;AACE;AACF,8BAAC","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-JBHRAAN3.js","sourcesContent":[null,"import React from 'react';\nimport MuiTextField, { TextFieldProps as MuiTextFieldProps } from '@mui/material/TextField';\nimport { styled } from '@mui/material/styles';\n\nexport type TextFieldSize = 'small' | 'medium';\n\nexport interface TextFieldProps extends Omit<MuiTextFieldProps, 'size'> {\n size?: TextFieldSize;\n}\n\nconst StyledTextField = styled(MuiTextField)(({ theme, error }) => ({\n '& .MuiOutlinedInput-root': {\n '&:hover fieldset': {\n borderColor: error ? theme.palette.error.main : theme.palette.primary.main,\n },\n '&.Mui-focused fieldset': {\n borderColor: error ? theme.palette.error.main : theme.palette.primary.main,\n },\n '&.Mui-error fieldset': {\n borderColor: theme.palette.error.main,\n },\n },\n '& .MuiInputLabel-root': {\n '&.Mui-focused': {\n color: error ? theme.palette.error.main : theme.palette.primary.main,\n },\n },\n}));\n\nexport const TextField = React.forwardRef<HTMLDivElement, TextFieldProps>(function TextField(\n { size = 'medium', ...props },\n ref,\n) {\n return (\n <StyledTextField ref={ref} size={size === 'medium' ? 'medium' : 'small'} {...props} />\n );\n});\n\n"]}
|