govuk-chakra 0.0.9 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -2
- package/dist/DonutChart-B2NoUGch.js +2 -0
- package/dist/DonutChart-B2NoUGch.js.map +1 -0
- package/dist/DonutChart-BETSwZzl.mjs +264 -0
- package/dist/DonutChart-BETSwZzl.mjs.map +1 -0
- package/dist/chakra.cjs +1 -1
- package/dist/chakra.mjs +6 -4
- package/dist/charts.cjs +2 -0
- package/dist/charts.cjs.map +1 -0
- package/dist/charts.mjs +313 -0
- package/dist/charts.mjs.map +1 -0
- package/dist/editor.cjs +2 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.mjs +377 -0
- package/dist/editor.mjs.map +1 -0
- package/dist/fa-CC_HD7Ew.js +2 -0
- package/dist/fa-CC_HD7Ew.js.map +1 -0
- package/dist/fa-xl5EwpyO.mjs +648 -0
- package/dist/fa-xl5EwpyO.mjs.map +1 -0
- package/dist/fonts-BhsM-8n2.js +2 -0
- package/dist/fonts-BhsM-8n2.js.map +1 -0
- package/dist/fonts-ov_EiRYw.mjs +10 -0
- package/dist/fonts-ov_EiRYw.mjs.map +1 -0
- package/dist/govUkTheme-CEAa7qOA.js +2 -0
- package/dist/{govUkTheme-oiAz_-u4.mjs.map → govUkTheme-CEAa7qOA.js.map} +1 -1
- package/dist/{govUkTheme-oiAz_-u4.mjs → govUkTheme-tLHKWFNM.mjs} +708 -816
- package/dist/govUkTheme-tLHKWFNM.mjs.map +1 -0
- package/dist/{govuk-chakra-BwRdOpqf.mjs → govuk-chakra-CV3lJEgF.mjs} +1624 -3174
- package/dist/govuk-chakra-CV3lJEgF.mjs.map +1 -0
- package/dist/govuk-chakra-D_5Vmyql.js +2 -0
- package/dist/govuk-chakra-D_5Vmyql.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +6 -4
- package/dist/provider-Cuy0py8Y.js +2 -0
- package/dist/{provider-C7PcoilM.js.map → provider-Cuy0py8Y.js.map} +1 -1
- package/dist/{provider-DmpkDr8D.mjs → provider-D2upJinq.mjs} +2 -2
- package/dist/{provider-DmpkDr8D.mjs.map → provider-D2upJinq.mjs.map} +1 -1
- package/dist/provider.cjs +1 -1
- package/dist/provider.mjs +2 -2
- package/dist/px-to-rem-B0cUWNN2.js +2 -0
- package/dist/px-to-rem-B0cUWNN2.js.map +1 -0
- package/dist/px-to-rem-DiBsak8v.mjs +106 -0
- package/dist/px-to-rem-DiBsak8v.mjs.map +1 -0
- package/dist/theme.cjs +1 -1
- package/dist/theme.mjs +1 -1
- package/dist/types/govuk-chakra.d.ts +0 -12
- package/package.json +11 -1
- package/dist/govUkTheme-0nKkap9v.js +0 -2
- package/dist/govUkTheme-0nKkap9v.js.map +0 -1
- package/dist/govuk-chakra-BDX-KU3A.js +0 -2
- package/dist/govuk-chakra-BDX-KU3A.js.map +0 -1
- package/dist/govuk-chakra-BwRdOpqf.mjs.map +0 -1
- package/dist/provider-C7PcoilM.js +0 -2
package/README.md
CHANGED
|
@@ -49,6 +49,23 @@ yarn add govuk-chakra @emotion/react @emotion/styled framer-motion react react-d
|
|
|
49
49
|
|
|
50
50
|
`govuk-chakra` bundles Chakra UI, so consuming apps do not need to install `@chakra-ui/react` separately.
|
|
51
51
|
|
|
52
|
+
### Optional peer dependencies
|
|
53
|
+
|
|
54
|
+
Chart, code block, and rich text editor components are **not included in the main entry point**. They live in separate entry points so your app only pays the cost of the deps it actually uses.
|
|
55
|
+
|
|
56
|
+
| Entry point | Install | Components |
|
|
57
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
58
|
+
| `govuk-chakra/charts` | `yarn add @chakra-ui/charts recharts` | `AreaChart`, `BarChart`, `BarList`, `BarSegment`, `Chart`, `DonutChart`, `LineChart`, `PieChart`, `RadarChart`, `ScatterChart`, `Sparkline` |
|
|
59
|
+
| `govuk-chakra/editor` | `yarn add shiki @tiptap/core@^3.21.0 @tiptap/pm@^3.21.0 @tiptap/react@^3.21.0 @tiptap/starter-kit@^3.21.0` | `CodeBlock`, `RichTextEditor` |
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Charts
|
|
63
|
+
yarn add @chakra-ui/charts recharts
|
|
64
|
+
|
|
65
|
+
# Code block + Rich text editor
|
|
66
|
+
yarn add shiki @tiptap/core@^3.21.0 @tiptap/pm@^3.21.0 @tiptap/react@^3.21.0 @tiptap/starter-kit@^3.21.0
|
|
67
|
+
```
|
|
68
|
+
|
|
52
69
|
## Usage
|
|
53
70
|
|
|
54
71
|
For app setup, prefer the lightweight provider and theme entry points.
|
|
@@ -180,7 +197,13 @@ export function ExamplePage() {
|
|
|
180
197
|
|
|
181
198
|
- `govuk-chakra`
|
|
182
199
|
Single combined barrel with Chakra UI exports plus local GOV.UK-styled overrides.
|
|
183
|
-
|
|
200
|
+
Does **not** include charts, `CodeBlock`, or `RichTextEditor` — use the dedicated entry points for those.
|
|
201
|
+
|
|
202
|
+
- `govuk-chakra/charts`
|
|
203
|
+
All chart components. Requires `@chakra-ui/charts` and `recharts` to be installed.
|
|
204
|
+
|
|
205
|
+
- `govuk-chakra/editor`
|
|
206
|
+
`CodeBlock` (requires `shiki`) and `RichTextEditor` (requires `@tiptap/*`) components.
|
|
184
207
|
|
|
185
208
|
- `govuk-chakra/chakra`
|
|
186
209
|
Chakra UI passthrough plus the shared GOV.UK provider and theme exports
|
|
@@ -191,6 +214,17 @@ export function ExamplePage() {
|
|
|
191
214
|
- `govuk-chakra/provider`
|
|
192
215
|
Lightweight provider entry for `GOVUKProvider`
|
|
193
216
|
|
|
217
|
+
```tsx
|
|
218
|
+
// Core components — no heavy deps needed
|
|
219
|
+
import { Button, GOVUKHeader, Heading } from 'govuk-chakra'
|
|
220
|
+
|
|
221
|
+
// Charts — requires @chakra-ui/charts recharts
|
|
222
|
+
import { BarChart, LineChart } from 'govuk-chakra/charts'
|
|
223
|
+
|
|
224
|
+
// Code block + rich text — requires shiki and @tiptap/*
|
|
225
|
+
import { CodeBlock, RichTextEditor } from 'govuk-chakra/editor'
|
|
226
|
+
```
|
|
227
|
+
|
|
194
228
|
## Theme
|
|
195
229
|
|
|
196
230
|
If you want direct access to the Chakra system rather than the convenience provider:
|
|
@@ -337,4 +371,4 @@ MIT License - see [LICENSE](LICENSE). Free to use, modify, and distribute. The o
|
|
|
337
371
|
|
|
338
372
|
---
|
|
339
373
|
|
|
340
|
-
**Last Updated**:
|
|
374
|
+
**Last Updated**: April 2026
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`./fa-CC_HD7Ew.js`);const e=require(`./fonts-BhsM-8n2.js`),t=require(`./px-to-rem-B0cUWNN2.js`);let n=require(`@chakra-ui/react`),r=require(`react`),i=require(`react/jsx-runtime`),a=require(`recharts`),o=require(`@chakra-ui/charts`);var s=(0,r.forwardRef)(function({fontSize:e,fontWeight:r=400,...a},o){typeof e==`number`&&!(e in t.i)&&console.warn(`[GOV.UK Text] fontSize={${e}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`);let s=t.t(e);return s?(0,i.jsx)(n.Text,{ref:o,fontSize:{base:s.small.fontSize,md:s.large.fontSize},lineHeight:{base:s.small.lineHeight,md:s.large.lineHeight},fontWeight:r,fontFamily:`body`,...a}):(0,i.jsx)(n.Text,{ref:o,fontSize:e,...a})}),c=(0,r.createContext)(null);function l(){let e=(0,r.useContext)(c);if(!e)throw Error(`Chart components must be rendered inside Chart.Root`);return e}function u(e,t){if(!(!e||!t||typeof e.payload!=`object`||e.payload===null))return e.payload[t]}function d(e){return e==null?``:(0,r.isValidElement)(e)||typeof e==`string`||typeof e==`number`?e:typeof e==`boolean`||typeof e==`bigint`?String(e):Array.isArray(e)?e.join(`, `):String(e)}function f(e){return typeof e!=`string`||e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}function p({payload:e,label:t,labelFormatter:r,hideLabel:a,hideIndicator:o,hideSeriesLabel:c,showTotal:p,fitContent:m,nameKey:h,formatter:g,render:_}){let v=l(),y=e?.filter(e=>e.color!==`none`||e.type!==`none`);if(!y?.length)return null;let b=y,x=y[0],S=u(x,h)??t??x?.dataKey??`value`,C=d(r?.(String(S),b)??S),w=y.reduce((e,t)=>typeof t.value==`number`?e+t.value:e,0);return(0,i.jsxs)(n.Stack,{minW:m?void 0:`8rem`,gap:`1`,rounded:`l2`,bg:`bg.panel`,px:`2.5`,py:`1`,textStyle:`xs`,shadow:`md`,children:[a?null:(0,i.jsx)(s,{fontWeight:`medium`,children:C}),(0,i.jsx)(n.Box,{children:y.map((e,t)=>{let r=v.getSeries(e);if(_)return(0,i.jsx)(n.Box,{children:_(e)},t);let a=g?g(e.value,e.name):e.value?.toLocaleString(),[l,u]=Array.isArray(a)?a:[a,f(e.name)];return(0,i.jsxs)(n.Flex,{gap:`1.5`,wrap:`wrap`,align:`center`,children:[o?null:r?.color?(0,i.jsx)(n.Box,{boxSize:`2`,rounded:`full`,bg:v.color(r.color),borderWidth:`1px`,borderColor:`blackAlpha.200`,flexShrink:0}):(0,i.jsx)(n.Box,{boxSize:`2`,rounded:`full`,bg:`border.emphasized`,borderWidth:`1px`,borderColor:`blackAlpha.200`,flexShrink:0}),(0,i.jsxs)(n.HStack,{justify:`space-between`,flex:`1`,children:[c?null:(0,i.jsx)(s,{color:`fg.muted`,children:d(u)}),e.value==null?null:(0,i.jsx)(s,{fontFamily:`mono`,fontWeight:`medium`,fontVariantNumeric:`tabular-nums`,children:d(l)})]})]},t)})}),p?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.Separator,{mt:`1`}),(0,i.jsxs)(n.HStack,{gap:`1`,justify:`space-between`,pb:`1`,children:[(0,i.jsx)(n.Span,{color:`fg.muted`,children:`Total`}),(0,i.jsx)(s,{fontFamily:`mono`,fontWeight:`medium`,fontVariantNumeric:`tabular-nums`,children:g?(()=>{let e=g(w,``);return Array.isArray(e)?e[0]:e})():w.toLocaleString()})]})]}):null]})}function m({payload:e,verticalAlign:t=`bottom`,align:r=`center`,title:a,orientation:o,nameKey:c,spacing:p=`3`,interaction:m=`hover`,rootProps:h,itemProps:g,labelProps:_,indicatorProps:v}){let y=l(),b=e?.filter(e=>e.color!==`none`||e.type!==`none`);if(!b?.length)return null;let x=typeof p==`number`?`${p}px`:y.spacing(p);return(0,i.jsxs)(n.Stack,{gap:`1.5`,align:{left:`flex-start`,center:`center`,right:`flex-end`}[r],pt:t===`bottom`?`3`:void 0,pb:t===`top`?`3`:void 0,...h,children:[a?(0,i.jsx)(s,{fontWeight:`medium`,children:a}):null,(0,i.jsx)(n.Flex,{"data-orientation":o,gap:x,direction:{_horizontal:`row`,_vertical:`column`},align:{_horizontal:`center`,_vertical:`flex-start`},flexWrap:`wrap`,children:b.map((e,t)=>{let r=y.getSeries(e),a=r?.name==null?void 0:typeof r.name==`string`?r.name:String(r.name),o=f(u(e,c)??r?.label);return(0,i.jsxs)(n.HStack,{gap:`1.5`,style:{opacity:y.getSeriesOpacity(a,.6)},onClick:()=>{m===`click`&&a&&y.setHighlightedSeries(e=>e===a?null:a)},onMouseEnter:()=>{m===`hover`&&a&&y.setHighlightedSeries(a)},onMouseLeave:()=>{m===`hover`&&a&&y.setHighlightedSeries(null)},...g,children:[r?.icon?r.icon:(0,i.jsx)(n.Box,{boxSize:`2`,rounded:`full`,bg:r?.color?y.color(r.color):`border.emphasized`,borderWidth:`1px`,borderColor:`blackAlpha.200`,flexShrink:0,...v}),(0,i.jsx)(n.Span,{color:`fg.muted`,..._,children:d(o)})]},t)})})]})}function h(e){let{rootProps:t,itemProps:n,labelProps:r,indicatorProps:o,title:s,nameKey:c,interaction:l,spacing:u,payload:d,align:f,verticalAlign:p,layout:h,...g}=e;return(0,i.jsx)(a.Legend,{...g,align:f,verticalAlign:p,layout:h,content:(0,i.jsx)(m,{rootProps:t,itemProps:n,labelProps:r,indicatorProps:o,title:s,nameKey:c,interaction:l,spacing:u,payload:d,align:f,verticalAlign:p,layout:h})})}function g(e){return(0,i.jsx)(a.Tooltip,{...e,content:(0,i.jsx)(p,{...e})})}function _({fontFamily:n=`body`,fontSize:r=16,...a}){let s=t.t(r);if(!s)console.warn(`[GOV.UK Chart] fontSize={${r}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`);else return(0,i.jsx)(c.Provider,{value:a.chart,children:(0,i.jsx)(o.Chart.Root,{fontFamily:n,css:{"& svg.recharts-surface tspan":{fontSize:{base:s.small.fontSize,md:s.large.fontSize},lineHeight:{base:s.small.lineHeight,md:s.large.lineHeight},color:`fg`,fontFamily:e.t.body.value},"& .recharts-tooltip-wrapper":{background:`var(--govuk-colors-bg)`,borderRadius:`var(--govuk-radii-l2)`}},...a})})}var v=Object.assign(_,{...o.Chart,Root:_,Legend:h,LegendContent:m,Tooltip:g,TooltipContent:p});function y({chart:e,chartRootProps:t,...n}){return(0,i.jsx)(v.Root,{chart:e,...t,children:(0,i.jsx)(a.PieChart,{data:e.data,...n})})}var b=Object.assign(y,{Root:y});Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return b}});
|
|
2
|
+
//# sourceMappingURL=DonutChart-B2NoUGch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DonutChart-B2NoUGch.js","names":[],"sources":["../src/components/Text/Text.tsx","../src/components/Chart/Chart.tsx","../src/components/DonutChart/DonutChart.tsx"],"sourcesContent":["import { Text as ChakraText, type TextProps as ChakraTextProps } from '@chakra-ui/react'\nimport { forwardRef } from 'react'\nimport { getGovukTypeScale, govukTypeScale, type GovukTypeScalePoint } from '@/utils'\n\nexport interface TextProps extends Omit<ChakraTextProps, 'fontSize' | 'fontWeight'> {\n fontSize?: GovukTypeScalePoint | ChakraTextProps['fontSize']\n fontWeight?: ChakraTextProps['fontWeight']\n}\n\nexport const Text = forwardRef<HTMLParagraphElement, TextProps>(function Text(\n { fontSize, fontWeight = 400, ...props },\n ref\n) {\n if (typeof fontSize === 'number' && !(fontSize in govukTypeScale)) {\n console.warn(\n `[GOV.UK Text] fontSize={${fontSize}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`\n )\n }\n\n const scale = getGovukTypeScale(fontSize)\n\n if (scale) {\n return (\n <ChakraText\n ref={ref}\n fontSize={{ base: scale.small.fontSize, md: scale.large.fontSize }}\n lineHeight={{ base: scale.small.lineHeight, md: scale.large.lineHeight }}\n fontWeight={fontWeight}\n fontFamily=\"body\"\n {...props}\n />\n )\n }\n\n return <ChakraText ref={ref} fontSize={fontSize as ChakraTextProps['fontSize']} {...props} />\n})\n","import { Box, Flex, HStack, Separator, Span, Stack } from '@chakra-ui/react'\nimport { fonts } from '@/theme/fonts'\nimport {\n Chart as ChakraChart,\n type ChartLegendProps as ChakraChartLegendProps,\n type ChartTooltipProps as ChakraChartTooltipProps,\n type UseChartReturn,\n} from '@chakra-ui/charts'\nimport {\n createContext,\n isValidElement,\n useContext,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\nimport { Legend as RechartsLegend, Tooltip as RechartsTooltip } from 'recharts'\nimport type { Payload } from 'recharts/types/component/DefaultTooltipContent'\nimport type { TooltipPayloadEntry } from 'recharts/types/state/tooltipSlice'\nimport { getGovukTypeScale } from '@/utils'\nimport { Text } from '../Text'\n\nexport interface ChartRootProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraChart.Root>,\n 'chart'\n> {\n chart: UseChartReturn<T>\n}\n\nexport type ChartRechartsTooltipProps = Omit<\n ComponentPropsWithoutRef<typeof RechartsTooltip>,\n 'content'\n> &\n ChakraChartTooltipProps\n\nexport interface ChartLegendContentProps extends ChakraChartLegendProps {\n rootProps?: ComponentPropsWithoutRef<typeof Stack>\n itemProps?: ComponentPropsWithoutRef<typeof HStack>\n labelProps?: ComponentPropsWithoutRef<typeof Span>\n indicatorProps?: ComponentPropsWithoutRef<typeof Box>\n}\n\nexport type ChartRechartsLegendProps = Omit<\n ComponentPropsWithoutRef<typeof RechartsLegend>,\n 'content'\n> &\n ChartLegendContentProps\n\nconst ChartContext = createContext<UseChartReturn<unknown> | null>(null)\n\nfunction useGovukChartContext() {\n const chart = useContext(ChartContext)\n\n if (!chart) {\n throw new Error('Chart components must be rendered inside Chart.Root')\n }\n\n return chart\n}\n\nfunction getPayloadProp(item: TooltipPayloadEntry | undefined, key?: string) {\n if (!item || !key || typeof item.payload !== 'object' || item.payload === null) {\n return undefined\n }\n\n const payload = item.payload as Record<string, unknown>\n return payload[key]\n}\n\nfunction toRenderableValue(value: unknown): ReactNode {\n if (value == null) {\n return ''\n }\n\n if (isValidElement(value)) {\n return value\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value\n }\n\n if (typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n return value.join(', ')\n }\n\n return String(value)\n}\n\nfunction capitalizeLabel(value: unknown) {\n if (typeof value !== 'string' || value.length === 0) {\n return value\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1)\n}\n\nfunction ChartTooltip({\n payload: payloadProp,\n label,\n labelFormatter,\n hideLabel,\n hideIndicator,\n hideSeriesLabel,\n showTotal,\n fitContent,\n nameKey,\n formatter,\n render,\n}: ChakraChartTooltipProps) {\n const chart = useGovukChartContext()\n const payload = payloadProp?.filter((item) => item.color !== 'none' || item.type !== 'none')\n\n if (!payload?.length) {\n return null\n }\n\n const callbackPayload = payload as Array<Payload<string | number, string>>\n const firstItem = payload[0]\n const rawLabel = getPayloadProp(firstItem, nameKey) ?? label ?? firstItem?.dataKey ?? 'value'\n const tooltipLabel = toRenderableValue(\n labelFormatter?.(String(rawLabel), callbackPayload) ?? rawLabel\n )\n const total = payload.reduce((sum, item) => {\n return typeof item.value === 'number' ? sum + item.value : sum\n }, 0)\n\n return (\n <Stack\n minW={fitContent ? undefined : '8rem'}\n gap=\"1\"\n rounded=\"l2\"\n bg=\"bg.panel\"\n px=\"2.5\"\n py=\"1\"\n textStyle=\"xs\"\n shadow=\"md\"\n >\n {!hideLabel ? <Text fontWeight=\"medium\">{tooltipLabel}</Text> : null}\n <Box>\n {payload.map((item, index) => {\n const config = chart.getSeries(item)\n\n if (render) {\n return <Box key={index}>{render(item as Payload<string, string>)}</Box>\n }\n\n const formatted = formatter\n ? formatter(item.value, item.name)\n : item.value?.toLocaleString()\n const [formattedValue, formattedName] = Array.isArray(formatted)\n ? formatted\n : [formatted, capitalizeLabel(item.name)]\n\n return (\n <Flex key={index} gap=\"1.5\" wrap=\"wrap\" align=\"center\">\n {!hideIndicator ? (\n config?.color ? (\n <Box\n boxSize=\"2\"\n rounded=\"full\"\n bg={chart.color(config.color)}\n borderWidth=\"1px\"\n borderColor=\"blackAlpha.200\"\n flexShrink={0}\n />\n ) : (\n <Box\n boxSize=\"2\"\n rounded=\"full\"\n bg=\"border.emphasized\"\n borderWidth=\"1px\"\n borderColor=\"blackAlpha.200\"\n flexShrink={0}\n />\n )\n ) : null}\n <HStack justify=\"space-between\" flex=\"1\">\n {!hideSeriesLabel ? (\n <Text color=\"fg.muted\">{toRenderableValue(formattedName)}</Text>\n ) : null}\n {item.value != null ? (\n <Text fontFamily=\"mono\" fontWeight=\"medium\" fontVariantNumeric=\"tabular-nums\">\n {toRenderableValue(formattedValue)}\n </Text>\n ) : null}\n </HStack>\n </Flex>\n )\n })}\n </Box>\n {showTotal ? (\n <>\n <Separator mt=\"1\" />\n <HStack gap=\"1\" justify=\"space-between\" pb=\"1\">\n <Span color=\"fg.muted\">Total</Span>\n <Text fontFamily=\"mono\" fontWeight=\"medium\" fontVariantNumeric=\"tabular-nums\">\n {formatter\n ? (() => {\n const formatted = formatter(total, '')\n return Array.isArray(formatted) ? formatted[0] : formatted\n })()\n : total.toLocaleString()}\n </Text>\n </HStack>\n </>\n ) : null}\n </Stack>\n )\n}\n\nfunction ChartLegendContent({\n payload,\n verticalAlign = 'bottom',\n align = 'center',\n title,\n orientation,\n nameKey,\n spacing = '3',\n interaction = 'hover',\n rootProps,\n itemProps,\n labelProps,\n indicatorProps,\n}: ChartLegendContentProps) {\n const chart = useGovukChartContext()\n const filteredPayload = payload?.filter((item) => item.color !== 'none' || item.type !== 'none')\n\n if (!filteredPayload?.length) {\n return null\n }\n\n const spacingValue = typeof spacing === 'number' ? `${spacing}px` : chart.spacing(spacing)\n const alignMap = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n } as const\n\n return (\n <Stack\n gap=\"1.5\"\n align={alignMap[align]}\n pt={verticalAlign === 'bottom' ? '3' : undefined}\n pb={verticalAlign === 'top' ? '3' : undefined}\n {...rootProps}\n >\n {title ? <Text fontWeight=\"medium\">{title}</Text> : null}\n <Flex\n data-orientation={orientation}\n gap={spacingValue}\n direction={{ _horizontal: 'row', _vertical: 'column' }}\n align={{ _horizontal: 'center', _vertical: 'flex-start' }}\n flexWrap=\"wrap\"\n >\n {filteredPayload.map((item, index) => {\n const config = chart.getSeries(item)\n const seriesName =\n config?.name == null\n ? undefined\n : typeof config.name === 'string'\n ? config.name\n : String(config.name)\n const name = getPayloadProp(item as TooltipPayloadEntry, nameKey)\n const label = capitalizeLabel(name ?? config?.label)\n\n return (\n <HStack\n key={index}\n gap=\"1.5\"\n style={{ opacity: chart.getSeriesOpacity(seriesName, 0.6) }}\n onClick={() => {\n if (interaction === 'click' && seriesName) {\n chart.setHighlightedSeries((prev) => (prev === seriesName ? null : seriesName))\n }\n }}\n onMouseEnter={() => {\n if (interaction === 'hover' && seriesName) {\n chart.setHighlightedSeries(seriesName)\n }\n }}\n onMouseLeave={() => {\n if (interaction === 'hover' && seriesName) {\n chart.setHighlightedSeries(null)\n }\n }}\n {...itemProps}\n >\n {config?.icon ? (\n config.icon\n ) : (\n <Box\n boxSize=\"2\"\n rounded=\"full\"\n bg={config?.color ? chart.color(config.color) : 'border.emphasized'}\n borderWidth=\"1px\"\n borderColor=\"blackAlpha.200\"\n flexShrink={0}\n {...indicatorProps}\n />\n )}\n <Span color=\"fg.muted\" {...labelProps}>\n {toRenderableValue(label)}\n </Span>\n </HStack>\n )\n })}\n </Flex>\n </Stack>\n )\n}\n\nfunction ChartLegend(props: ChartRechartsLegendProps) {\n const {\n rootProps,\n itemProps,\n labelProps,\n indicatorProps,\n title,\n nameKey,\n interaction,\n spacing,\n payload,\n align,\n verticalAlign,\n layout,\n ...legendProps\n } = props\n\n return (\n <RechartsLegend\n {...legendProps}\n align={align}\n verticalAlign={verticalAlign}\n layout={layout}\n content={\n <ChartLegendContent\n rootProps={rootProps}\n itemProps={itemProps}\n labelProps={labelProps}\n indicatorProps={indicatorProps}\n title={title}\n nameKey={nameKey}\n interaction={interaction}\n spacing={spacing}\n payload={payload}\n align={align}\n verticalAlign={verticalAlign}\n layout={layout}\n />\n }\n />\n )\n}\n\nfunction ChartRechartsTooltip(props: ChartRechartsTooltipProps) {\n return <RechartsTooltip {...props} content={<ChartTooltip {...props} />} />\n}\n\nfunction ChartRoot<T>({ fontFamily = 'body', fontSize = 16, ...props }: ChartRootProps<T>) {\n const scale = getGovukTypeScale(fontSize)\n if (!scale) {\n console.warn(\n `[GOV.UK Chart] fontSize={${fontSize}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`\n )\n } else {\n return (\n <ChartContext.Provider value={props.chart as UseChartReturn<unknown>}>\n <ChakraChart.Root\n fontFamily={fontFamily}\n css={{\n '& svg.recharts-surface tspan': {\n fontSize: { base: scale.small.fontSize, md: scale.large.fontSize },\n lineHeight: { base: scale.small.lineHeight, md: scale.large.lineHeight },\n color: 'fg',\n fontFamily: fonts.body.value,\n },\n '& .recharts-tooltip-wrapper': {\n background: 'var(--govuk-colors-bg)',\n borderRadius: 'var(--govuk-radii-l2)',\n },\n }}\n {...props}\n />\n </ChartContext.Provider>\n )\n }\n}\n\nexport { ChartRoot }\n\nexport const Chart = Object.assign(ChartRoot, {\n ...ChakraChart,\n Root: ChartRoot,\n Legend: ChartLegend,\n LegendContent: ChartLegendContent,\n Tooltip: ChartRechartsTooltip,\n TooltipContent: ChartTooltip,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { PieChart as ChakraDonutChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface DonutChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraDonutChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction DonutChartRoot<T>({ chart, chartRootProps, ...props }: DonutChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraDonutChart data={chart.data} {...props} />\n </Chart.Root>\n )\n}\n\nexport { DonutChartRoot }\n\nexport const DonutChart = Object.assign(DonutChartRoot, {\n Root: DonutChartRoot,\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { t as e } from "./fonts-ov_EiRYw.mjs";
|
|
2
|
+
import { i as t, t as n } from "./px-to-rem-DiBsak8v.mjs";
|
|
3
|
+
import { Box as r, Flex as i, HStack as a, Separator as o, Span as s, Stack as c, Text as l } from "@chakra-ui/react";
|
|
4
|
+
import { createContext as u, forwardRef as d, isValidElement as f, useContext as p } from "react";
|
|
5
|
+
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
6
|
+
import { Legend as _, PieChart as v, Tooltip as y } from "recharts";
|
|
7
|
+
import { Chart as b } from "@chakra-ui/charts";
|
|
8
|
+
//#region src/components/Text/Text.tsx
|
|
9
|
+
var x = d(function({ fontSize: e, fontWeight: r = 400, ...i }, a) {
|
|
10
|
+
typeof e == "number" && !(e in t) && console.warn(`[GOV.UK Text] fontSize={${e}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`);
|
|
11
|
+
let o = n(e);
|
|
12
|
+
return o ? /* @__PURE__ */ h(l, {
|
|
13
|
+
ref: a,
|
|
14
|
+
fontSize: {
|
|
15
|
+
base: o.small.fontSize,
|
|
16
|
+
md: o.large.fontSize
|
|
17
|
+
},
|
|
18
|
+
lineHeight: {
|
|
19
|
+
base: o.small.lineHeight,
|
|
20
|
+
md: o.large.lineHeight
|
|
21
|
+
},
|
|
22
|
+
fontWeight: r,
|
|
23
|
+
fontFamily: "body",
|
|
24
|
+
...i
|
|
25
|
+
}) : /* @__PURE__ */ h(l, {
|
|
26
|
+
ref: a,
|
|
27
|
+
fontSize: e,
|
|
28
|
+
...i
|
|
29
|
+
});
|
|
30
|
+
}), S = u(null);
|
|
31
|
+
function C() {
|
|
32
|
+
let e = p(S);
|
|
33
|
+
if (!e) throw Error("Chart components must be rendered inside Chart.Root");
|
|
34
|
+
return e;
|
|
35
|
+
}
|
|
36
|
+
function w(e, t) {
|
|
37
|
+
if (!(!e || !t || typeof e.payload != "object" || e.payload === null)) return e.payload[t];
|
|
38
|
+
}
|
|
39
|
+
function T(e) {
|
|
40
|
+
return e == null ? "" : f(e) || typeof e == "string" || typeof e == "number" ? e : typeof e == "boolean" || typeof e == "bigint" ? String(e) : Array.isArray(e) ? e.join(", ") : String(e);
|
|
41
|
+
}
|
|
42
|
+
function E(e) {
|
|
43
|
+
return typeof e != "string" || e.length === 0 ? e : e.charAt(0).toUpperCase() + e.slice(1);
|
|
44
|
+
}
|
|
45
|
+
function D({ payload: e, label: t, labelFormatter: n, hideLabel: l, hideIndicator: u, hideSeriesLabel: d, showTotal: f, fitContent: p, nameKey: _, formatter: v, render: y }) {
|
|
46
|
+
let b = C(), S = e?.filter((e) => e.color !== "none" || e.type !== "none");
|
|
47
|
+
if (!S?.length) return null;
|
|
48
|
+
let D = S, O = S[0], k = w(O, _) ?? t ?? O?.dataKey ?? "value", A = T(n?.(String(k), D) ?? k), j = S.reduce((e, t) => typeof t.value == "number" ? e + t.value : e, 0);
|
|
49
|
+
return /* @__PURE__ */ g(c, {
|
|
50
|
+
minW: p ? void 0 : "8rem",
|
|
51
|
+
gap: "1",
|
|
52
|
+
rounded: "l2",
|
|
53
|
+
bg: "bg.panel",
|
|
54
|
+
px: "2.5",
|
|
55
|
+
py: "1",
|
|
56
|
+
textStyle: "xs",
|
|
57
|
+
shadow: "md",
|
|
58
|
+
children: [
|
|
59
|
+
l ? null : /* @__PURE__ */ h(x, {
|
|
60
|
+
fontWeight: "medium",
|
|
61
|
+
children: A
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ h(r, { children: S.map((e, t) => {
|
|
64
|
+
let n = b.getSeries(e);
|
|
65
|
+
if (y) return /* @__PURE__ */ h(r, { children: y(e) }, t);
|
|
66
|
+
let o = v ? v(e.value, e.name) : e.value?.toLocaleString(), [s, c] = Array.isArray(o) ? o : [o, E(e.name)];
|
|
67
|
+
return /* @__PURE__ */ g(i, {
|
|
68
|
+
gap: "1.5",
|
|
69
|
+
wrap: "wrap",
|
|
70
|
+
align: "center",
|
|
71
|
+
children: [u ? null : n?.color ? /* @__PURE__ */ h(r, {
|
|
72
|
+
boxSize: "2",
|
|
73
|
+
rounded: "full",
|
|
74
|
+
bg: b.color(n.color),
|
|
75
|
+
borderWidth: "1px",
|
|
76
|
+
borderColor: "blackAlpha.200",
|
|
77
|
+
flexShrink: 0
|
|
78
|
+
}) : /* @__PURE__ */ h(r, {
|
|
79
|
+
boxSize: "2",
|
|
80
|
+
rounded: "full",
|
|
81
|
+
bg: "border.emphasized",
|
|
82
|
+
borderWidth: "1px",
|
|
83
|
+
borderColor: "blackAlpha.200",
|
|
84
|
+
flexShrink: 0
|
|
85
|
+
}), /* @__PURE__ */ g(a, {
|
|
86
|
+
justify: "space-between",
|
|
87
|
+
flex: "1",
|
|
88
|
+
children: [d ? null : /* @__PURE__ */ h(x, {
|
|
89
|
+
color: "fg.muted",
|
|
90
|
+
children: T(c)
|
|
91
|
+
}), e.value == null ? null : /* @__PURE__ */ h(x, {
|
|
92
|
+
fontFamily: "mono",
|
|
93
|
+
fontWeight: "medium",
|
|
94
|
+
fontVariantNumeric: "tabular-nums",
|
|
95
|
+
children: T(s)
|
|
96
|
+
})]
|
|
97
|
+
})]
|
|
98
|
+
}, t);
|
|
99
|
+
}) }),
|
|
100
|
+
f ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(o, { mt: "1" }), /* @__PURE__ */ g(a, {
|
|
101
|
+
gap: "1",
|
|
102
|
+
justify: "space-between",
|
|
103
|
+
pb: "1",
|
|
104
|
+
children: [/* @__PURE__ */ h(s, {
|
|
105
|
+
color: "fg.muted",
|
|
106
|
+
children: "Total"
|
|
107
|
+
}), /* @__PURE__ */ h(x, {
|
|
108
|
+
fontFamily: "mono",
|
|
109
|
+
fontWeight: "medium",
|
|
110
|
+
fontVariantNumeric: "tabular-nums",
|
|
111
|
+
children: v ? (() => {
|
|
112
|
+
let e = v(j, "");
|
|
113
|
+
return Array.isArray(e) ? e[0] : e;
|
|
114
|
+
})() : j.toLocaleString()
|
|
115
|
+
})]
|
|
116
|
+
})] }) : null
|
|
117
|
+
]
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function O({ payload: e, verticalAlign: t = "bottom", align: n = "center", title: o, orientation: l, nameKey: u, spacing: d = "3", interaction: f = "hover", rootProps: p, itemProps: m, labelProps: _, indicatorProps: v }) {
|
|
121
|
+
let y = C(), b = e?.filter((e) => e.color !== "none" || e.type !== "none");
|
|
122
|
+
if (!b?.length) return null;
|
|
123
|
+
let S = typeof d == "number" ? `${d}px` : y.spacing(d);
|
|
124
|
+
return /* @__PURE__ */ g(c, {
|
|
125
|
+
gap: "1.5",
|
|
126
|
+
align: {
|
|
127
|
+
left: "flex-start",
|
|
128
|
+
center: "center",
|
|
129
|
+
right: "flex-end"
|
|
130
|
+
}[n],
|
|
131
|
+
pt: t === "bottom" ? "3" : void 0,
|
|
132
|
+
pb: t === "top" ? "3" : void 0,
|
|
133
|
+
...p,
|
|
134
|
+
children: [o ? /* @__PURE__ */ h(x, {
|
|
135
|
+
fontWeight: "medium",
|
|
136
|
+
children: o
|
|
137
|
+
}) : null, /* @__PURE__ */ h(i, {
|
|
138
|
+
"data-orientation": l,
|
|
139
|
+
gap: S,
|
|
140
|
+
direction: {
|
|
141
|
+
_horizontal: "row",
|
|
142
|
+
_vertical: "column"
|
|
143
|
+
},
|
|
144
|
+
align: {
|
|
145
|
+
_horizontal: "center",
|
|
146
|
+
_vertical: "flex-start"
|
|
147
|
+
},
|
|
148
|
+
flexWrap: "wrap",
|
|
149
|
+
children: b.map((e, t) => {
|
|
150
|
+
let n = y.getSeries(e), i = n?.name == null ? void 0 : typeof n.name == "string" ? n.name : String(n.name), o = E(w(e, u) ?? n?.label);
|
|
151
|
+
return /* @__PURE__ */ g(a, {
|
|
152
|
+
gap: "1.5",
|
|
153
|
+
style: { opacity: y.getSeriesOpacity(i, .6) },
|
|
154
|
+
onClick: () => {
|
|
155
|
+
f === "click" && i && y.setHighlightedSeries((e) => e === i ? null : i);
|
|
156
|
+
},
|
|
157
|
+
onMouseEnter: () => {
|
|
158
|
+
f === "hover" && i && y.setHighlightedSeries(i);
|
|
159
|
+
},
|
|
160
|
+
onMouseLeave: () => {
|
|
161
|
+
f === "hover" && i && y.setHighlightedSeries(null);
|
|
162
|
+
},
|
|
163
|
+
...m,
|
|
164
|
+
children: [n?.icon ? n.icon : /* @__PURE__ */ h(r, {
|
|
165
|
+
boxSize: "2",
|
|
166
|
+
rounded: "full",
|
|
167
|
+
bg: n?.color ? y.color(n.color) : "border.emphasized",
|
|
168
|
+
borderWidth: "1px",
|
|
169
|
+
borderColor: "blackAlpha.200",
|
|
170
|
+
flexShrink: 0,
|
|
171
|
+
...v
|
|
172
|
+
}), /* @__PURE__ */ h(s, {
|
|
173
|
+
color: "fg.muted",
|
|
174
|
+
..._,
|
|
175
|
+
children: T(o)
|
|
176
|
+
})]
|
|
177
|
+
}, t);
|
|
178
|
+
})
|
|
179
|
+
})]
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
function k(e) {
|
|
183
|
+
let { rootProps: t, itemProps: n, labelProps: r, indicatorProps: i, title: a, nameKey: o, interaction: s, spacing: c, payload: l, align: u, verticalAlign: d, layout: f, ...p } = e;
|
|
184
|
+
return /* @__PURE__ */ h(_, {
|
|
185
|
+
...p,
|
|
186
|
+
align: u,
|
|
187
|
+
verticalAlign: d,
|
|
188
|
+
layout: f,
|
|
189
|
+
content: /* @__PURE__ */ h(O, {
|
|
190
|
+
rootProps: t,
|
|
191
|
+
itemProps: n,
|
|
192
|
+
labelProps: r,
|
|
193
|
+
indicatorProps: i,
|
|
194
|
+
title: a,
|
|
195
|
+
nameKey: o,
|
|
196
|
+
interaction: s,
|
|
197
|
+
spacing: c,
|
|
198
|
+
payload: l,
|
|
199
|
+
align: u,
|
|
200
|
+
verticalAlign: d,
|
|
201
|
+
layout: f
|
|
202
|
+
})
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
function A(e) {
|
|
206
|
+
return /* @__PURE__ */ h(y, {
|
|
207
|
+
...e,
|
|
208
|
+
content: /* @__PURE__ */ h(D, { ...e })
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
function j({ fontFamily: t = "body", fontSize: r = 16, ...i }) {
|
|
212
|
+
let a = n(r);
|
|
213
|
+
if (!a) console.warn(`[GOV.UK Chart] fontSize={${r}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`);
|
|
214
|
+
else return /* @__PURE__ */ h(S.Provider, {
|
|
215
|
+
value: i.chart,
|
|
216
|
+
children: /* @__PURE__ */ h(b.Root, {
|
|
217
|
+
fontFamily: t,
|
|
218
|
+
css: {
|
|
219
|
+
"& svg.recharts-surface tspan": {
|
|
220
|
+
fontSize: {
|
|
221
|
+
base: a.small.fontSize,
|
|
222
|
+
md: a.large.fontSize
|
|
223
|
+
},
|
|
224
|
+
lineHeight: {
|
|
225
|
+
base: a.small.lineHeight,
|
|
226
|
+
md: a.large.lineHeight
|
|
227
|
+
},
|
|
228
|
+
color: "fg",
|
|
229
|
+
fontFamily: e.body.value
|
|
230
|
+
},
|
|
231
|
+
"& .recharts-tooltip-wrapper": {
|
|
232
|
+
background: "var(--govuk-colors-bg)",
|
|
233
|
+
borderRadius: "var(--govuk-radii-l2)"
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
...i
|
|
237
|
+
})
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
var M = Object.assign(j, {
|
|
241
|
+
...b,
|
|
242
|
+
Root: j,
|
|
243
|
+
Legend: k,
|
|
244
|
+
LegendContent: O,
|
|
245
|
+
Tooltip: A,
|
|
246
|
+
TooltipContent: D
|
|
247
|
+
});
|
|
248
|
+
//#endregion
|
|
249
|
+
//#region src/components/DonutChart/DonutChart.tsx
|
|
250
|
+
function N({ chart: e, chartRootProps: t, ...n }) {
|
|
251
|
+
return /* @__PURE__ */ h(M.Root, {
|
|
252
|
+
chart: e,
|
|
253
|
+
...t,
|
|
254
|
+
children: /* @__PURE__ */ h(v, {
|
|
255
|
+
data: e.data,
|
|
256
|
+
...n
|
|
257
|
+
})
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
var P = Object.assign(N, { Root: N });
|
|
261
|
+
//#endregion
|
|
262
|
+
export { M as n, x as r, P as t };
|
|
263
|
+
|
|
264
|
+
//# sourceMappingURL=DonutChart-BETSwZzl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DonutChart-BETSwZzl.mjs","names":[],"sources":["../src/components/Text/Text.tsx","../src/components/Chart/Chart.tsx","../src/components/DonutChart/DonutChart.tsx"],"sourcesContent":["import { Text as ChakraText, type TextProps as ChakraTextProps } from '@chakra-ui/react'\nimport { forwardRef } from 'react'\nimport { getGovukTypeScale, govukTypeScale, type GovukTypeScalePoint } from '@/utils'\n\nexport interface TextProps extends Omit<ChakraTextProps, 'fontSize' | 'fontWeight'> {\n fontSize?: GovukTypeScalePoint | ChakraTextProps['fontSize']\n fontWeight?: ChakraTextProps['fontWeight']\n}\n\nexport const Text = forwardRef<HTMLParagraphElement, TextProps>(function Text(\n { fontSize, fontWeight = 400, ...props },\n ref\n) {\n if (typeof fontSize === 'number' && !(fontSize in govukTypeScale)) {\n console.warn(\n `[GOV.UK Text] fontSize={${fontSize}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`\n )\n }\n\n const scale = getGovukTypeScale(fontSize)\n\n if (scale) {\n return (\n <ChakraText\n ref={ref}\n fontSize={{ base: scale.small.fontSize, md: scale.large.fontSize }}\n lineHeight={{ base: scale.small.lineHeight, md: scale.large.lineHeight }}\n fontWeight={fontWeight}\n fontFamily=\"body\"\n {...props}\n />\n )\n }\n\n return <ChakraText ref={ref} fontSize={fontSize as ChakraTextProps['fontSize']} {...props} />\n})\n","import { Box, Flex, HStack, Separator, Span, Stack } from '@chakra-ui/react'\nimport { fonts } from '@/theme/fonts'\nimport {\n Chart as ChakraChart,\n type ChartLegendProps as ChakraChartLegendProps,\n type ChartTooltipProps as ChakraChartTooltipProps,\n type UseChartReturn,\n} from '@chakra-ui/charts'\nimport {\n createContext,\n isValidElement,\n useContext,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\nimport { Legend as RechartsLegend, Tooltip as RechartsTooltip } from 'recharts'\nimport type { Payload } from 'recharts/types/component/DefaultTooltipContent'\nimport type { TooltipPayloadEntry } from 'recharts/types/state/tooltipSlice'\nimport { getGovukTypeScale } from '@/utils'\nimport { Text } from '../Text'\n\nexport interface ChartRootProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraChart.Root>,\n 'chart'\n> {\n chart: UseChartReturn<T>\n}\n\nexport type ChartRechartsTooltipProps = Omit<\n ComponentPropsWithoutRef<typeof RechartsTooltip>,\n 'content'\n> &\n ChakraChartTooltipProps\n\nexport interface ChartLegendContentProps extends ChakraChartLegendProps {\n rootProps?: ComponentPropsWithoutRef<typeof Stack>\n itemProps?: ComponentPropsWithoutRef<typeof HStack>\n labelProps?: ComponentPropsWithoutRef<typeof Span>\n indicatorProps?: ComponentPropsWithoutRef<typeof Box>\n}\n\nexport type ChartRechartsLegendProps = Omit<\n ComponentPropsWithoutRef<typeof RechartsLegend>,\n 'content'\n> &\n ChartLegendContentProps\n\nconst ChartContext = createContext<UseChartReturn<unknown> | null>(null)\n\nfunction useGovukChartContext() {\n const chart = useContext(ChartContext)\n\n if (!chart) {\n throw new Error('Chart components must be rendered inside Chart.Root')\n }\n\n return chart\n}\n\nfunction getPayloadProp(item: TooltipPayloadEntry | undefined, key?: string) {\n if (!item || !key || typeof item.payload !== 'object' || item.payload === null) {\n return undefined\n }\n\n const payload = item.payload as Record<string, unknown>\n return payload[key]\n}\n\nfunction toRenderableValue(value: unknown): ReactNode {\n if (value == null) {\n return ''\n }\n\n if (isValidElement(value)) {\n return value\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value\n }\n\n if (typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n return value.join(', ')\n }\n\n return String(value)\n}\n\nfunction capitalizeLabel(value: unknown) {\n if (typeof value !== 'string' || value.length === 0) {\n return value\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1)\n}\n\nfunction ChartTooltip({\n payload: payloadProp,\n label,\n labelFormatter,\n hideLabel,\n hideIndicator,\n hideSeriesLabel,\n showTotal,\n fitContent,\n nameKey,\n formatter,\n render,\n}: ChakraChartTooltipProps) {\n const chart = useGovukChartContext()\n const payload = payloadProp?.filter((item) => item.color !== 'none' || item.type !== 'none')\n\n if (!payload?.length) {\n return null\n }\n\n const callbackPayload = payload as Array<Payload<string | number, string>>\n const firstItem = payload[0]\n const rawLabel = getPayloadProp(firstItem, nameKey) ?? label ?? firstItem?.dataKey ?? 'value'\n const tooltipLabel = toRenderableValue(\n labelFormatter?.(String(rawLabel), callbackPayload) ?? rawLabel\n )\n const total = payload.reduce((sum, item) => {\n return typeof item.value === 'number' ? sum + item.value : sum\n }, 0)\n\n return (\n <Stack\n minW={fitContent ? undefined : '8rem'}\n gap=\"1\"\n rounded=\"l2\"\n bg=\"bg.panel\"\n px=\"2.5\"\n py=\"1\"\n textStyle=\"xs\"\n shadow=\"md\"\n >\n {!hideLabel ? <Text fontWeight=\"medium\">{tooltipLabel}</Text> : null}\n <Box>\n {payload.map((item, index) => {\n const config = chart.getSeries(item)\n\n if (render) {\n return <Box key={index}>{render(item as Payload<string, string>)}</Box>\n }\n\n const formatted = formatter\n ? formatter(item.value, item.name)\n : item.value?.toLocaleString()\n const [formattedValue, formattedName] = Array.isArray(formatted)\n ? formatted\n : [formatted, capitalizeLabel(item.name)]\n\n return (\n <Flex key={index} gap=\"1.5\" wrap=\"wrap\" align=\"center\">\n {!hideIndicator ? (\n config?.color ? (\n <Box\n boxSize=\"2\"\n rounded=\"full\"\n bg={chart.color(config.color)}\n borderWidth=\"1px\"\n borderColor=\"blackAlpha.200\"\n flexShrink={0}\n />\n ) : (\n <Box\n boxSize=\"2\"\n rounded=\"full\"\n bg=\"border.emphasized\"\n borderWidth=\"1px\"\n borderColor=\"blackAlpha.200\"\n flexShrink={0}\n />\n )\n ) : null}\n <HStack justify=\"space-between\" flex=\"1\">\n {!hideSeriesLabel ? (\n <Text color=\"fg.muted\">{toRenderableValue(formattedName)}</Text>\n ) : null}\n {item.value != null ? (\n <Text fontFamily=\"mono\" fontWeight=\"medium\" fontVariantNumeric=\"tabular-nums\">\n {toRenderableValue(formattedValue)}\n </Text>\n ) : null}\n </HStack>\n </Flex>\n )\n })}\n </Box>\n {showTotal ? (\n <>\n <Separator mt=\"1\" />\n <HStack gap=\"1\" justify=\"space-between\" pb=\"1\">\n <Span color=\"fg.muted\">Total</Span>\n <Text fontFamily=\"mono\" fontWeight=\"medium\" fontVariantNumeric=\"tabular-nums\">\n {formatter\n ? (() => {\n const formatted = formatter(total, '')\n return Array.isArray(formatted) ? formatted[0] : formatted\n })()\n : total.toLocaleString()}\n </Text>\n </HStack>\n </>\n ) : null}\n </Stack>\n )\n}\n\nfunction ChartLegendContent({\n payload,\n verticalAlign = 'bottom',\n align = 'center',\n title,\n orientation,\n nameKey,\n spacing = '3',\n interaction = 'hover',\n rootProps,\n itemProps,\n labelProps,\n indicatorProps,\n}: ChartLegendContentProps) {\n const chart = useGovukChartContext()\n const filteredPayload = payload?.filter((item) => item.color !== 'none' || item.type !== 'none')\n\n if (!filteredPayload?.length) {\n return null\n }\n\n const spacingValue = typeof spacing === 'number' ? `${spacing}px` : chart.spacing(spacing)\n const alignMap = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n } as const\n\n return (\n <Stack\n gap=\"1.5\"\n align={alignMap[align]}\n pt={verticalAlign === 'bottom' ? '3' : undefined}\n pb={verticalAlign === 'top' ? '3' : undefined}\n {...rootProps}\n >\n {title ? <Text fontWeight=\"medium\">{title}</Text> : null}\n <Flex\n data-orientation={orientation}\n gap={spacingValue}\n direction={{ _horizontal: 'row', _vertical: 'column' }}\n align={{ _horizontal: 'center', _vertical: 'flex-start' }}\n flexWrap=\"wrap\"\n >\n {filteredPayload.map((item, index) => {\n const config = chart.getSeries(item)\n const seriesName =\n config?.name == null\n ? undefined\n : typeof config.name === 'string'\n ? config.name\n : String(config.name)\n const name = getPayloadProp(item as TooltipPayloadEntry, nameKey)\n const label = capitalizeLabel(name ?? config?.label)\n\n return (\n <HStack\n key={index}\n gap=\"1.5\"\n style={{ opacity: chart.getSeriesOpacity(seriesName, 0.6) }}\n onClick={() => {\n if (interaction === 'click' && seriesName) {\n chart.setHighlightedSeries((prev) => (prev === seriesName ? null : seriesName))\n }\n }}\n onMouseEnter={() => {\n if (interaction === 'hover' && seriesName) {\n chart.setHighlightedSeries(seriesName)\n }\n }}\n onMouseLeave={() => {\n if (interaction === 'hover' && seriesName) {\n chart.setHighlightedSeries(null)\n }\n }}\n {...itemProps}\n >\n {config?.icon ? (\n config.icon\n ) : (\n <Box\n boxSize=\"2\"\n rounded=\"full\"\n bg={config?.color ? chart.color(config.color) : 'border.emphasized'}\n borderWidth=\"1px\"\n borderColor=\"blackAlpha.200\"\n flexShrink={0}\n {...indicatorProps}\n />\n )}\n <Span color=\"fg.muted\" {...labelProps}>\n {toRenderableValue(label)}\n </Span>\n </HStack>\n )\n })}\n </Flex>\n </Stack>\n )\n}\n\nfunction ChartLegend(props: ChartRechartsLegendProps) {\n const {\n rootProps,\n itemProps,\n labelProps,\n indicatorProps,\n title,\n nameKey,\n interaction,\n spacing,\n payload,\n align,\n verticalAlign,\n layout,\n ...legendProps\n } = props\n\n return (\n <RechartsLegend\n {...legendProps}\n align={align}\n verticalAlign={verticalAlign}\n layout={layout}\n content={\n <ChartLegendContent\n rootProps={rootProps}\n itemProps={itemProps}\n labelProps={labelProps}\n indicatorProps={indicatorProps}\n title={title}\n nameKey={nameKey}\n interaction={interaction}\n spacing={spacing}\n payload={payload}\n align={align}\n verticalAlign={verticalAlign}\n layout={layout}\n />\n }\n />\n )\n}\n\nfunction ChartRechartsTooltip(props: ChartRechartsTooltipProps) {\n return <RechartsTooltip {...props} content={<ChartTooltip {...props} />} />\n}\n\nfunction ChartRoot<T>({ fontFamily = 'body', fontSize = 16, ...props }: ChartRootProps<T>) {\n const scale = getGovukTypeScale(fontSize)\n if (!scale) {\n console.warn(\n `[GOV.UK Chart] fontSize={${fontSize}} is not a valid GOV.UK type scale point. Use one of: 16, 19, 24, 27, 36, 48, 80.`\n )\n } else {\n return (\n <ChartContext.Provider value={props.chart as UseChartReturn<unknown>}>\n <ChakraChart.Root\n fontFamily={fontFamily}\n css={{\n '& svg.recharts-surface tspan': {\n fontSize: { base: scale.small.fontSize, md: scale.large.fontSize },\n lineHeight: { base: scale.small.lineHeight, md: scale.large.lineHeight },\n color: 'fg',\n fontFamily: fonts.body.value,\n },\n '& .recharts-tooltip-wrapper': {\n background: 'var(--govuk-colors-bg)',\n borderRadius: 'var(--govuk-radii-l2)',\n },\n }}\n {...props}\n />\n </ChartContext.Provider>\n )\n }\n}\n\nexport { ChartRoot }\n\nexport const Chart = Object.assign(ChartRoot, {\n ...ChakraChart,\n Root: ChartRoot,\n Legend: ChartLegend,\n LegendContent: ChartLegendContent,\n Tooltip: ChartRechartsTooltip,\n TooltipContent: ChartTooltip,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { PieChart as ChakraDonutChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface DonutChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraDonutChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction DonutChartRoot<T>({ chart, chartRootProps, ...props }: DonutChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraDonutChart data={chart.data} {...props} />\n </Chart.Root>\n )\n}\n\nexport { DonutChartRoot }\n\nexport const DonutChart = Object.assign(DonutChartRoot, {\n Root: DonutChartRoot,\n})\n"],"mappings":"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"}
|
package/dist/chakra.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./fa-CC_HD7Ew.js`),t=require(`./govUkTheme-CEAa7qOA.js`),n=require(`./provider-Cuy0py8Y.js`),r=require(`./govuk-chakra-D_5Vmyql.js`),i=require(`./DonutChart-B2NoUGch.js`);exports.Accordion=r.Ct,exports.Alert=r.xt,exports.Avatar=r.bt,exports.BackLink=r.yt,exports.Breadcrumbs=r.vt,exports.Button=e.h,exports.Calendar=r._t,exports.Card=r.ht,exports.CardGroup=r.gt,exports.Carousel=r.mt,exports.Checkbox=r.ft,exports.Code=r.dt,exports.Collapsible=r.ut,exports.ColorPicker=r.lt,exports.ColorSwatch=r.ct,exports.Combobox=r.st,exports.CookieBanner=r.ot,exports.DateInput=r.at,exports.Details=r.it,exports.Dialog=r.rt,exports.DonutChart=i.t,exports.Editable=r.nt,exports.EmptyState=r.tt,exports.ErrorSummary=r.et,exports.Fieldset=r.pt,exports.FileUpload=r.$,exports.GOVUKCrest=r.Q,exports.GOVUKCrown=r.Z,exports.GOVUKFooter=r.X,exports.GOVUKHeader=r.Y,exports.GOVUKOGL=r.J,exports.GOVUKProvider=n.t,exports.Heading=r.St,exports.Highlight=r.q,exports.HoverCard=r.K,exports.IconButton=r.G,exports.Image=r.W,exports.InsetText=r.U,exports.Kbd=r.H,exports.Link=r.wt,exports.Listbox=r.V,exports.Marquee=r.B,exports.Menu=r.z,exports.NotificationBanner=r.R,exports.Pagination=r.L,exports.Panel=r.I,exports.PhaseBanner=r.t,exports.PinInput=r.F,exports.Popover=r.P,exports.Progress=r.N,exports.ProgressCircle=r.M,exports.QRCode=r.j,exports.Radio=r.A,exports.RadioCard=r.k,exports.Rating=r.O,exports.SegmentedControl=r.E,exports.Select=r.D,exports.Separator=r.T,exports.ServiceNavigation=r.w,exports.Skeleton=r.C,exports.SkipLink=r.S,exports.Slider=r.x,exports.Spinner=r.b,exports.Stat=r.y,exports.Status=r.v,exports.Steps=r._,exports.SummaryList=r.g,exports.Switch=r.h,exports.Table=r.m,exports.Tabs=r.p,exports.Tag=r.n,exports.TagsInput=r.f,exports.TaskList=r.d,exports.Text=i.r,exports.Textarea=r.u,exports.Textinput=r.l,exports.Timeline=r.c,exports.Toast=r.s,exports.ToggleTip=r.o,exports.Tooltip=r.a,exports.TreeView=r.i,exports.WarningText=r.r,exports.govUkTheme=t.t;var a=require(`@chakra-ui/react`);Object.keys(a).forEach(function(e){e!==`default`&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return a[e]}})});
|
package/dist/chakra.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { $ as e, A as t,
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as
|
|
1
|
+
import { $ as e, A as t, B as n, C as r, Ct as i, D as a, E as o, F as s, G as c, H as l, I as u, J as d, K as f, L as p, M as m, N as h, O as g, P as _, Q as v, R as y, S as b, St as x, T as S, U as C, V as w, W as T, X as E, Y as D, Z as O, _ as k, _t as A, a as j, at as M, b as N, bt as P, c as F, ct as I, d as L, dt as R, et as z, f as B, ft as V, g as H, gt as U, h as W, ht as G, i as K, it as q, j as J, k as Y, l as X, lt as Z, m as Q, mt as $, n as ee, nt as te, o as ne, ot as re, p as ie, pt as ae, q as oe, r as se, rt as ce, s as le, st as ue, t as de, tt as fe, u as pe, ut as me, v as he, vt as ge, w as _e, wt as ve, x as ye, xt as be, y as xe, yt as Se, z as Ce } from "./govuk-chakra-CV3lJEgF.mjs";
|
|
2
|
+
import { t as we } from "./govUkTheme-tLHKWFNM.mjs";
|
|
3
|
+
import { t as Te } from "./provider-D2upJinq.mjs";
|
|
4
|
+
import { r as Ee, t as De } from "./DonutChart-BETSwZzl.mjs";
|
|
5
|
+
import { h as Oe } from "./fa-xl5EwpyO.mjs";
|
|
4
6
|
export * from "@chakra-ui/react";
|
|
5
|
-
export {
|
|
7
|
+
export { i as Accordion, be as Alert, P as Avatar, Se as BackLink, ge as Breadcrumbs, Oe as Button, A as Calendar, G as Card, U as CardGroup, $ as Carousel, V as Checkbox, R as Code, me as Collapsible, Z as ColorPicker, I as ColorSwatch, ue as Combobox, re as CookieBanner, M as DateInput, q as Details, ce as Dialog, De as DonutChart, te as Editable, fe as EmptyState, z as ErrorSummary, ae as Fieldset, e as FileUpload, v as GOVUKCrest, O as GOVUKCrown, E as GOVUKFooter, D as GOVUKHeader, d as GOVUKOGL, Te as GOVUKProvider, x as Heading, oe as Highlight, f as HoverCard, c as IconButton, T as Image, C as InsetText, l as Kbd, ve as Link, w as Listbox, n as Marquee, Ce as Menu, y as NotificationBanner, p as Pagination, u as Panel, de as PhaseBanner, s as PinInput, _ as Popover, h as Progress, m as ProgressCircle, J as QRCode, t as Radio, Y as RadioCard, g as Rating, o as SegmentedControl, a as Select, S as Separator, _e as ServiceNavigation, r as Skeleton, b as SkipLink, ye as Slider, N as Spinner, xe as Stat, he as Status, k as Steps, H as SummaryList, W as Switch, Q as Table, ie as Tabs, ee as Tag, B as TagsInput, L as TaskList, Ee as Text, pe as Textarea, X as Textinput, F as Timeline, le as Toast, ne as ToggleTip, j as Tooltip, K as TreeView, se as WarningText, we as govUkTheme };
|
package/dist/charts.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./fa-CC_HD7Ew.js`);const e=require(`./px-to-rem-B0cUWNN2.js`),t=require(`./DonutChart-B2NoUGch.js`);let n=require(`@chakra-ui/react`),r=require(`react`),i=require(`react/jsx-runtime`),a=require(`recharts`),o=require(`@chakra-ui/charts`);function s({chart:e,chartRootProps:n,style:r,...o}){return(0,i.jsx)(t.n.Root,{chart:e,...n,children:(0,i.jsx)(a.AreaChart,{data:e.data,style:{...r},...o})})}var c=Object.assign(s,{Root:s});function l({chart:e,chartRootProps:n,...r}){return(0,i.jsx)(t.n.Root,{chart:e,...n,children:(0,i.jsx)(a.BarChart,{data:e.data,...r})})}var u=Object.assign(l,{Root:l}),d=(0,r.createContext)(null);function f(){let e=(0,r.useContext)(d);if(!e)throw Error(`BarList components must be rendered inside BarList.Root`);return e}var p=({chart:e,barSize:t=`10`,children:r,...a})=>(0,i.jsx)(n.Box,{...a,css:{"--bar-size":e.size(t)},children:(0,i.jsx)(d.Provider,{value:e,children:r})}),m=e=>(0,i.jsx)(n.HStack,{textStyle:`md`,mb:`4`,fontWeight:`medium`,...e}),h=e=>(0,i.jsx)(n.Flex,{flexWrap:`nowrap`,align:`flex-end`,gap:`4`,...e}),g=({payload:e,labelFormatter:t,...r})=>{let a=f(),o=t||a.formatNumber({style:`decimal`});return!e||a.highlightedSeries!==e.name?null:(0,i.jsx)(n.AbsoluteCenter,{display:{base:`none`,_groupHover:`block`},axis:`vertical`,right:`2`,zIndex:`1`,textStyle:`xs`,fontWeight:`medium`,bg:`bg.panel`,px:`1.5`,py:`1`,rounded:`l2`,shadow:`xs`,pointerEvents:`none`,...r,children:o(e.value)})},_=Object.assign(p,{Root:p,Title:m,Content:h,Tooltip:g,Bar:({label:e,tooltip:a,...o})=>{let s=f(),c=s.series[0],l=(0,r.useCallback)(e=>s.getValuePercent(`value`,e,e=>[0,e.max]),[s]),u=(0,r.useCallback)(e=>{let t=s.getSeries(e)?.color??s.getSeries({name:e.name})?.color??c?.color??e.color;return t?s.color(t):s.color(`blue.500`)},[s,c?.color]);return(0,i.jsx)(n.Stack,{flex:`1`,...o,children:s.data.map((r,o)=>(0,i.jsx)(n.HStack,{className:`bar-list_item`,flex:1,minH:`var(--bar-size)`,w:`full`,gap:`8`,_hover:{bg:`bg.subtle`},onMouseMove:()=>{a&&s.highlightedSeries!==r.name&&s.setHighlightedSeries(r.name)},onMouseLeave:()=>{a&&s.setHighlightedSeries(null)},children:(0,i.jsxs)(n.Box,{pos:`relative`,flex:`1`,className:`group`,children:[typeof a==`function`?a({payload:r}):null,typeof a==`boolean`&&a?(0,i.jsx)(g,{payload:r}):null,(0,i.jsx)(n.Box,{pos:`absolute`,insetStart:`0`,top:`0`,bottom:`0`,bgColor:u(r)?u(r):`blue.500`,rounded:`l2`,width:`var(--bar-width)`,style:{"--bar-width":`${l(r.value)}%`}}),(0,i.jsx)(n.HStack,{flex:`1`,justify:`flex-start`,textStyle:`sm`,pos:`relative`,wordBreak:`break-all`,w:`full`,minH:`var(--bar-size)`,px:`2.5`,className:`barlist-value`,children:(0,i.jsx)(t.r,{fontSize:16,color:`white`,children:(0,i.jsx)(n.Show,{when:e,fallback:r.name,children:e?.({payload:r,index:o})})})})]})},r.name))})},Value:({valueFormatter:e,...r})=>{let a=f(),o=e||a.formatNumber({notation:`compact`,maximumFractionDigits:2});return(0,i.jsx)(n.Stack,{...r,children:a.data.map(e=>(0,i.jsx)(n.HStack,{minH:`var(--bar-size)`,justify:`flex-end`,textStyle:`sm`,fontWeight:`medium`,className:`list_value`,children:(0,i.jsx)(t.r,{color:`fg`,fontSize:16,children:o(e.value)})},e.name))})},Label:({title:e,titleAlignment:r,children:a,...o})=>(0,i.jsxs)(n.Stack,{className:`bar_list_label`,...o,children:[(0,i.jsx)(t.r,{fontSize:19,fontWeight:`medium`,color:`fg`,textAlign:r,children:e}),a]})}),v=({fontFamily:e=`body`,...t})=>(0,i.jsx)(o.BarSegment.Root,{fontFamily:e,...t}),y=Object.assign(v,{Root:v,Content:e=>(0,i.jsx)(o.BarSegment.Content,{...e}),Label:({fontSize:t=16,children:n,...r})=>{let a=e.t(t);if(a)return(0,i.jsx)(o.BarSegment.Label,{...r,className:`labels`,css:{"& > div":{color:`fg.muted`,fontSize:{base:a.small.fontSize,md:a.large.fontSize},lineHeight:{base:a.small.lineHeight,md:a.large.lineHeight},fontWeight:`700`}},children:n})},Bar:e=>(0,i.jsx)(o.BarSegment.Bar,{...e}),Reference:e=>(0,i.jsx)(o.BarSegment.Reference,{...e}),Value:({fontSize:t=16,children:n,...r})=>{let a=e.t(t);if(a)return(0,i.jsx)(o.BarSegment.Value,{...r,className:`values`,css:{"& > div":{color:`fg.muted`,fontSize:{base:a.small.fontSize,md:a.large.fontSize},lineHeight:{base:a.small.lineHeight,md:a.large.lineHeight}}},children:n})},Legend:e=>(0,i.jsx)(o.BarSegment.Legend,{...e,className:`legend`}),Tooltip:e=>(0,i.jsx)(o.BarSegment.Tooltip,{...e})});function b({chart:e,chartRootProps:n,style:r,...o}){return(0,i.jsx)(t.n.Root,{chart:e,...n,children:(0,i.jsx)(a.LineChart,{data:e.data,style:{fontFamily:`var(--chakra-fonts-body)`,...r},...o})})}var x=Object.assign(b,{Root:b});function S({chart:e,chartRootProps:n,style:r,...o}){return(0,i.jsx)(t.n.Root,{chart:e,...n,children:(0,i.jsx)(a.PieChart,{data:e.data,style:{fontFamily:`var(--chakra-fonts-body)`,...r},...o})})}var C=Object.assign(S,{Root:S});function w({chart:e,chartRootProps:n,...r}){return(0,i.jsx)(t.n.Root,{chart:e,...n,children:(0,i.jsx)(a.RadarChart,{data:e.data,...r})})}var T=Object.assign(w,{Root:w});function E({chart:e,chartRootProps:n,...r}){return(0,i.jsx)(t.n.Root,{chart:e,...n,children:(0,i.jsx)(a.ScatterChart,{data:e.data,...r})})}var D=Object.assign(E,{Root:E});function O({chart:e,chartRootProps:n,style:r,...o}){return(0,i.jsx)(t.n.Root,{chart:e,...n,children:(0,i.jsx)(a.LineChart,{data:e.data,style:{fontFamily:`var(--chakra-fonts-body)`,...r},...o})})}var k=Object.assign(O,{Root:O});exports.AreaChart=c,exports.BarChart=u,exports.BarList=_,exports.BarSegment=y,exports.Chart=t.n,exports.DonutChart=t.t,exports.LineChart=x,exports.PieChart=C,exports.RadarChart=T,exports.ScatterChart=D,exports.Sparkline=k;
|
|
2
|
+
//# sourceMappingURL=charts.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.cjs","names":[],"sources":["../src/components/AreaChart/AreaChart.tsx","../src/components/BarChart/BarChart.tsx","../src/components/BarList/BarList.tsx","../src/components/BarSegment/BarSegment.tsx","../src/components/LineChart/LineChart.tsx","../src/components/PieChart/PieChart.tsx","../src/components/RadarChart/RadarChart.tsx","../src/components/ScatterChart/ScatterChart.tsx","../src/components/Sparkline/Sparkline.tsx"],"sourcesContent":["import type { UseChartReturn } from '@chakra-ui/charts'\nimport { AreaChart as ChakraAreaChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface AreaChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraAreaChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction AreaChartRoot<T>({ chart, chartRootProps, style, ...props }: AreaChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraAreaChart data={chart.data} style={{ ...style }} {...props} />\n </Chart.Root>\n )\n}\n\nexport { AreaChartRoot }\n\nexport const AreaChart = Object.assign(AreaChartRoot, {\n Root: AreaChartRoot,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { BarChart as ChakraBarChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface BarChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraBarChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction BarChartRoot<T>({ chart, chartRootProps, ...props }: BarChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraBarChart data={chart.data} {...props} />\n </Chart.Root>\n )\n}\n\nexport { BarChartRoot }\n\nexport const BarChart = Object.assign(BarChartRoot, {\n Root: BarChartRoot,\n})\n","import { BarList as ChakraBarList } from '@chakra-ui/charts'\nimport { AbsoluteCenter, Box, Flex, HStack, Show, Stack } from '@chakra-ui/react'\nimport {\n createContext,\n useCallback,\n useContext,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\nimport { Text } from '../Text'\n\ntype BarListChart = ComponentPropsWithoutRef<typeof ChakraBarList.Root>['chart']\n\nconst BarListChartContext = createContext<BarListChart | null>(null)\n\nfunction useBarListChart() {\n const chart = useContext(BarListChartContext)\n\n if (!chart) {\n throw new Error('BarList components must be rendered inside BarList.Root')\n }\n\n return chart\n}\n\nexport type BarListProps = ComponentPropsWithoutRef<typeof ChakraBarList.Root>\n\nexport const BarListRoot = ({ chart, barSize = '10', children, ...rest }: BarListProps) => {\n return (\n <Box {...rest} css={{ '--bar-size': chart.size(barSize) }}>\n <BarListChartContext.Provider value={chart}>{children}</BarListChartContext.Provider>\n </Box>\n )\n}\n\nconst BarListTitle = (props: ComponentPropsWithoutRef<typeof ChakraBarList.Title>) => {\n return <HStack textStyle=\"md\" mb=\"4\" fontWeight=\"medium\" {...props} />\n}\n\nconst BarListContent = (props: ComponentPropsWithoutRef<typeof ChakraBarList.Content>) => {\n return <Flex flexWrap=\"nowrap\" align=\"flex-end\" gap=\"4\" {...props} />\n}\n\nconst BarListTooltip = ({\n payload,\n labelFormatter,\n ...rest\n}: ComponentPropsWithoutRef<typeof ChakraBarList.Tooltip>) => {\n const chart = useBarListChart()\n const formatter = labelFormatter || chart.formatNumber({ style: 'decimal' })\n\n if (!payload || chart.highlightedSeries !== payload.name) return null\n\n return (\n <AbsoluteCenter\n display={{ base: 'none', _groupHover: 'block' }}\n axis=\"vertical\"\n right=\"2\"\n zIndex=\"1\"\n textStyle=\"xs\"\n fontWeight=\"medium\"\n bg=\"bg.panel\"\n px=\"1.5\"\n py=\"1\"\n rounded=\"l2\"\n shadow=\"xs\"\n pointerEvents=\"none\"\n {...rest}\n >\n {formatter(payload.value)}\n </AbsoluteCenter>\n )\n}\n\nconst BarListBar = ({\n label,\n tooltip,\n ...rest\n}: ComponentPropsWithoutRef<typeof ChakraBarList.Bar>) => {\n const chart = useBarListChart()\n const primarySeries = chart.series[0]\n\n const getPercent = useCallback(\n (value: number) => chart.getValuePercent('value', value, (domain) => [0, domain.max]),\n [chart]\n )\n\n const getBarColor = useCallback(\n (item: { name: string; color?: string }) => {\n const configuredColor =\n chart.getSeries(item)?.color ??\n chart.getSeries({ name: item.name })?.color ??\n primarySeries?.color ??\n item.color\n\n return configuredColor ? chart.color(configuredColor) : chart.color('blue.500')\n },\n [chart, primarySeries?.color]\n )\n\n return (\n <Stack flex=\"1\" {...rest}>\n {chart.data.map((item, index) => (\n <HStack\n key={item.name}\n className=\"bar-list_item\"\n flex={1}\n minH=\"var(--bar-size)\"\n w=\"full\"\n gap=\"8\"\n _hover={{ bg: 'bg.subtle' }}\n onMouseMove={() => {\n if (!tooltip) return\n if (chart.highlightedSeries === item.name) return\n chart.setHighlightedSeries(item.name)\n }}\n onMouseLeave={() => {\n if (!tooltip) return\n chart.setHighlightedSeries(null)\n }}\n >\n <Box pos=\"relative\" flex=\"1\" className=\"group\">\n {typeof tooltip === 'function' ? tooltip({ payload: item }) : null}\n {typeof tooltip === 'boolean' && tooltip ? <BarListTooltip payload={item} /> : null}\n <Box\n pos=\"absolute\"\n insetStart=\"0\"\n top=\"0\"\n bottom=\"0\"\n bgColor={getBarColor(item) ? getBarColor(item) : 'blue.500'}\n rounded=\"l2\"\n width=\"var(--bar-width)\"\n style={{ ['--bar-width' as string]: `${getPercent(item.value)}%` }}\n />\n <HStack\n flex=\"1\"\n justify=\"flex-start\"\n textStyle=\"sm\"\n pos=\"relative\"\n wordBreak=\"break-all\"\n w=\"full\"\n minH=\"var(--bar-size)\"\n px=\"2.5\"\n className=\"barlist-value\"\n >\n <Text fontSize={16} color={'white'}>\n <Show when={label} fallback={item.name}>\n {label?.({ payload: item, index }) as ReactNode}\n </Show>\n </Text>\n </HStack>\n </Box>\n </HStack>\n ))}\n </Stack>\n )\n}\n\nconst BarListValue = ({\n valueFormatter,\n ...rest\n}: ComponentPropsWithoutRef<typeof ChakraBarList.Value>) => {\n const chart = useBarListChart()\n const formatter =\n valueFormatter ||\n chart.formatNumber({\n notation: 'compact',\n maximumFractionDigits: 2,\n })\n\n return (\n <Stack {...rest}>\n {chart.data.map((item) => (\n <HStack\n key={item.name}\n minH=\"var(--bar-size)\"\n justify=\"flex-end\"\n textStyle=\"sm\"\n fontWeight=\"medium\"\n className=\"list_value\"\n >\n <Text color=\"fg\" fontSize={16}>\n {formatter(item.value)}\n </Text>\n </HStack>\n ))}\n </Stack>\n )\n}\n\nconst BarListLabel = ({\n title,\n titleAlignment,\n children,\n ...rest\n}: ComponentPropsWithoutRef<typeof ChakraBarList.Label>) => {\n return (\n <Stack className=\"bar_list_label\" {...rest}>\n <Text fontSize={19} fontWeight=\"medium\" color=\"fg\" textAlign={titleAlignment}>\n {title}\n </Text>\n {children}\n </Stack>\n )\n}\n\nexport const BarList = Object.assign(BarListRoot, {\n Root: BarListRoot,\n Title: BarListTitle,\n Content: BarListContent,\n Tooltip: BarListTooltip,\n Bar: BarListBar,\n Value: BarListValue,\n Label: BarListLabel,\n})\n","import { getGovukTypeScale } from '@/utils'\nimport { BarSegment as ChakraBarSegment } from '@chakra-ui/charts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nexport type BarSegmentProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Root>\nexport type BarSegmentContentProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Content>\nexport type BarSegmentLabelProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Label>\nexport type BarSegmentBarProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Bar>\nexport type BarSegmentReferenceProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Reference>\nexport type BarSegmentValueProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Value>\nexport type BarSegmentLegendProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Legend>\nexport type BarSegmentTooltipProps = ComponentPropsWithoutRef<typeof ChakraBarSegment.Tooltip>\n\ntype BarSegmentComponent = typeof BarSegmentRoot & {\n Root: typeof BarSegmentRoot\n Content: typeof BarSegmentContent\n Label: typeof BarSegmentLabel\n Bar: typeof BarSegmentBar\n Reference: typeof BarSegmentReference\n Value: typeof BarSegmentValue\n Legend: typeof BarSegmentLegend\n Tooltip: typeof BarSegmentTooltip\n}\n\nconst BarSegmentRoot = ({ fontFamily = 'body', ...props }: BarSegmentProps) => {\n return <ChakraBarSegment.Root fontFamily={fontFamily} {...props} />\n}\n\nconst BarSegmentContent = (props: BarSegmentContentProps) => {\n return <ChakraBarSegment.Content {...props} />\n}\n\nconst BarSegmentLabel = ({ fontSize = 16, children, ...props }: BarSegmentLabelProps) => {\n const scale = getGovukTypeScale(fontSize)\n\n if (scale) {\n return (\n <ChakraBarSegment.Label\n {...props}\n className=\"labels\"\n css={{\n '& > div': {\n color: 'fg.muted',\n fontSize: { base: scale.small.fontSize, md: scale.large.fontSize },\n lineHeight: { base: scale.small.lineHeight, md: scale.large.lineHeight },\n fontWeight: '700',\n },\n }}\n >\n {children}\n </ChakraBarSegment.Label>\n )\n }\n}\n\nconst BarSegmentBar = (props: BarSegmentBarProps) => {\n return <ChakraBarSegment.Bar {...props} />\n}\n\nconst BarSegmentReference = (props: BarSegmentReferenceProps) => {\n return <ChakraBarSegment.Reference {...props} />\n}\n\nconst BarSegmentValue = ({ fontSize = 16, children, ...props }: BarSegmentValueProps) => {\n const scale = getGovukTypeScale(fontSize)\n if (scale) {\n return (\n <ChakraBarSegment.Value\n {...props}\n className=\"values\"\n css={{\n '& > div': {\n color: 'fg.muted',\n fontSize: { base: scale.small.fontSize, md: scale.large.fontSize },\n lineHeight: { base: scale.small.lineHeight, md: scale.large.lineHeight },\n },\n }}\n >\n {children}\n </ChakraBarSegment.Value>\n )\n }\n}\n\nconst BarSegmentLegend = (props: BarSegmentLegendProps) => {\n return <ChakraBarSegment.Legend {...props} className=\"legend\" />\n}\n\nconst BarSegmentTooltip = (props: BarSegmentTooltipProps) => {\n return <ChakraBarSegment.Tooltip {...props} />\n}\n\nexport {\n BarSegmentRoot,\n BarSegmentContent,\n BarSegmentLabel,\n BarSegmentBar,\n BarSegmentReference,\n BarSegmentValue,\n BarSegmentLegend,\n BarSegmentTooltip,\n}\n\nexport const BarSegment: BarSegmentComponent = Object.assign(BarSegmentRoot, {\n Root: BarSegmentRoot,\n Content: BarSegmentContent,\n Label: BarSegmentLabel,\n Bar: BarSegmentBar,\n Reference: BarSegmentReference,\n Value: BarSegmentValue,\n Legend: BarSegmentLegend,\n Tooltip: BarSegmentTooltip,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { LineChart as ChakraLineChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface LineChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraLineChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction LineChartRoot<T>({ chart, chartRootProps, style, ...props }: LineChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraLineChart\n data={chart.data}\n style={{ fontFamily: 'var(--chakra-fonts-body)', ...style }}\n {...props}\n />\n </Chart.Root>\n )\n}\n\nexport { LineChartRoot }\n\nexport const LineChart = Object.assign(LineChartRoot, {\n Root: LineChartRoot,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { PieChart as ChakraPieChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface PieChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraPieChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction PieChartRoot<T>({ chart, chartRootProps, style, ...props }: PieChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraPieChart\n data={chart.data}\n style={{ fontFamily: 'var(--chakra-fonts-body)', ...style }}\n {...props}\n />\n </Chart.Root>\n )\n}\n\nexport { PieChartRoot }\n\nexport const PieChart = Object.assign(PieChartRoot, {\n Root: PieChartRoot,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { RadarChart as ChakraRadarChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface RadarChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraRadarChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction RadarChartRoot<T>({ chart, chartRootProps, ...props }: RadarChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraRadarChart data={chart.data} {...props} />\n </Chart.Root>\n )\n}\n\nexport { RadarChartRoot }\n\nexport const RadarChart = Object.assign(RadarChartRoot, {\n Root: RadarChartRoot,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { ScatterChart as ChakraScatterChart } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface ScatterChartProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraScatterChart>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction ScatterChartRoot<T>({ chart, chartRootProps, ...props }: ScatterChartProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraScatterChart data={chart.data} {...props} />\n </Chart.Root>\n )\n}\n\nexport { ScatterChartRoot }\n\nexport const ScatterChart = Object.assign(ScatterChartRoot, {\n Root: ScatterChartRoot,\n})\n","import type { UseChartReturn } from '@chakra-ui/charts'\nimport { LineChart as ChakraSparkline } from 'recharts'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport { Chart, type ChartRootProps } from '@/components/Chart'\n\nexport interface SparklineProps<T> extends Omit<\n ComponentPropsWithoutRef<typeof ChakraSparkline>,\n 'data'\n> {\n chart: UseChartReturn<T>\n chartRootProps?: Omit<ChartRootProps<T>, 'chart' | 'children'>\n}\n\nfunction SparklineRoot<T>({ chart, chartRootProps, style, ...props }: SparklineProps<T>) {\n return (\n <Chart.Root chart={chart} {...chartRootProps}>\n <ChakraSparkline\n data={chart.data}\n style={{ fontFamily: 'var(--chakra-fonts-body)', ...style }}\n {...props}\n />\n </Chart.Root>\n )\n}\n\nexport { SparklineRoot }\n\nexport const Sparkline = Object.assign(SparklineRoot, {\n Root: SparklineRoot,\n})\n"],"mappings":"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"}
|