@cere/cere-design-system 0.1.0 → 0.2.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.
Files changed (165) hide show
  1. package/README.md +76 -0
  2. package/dist/buttons.d.mts +27 -22
  3. package/dist/buttons.d.ts +27 -22
  4. package/dist/buttons.js +5 -5
  5. package/dist/buttons.mjs +4 -4
  6. package/dist/charts.d.mts +1 -23
  7. package/dist/charts.d.ts +1 -23
  8. package/dist/charts.js +2 -9
  9. package/dist/charts.js.map +1 -1
  10. package/dist/charts.mjs +1 -8
  11. package/dist/{chunk-THQKYTQE.js → chunk-2KDN37PQ.js} +28 -32
  12. package/dist/chunk-2KDN37PQ.js.map +1 -0
  13. package/dist/{chunk-3WCMINE5.mjs → chunk-34LFXT6C.mjs} +25 -29
  14. package/dist/chunk-34LFXT6C.mjs.map +1 -0
  15. package/dist/chunk-3KCXCVOX.mjs +411 -0
  16. package/dist/chunk-3KCXCVOX.mjs.map +1 -0
  17. package/dist/{chunk-NXTVJ6PY.js → chunk-4OKTICU5.js} +10 -10
  18. package/dist/chunk-4OKTICU5.js.map +1 -0
  19. package/dist/{chunk-FN5YL4BK.js → chunk-72TQ56EP.js} +47 -45
  20. package/dist/chunk-72TQ56EP.js.map +1 -0
  21. package/dist/{chunk-QYYQYZHV.js → chunk-7KXKK2RE.js} +3 -5
  22. package/dist/chunk-7KXKK2RE.js.map +1 -0
  23. package/dist/{chunk-CCN6M4LI.js → chunk-ARSCL4ZZ.js} +18 -10
  24. package/dist/chunk-ARSCL4ZZ.js.map +1 -0
  25. package/dist/chunk-AWVNEU6R.mjs +1478 -0
  26. package/dist/chunk-AWVNEU6R.mjs.map +1 -0
  27. package/dist/{chunk-CUCKULYC.mjs → chunk-BH4FNZKK.mjs} +74 -1260
  28. package/dist/chunk-BH4FNZKK.mjs.map +1 -0
  29. package/dist/{chunk-FFZ5S7PQ.mjs → chunk-BOQPWZIB.mjs} +6 -5
  30. package/dist/chunk-BOQPWZIB.mjs.map +1 -0
  31. package/dist/chunk-BT7XUTT5.mjs +392 -0
  32. package/dist/chunk-BT7XUTT5.mjs.map +1 -0
  33. package/dist/{chunk-ATIFLPH6.mjs → chunk-D7D25O6E.mjs} +4 -2
  34. package/dist/{chunk-ATIFLPH6.mjs.map → chunk-D7D25O6E.mjs.map} +1 -1
  35. package/dist/{chunk-JS4IB5IU.mjs → chunk-DRGMEIPT.mjs} +2 -2
  36. package/dist/chunk-DRGMEIPT.mjs.map +1 -0
  37. package/dist/{chunk-KF2Y7HO3.js → chunk-DZXNYLVG.js} +43 -246
  38. package/dist/chunk-DZXNYLVG.js.map +1 -0
  39. package/dist/{chunk-IE6GCHDI.mjs → chunk-GR52ENYI.mjs} +26 -29
  40. package/dist/chunk-GR52ENYI.mjs.map +1 -0
  41. package/dist/chunk-GTBKQXXI.js +1472 -0
  42. package/dist/chunk-GTBKQXXI.js.map +1 -0
  43. package/dist/{chunk-463SRKKD.js → chunk-HJ24WKU4.js} +14 -5
  44. package/dist/chunk-HJ24WKU4.js.map +1 -0
  45. package/dist/{chunk-EOF3QNPF.js → chunk-KKIKOIMP.js} +140 -1028
  46. package/dist/chunk-KKIKOIMP.js.map +1 -0
  47. package/dist/{chunk-MNM6HE72.js → chunk-LVJSKRX3.js} +16 -15
  48. package/dist/chunk-LVJSKRX3.js.map +1 -0
  49. package/dist/{chunk-KPDYKK3V.js → chunk-PFZZJZ64.js} +8 -8
  50. package/dist/{chunk-KPDYKK3V.js.map → chunk-PFZZJZ64.js.map} +1 -1
  51. package/dist/{chunk-KVBMZNWT.mjs → chunk-POCAW2G4.mjs} +18 -10
  52. package/dist/chunk-POCAW2G4.mjs.map +1 -0
  53. package/dist/{chunk-L2TIGA7I.js → chunk-QCFLZ7X3.js} +39 -42
  54. package/dist/chunk-QCFLZ7X3.js.map +1 -0
  55. package/dist/{chunk-6EUAU67C.mjs → chunk-SG2TD7FQ.mjs} +8 -8
  56. package/dist/chunk-SG2TD7FQ.mjs.map +1 -0
  57. package/dist/{chunk-QY65OUAC.mjs → chunk-SSFALO6S.mjs} +13 -4
  58. package/dist/chunk-SSFALO6S.mjs.map +1 -0
  59. package/dist/{chunk-PWF2NJDB.mjs → chunk-WC2TCWXK.mjs} +82 -14
  60. package/dist/chunk-WC2TCWXK.mjs.map +1 -0
  61. package/dist/{chunk-ZGCN5WCG.js → chunk-XZZZ4MZV.js} +83 -15
  62. package/dist/chunk-XZZZ4MZV.js.map +1 -0
  63. package/dist/chunk-YCDCQSYH.js +411 -0
  64. package/dist/chunk-YCDCQSYH.js.map +1 -0
  65. package/dist/{chunk-CWJ4OU6W.mjs → chunk-ZDAZYIXB.mjs} +2 -4
  66. package/dist/chunk-ZDAZYIXB.mjs.map +1 -0
  67. package/dist/feedback.d.mts +20 -8
  68. package/dist/feedback.d.ts +20 -8
  69. package/dist/feedback.js +5 -5
  70. package/dist/feedback.mjs +4 -4
  71. package/dist/fonts/HumanSans-BlackOblique.otf +0 -0
  72. package/dist/fonts/HumanSans-Thin.otf +0 -0
  73. package/dist/fonts/HumanSans-ThinOblique.otf +0 -0
  74. package/dist/fonts/human-sans-font.css +88 -0
  75. package/dist/fonts/human-sans.css +3 -0
  76. package/dist/fonts/inter.css +3 -0
  77. package/dist/icons.d.mts +2 -3
  78. package/dist/icons.d.ts +2 -3
  79. package/dist/icons.js +2 -2
  80. package/dist/icons.mjs +1 -1
  81. package/dist/index.d.mts +37 -8
  82. package/dist/index.d.ts +37 -8
  83. package/dist/index.js +23 -90
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +46 -113
  86. package/dist/index.mjs.map +1 -1
  87. package/dist/inputs.d.mts +23 -3
  88. package/dist/inputs.d.ts +23 -3
  89. package/dist/inputs.js +5 -5
  90. package/dist/inputs.js.map +1 -1
  91. package/dist/inputs.mjs +15 -15
  92. package/dist/layout.d.mts +37 -283
  93. package/dist/layout.d.ts +37 -283
  94. package/dist/layout.js +8 -32
  95. package/dist/layout.js.map +1 -1
  96. package/dist/layout.mjs +16 -40
  97. package/dist/navigation.d.mts +9 -114
  98. package/dist/navigation.d.ts +9 -114
  99. package/dist/navigation.js +5 -9
  100. package/dist/navigation.js.map +1 -1
  101. package/dist/navigation.mjs +6 -10
  102. package/dist/third-party.d.mts +3 -527
  103. package/dist/third-party.d.ts +3 -527
  104. package/dist/third-party.js +2 -40
  105. package/dist/third-party.js.map +1 -1
  106. package/dist/third-party.mjs +3 -41
  107. package/dist/tokens.css +45 -71
  108. package/dist/utilities.js +2 -4
  109. package/dist/utilities.js.map +1 -1
  110. package/dist/utilities.mjs +2 -4
  111. package/package.json +23 -9
  112. package/dist/WorkflowNode-BnxXO6t_.d.mts +0 -46
  113. package/dist/WorkflowNode-BnxXO6t_.d.ts +0 -46
  114. package/dist/chunk-27JEWSWA.mjs +0 -233
  115. package/dist/chunk-27JEWSWA.mjs.map +0 -1
  116. package/dist/chunk-3WCMINE5.mjs.map +0 -1
  117. package/dist/chunk-463SRKKD.js.map +0 -1
  118. package/dist/chunk-6EUAU67C.mjs.map +0 -1
  119. package/dist/chunk-AIY6222Q.js +0 -11
  120. package/dist/chunk-AIY6222Q.js.map +0 -1
  121. package/dist/chunk-AJBM7IE6.mjs +0 -2366
  122. package/dist/chunk-AJBM7IE6.mjs.map +0 -1
  123. package/dist/chunk-CCN6M4LI.js.map +0 -1
  124. package/dist/chunk-CUCKULYC.mjs.map +0 -1
  125. package/dist/chunk-CWJ4OU6W.mjs.map +0 -1
  126. package/dist/chunk-EOF3QNPF.js.map +0 -1
  127. package/dist/chunk-FFZ5S7PQ.mjs.map +0 -1
  128. package/dist/chunk-FN5YL4BK.js.map +0 -1
  129. package/dist/chunk-HLH2VWXL.js +0 -2658
  130. package/dist/chunk-HLH2VWXL.js.map +0 -1
  131. package/dist/chunk-IE6GCHDI.mjs.map +0 -1
  132. package/dist/chunk-JS4IB5IU.mjs.map +0 -1
  133. package/dist/chunk-KF2Y7HO3.js.map +0 -1
  134. package/dist/chunk-KVBMZNWT.mjs.map +0 -1
  135. package/dist/chunk-L2TIGA7I.js.map +0 -1
  136. package/dist/chunk-MNM6HE72.js.map +0 -1
  137. package/dist/chunk-NXTVJ6PY.js.map +0 -1
  138. package/dist/chunk-PWF2NJDB.mjs.map +0 -1
  139. package/dist/chunk-QD6RLAO2.mjs +0 -11
  140. package/dist/chunk-QD6RLAO2.mjs.map +0 -1
  141. package/dist/chunk-QY65OUAC.mjs.map +0 -1
  142. package/dist/chunk-QYYQYZHV.js.map +0 -1
  143. package/dist/chunk-T7LPABOL.mjs +0 -595
  144. package/dist/chunk-T7LPABOL.mjs.map +0 -1
  145. package/dist/chunk-THQKYTQE.js.map +0 -1
  146. package/dist/chunk-X7E6GMFL.js +0 -233
  147. package/dist/chunk-X7E6GMFL.js.map +0 -1
  148. package/dist/chunk-XF66WQZE.mjs +0 -1535
  149. package/dist/chunk-XF66WQZE.mjs.map +0 -1
  150. package/dist/chunk-YQOZPLTY.js +0 -1535
  151. package/dist/chunk-YQOZPLTY.js.map +0 -1
  152. package/dist/chunk-ZGCN5WCG.js.map +0 -1
  153. package/dist/index.css +0 -79
  154. package/dist/index.css.map +0 -1
  155. /package/dist/{HumanSans-Black-C4YJONK7.otf → fonts/HumanSans-Black.otf} +0 -0
  156. /package/dist/{HumanSans-Bold-4EAJ3L3T.otf → fonts/HumanSans-Bold.otf} +0 -0
  157. /package/dist/{HumanSans-BoldOblique-4D325T4F.otf → fonts/HumanSans-BoldOblique.otf} +0 -0
  158. /package/dist/{HumanSans-ExtraLight-VL7DEKQ4.otf → fonts/HumanSans-ExtraLight.otf} +0 -0
  159. /package/dist/{HumanSans-ExtraLightOblique-VK2JTUXF.otf → fonts/HumanSans-ExtraLightOblique.otf} +0 -0
  160. /package/dist/{HumanSans-Light-YV7AFKRB.otf → fonts/HumanSans-Light.otf} +0 -0
  161. /package/dist/{HumanSans-LightOblique-VIXV7QA6.otf → fonts/HumanSans-LightOblique.otf} +0 -0
  162. /package/dist/{HumanSans-Medium-UULJ3PIR.otf → fonts/HumanSans-Medium.otf} +0 -0
  163. /package/dist/{HumanSans-MediumOblique-M7FHDZRS.otf → fonts/HumanSans-MediumOblique.otf} +0 -0
  164. /package/dist/{HumanSans-Regular-QMFEP3F6.otf → fonts/HumanSans-Regular.otf} +0 -0
  165. /package/dist/{HumanSans-RegularOblique-YPKQJAAM.otf → fonts/HumanSans-RegularOblique.otf} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-KF2Y7HO3.js","../src/components/charts/ChartWidget/ChartWidget.tsx","../src/components/charts/MetricsChart/MetricsChart.tsx","../src/components/charts/MetricsChart/PeriodSelect.tsx","../src/components/charts/TimeSeriesGraph/TimeSeriesGraph.tsx","../src/components/charts/TimeSeriesGraph/TimeRangeSelect.tsx","../src/components/charts/TimeSeriesGraph/SummaryStats.tsx"],"names":["value","jsx","Chart","styled","useTheme","jsxs","format","Stack","Box","Typography","options","TextField","MenuItem","Card","CardHeader","LineChart"],"mappings":"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","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-KF2Y7HO3.js","sourcesContent":[null,"import { ReactNode } from 'react';\nimport { Box, Stack, Typography, styled, useTheme } from '@mui/material';\nimport { LineChart } from '@mui/x-charts';\nimport size from 'byte-size';\nimport { format } from 'date-fns';\n\ntype ChartWidgetHistoryRecord = {\n date: Date;\n value: number;\n};\n\nexport type ChartWidgetProps = {\n title: string;\n value?: ReactNode;\n history?: ChartWidgetHistoryRecord[];\n formatValue?: (value: number) => string;\n};\n\nconst Chart = styled(Box)(() => ({\n height: 200,\n}));\n\nexport const ChartWidget = ({\n title,\n value,\n history,\n formatValue = (value) => size(value || 0).toString(),\n}: ChartWidgetProps) => {\n const theme = useTheme();\n\n return (\n <Stack spacing={1}>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {title}\n </Typography>\n <Typography fontWeight=\"bold\">{value}</Typography>\n\n <Chart>\n <LineChart\n dataset={history || []}\n axisHighlight={{ x: 'none', y: 'none' }}\n grid={{ horizontal: true, vertical: false }}\n margin={{ top: 10, right: 20, bottom: 40, left: 40 }}\n colors={[theme.palette.primary.main]}\n slots={{\n noDataOverlay: () => null,\n }}\n yAxis={[\n {\n dataKey: 'value',\n disableLine: true,\n disableTicks: true,\n min: history?.length ? undefined : 0,\n max: history?.length ? undefined : 100,\n tickNumber: history?.length ? undefined : 5,\n valueFormatter: (value) => formatValue(value || 0),\n tickLabelStyle: {\n fontSize: 10,\n },\n },\n ]}\n xAxis={[\n {\n dataKey: 'date',\n min: history && Math.min(...history.map((record) => +record.date)),\n max: history && Math.max(...history.map((record) => +record.date)),\n disableLine: true,\n disableTicks: true,\n valueFormatter: (date) => format(date, 'do MMM'),\n tickPlacement: 'end',\n tickNumber: 1,\n\n tickLabelStyle: {\n fontSize: 10,\n transform: 'translate(-16px, 16px) rotate(-30deg)',\n },\n },\n ]}\n series={[\n {\n curve: 'linear',\n dataKey: 'value',\n showMark: false,\n valueFormatter: (value) => formatValue(value || 0),\n },\n ]}\n />\n </Chart>\n </Stack>\n );\n};\n","import { format, startOfDay, subHours, subWeeks, subMonths } from 'date-fns';\nimport { LineChart } from '@mui/x-charts';\nimport { useDrawingArea, useYScale } from '@mui/x-charts/hooks';\nimport { Box, Card, CardHeader, CardMedia, Divider, Stack, styled, Typography, useTheme } from '@mui/material';\n\nimport { deploymentSurfaceTokens } from '../../../theme';\nimport { PeriodSelect, MetricsPeriod } from './PeriodSelect';\nimport { useMemo, useState } from 'react';\nimport { BytesSize } from '../../utilities/BytesSize';\n\ntype MetricsHistoryRecord = {\n storedBytes: number;\n transferredBytes: number;\n puts: number;\n gets: number;\n recordTime: Date;\n};\n\nexport type MetricsChartProps = {\n history?: MetricsHistoryRecord[];\n};\n\nconst mapPeriodToFromDate = (period: MetricsPeriod = 'month') => {\n const date = new Date();\n\n if (period === 'hour') {\n return subHours(date, 1);\n }\n\n if (period === 'day') {\n return subHours(date, 24);\n }\n\n if (period === 'week') {\n return startOfDay(subWeeks(date, 1));\n }\n\n return startOfDay(subMonths(date, 1));\n};\n\nconst Chart = styled(LineChart)({\n height: 320,\n marginBottom: 16,\n});\n\nconst NoDataRect = styled('rect')({\n fill: deploymentSurfaceTokens.highlightBg,\n});\n\nconst LoadingText = styled('text')(({ theme }) => ({\n stroke: 'none',\n fill: theme.palette.text.primary,\n shapeRendering: 'crispEdges',\n textAnchor: 'middle',\n dominantBaseline: 'middle',\n}));\n\n/**\n * TODO: Refactor this component to use shared graphs configuration\n */\nexport const MetricsChart = ({ history = [] }: MetricsChartProps) => {\n const theme = useTheme();\n const [period, setPeriod] = useState<MetricsPeriod>('week');\n const periodFrom = useMemo(() => mapPeriodToFromDate(period), [period]);\n const periodHistory = useMemo(\n () => history.filter((record) => record.recordTime > periodFrom),\n [history, periodFrom],\n );\n\n const total = useMemo(\n () =>\n periodHistory.reduce(\n (acc, record) => ({\n gets: acc.gets + record.gets,\n puts: acc.puts + record.puts,\n storedBytes: acc.storedBytes + record.storedBytes,\n transferredBytes: acc.transferredBytes + record.transferredBytes,\n }),\n { gets: 0, puts: 0, storedBytes: 0, transferredBytes: 0 } as Omit<MetricsHistoryRecord, 'recordTime'>,\n ),\n [periodHistory],\n );\n\n const NoDataOverlay = () => {\n const yScale = useYScale();\n const { left, width, height } = useDrawingArea();\n\n // Conditional handling if bandwidth is not available\n // const bandWidth = xScale.bandwidth ? xScale.bandwidth() : 0;\n\n const [, top] = yScale.range();\n\n const padding = { top: 8, bottom: 8, left: 20, right: 20 };\n const text = 'No data for selected period';\n\n const textWidth = 211;\n const textHeight = 24;\n\n const backgroundWidth = textWidth + padding.left + padding.right;\n const backgroundHeight = textHeight + padding.top + padding.bottom;\n\n const rectX = left + (width - backgroundWidth) / 2;\n const rectY = top + (height - backgroundHeight) / 2;\n return (\n <g>\n <NoDataRect x={rectX} y={rectY} width={backgroundWidth} height={backgroundHeight} />\n <LoadingText style={{ ...theme.typography.subtitle1 }} x={left + width / 2} y={top + height / 2}>\n {text}\n </LoadingText>\n </g>\n );\n };\n\n return (\n <Card>\n <CardHeader title=\"GET / PUT Requests\" action={<PeriodSelect value={period} onChange={setPeriod} />} />\n <CardMedia>\n <Chart\n skipAnimation\n dataset={periodHistory || []}\n axisHighlight={{ x: 'none', y: 'none' }}\n grid={{ horizontal: true, vertical: false }}\n margin={{ top: 10, right: 20, bottom: 40, left: 40 }}\n colors={[theme.palette.primary.main, theme.palette.success.main]}\n slots={{\n noDataOverlay: NoDataOverlay,\n }}\n slotProps={{\n noDataOverlay: {\n style: {\n ...theme.typography.h4,\n },\n },\n }}\n yAxis={\n periodHistory.length\n ? [\n {\n min: periodHistory.length ? undefined : 0,\n max: periodHistory.length ? undefined : 100,\n tickNumber: periodHistory.length ? undefined : 5,\n disableLine: true,\n disableTicks: true,\n tickLabelStyle: {\n fontSize: 10,\n },\n },\n ]\n : []\n }\n xAxis={[\n {\n dataKey: 'recordTime',\n min: periodFrom,\n max: new Date(),\n disableLine: false,\n disableTicks: false,\n valueFormatter: (date) => format(date, 'do MMM'),\n tickMinStep: 3600 * 1000 * 24, // min step: 24h\n\n tickLabelStyle: {\n fontSize: 10,\n transform: 'translate(-16px, 16px) rotate(-30deg)',\n },\n },\n ]}\n series={[\n {\n curve: 'linear',\n dataKey: 'gets',\n showMark: false,\n },\n\n {\n curve: 'linear',\n dataKey: 'puts',\n showMark: false,\n },\n ]}\n />\n {periodHistory.length > 0 && (\n <Stack direction=\"row\" spacing={2} marginY={3} justifyContent=\"center\">\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Box sx={{ width: 14, height: 14, borderRadius: '4px', backgroundColor: theme.palette.primary.main }} />\n <Typography variant=\"body2\">Get</Typography>\n </Stack>\n\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Box sx={{ width: 14, height: 14, borderRadius: '4px', backgroundColor: theme.palette.success.main }} />\n <Typography variant=\"body2\">Put</Typography>\n </Stack>\n </Stack>\n )}\n </CardMedia>\n <CardMedia>\n <Divider flexItem />\n <Stack direction=\"row\" spacing={2} padding={2}>\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Typography variant=\"body2\" color=\"secondary\">\n GET Requests per account\n </Typography>\n <Typography variant=\"h3\">{total.gets}</Typography>\n </Stack>\n\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Typography variant=\"body2\" color=\"secondary\">\n PUT Requests per account\n </Typography>\n <Typography variant=\"h3\">{total.puts}</Typography>\n </Stack>\n\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Typography variant=\"body2\" color=\"secondary\">\n Total Consumed per account\n </Typography>\n <Typography variant=\"h3\">\n <BytesSize bytes={total.transferredBytes} />\n </Typography>\n </Stack>\n\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Typography variant=\"body2\" color=\"secondary\">\n Total Stored per account\n </Typography>\n <Typography variant=\"h3\">\n <BytesSize bytes={total.storedBytes} />\n </Typography>\n </Stack>\n </Stack>\n </CardMedia>\n </Card>\n );\n};\n","import { MenuItem, TextField } from '@mui/material';\n\nexport type MetricsPeriod = 'hour' | 'day' | 'week' | 'month';\n\nexport type PeriodSelectProps = {\n value?: MetricsPeriod;\n onChange?: (value: MetricsPeriod) => void;\n};\n\ntype Option = {\n value: MetricsPeriod;\n label: string;\n};\n\nconst options: Option[] = [\n /**\n * TODO: Enable the options below when the backend supports them\n */\n // { value: 'hour', label: 'Last hour' },\n // { value: 'day', label: '24 hours' },\n { value: 'week', label: '1 week' },\n { value: 'month', label: '1 month' },\n];\n\nexport const PeriodSelect = ({ value, onChange }: PeriodSelectProps) => (\n <TextField\n select\n size=\"small\"\n value={value}\n defaultValue={options[0].value}\n onChange={(e) => onChange?.(e.target.value as MetricsPeriod)}\n >\n {options.map(({ value, label }) => (\n <MenuItem key={value} value={value}>\n {label}\n </MenuItem>\n ))}\n </TextField>\n);\n","import { ReactNode, useCallback, useMemo, useState } from 'react';\nimport {\n Box,\n Card,\n CardHeader,\n CardMedia,\n CircularProgress,\n Divider,\n Stack,\n Typography,\n styled,\n useTheme,\n} from '@mui/material';\nimport { LineChart } from '@mui/x-charts';\nimport { format } from 'date-fns';\n\nimport { TimeRangeSelect, type TimeRangeOption } from './TimeRangeSelect';\nimport { SummaryStats, type SummaryItem } from './SummaryStats';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/**\n * A single data point in a time series.\n * Use `null` for the value to represent missing/gap data — the line will break.\n */\nexport interface DataPoint {\n /** Timestamp of the observation */\n timestamp: Date;\n /** Numeric value, or `null` to indicate a gap in the data */\n value: number | null;\n}\n\n/**\n * Represents one line on the graph (a named data series).\n */\nexport interface DataSeries {\n /** Unique display name for this series (shown in legend) */\n name: string;\n /** CSS color string for the line and legend indicator */\n color: string;\n /** Ordered array of data points */\n data: DataPoint[];\n}\n\nexport interface TimeSeriesGraphProps {\n /** Optional title displayed at the top-left of the graph card */\n title?: string;\n /**\n * Array of data series to render. Each series becomes one line on the graph.\n * There is no hardcoded limit on the number of series.\n */\n series: DataSeries[];\n /**\n * Configurable time range options for the dropdown selector.\n * When omitted, the time range dropdown is not rendered.\n */\n timeRangeOptions?: TimeRangeOption[];\n /** Currently selected time range value (controlled) */\n selectedTimeRange?: string;\n /** Callback invoked when the user picks a different time range */\n onTimeRangeChange?: (value: string) => void;\n /**\n * Optional array of summary statistics displayed below the graph.\n * When omitted or empty, the summary section is hidden.\n */\n summaryItems?: SummaryItem[];\n /**\n * Whether to show the summary statistics section.\n * Defaults to `true`. Set to `false` to explicitly hide, even when `summaryItems` are provided.\n */\n showSummary?: boolean;\n /**\n * Optional header action element rendered to the right of the title\n * (e.g., a secondary dropdown or filter control).\n */\n headerAction?: ReactNode;\n /**\n * When `true`, shows a loading overlay (spinner) over the graph area\n * while the header remains visible and interactive.\n */\n loading?: boolean;\n /**\n * Override the x-axis date format string (date-fns format tokens).\n * When omitted, the format is auto-detected from the data's time span:\n * - <= 24 hours → `'HH:mm'`\n * - > 24 hours → `'do MMM'`\n */\n xAxisFormat?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Styled helpers\n// ---------------------------------------------------------------------------\n\nconst ChartContainer = styled(Box)({\n position: 'relative',\n height: 320,\n});\n\nconst LoadingOverlay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n zIndex: 1,\n borderRadius: theme.shape.borderRadius,\n}));\n\nconst LegendDot = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'dotColor',\n})<{ dotColor: string }>(({ dotColor }) => ({\n width: 14,\n height: 14,\n borderRadius: 4,\n backgroundColor: dotColor,\n flexShrink: 0,\n}));\n\n// ---------------------------------------------------------------------------\n// Utility functions\n// ---------------------------------------------------------------------------\n\n/**\n * Formats large Y-axis values into shorthand notation.\n * 1,000 → 1K, 1,000,000 → 1M, 1,000,000,000 → 1B\n */\nconst formatYAxisValue = (value: number): string => {\n const absValue = Math.abs(value);\n if (absValue >= 1_000_000_000) {\n return `${(value / 1_000_000_000).toFixed(absValue % 1_000_000_000 === 0 ? 0 : 1)}B`;\n }\n if (absValue >= 1_000_000) {\n return `${(value / 1_000_000).toFixed(absValue % 1_000_000 === 0 ? 0 : 1)}M`;\n }\n if (absValue >= 1_000) {\n return `${(value / 1_000).toFixed(absValue % 1_000 === 0 ? 0 : 1)}K`;\n }\n return String(value);\n};\n\nconst TWENTY_FOUR_HOURS_MS = 24 * 60 * 60 * 1000;\n\n/**\n * Infers the appropriate x-axis date format string based on the time span of the data.\n * - Span <= 24 hours → `'HH:mm'` (e.g., \"14:30\")\n * - Span > 24 hours → `'do MMM'` (e.g., \"2nd Jan\")\n */\nexport const inferXAxisFormat = (\n min: Date | undefined,\n max: Date | undefined,\n): string => {\n if (!min || !max) return 'do MMM';\n const spanMs = max.getTime() - min.getTime();\n return spanMs <= TWENTY_FOUR_HOURS_MS ? 'HH:mm' : 'do MMM';\n};\n\n/** A single row in the chart dataset — timestamp plus one field per series. */\ntype DatasetRow = Record<string, string | number | Date | null | undefined>;\n\n/**\n * Builds the unified dataset array that MUI X-Charts expects.\n * Each row is keyed by timestamp with one field per series.\n */\nconst buildDataset = (\n series: DataSeries[],\n hiddenSeries: Set<string>,\n): DatasetRow[] => {\n // Collect all unique timestamps across all visible series\n const timestampMap = new Map<number, DatasetRow>();\n\n series.forEach((s) => {\n if (hiddenSeries.has(s.name)) return;\n s.data.forEach((dp) => {\n const ts = dp.timestamp.getTime();\n if (!timestampMap.has(ts)) {\n timestampMap.set(ts, { timestamp: dp.timestamp } as DatasetRow);\n }\n timestampMap.get(ts)![s.name] = dp.value;\n });\n });\n\n // Sort by timestamp ascending\n return Array.from(timestampMap.values()).sort(\n (a, b) => (a.timestamp as Date).getTime() - (b.timestamp as Date).getTime(),\n );\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * A reusable time series graph component that displays one or more data lines\n * over a shared time axis. Supports configurable time range selection,\n * optional summary statistics, interactive legend toggling, crosshair tooltips,\n * and a loading state.\n *\n * Built on `@mui/x-charts` LineChart and the Cere Design System theme.\n *\n * @example\n * ```tsx\n * <TimeSeriesGraph\n * title=\"Engagement over time\"\n * series={[\n * { name: 'Engagements', color: '#6750A4', data: engagementData },\n * { name: 'Unique Streams', color: '#4caf50', data: streamData },\n * ]}\n * timeRangeOptions={[\n * { label: 'Last hour', value: 'hour' },\n * { label: '24 hours', value: 'day' },\n * { label: '1 week', value: 'week' },\n * { label: '1 month', value: 'month' },\n * ]}\n * selectedTimeRange=\"week\"\n * onTimeRangeChange={(range) => fetchData(range)}\n * summaryItems={[\n * { label: 'Total Engagements', value: 11372 },\n * { label: 'Daily Engagements', value: 156 },\n * ]}\n * />\n * ```\n *\n * Figma reference: [ROB Design - Node 162:1172](https://www.figma.com/design/xky11VbkkFcgZLwZE8BdCN/ROB?node-id=162-1172&m=dev)\n */\nexport const TimeSeriesGraph = ({\n title,\n series,\n timeRangeOptions,\n selectedTimeRange,\n onTimeRangeChange,\n summaryItems,\n showSummary = true,\n headerAction,\n loading = false,\n xAxisFormat,\n}: TimeSeriesGraphProps) => {\n const theme = useTheme();\n const [hiddenSeries, setHiddenSeries] = useState<Set<string>>(new Set());\n\n // Build the MUI X-Charts dataset from visible series\n const dataset = useMemo(() => buildDataset(series, hiddenSeries), [series, hiddenSeries]);\n\n // Visible series (exclude hidden)\n const visibleSeries = useMemo(\n () => series.filter((s) => !hiddenSeries.has(s.name)),\n [series, hiddenSeries],\n );\n\n // Colors array matching the order of visible series\n const chartColors = useMemo(() => visibleSeries.map((s) => s.color), [visibleSeries]);\n\n // Toggle a series' visibility\n const handleLegendToggle = useCallback((seriesName: string) => {\n setHiddenSeries((prev) => {\n const next = new Set(prev);\n if (next.has(seriesName)) {\n next.delete(seriesName);\n } else {\n next.add(seriesName);\n }\n return next;\n });\n }, []);\n\n // Compute time bounds for the X-axis from visible data\n const timeBounds = useMemo(() => {\n if (dataset.length === 0) return { min: undefined, max: undefined };\n const timestamps = dataset.map((row) => (row.timestamp as Date).getTime());\n return {\n min: new Date(Math.min(...timestamps)),\n max: new Date(Math.max(...timestamps)),\n };\n }, [dataset]);\n\n // Resolve the x-axis date format: explicit prop wins, otherwise auto-detect\n const resolvedXAxisFormat = useMemo(\n () => xAxisFormat ?? inferXAxisFormat(timeBounds.min, timeBounds.max),\n [xAxisFormat, timeBounds.min, timeBounds.max],\n );\n\n // Determine whether we have data to display\n const hasData = dataset.length > 0;\n\n // Whether to render the summary section\n const shouldShowSummary = showSummary && summaryItems && summaryItems.length > 0;\n\n // Build the header action area (time range + optional custom action)\n const headerActionElement = (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {headerAction}\n {timeRangeOptions && timeRangeOptions.length > 0 && (\n <TimeRangeSelect\n options={timeRangeOptions}\n value={selectedTimeRange}\n onChange={onTimeRangeChange}\n />\n )}\n </Stack>\n );\n\n // Determine whether to show the header at all\n const showHeader = !!title || !!headerAction || (timeRangeOptions && timeRangeOptions.length > 0);\n\n return (\n <Card\n aria-label={title ? `Line chart showing ${title}` : 'Line chart'}\n role=\"figure\"\n >\n {showHeader && (\n <CardHeader\n title={title}\n titleTypographyProps={{\n variant: 'subtitle1',\n fontWeight: 500,\n }}\n action={headerActionElement}\n />\n )}\n\n <CardMedia>\n <ChartContainer>\n {loading && (\n <LoadingOverlay role=\"status\" aria-label=\"Loading chart data\">\n <CircularProgress size={40} />\n </LoadingOverlay>\n )}\n\n <LineChart\n dataset={dataset}\n axisHighlight={{ x: 'line', y: 'none' }}\n grid={{ horizontal: true, vertical: false }}\n margin={{ top: 10, right: 20, bottom: 40, left: 50 }}\n colors={chartColors.length > 0 ? chartColors : [theme.palette.primary.main]}\n slots={{\n noDataOverlay: () => null,\n }}\n tooltip={{ trigger: hasData ? 'axis' : 'none' }}\n yAxis={[\n {\n disableLine: true,\n disableTicks: true,\n min: hasData ? undefined : 0,\n max: hasData ? undefined : 100,\n tickNumber: hasData ? undefined : 5,\n valueFormatter: (value: number) => formatYAxisValue(value || 0),\n tickLabelStyle: {\n fontSize: 10,\n },\n },\n ]}\n xAxis={[\n {\n dataKey: 'timestamp',\n scaleType: 'time',\n min: timeBounds.min,\n max: timeBounds.max,\n disableLine: true,\n disableTicks: true,\n valueFormatter: (date: Date) => format(date, resolvedXAxisFormat),\n tickLabelStyle: {\n fontSize: 10,\n },\n },\n ]}\n series={visibleSeries.map((s) => ({\n curve: 'linear' as const,\n dataKey: s.name,\n label: s.name,\n showMark: false,\n connectNulls: false,\n }))}\n // Hide the built-in legend — we render a custom one below\n slotProps={{\n legend: { hidden: true },\n }}\n />\n </ChartContainer>\n\n {/* Custom interactive legend */}\n {series.length > 0 && (\n <Stack\n direction=\"row\"\n spacing={2}\n justifyContent=\"center\"\n paddingY={1}\n flexWrap=\"wrap\"\n useFlexGap\n role=\"list\"\n aria-label=\"Chart legend\"\n >\n {series.map((s) => {\n const isHidden = hiddenSeries.has(s.name);\n return (\n <Stack\n key={s.name}\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n role=\"listitem\"\n onClick={() => handleLegendToggle(s.name)}\n sx={{\n cursor: 'pointer',\n opacity: isHidden ? 0.4 : 1,\n transition: 'opacity 0.2s ease',\n userSelect: 'none',\n }}\n aria-pressed={!isHidden}\n aria-label={`Toggle ${s.name} visibility`}\n >\n <LegendDot dotColor={s.color} />\n <Typography variant=\"body2\">{s.name}</Typography>\n </Stack>\n );\n })}\n </Stack>\n )}\n </CardMedia>\n\n {/* Summary statistics */}\n {shouldShowSummary && (\n <>\n <Divider />\n <SummaryStats items={summaryItems!} />\n </>\n )}\n </Card>\n );\n};\n","import { MenuItem, TextField } from '@mui/material';\n\n/**\n * Represents a single time range option in the dropdown.\n */\nexport interface TimeRangeOption {\n /** Display label shown in the dropdown (e.g., \"1 week\") */\n label: string;\n /** Value identifier passed to the callback on selection */\n value: string;\n}\n\nexport interface TimeRangeSelectProps {\n /** Available time range options */\n options: TimeRangeOption[];\n /** Currently selected time range value */\n value?: string;\n /** Callback invoked when user selects a different time range */\n onChange?: (value: string) => void;\n}\n\n/**\n * Configurable time range dropdown selector.\n * Renders a compact select field with the provided time range options.\n *\n * @example\n * ```tsx\n * <TimeRangeSelect\n * options={[\n * { label: 'Last hour', value: 'hour' },\n * { label: '24 hours', value: 'day' },\n * { label: '1 week', value: 'week' },\n * ]}\n * value=\"week\"\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nexport const TimeRangeSelect = ({ options, value, onChange }: TimeRangeSelectProps) => (\n <TextField\n select\n size=\"small\"\n value={value ?? (options.length > 0 ? options[0].value : '')}\n onChange={(e) => onChange?.(e.target.value)}\n aria-label=\"Time range selector\"\n sx={{ minWidth: 120 }}\n >\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n);\n","import { Stack, Typography } from '@mui/material';\n\n/**\n * Represents a single summary statistic item displayed below the graph.\n */\nexport interface SummaryItem {\n /** Descriptive label (e.g., \"Total Engagements\") */\n label: string;\n /** Numeric or string value (e.g., \"13.72\" or 11372) */\n value: string | number;\n /** Optional unit suffix (e.g., \"K\", \"GB\", \"%\") */\n unit?: string;\n}\n\nexport interface SummaryStatsProps {\n /** Array of summary items to display */\n items: SummaryItem[];\n}\n\n/**\n * Formats a summary value with its optional unit.\n */\nconst formatSummaryValue = (value: string | number, unit?: string): string => {\n const displayValue = typeof value === 'number' ? value.toLocaleString() : value;\n return unit ? `${displayValue} ${unit}` : displayValue;\n};\n\n/**\n * Renders a horizontal row of summary statistics below the graph.\n * Each item shows a label with its corresponding value and optional unit.\n *\n * Matches the Figma design layout with label in secondary text color\n * and value in bold heading typography.\n *\n * @example\n * ```tsx\n * <SummaryStats\n * items={[\n * { label: 'Total Engagements', value: 11372 },\n * { label: 'Total Consumed', value: '156.91', unit: 'GB' },\n * ]}\n * />\n * ```\n */\nexport const SummaryStats = ({ items }: SummaryStatsProps) => {\n if (items.length === 0) {\n return null;\n }\n\n return (\n <Stack\n direction=\"row\"\n spacing={3}\n padding={2}\n flexWrap=\"wrap\"\n useFlexGap\n role=\"list\"\n aria-label=\"Summary statistics\"\n >\n {items.map((item) => (\n <Stack\n key={item.label}\n direction=\"row\"\n alignItems=\"center\"\n spacing={1}\n role=\"listitem\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\">\n {item.label}\n </Typography>\n <Typography variant=\"h5\" fontWeight={600}>\n {formatSummaryValue(item.value, item.unit)}\n </Typography>\n </Stack>\n ))}\n </Stack>\n );\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Card.tsx","../src/components/layout/Typography.tsx"],"sourcesContent":["import React from 'react';\nimport MuiCard, { CardProps as MuiCardProps } from '@mui/material/Card';\nimport MuiCardContent, { CardContentProps } from '@mui/material/CardContent';\nimport MuiCardHeader, { CardHeaderProps } from '@mui/material/CardHeader';\nimport MuiCardActions, { CardActionsProps } from '@mui/material/CardActions';\nimport MuiCardMedia, { CardMediaProps as MuiCardMediaProps } from '@mui/material/CardMedia';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport { styled } from '@mui/material/styles';\n\nexport type CardMediaProps = MuiCardMediaProps;\nexport const CardMedia: React.FC<CardMediaProps> = (props) => <MuiCardMedia {...props} />;\n\nexport type CardVariant = 'standard' | 'tinted' | 'outlined';\n\nexport interface CardProps extends Omit<MuiCardProps, 'variant'> {\n /** Visual treatment. @default 'standard' */\n variant?: CardVariant;\n hoverable?: boolean;\n /**\n * Opt the card into being a real interactive element. When combined with\n * `onClick`, the root renders via MUI ButtonBase — focusable button,\n * Enter/Space activation, `:focus-visible` ring. When `clickable` is set\n * without `onClick`, only the pointer cursor changes (back-compat).\n *\n * `<Card onClick={...}>` WITHOUT `clickable` keeps a `<div>` root and just\n * forwards the click handler, so consumers using onClick for analytics or\n * non-clickable side effects are not silently turned into buttons.\n */\n clickable?: boolean;\n}\n\nconst StyledCard = styled(MuiCard, {\n shouldForwardProp: (prop) =>\n prop !== 'hoverable' && prop !== 'clickable' && prop !== 'dsVariant' && prop !== 'asButton',\n})<{ hoverable?: boolean; clickable?: boolean; dsVariant: CardVariant; asButton?: boolean }>(\n ({ theme, hoverable, clickable, dsVariant, asButton }) => ({\n borderRadius: 8,\n transition: 'all 0.2s ease-in-out',\n ...(dsVariant === 'standard' && {\n boxShadow: theme.shadows[1],\n backgroundColor: theme.palette.background.paper,\n }),\n ...(dsVariant === 'tinted' && {\n boxShadow: 'none',\n backgroundColor: theme.palette.action.hover,\n border: `1px solid ${theme.palette.divider}`,\n }),\n ...(dsVariant === 'outlined' && {\n boxShadow: 'none',\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n }),\n ...((clickable || asButton) && {\n cursor: 'pointer',\n }),\n ...(asButton && {\n // Neutralise ButtonBase defaults (inline-flex + center alignment) so the\n // card lays out exactly like a non-clickable Card. We render as a column\n // flex so consumers can still stack GradientSurface + meta inside.\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'flex-start',\n width: '100%',\n textAlign: 'left',\n verticalAlign: 'top',\n font: 'inherit',\n color: 'inherit',\n padding: 0,\n '&:focus-visible': {\n outline: 'none',\n boxShadow: '0 0 0 4px rgba(170,68,242,0.25)',\n },\n }),\n ...(hoverable && {\n '&:hover': {\n boxShadow: theme.shadows[4],\n transform: 'translateY(-2px)',\n },\n }),\n }),\n);\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(function Card(\n { variant = 'standard', hoverable = false, clickable = false, onClick, children, ...props },\n ref,\n) {\n // Only render as a real button when the consumer EXPLICITLY opts in via\n // `clickable` AND wires an onClick. Inferring from onClick alone would\n // silently turn analytics-tracking cards into <button>s with role=button\n // and break nested forms/links.\n const asButton = clickable && typeof onClick === 'function';\n return (\n <StyledCard\n ref={ref as React.Ref<HTMLDivElement>}\n dsVariant={variant}\n hoverable={hoverable}\n clickable={clickable}\n asButton={asButton}\n // MUI Card accepts a 'variant' prop too (elevation | outlined); we always\n // drive visual via dsVariant + box-shadow, so suppress MUI's default border.\n variant=\"elevation\"\n onClick={onClick}\n // When clickable, render the root as a focusable button so the entire\n // card becomes a real interactive element instead of needing an overlay.\n {...(asButton ? { component: ButtonBase } : {})}\n {...props}\n >\n {children}\n </StyledCard>\n );\n});\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n function CardContent(props, ref) {\n return <MuiCardContent ref={ref} {...props} />;\n },\n);\n\nexport const CardHeader: React.FC<CardHeaderProps> = (props) => {\n return <MuiCardHeader {...props} />;\n};\n\nexport const CardActions: React.FC<CardActionsProps> = (props) => {\n return <MuiCardActions {...props} />;\n};\n","export { Typography } from '@mui/material';\nexport type { TypographyProps } from '@mui/material';\n\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,OAAO,aAA4C;AACnD,OAAO,oBAA0C;AACjD,OAAO,mBAAwC;AAC/C,OAAO,oBAA0C;AACjD,OAAO,kBAA2D;AAClE,OAAO,gBAAgB;AACvB,SAAS,cAAc;AAGuC;AAAvD,IAAM,YAAsC,CAAC,UAAU,oBAAC,gBAAc,GAAG,OAAO;AAqBvF,IAAM,aAAa,OAAO,SAAS;AAAA,EACjC,mBAAmB,CAAC,SAClB,SAAS,eAAe,SAAS,eAAe,SAAS,eAAe,SAAS;AACrF,CAAC;AAAA,EACC,CAAC,EAAE,OAAO,WAAW,WAAW,WAAW,SAAS,OAAO;AAAA,IACzD,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,GAAI,cAAc,cAAc;AAAA,MAC9B,WAAW,MAAM,QAAQ,CAAC;AAAA,MAC1B,iBAAiB,MAAM,QAAQ,WAAW;AAAA,IAC5C;AAAA,IACA,GAAI,cAAc,YAAY;AAAA,MAC5B,WAAW;AAAA,MACX,iBAAiB,MAAM,QAAQ,OAAO;AAAA,MACtC,QAAQ,aAAa,MAAM,QAAQ,OAAO;AAAA,IAC5C;AAAA,IACA,GAAI,cAAc,cAAc;AAAA,MAC9B,WAAW;AAAA,MACX,iBAAiB,MAAM,QAAQ,WAAW;AAAA,MAC1C,QAAQ,aAAa,MAAM,QAAQ,OAAO;AAAA,IAC5C;AAAA,IACA,IAAK,aAAa,aAAa;AAAA,MAC7B,QAAQ;AAAA,IACV;AAAA,IACA,GAAI,YAAY;AAAA;AAAA;AAAA;AAAA,MAId,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,eAAe;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,mBAAmB;AAAA,QACjB,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,GAAI,aAAa;AAAA,MACf,WAAW;AAAA,QACT,WAAW,MAAM,QAAQ,CAAC;AAAA,QAC1B,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,OAAO,MAAM,WAAmC,SAASA,MACpE,EAAE,UAAU,YAAY,YAAY,OAAO,YAAY,OAAO,SAAS,UAAU,GAAG,MAAM,GAC1F,KACA;AAKA,QAAM,WAAW,aAAa,OAAO,YAAY;AACjD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MAGA,SAAQ;AAAA,MACR;AAAA,MAGC,GAAI,WAAW,EAAE,WAAW,WAAW,IAAI,CAAC;AAAA,MAC5C,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ,CAAC;AAEM,IAAM,cAAc,MAAM;AAAA,EAC/B,SAASC,aAAY,OAAO,KAAK;AAC/B,WAAO,oBAAC,kBAAe,KAAW,GAAG,OAAO;AAAA,EAC9C;AACF;AAEO,IAAM,aAAwC,CAAC,UAAU;AAC9D,SAAO,oBAAC,iBAAe,GAAG,OAAO;AACnC;AAEO,IAAM,cAA0C,CAAC,UAAU;AAChE,SAAO,oBAAC,kBAAgB,GAAG,OAAO;AACpC;;;AC7HA,SAAS,kBAAkB;","names":["Card","CardContent"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-L2TIGA7I.js","../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"],"names":["Chip","styled","React","StatusLabel","Box","jsx","CircularProgress"],"mappings":"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","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-L2TIGA7I.js","sourcesContent":[null,"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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-MNM6HE72.js","../src/components/buttons/Button.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-MNM6HE72.js","sourcesContent":[null,"import React from 'react';\nimport MuiButton, { ButtonProps as MuiButtonProps } from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\nimport { deploymentSurfaceTokens, webSurfaceTokens, motion, borderRadius } from '../../theme';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary';\n\nexport type ButtonTone = 'default' | 'onGradient';\n\nexport interface ButtonProps extends Omit<MuiButtonProps, 'variant' | 'color'> {\n /**\n * The visual style variant of the button\n * - primary: Filled button with primary color background\n * - secondary: Outlined button with transparent background and border\n * - tertiary: Text button with no background or border\n */\n variant?: ButtonVariant;\n /**\n * Tone overlay. When set, **replaces** the per-variant styling — `variant`\n * is ignored. Today the only non-default tone is `onGradient`, which paints\n * the button as a white pill on a dark gradient surface (banner CTA\n * pattern). Use the default tone if you want `variant` to drive the look.\n * @default 'default'\n */\n tone?: ButtonTone;\n /**\n * The size of the button\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * Icon element to display before the button text\n */\n startIcon?: React.ReactNode;\n /**\n * Icon element to display after the button text\n */\n endIcon?: React.ReactNode;\n}\n\n// Design system constants matching Figma specs\nconst BUTTON_SPACING = {\n borderRadius: '8px',\n padding: '8px 16px',\n iconMargin: '8px',\n} as const;\n\nconst BUTTON_TYPOGRAPHY = {\n fontSize: '16px',\n fontWeight: 500,\n lineHeight: 1.5,\n letterSpacing: '0.8px',\n} as const;\n\nconst StyledPrimaryButton = styled(MuiButton)(({ theme }) => ({\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.primary.light,\n },\n '&:active': {\n backgroundColor: theme.palette.primary.dark,\n },\n '&:disabled': {\n backgroundColor: theme.palette.grey[300],\n color: theme.palette.grey[500],\n },\n}));\n\nconst iconStyles = {\n '& > *': {\n fontSize: BUTTON_TYPOGRAPHY.fontSize,\n },\n};\n\nconst StyledSecondaryButton = styled(MuiButton)(({ theme }) => ({\n backgroundColor: deploymentSurfaceTokens.surfaceHigh,\n color: deploymentSurfaceTokens.textPrimary,\n border: `1px solid ${deploymentSurfaceTokens.strokeOutside}`,\n borderRadius: BUTTON_SPACING.borderRadius,\n padding: BUTTON_SPACING.padding,\n textTransform: 'capitalize',\n letterSpacing: BUTTON_TYPOGRAPHY.letterSpacing,\n fontSize: BUTTON_TYPOGRAPHY.fontSize,\n fontWeight: BUTTON_TYPOGRAPHY.fontWeight,\n lineHeight: BUTTON_TYPOGRAPHY.lineHeight,\n '&:hover': {\n backgroundColor: theme.palette.background.selected,\n borderColor: deploymentSurfaceTokens.strokeOutside,\n },\n '&:active': {\n backgroundColor: theme.palette.background.selected,\n borderColor: deploymentSurfaceTokens.borderDefault,\n },\n '&:disabled': {\n borderColor: theme.palette.grey[300],\n color: theme.palette.grey[500],\n backgroundColor: theme.palette.grey[50],\n },\n '& .MuiButton-startIcon': {\n marginRight: BUTTON_SPACING.iconMargin,\n ...iconStyles,\n },\n '& .MuiButton-endIcon': {\n marginLeft: BUTTON_SPACING.iconMargin,\n ...iconStyles,\n },\n}));\n\nconst StyledTertiaryButton = styled(MuiButton)(({ theme }) => ({\n backgroundColor: 'transparent',\n color: theme.palette.warning.main,\n '&:hover': {\n backgroundColor: 'rgba(245, 158, 11, 0.1)',\n },\n '&:active': {\n backgroundColor: 'rgba(245, 158, 11, 0.2)',\n },\n '&:disabled': {\n color: theme.palette.grey[500],\n },\n}));\n\n/**\n * Tone overlay: white pill on a dark gradient surface (banner CTA).\n * Applied via a wrapper component that takes precedence over per-variant\n * background/border styles by ordering after the variant styles.\n */\nconst StyledOnGradientButton = styled(MuiButton)({\n backgroundColor: 'white',\n color: webSurfaceTokens.robNearBlack2,\n border: 'none',\n borderRadius: `${borderRadius.pill}px`,\n padding: '10px 18px',\n fontWeight: 500,\n fontSize: '14px',\n textTransform: 'none',\n letterSpacing: '0.2px',\n transition: `transform ${motion.dur.fast} ${motion.ease.standard}`,\n boxShadow: 'none',\n '&:hover': {\n backgroundColor: 'white',\n transform: 'translateX(2px)',\n boxShadow: 'none',\n },\n '&:focus-visible': {\n outline: 'none',\n boxShadow: webSurfaceTokens.shadowFocus,\n },\n '& .MuiButton-startIcon': {\n marginRight: BUTTON_SPACING.iconMargin,\n ...iconStyles,\n },\n '& .MuiButton-endIcon': {\n marginLeft: BUTTON_SPACING.iconMargin,\n ...iconStyles,\n },\n});\n\nconst BUTTON_COMPONENTS: Record<ButtonVariant, React.ComponentType<any>> = {\n primary: StyledPrimaryButton,\n secondary: StyledSecondaryButton,\n tertiary: StyledTertiaryButton,\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n tone = 'default',\n children,\n startIcon,\n endIcon,\n ...props\n },\n ref,\n) {\n const ButtonComponent =\n tone === 'onGradient' ? StyledOnGradientButton : BUTTON_COMPONENTS[variant];\n const buttonProps = {\n ...props,\n startIcon,\n endIcon,\n };\n\n return (\n <ButtonComponent ref={ref} {...buttonProps}>\n {children}\n </ButtonComponent>\n );\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-NXTVJ6PY.js","../src/components/icons/ActivityAppIcon.tsx","../src/components/icons/BarTrackingIcon.tsx","../src/components/icons/CloudFlashIcon.tsx","../src/components/icons/DecentralizedServerIcon.tsx","../src/components/icons/DiscordIcon.tsx","../src/components/icons/GithubLogoIcon.tsx","../src/components/icons/StorageAppIcon.tsx"],"names":["memo","jsxs","SvgIcon","jsx"],"mappings":"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","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-NXTVJ6PY.js","sourcesContent":[null,"import { memo } from 'react';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\nexport const ActivityAppIcon = memo((props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 36 36\">\n <rect fill=\"none\" stroke=\"currentColor\" width={34} height={34} x={1} y={1} strokeWidth={1.5} rx={6.8} />\n <rect\n fill=\"none\"\n stroke=\"currentColor\"\n width={6.277}\n height={11.018}\n x={6.771}\n y={18.267}\n strokeWidth={1.5}\n rx={1.7}\n />\n <rect\n fill=\"none\"\n stroke=\"currentColor\"\n width={6.277}\n height={22.57}\n x={14.861}\n y={6.714}\n strokeWidth={1.5}\n rx={1.7}\n />\n <rect\n fill=\"none\"\n stroke=\"currentColor\"\n width={6.277}\n height={16.872}\n x={22.949}\n y={12.414}\n strokeWidth={1.5}\n rx={1.7}\n />\n </SvgIcon>\n));\n","import { memo } from 'react';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\nexport const BarTrackingIcon = memo((props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 96 97\">\n <rect\n x=\"7.19922\"\n y=\"7.70312\"\n width=\"81.6\"\n height=\"81.6\"\n rx=\"16.32\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n fill=\"none\"\n />\n <rect\n x=\"21.0371\"\n y=\"49.1426\"\n width=\"15.0657\"\n height=\"26.4441\"\n rx=\"4.08\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <rect\n x=\"40.4746\"\n y=\"21.4297\"\n width=\"15.0657\"\n height=\"54.1691\"\n rx=\"4.08\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <rect\n x=\"59.8828\"\n y=\"35.0859\"\n width=\"15.0657\"\n height=\"40.4922\"\n rx=\"4.08\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n </SvgIcon>\n));\n","import { memo } from 'react';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\nexport const CloudFlashIcon = memo((props: SvgIconProps) => (\n <SvgIcon {...props} fill=\"none\" viewBox=\"0 0 96 97\">\n <path\n d=\"M18.8029 43.3396V43.2933H19.8029C20.3752 43.2933 20.9384 43.328 21.4908 43.3937C21.9111 39.4438 22.9817 34.2181 25.6601 29.8138C28.6259 24.937 33.5595 21.0898 41.5689 21.0898C46.9417 21.0898 50.8839 22.9055 53.7292 25.6773C56.5498 28.4249 58.2303 32.0495 59.2307 35.5901C60.1768 38.9386 60.5315 42.2718 60.6446 44.8476C60.891 44.4671 61.1651 44.0792 61.4696 43.691C63.7235 40.8178 67.6089 37.9824 74.0317 37.9824C77.222 37.9824 79.8196 38.6871 81.9219 39.7574L81.9232 39.7581C86.8327 42.2671 89.793 47.4136 89.793 52.8846V54.7368C89.793 65.644 80.9404 74.4889 70.0269 74.4889H18.865C11.867 74.4889 6.19295 68.8202 6.19295 61.8256V57.184C6.19295 49.9845 11.6911 43.8799 18.8029 43.3396Z\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeWidth=\"2\"\n />\n <path\n d=\"M79.1804 45.7001C79.1804 45.7001 60.7908 47.259 60.7908 10.0898C60.7908 10.0898 60.9856 45.7768 43.1934 45.7768C43.1934 45.7768 61.1933 48.1151 61.1933 67.6899C61.1933 67.6899 61.1933 45.7001 79.1934 45.7001H79.1804Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n </SvgIcon>\n));\n","import { memo } from 'react';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\nexport const DecentralizedServerIcon = memo((props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 96 97\">\n <path\n d=\"M14.5706 15.0858L48.016 8.29688L81.3694 15.0858L88.2242 48.3742L81.3694 81.6556L48.016 88.4445L14.5706 81.6556L7.80078 48.3742L14.5706 15.0858Z\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M48.0118 11.2609C49.6622 11.2609 51.0001 9.92755 51.0001 8.28279C51.0001 6.63803 49.6622 5.30469 48.0118 5.30469C46.3614 5.30469 45.0234 6.63803 45.0234 8.28279C45.0234 9.92755 46.3614 11.2609 48.0118 11.2609Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M48.0118 91.4132C49.6622 91.4132 51.0001 90.0799 51.0001 88.4351C51.0001 86.7904 49.6622 85.457 48.0118 85.457C46.3614 85.457 45.0234 86.7904 45.0234 88.4351C45.0234 90.0799 46.3614 91.4132 48.0118 91.4132Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.79304 51.339C9.44346 51.339 10.7814 50.0057 10.7814 48.3609C10.7814 46.7162 9.44346 45.3828 7.79304 45.3828C6.14262 45.3828 4.80469 46.7162 4.80469 48.3609C4.80469 50.0057 6.14262 51.339 7.79304 51.339Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M88.2247 51.339C89.8751 51.339 91.213 50.0057 91.213 48.3609C91.213 46.7162 89.8751 45.3828 88.2247 45.3828C86.5743 45.3828 85.2363 46.7162 85.2363 48.3609C85.2363 50.0057 86.5743 51.339 88.2247 51.339Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M81.3477 18.0539C82.9982 18.0539 84.3361 16.7205 84.3361 15.0758C84.3361 13.431 82.9982 12.0977 81.3477 12.0977C79.6973 12.0977 78.3594 13.431 78.3594 15.0758C78.3594 16.7205 79.6973 18.0539 81.3477 18.0539Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14.5508 84.6203C16.2013 84.6203 17.5392 83.2869 17.5392 81.6422C17.5392 79.9974 16.2013 78.6641 14.5508 78.6641C12.9004 78.6641 11.5625 79.9974 11.5625 81.6422C11.5625 83.2869 12.9004 84.6203 14.5508 84.6203Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M81.3477 84.6203C82.9982 84.6203 84.3361 83.2869 84.3361 81.6422C84.3361 79.9974 82.9982 78.6641 81.3477 78.6641C79.6973 78.6641 78.3594 79.9974 78.3594 81.6422C78.3594 83.2869 79.6973 84.6203 81.3477 84.6203Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14.5508 18.0539C16.2013 18.0539 17.5392 16.7205 17.5392 15.0758C17.5392 13.431 16.2013 12.0977 14.5508 12.0977C12.9004 12.0977 11.5625 13.431 11.5625 15.0758C11.5625 16.7205 12.9004 18.0539 14.5508 18.0539Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinejoin=\"round\"\n />\n <rect\n x=\"22.623\"\n y=\"27.332\"\n width=\"51.0819\"\n height=\"13.888\"\n rx=\"4.77987\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <rect\n x=\"22.623\"\n y=\"41.4062\"\n width=\"51.0819\"\n height=\"13.888\"\n rx=\"4.77987\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <rect\n x=\"22.623\"\n y=\"55.3125\"\n width=\"51.0819\"\n height=\"13.888\"\n rx=\"4.77987\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <path\n d=\"M29.612 37.1542C31.2803 37.1542 32.634 35.8026 32.634 34.1337C32.634 32.4649 31.2803 31.1133 29.612 31.1133C27.9437 31.1133 26.5901 32.4649 26.5901 34.1337C26.5901 35.8026 27.9437 37.1542 29.612 37.1542Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n />\n <path\n d=\"M40.3464 37.1542C42.0147 37.1542 43.3684 35.8026 43.3684 34.1337C43.3684 32.4649 42.0147 31.1133 40.3464 31.1133C38.6782 31.1133 37.3245 32.4649 37.3245 34.1337C37.3245 35.8026 38.6782 37.1542 40.3464 37.1542Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n />\n <path\n d=\"M51.0808 37.1542C52.7491 37.1542 54.1028 35.8026 54.1028 34.1337C54.1028 32.4649 52.7491 31.1133 51.0808 31.1133C49.4125 31.1133 48.0588 32.4649 48.0588 34.1337C48.0588 35.8026 49.4125 37.1542 51.0808 37.1542Z\"\n fill=\"white\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n />\n </SvgIcon>\n));\n","import { memo } from 'react';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\nexport const DiscordIcon = memo((props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 15 12\">\n <path\n fill=\"currentColor\"\n d=\"M12.589 1.56A11.64 11.64 0 0 0 9.685.667a7.977 7.977 0 0 0-.372.756 10.813 10.813 0 0 0-3.222 0 8.01 8.01 0 0 0-.372-.756c-1.003.17-1.98.472-2.906.895C.976 4.281.477 6.932.727 9.546c1.076.795 2.28 1.4 3.56 1.787.289-.388.544-.799.763-1.23a7.575 7.575 0 0 1-1.2-.573c.1-.073.198-.148.294-.221a8.365 8.365 0 0 0 7.12 0c.096.078.195.154.294.221a7.602 7.602 0 0 1-1.203.575c.219.43.474.841.762 1.228a11.65 11.65 0 0 0 3.564-1.786c.292-3.031-.5-5.658-2.092-7.987ZM5.366 7.938c-.694 0-1.268-.63-1.268-1.404 0-.775.554-1.41 1.266-1.41.711 0 1.28.635 1.268 1.41-.012.774-.559 1.404-1.266 1.404Zm4.676 0c-.696 0-1.267-.63-1.267-1.404 0-.775.554-1.41 1.267-1.41.713 0 1.277.635 1.265 1.41-.012.774-.558 1.404-1.265 1.404Z\"\n />\n </SvgIcon>\n));\n","import { memo } from 'react';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\nexport const GithubLogoIcon = memo((props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 17 16\" sx={{ fill: 'none' }}>\n <path\n d=\"M8.79754 0C4.268 0 0.595032 3.67233 0.595032 8.20251C0.595032 11.8267 2.9453 14.9013 6.20443 15.9859C6.61435 16.0618 6.76488 15.808 6.76488 15.5913C6.76488 15.3957 6.75723 14.7495 6.75375 14.0642C4.47174 14.5603 3.99022 13.0964 3.99022 13.0964C3.61711 12.1483 3.07949 11.8962 3.07949 11.8962C2.33531 11.3871 3.13559 11.3975 3.13559 11.3975C3.95928 11.4554 4.393 12.2428 4.393 12.2428C5.12457 13.4968 6.31186 13.1343 6.77993 12.9247C6.85353 12.3945 7.06614 12.0327 7.30069 11.8279C5.47884 11.6204 3.56358 10.9171 3.56358 7.77413C3.56358 6.87865 3.88401 6.14688 4.40876 5.57247C4.32359 5.36584 4.04285 4.5316 4.48821 3.40175C4.48821 3.40175 5.177 3.18129 6.74449 4.24256C7.39873 4.06076 8.10045 3.96967 8.79754 3.96658C9.49463 3.96967 10.1969 4.06076 10.8524 4.24256C12.418 3.18129 13.1059 3.40175 13.1059 3.40175C13.5523 4.5316 13.2714 5.36584 13.1863 5.57247C13.7122 6.14688 14.0304 6.87858 14.0304 7.77413C14.0304 10.9245 12.1116 11.6183 10.2851 11.8213C10.5793 12.0759 10.8414 12.5751 10.8414 13.3403C10.8414 14.4378 10.8319 15.3211 10.8319 15.5913C10.8319 15.8096 10.9795 16.0654 11.3954 15.9848C14.6527 14.899 17 11.8254 17 8.20251C17 3.67233 13.3275 0 8.79754 0Z\"\n fill=\"white\"\n />\n <path\n d=\"M3.66696 11.6845C3.64895 11.7252 3.58474 11.7374 3.5264 11.7095C3.46689 11.6828 3.43344 11.6272 3.45274 11.5863C3.47043 11.5443 3.53463 11.5326 3.59401 11.5608C3.65364 11.5875 3.68761 11.6436 3.66696 11.6845ZM4.07044 12.0445C4.03133 12.0808 3.95484 12.0639 3.90292 12.0066C3.84927 11.9494 3.83924 11.873 3.87893 11.8361C3.91926 11.7999 3.99344 11.8168 4.04722 11.8741C4.10087 11.9319 4.11129 12.0079 4.07038 12.0446M4.34726 12.5051C4.29695 12.54 4.21474 12.5073 4.16398 12.4343C4.11374 12.3615 4.11374 12.274 4.16507 12.2389C4.21602 12.2038 4.29695 12.2354 4.34842 12.3077C4.39859 12.3819 4.39859 12.4694 4.34719 12.5052M4.81533 13.0386C4.77036 13.0881 4.67464 13.0749 4.60452 13.0072C4.53285 12.9411 4.51285 12.8472 4.55794 12.7976C4.60342 12.748 4.69973 12.7619 4.77036 12.829C4.84158 12.895 4.86332 12.9896 4.81539 13.0386M5.4203 13.2187C5.40055 13.2829 5.3083 13.3121 5.2154 13.2849C5.12264 13.2568 5.06191 13.1815 5.08063 13.1166C5.09993 13.0519 5.19257 13.0215 5.28617 13.0507C5.37881 13.0787 5.43966 13.1534 5.42036 13.2187M6.1089 13.2951C6.11121 13.3628 6.03241 13.4189 5.93488 13.4201C5.83678 13.4222 5.75746 13.3675 5.75643 13.3009C5.75643 13.2326 5.83343 13.177 5.93147 13.1754C6.029 13.1735 6.1089 13.2279 6.1089 13.2951ZM6.78527 13.2692C6.79698 13.3352 6.72918 13.403 6.63236 13.421C6.53715 13.4384 6.44901 13.3976 6.43686 13.3322C6.42502 13.2645 6.49411 13.1968 6.58913 13.1792C6.68614 13.1624 6.77292 13.2021 6.78527 13.2692Z\"\n fill=\"white\"\n />\n </SvgIcon>\n));\n","import { memo } from 'react';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\nexport const StorageAppIcon = memo((props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 38 29\" fill=\"none\">\n <path\n d=\"M6.25415 13.3371V13.2515H7.25415C7.31809 13.2515 7.38176 13.2524 7.44516 13.2543C7.66366 11.6446 8.14354 9.64623 9.19625 7.91521C10.5234 5.73296 12.756 4 16.3233 4C18.7076 4 20.4981 4.81149 21.7972 6.07693C23.0714 7.31823 23.8108 8.93436 24.2437 10.4665C24.4895 11.3363 24.6426 12.2007 24.7362 12.9909C25.8141 11.9297 27.4506 11.0385 29.8495 11.0385C31.2681 11.0385 32.4415 11.3528 33.4017 11.8416L33.4031 11.8423C35.655 12.9932 37 15.3454 37 17.8312V18.6029C37 23.4701 33.0499 27.4163 28.1808 27.4163H6.86335C3.62577 27.4163 1 24.7935 1 21.5565V19.6226C1 16.5122 3.24401 13.8341 6.25415 13.3371Z\"\n stroke=\"#5865F2\"\n strokeWidth=\"2\"\n fill=\"none\"\n />\n <path\n d=\"M31.9946 14.8376C31.9946 14.8376 24.3322 15.4871 24.3322 0C24.3322 0 24.4134 14.8696 17 14.8696C17 14.8696 24.5 15.8438 24.5 24C24.5 24 24.5 14.8376 32 14.8376H31.9946Z\"\n fill=\"white\"\n stroke=\"#5865F2\"\n strokeWidth=\"1.5\"\n />\n </SvgIcon>\n));\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/theme/primitives.ts","../src/theme/webSurfaceTokens.ts","../src/theme/motion.ts","../src/theme/typography.ts"],"sourcesContent":["/**\n * Tier 1: Primitive color tokens.\n *\n * Raw color values organized by hue and shade. These form the palette\n * from which semantic tokens are composed.\n *\n * Components should NOT import primitives directly; use semantic tokens\n * or theme.palette instead.\n */\n\nexport const primitives = {\n /**\n * Cere brand violet — the company's primary action color across web\n * surfaces. Use via `semantic.action.primary` rather than reaching for\n * raw hex.\n */\n violet: {\n 100: '#f0e0fb',\n 300: '#d0bcff',\n 500: '#aa44f2',\n 600: '#7c59ac',\n },\n /** Legacy MUI blue. Retained for code paths that still reach for blue tokens by name (e.g. ROB highlights). Not the brand primary. */\n blue: {\n 500: '#1976d2',\n 600: '#1565c0',\n },\n /** Material Design grey scale */\n grey: {\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#EEEEEE',\n 300: '#E0E0E0',\n 400: '#BDBDBD',\n 500: '#9E9E9E',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n },\n /** Neutral greys used for text and secondary UI (non-standard scale) */\n neutral: {\n 300: '#333333',\n 600: '#666666',\n 900: '#999999',\n },\n green: {\n 400: '#34D399',\n 500: '#10B981',\n 600: '#059669',\n },\n red: {\n 400: '#F87171',\n 500: '#EF4444',\n 600: '#DC2626',\n },\n amber: {\n 400: '#FBBF24',\n 500: '#F59E0B',\n 600: '#D97706',\n },\n white: '#FFFFFF',\n black: '#000000',\n nearBlack: '#1A1A1A',\n} as const;\n\n/**\n * ROB primary brand colors (Figma node 11-1393).\n */\nexport const robPrimaryPalette = {\n fandango: '#BD32A7',\n electricViolet: '#8B00EC',\n ultraViolet: '#6750A4',\n periwinkle: '#D0BCFF',\n} as const;\n\n/**\n * ROB extended palette with gradient shades and secondary accents\n * (Figma node 11-1447).\n */\nexport const robPaletteExtended = {\n dark1: '#280e61',\n dark2: '#531584',\n dark3: '#710c7a',\n dark4: '#920269',\n dark5: '#c71454',\n dark6: '#ff6341',\n bright1: '#5311e3',\n bright2: '#eb03ff',\n bright3: '#ff17ab',\n bright4: '#ff6a85',\n light1: '#baa0f4',\n light2: '#d399fc',\n light3: '#f79aff',\n light4: '#faabde',\n light5: '#ffc4ce',\n nearBlack1: '#0b0f18',\n nearBlack2: '#0d0627',\n nearBlack3: '#161d30',\n nearBlack4: '#23194b',\n} as const;\n\n/**\n * Deployment dashboard entity colors (Figma 11-2105).\n */\nexport const deploymentEntityColors = {\n workspace: '#aa44f2',\n stream: '#53b96a',\n deployment: '#eeb510',\n engagement: '#f941e6',\n agent: '#77c3ff',\n} as const;\n\n/**\n * Deployment dashboard status colors (Figma 11-2105).\n */\nexport const deploymentStatusColors = {\n normal: '#53b96a',\n warning: '#eeb510',\n error: '#ef5059',\n disabled: '#ffffff',\n disabledDim: '#ded8e1',\n} as const;\n\n/**\n * Workflow node color families (Figma 277-8244).\n *\n * Each node type has an accent color plus tints/shades for card borders,\n * badge backgrounds, badge borders, and badge text. These are hand-picked\n * Figma values, not algorithmically derived.\n */\nexport const workflowNodeColors = {\n start: { accent: '#00C950', cardBorder: '#7BF1A8', badgeBg: '#F0FDF4', badgeBorder: '#B9F8CF', badgeText: '#008236' },\n input: { accent: '#00A6F4', cardBorder: '#74D4FF', badgeBg: '#F0F9FF', badgeBorder: '#B8E6FE', badgeText: '#0069A8' },\n stream: { accent: '#00B8DB', cardBorder: '#53EAFD', badgeBg: '#ECFEFF', badgeBorder: '#A2F4FD', badgeText: '#007595' },\n rafts: { accent: '#FF6900', cardBorder: '#FFB86A', badgeBg: '#FFF7ED', badgeBorder: '#FFD6A8', badgeText: '#CA3500' },\n cubbies: { accent: '#D0C900', cardBorder: '#D0C900', badgeBg: '#FCFFED', badgeBorder: '#D0C900', badgeText: '#747500' },\n events: { accent: '#F6339A', cardBorder: '#FDA5D5', badgeBg: '#FDF2F8', badgeBorder: '#FCCEE8', badgeText: '#C6005C' },\n trigger: { accent: '#AD46FF', cardBorder: '#DAB2FF', badgeBg: '#FAF5FF', badgeBorder: '#E9D4FF', badgeText: '#8200DB' },\n action: { accent: '#2B7FFF', cardBorder: '#8EC5FF', badgeBg: '#EFF6FF', badgeBorder: '#BEDBFF', badgeText: '#1447E6' },\n aiModel: { accent: '#615FFF', cardBorder: '#A3B3FF', badgeBg: '#EEF2FF', badgeBorder: '#C6D2FF', badgeText: '#432DD7' },\n aiAgent: { accent: '#D0A2FB', cardBorder: '#D0A2FB', badgeBg: '#F8EEFF', badgeBorder: '#D9BCF3', badgeText: '#9F40F8' },\n condition: { accent: '#FE9A00', cardBorder: '#FFD230', badgeBg: '#FFFBEB', badgeBorder: '#FEE685', badgeText: '#BB4D00' },\n output: { accent: '#00BC7D', cardBorder: '#5EE9B5', badgeBg: '#ECFDF5', badgeBorder: '#A4F4CF', badgeText: '#007A55' },\n end: { accent: '#FB2C36', cardBorder: '#FFA2A2', badgeBg: '#FEF2F2', badgeBorder: '#FFC9C9', badgeText: '#C10007' },\n parallel: { accent: '#14B8A6', cardBorder: '#5EEAD4', badgeBg: '#F0FDFA', badgeBorder: '#99F6E4', badgeText: '#0F766E' },\n merge: { accent: '#6366F1', cardBorder: '#A5B4FC', badgeBg: '#EEF2FF', badgeBorder: '#C7D2FE', badgeText: '#4338CA' },\n} as const;\n\n/**\n * Shared workflow chrome UI colors (Figma 277-8244).\n *\n * Colors used across workflow top bar, time bar, side inspector, and node\n * title/description text. Extracted here so component files stay hex-free.\n */\nexport const workflowChromeColors = {\n inputBg: '#D8D4DD',\n inputBorder: '#A855F7',\n labelText: '#6A7282',\n iconColor: '#4A4458',\n buttonPrimary: '#B65FF4',\n buttonHover: '#A855F7',\n buttonActive: '#9333EA',\n closeBtnBg: '#9E9EAE',\n progressBg: '#CEC6D8',\n stepBtnBg: '#F5F1F7',\n stepBtnBgHover: '#E7E0EC',\n divider: '#D6CEDD',\n mutedText: '#938F99',\n titleText: '#1E2939',\n descriptionText: '#6A7282',\n} as const;\n\n/**\n * Deployment surface primitives (Figma deployment dashboard).\n *\n * Raw hex values for the deployment surface tokens. semantic.ts maps\n * these to named surface/stroke tokens.\n */\nexport const deploymentSurface = {\n surfaceHigh: '#fefcff',\n strokeOutside: '#e6e6e6',\n borderDefault: '#cdcccd',\n textPrimary: '#1d1b20',\n textSecondary: '#818083',\n accentBlue: '#5865f2',\n hoverLight: '#F0F1FF',\n highlightBg: '#f5f6ff',\n highlightBgHover: '#eceeff',\n highlightBorder: '#cbcffb',\n switchGreen: '#53b96a',\n switchTrackOff: '#e0e0e0',\n} as const;\n\n/**\n * Workflow connection/edge colors (Figma 277-8244).\n */\nexport const workflowConnectionColors = {\n success: '#22C55E',\n process: '#3B82F6',\n stream: '#06B6D4',\n error: '#EF4444',\n} as const;\n","/**\n * Web surface tokens (marketplace-aligned v2 product palette).\n *\n * Source of truth for the colors/surfaces/strokes/shadows used by the\n * marketplace UI and any other web product surface that shares this look.\n * Emitted as `:root` CSS custom properties via `tokens.css` so consumers\n * stop hand-declaring them in their own `globals.css`.\n *\n * Distinct from `deploymentSurfaceTokens` (deployment dashboard), which has\n * its own design language and predates this surface.\n */\n\nimport { robPrimaryPalette, robPaletteExtended } from './primitives';\n\nexport const webSurfaceTokens = {\n // Brand violet (web product primary)\n cViolet: '#aa44f2',\n cVioletTint: '#a54aff',\n cVioletLight: '#f0e0fb',\n cVioletDark: '#7c59ac',\n\n // Brand accents\n cPink: '#f941e6',\n cPinkLight: '#fcdff9',\n cRed: '#ff4f59',\n cGreen: '#49bf63',\n cBlueLight: '#e7f4fe',\n cBlueDark: '#598ab8',\n\n // ROB extended palette (re-exported with stable web-token names)\n robFandango: robPrimaryPalette.fandango,\n robElectricViolet: robPrimaryPalette.electricViolet,\n robUltraViolet: robPrimaryPalette.ultraViolet,\n robPeriwinkle: robPrimaryPalette.periwinkle,\n robBright1: robPaletteExtended.bright1,\n robNearBlack2: robPaletteExtended.nearBlack2,\n robNearBlack4: robPaletteExtended.nearBlack4,\n\n // Surfaces\n surfaceLow: '#f5f1f7',\n surfaceMid: '#f5f1f7',\n surfaceHigh: '#fefcff',\n surfaceContrast: '#ffffff',\n\n // Backgrounds (semantic state surfaces)\n bgDefault: '#f5f5f5',\n bgDim: '#e6e0e9',\n bgSuccess: '#eef5f0',\n bgWarning: '#fef8e8',\n bgDanger: '#f9dedc',\n /**\n * Foreground text/icon color for content sitting ON a `bgDanger` surface.\n * NOT a surface color itself — do not use as backgroundColor. Pair with\n * `bgDanger` for the canonical danger alert look.\n */\n textOnDanger: '#8c1d18',\n\n // Text\n textPrimary: '#1d1b20',\n textSecondary: '#5f5c64',\n textMuted: '#938f99',\n textLink: '#aa44f2',\n\n // Strokes\n strokeOnLow: '#e6e0e9',\n strokeOnMed: '#dad1e0',\n\n // Shadows\n shadowSm: '0px 2px 8px rgba(0,0,0,0.04)',\n shadowMd: '0px 4px 20px rgba(0,0,0,0.05)',\n shadowFocus: '0 0 0 4px rgba(170,68,242,0.25)',\n} as const;\n\nexport type WebSurfaceTokenKey = keyof typeof webSurfaceTokens;\n","/**\n * Motion tokens: durations and easing curves.\n *\n * Marketplace-aligned. Consumed by component animations and emitted as\n * `--dur-*` / `--ease-*` CSS custom properties in `tokens.css`.\n */\n\nexport const motion = {\n dur: {\n /** Fast: ~120ms. Hover transitions, micro-interactions. */\n fast: '120ms',\n },\n ease: {\n /** Material-style standard easing. */\n standard: 'cubic-bezier(0.2, 0, 0, 1)',\n },\n} as const;\n","/**\n * Typography configuration for the design system.\n *\n * Defines font family, heading scales, body text, and utility variants.\n * Consumed by createTheme() in the theme barrel.\n */\n\nimport type { TypographyOptions } from '@mui/material/styles/createTypography';\nimport { webSurfaceTokens } from './webSurfaceTokens';\n\nexport const fontFamily =\n \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Human Sans', 'Nohemi', sans-serif\";\n\n/** Display font used for hero / banner headings. */\nexport const fontFamilyDisplay = \"'Inter', sans-serif\";\n\n/** Monospace stack used for codes, ids, copy fields. */\nexport const fontFamilyMono =\n 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace';\n\n/**\n * Custom typography variants needed by the marketplace web surface.\n *\n * Registered with MUI via module augmentation in `typography-augment.ts`\n * so `<Typography variant=\"eyebrow\">` is type-safe and styled out of the box.\n */\nexport const webTypographyVariants = {\n eyebrow: {\n fontFamily,\n fontSize: '11px',\n fontWeight: 700,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.12em',\n color: webSurfaceTokens.cVioletDark,\n },\n lede: {\n fontFamily,\n fontSize: '15.5px',\n lineHeight: 1.55,\n color: webSurfaceTokens.textPrimary,\n },\n panelTitle: {\n fontFamily: fontFamilyDisplay,\n fontSize: '19px',\n fontWeight: 500,\n letterSpacing: '-0.012em',\n color: webSurfaceTokens.textPrimary,\n },\n footnote: {\n fontFamily,\n fontSize: '12px',\n lineHeight: 1.5,\n color: webSurfaceTokens.textSecondary,\n },\n mono: {\n fontFamily: fontFamilyMono,\n fontSize: '11.5px',\n color: webSurfaceTokens.textSecondary,\n },\n bannerEyebrow: {\n fontFamily,\n fontSize: '11px',\n fontWeight: 800,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.18em',\n color: webSurfaceTokens.robPeriwinkle,\n },\n bannerTitle: {\n fontFamily: fontFamilyDisplay,\n fontSize: '40px',\n fontWeight: 600,\n lineHeight: 1.05,\n letterSpacing: '-0.025em',\n color: '#fff',\n },\n bannerBy: {\n fontFamily,\n fontSize: '13px',\n color: 'rgba(255,255,255,0.65)',\n margin: 0,\n },\n bannerDesc: {\n fontFamily,\n fontSize: '15px',\n lineHeight: 1.5,\n color: 'rgba(255,255,255,0.78)',\n margin: 0,\n },\n bannerMeta: {\n fontFamily: fontFamilyMono,\n fontSize: '12px',\n color: 'rgba(255,255,255,0.65)',\n },\n} as const;\n\nexport const typography: TypographyOptions = {\n fontFamily,\n h1: {\n fontWeight: 700,\n fontSize: '96px',\n lineHeight: 1.2,\n },\n h2: {\n fontWeight: 700,\n fontSize: '60px',\n lineHeight: 1.2,\n },\n h3: {\n fontWeight: 700,\n fontSize: '48px',\n lineHeight: 1.2,\n },\n h4: {\n fontWeight: 600,\n fontSize: '34px',\n lineHeight: 1.2,\n },\n h5: {\n fontWeight: 600,\n fontSize: '24px',\n lineHeight: 1.2,\n },\n h6: {\n fontWeight: 600,\n fontSize: '20px',\n lineHeight: 1.2,\n },\n subtitle1: {\n fontWeight: 700,\n fontSize: '16px',\n lineHeight: 1.5,\n },\n subtitle2: {\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: 1.5,\n },\n body1: {\n fontWeight: 400,\n fontSize: '16px',\n lineHeight: 1.5,\n },\n body2: {\n fontWeight: 400,\n fontSize: '14px',\n lineHeight: 1.5,\n },\n button: {\n fontWeight: 700,\n fontSize: '14px',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n },\n caption: {\n fontWeight: 400,\n fontSize: '12px',\n lineHeight: 1.5,\n },\n overline: {\n fontWeight: 800,\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '1px',\n },\n ...webTypographyVariants,\n};\n"],"mappings":"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","names":[]}
@@ -1,11 +0,0 @@
1
- // src/components/utilities/BytesSize/BytesSize.tsx
2
- import size from "byte-size";
3
- import { Fragment, jsx } from "react/jsx-runtime";
4
- var BytesSize = ({ bytes }) => {
5
- return /* @__PURE__ */ jsx(Fragment, { children: size(bytes).toString() });
6
- };
7
-
8
- export {
9
- BytesSize
10
- };
11
- //# sourceMappingURL=chunk-QD6RLAO2.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/utilities/BytesSize/BytesSize.tsx"],"sourcesContent":["import size from 'byte-size';\n\nexport type BytesSizeProps = {\n bytes: number;\n};\n\nexport const BytesSize = ({ bytes }: BytesSizeProps) => {\n return <>{size(bytes).toString()}</>;\n};\n"],"mappings":";AAAA,OAAO,UAAU;AAOR;AADF,IAAM,YAAY,CAAC,EAAE,MAAM,MAAsB;AACtD,SAAO,gCAAG,eAAK,KAAK,EAAE,SAAS,GAAE;AACnC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/utilities/Markdown/Markdown.tsx","../src/components/utilities/OnboardingProvider/OnboardingProvider.tsx","../src/components/utilities/Truncate/Truncate.tsx","../src/components/utilities/QRCode/QRCode.tsx"],"sourcesContent":["import { Box, styled } from '@mui/material';\n\nimport 'highlight.js/styles/github.css';\nimport 'github-markdown-css/github-markdown-light.css';\n\nimport MD from 'react-markdown';\nimport highlight from 'rehype-highlight';\nimport rehypeRaw from 'rehype-raw';\n\nexport type MarkdownProps = {\n children?: string;\n content?: string;\n};\n\nconst Content = styled(Box)(({ theme }) => ({\n backgroundColor: 'transparent',\n\n ...theme.typography.body1,\n color: theme.palette.text.primary,\n\n ['& a']: {\n color: theme.palette.primary.main,\n },\n\n ['& pre']: {\n padding: theme.spacing(2),\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.background.paper,\n },\n\n ['& code']: {\n borderRadius: 2,\n backgroundColor: theme.palette.background.paper,\n },\n}));\n\nexport const Markdown = ({ content, children }: MarkdownProps) => (\n <Content className=\"markdown-body\">\n <MD rehypePlugins={[highlight, rehypeRaw]}>{content || children}</MD>\n </Content>\n);\n","import { createContext, useContext, useState, ReactNode, useCallback, useEffect } from 'react';\n\ninterface OnboardingContextType {\n isOnboardingActive: boolean;\n startOnboarding: () => void;\n stopOnboarding: () => void;\n restartOnboarding: () => void;\n}\n\nconst OnboardingContext = createContext<OnboardingContextType | undefined>(undefined);\n\nexport const useOnboarding = () => {\n const context = useContext(OnboardingContext);\n if (!context) {\n throw new Error('useOnboarding should be used inside OnboardingProvider');\n }\n return context;\n};\n\nexport const OnboardingProvider = ({ children }: { children: ReactNode }) => {\n const [isOnboardingActive, setIsOnboardingActive] = useState(() => {\n const savedState = localStorage.getItem('isOnboardingActive');\n return savedState !== null ? JSON.parse(savedState) : true;\n });\n\n useEffect(() => {\n localStorage.setItem('isOnboardingActive', JSON.stringify(isOnboardingActive));\n }, [isOnboardingActive]);\n\n const startOnboarding = useCallback(() => setIsOnboardingActive(true), []);\n const stopOnboarding = useCallback(() => {\n setIsOnboardingActive(false);\n }, []);\n\n const restartOnboarding = useCallback(() => {\n setIsOnboardingActive(false);\n\n setTimeout(() => setIsOnboardingActive(true), 0);\n }, []);\n\n return (\n <OnboardingContext.Provider\n value={{\n isOnboardingActive,\n startOnboarding,\n stopOnboarding,\n restartOnboarding,\n }}\n >\n {children}\n </OnboardingContext.Provider>\n );\n};\n","import { AriaAttributes } from 'react';\n\nexport type TruncateProps = AriaAttributes & {\n text: string;\n maxLength?: number;\n endingLength?: number;\n variant?: 'text' | 'email' | 'hex';\n};\n\nconst getDefaultEndingLength = ({ text, variant, maxLength = text.length }: TruncateProps) => {\n if (variant === 'hex') {\n return 4;\n }\n\n if (variant === 'email') {\n const [, domain] = text.split('@');\n\n return domain.length + 1;\n }\n\n return Math.round(maxLength / 2);\n};\n\nexport const Truncate = ({\n text,\n variant = 'text',\n maxLength = text.length,\n endingLength = getDefaultEndingLength({ text, variant, maxLength }),\n ...props\n}: TruncateProps) => {\n let truncatedText = text;\n\n if (maxLength < text.length) {\n const ending = text.slice(-endingLength);\n const truncated = text.slice(0, maxLength - endingLength);\n\n truncatedText = [truncated, ending].filter(Boolean).join('...');\n }\n\n return (\n <span {...props} data-full={text}>\n {truncatedText}\n </span>\n );\n};\n","import { forwardRef, Ref } from 'react';\nimport QR, { QRCodeProps as QRProps } from 'react-qr-code';\n\nexport type QRCodeProps = Omit<QRProps, 'ref'>;\n\nexport const QRCode = forwardRef(({ size = 168, ...props }: QRCodeProps, ref: Ref<SVGElement>) => (\n <QR ref={ref as Ref<any>} size={size} {...props} />\n));\n\nQRCode.displayName = 'QRCode';\n"],"mappings":"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","names":["jsx","jsx","jsx"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-QYYQYZHV.js","../src/components/buttons/LoadingButton.tsx","../src/components/buttons/ButtonGroup.tsx"],"names":["LoadingButton","jsx"],"mappings":"AAAA;ACAA,4EAAkB;AAClB,+BAA+F;AA8BzF,+CAAA;AAHC,IAAM,cAAA,EAAgB,eAAA,CAAM,UAAA;AAAA,EACjC,SAASA,cAAAA,CAAc,EAAE,QAAA,EAAU,KAAA,EAAO,gBAAA,EAAkB,QAAA,EAAU,GAAG,MAAM,CAAA,EAAG,GAAA,EAAK;AACrF,IAAA,uBACE,6BAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA;AAAA,QACA,eAAA;AAAA,QACC,GAAG;AAAA,MAAA;AAAA,IACN,CAAA;AAAA,EAEJ;AACF,CAAA;ADtBA;AACA;AEjBA;AACE;AAAe,yCAEV;AAmDH;AAPG,IAAM,YAAA,EAA0C,CAAC;AAAA,EACtD,YAAA,EAAc,YAAA;AAAA,EACd,KAAA,EAAO,QAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,uBACEC,6BAAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,WAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EACN,CAAA;AAEJ,CAAA;AFvBA;AACA;AACE;AACA;AACF,yEAAC","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-QYYQYZHV.js","sourcesContent":[null,"import React from 'react';\nimport { LoadingButton as MuiLoadingButton, LoadingButtonProps as MuiLoadingButtonProps } from '@mui/lab';\n\nexport interface LoadingButtonProps extends MuiLoadingButtonProps {\n /**\n * If `true`, the button will show a loading indicator\n */\n loading?: boolean;\n /**\n * The loading indicator can be positioned inside the button or in the center\n */\n loadingPosition?: 'start' | 'end' | 'center';\n}\n\n/**\n * LoadingButton component - Button with loading state from MUI Lab\n * \n * @example\n * ```tsx\n * <LoadingButton\n * variant=\"contained\"\n * loading={isLoading}\n * onClick={handleSubmit}\n * >\n * Submit\n * </LoadingButton>\n * ```\n */\nexport const LoadingButton = React.forwardRef<HTMLButtonElement, LoadingButtonProps>(\n function LoadingButton({ loading = false, loadingPosition = 'center', ...props }, ref) {\n return (\n <MuiLoadingButton\n ref={ref}\n loading={loading}\n loadingPosition={loadingPosition}\n {...props}\n />\n );\n },\n);\n\nexport default LoadingButton;\n\n","import React from 'react';\nimport {\n ButtonGroup as MuiButtonGroup,\n ButtonGroupProps as MuiButtonGroupProps,\n} from '@mui/material';\n\nexport interface ButtonGroupProps extends MuiButtonGroupProps {\n /**\n * The content of the button group\n */\n children?: React.ReactNode;\n /**\n * If `true`, the buttons will be disabled\n */\n disabled?: boolean;\n /**\n * If `true`, the button group will take full width\n */\n fullWidth?: boolean;\n /**\n * The orientation of the button group\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /**\n * The size of the buttons\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * The variant to use\n * @default 'outlined'\n */\n variant?: 'text' | 'outlined' | 'contained';\n}\n\n/**\n * ButtonGroup component - groups related buttons together\n * \n * @example\n * ```tsx\n * <ButtonGroup variant=\"contained\">\n * <Button>One</Button>\n * <Button>Two</Button>\n * <Button>Three</Button>\n * </ButtonGroup>\n * ```\n */\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n orientation = 'horizontal',\n size = 'medium',\n variant = 'outlined',\n ...props\n}) => {\n return (\n <MuiButtonGroup\n orientation={orientation}\n size={size}\n variant={variant}\n {...props}\n />\n );\n};\n\nexport default ButtonGroup;\n\n"]}