whitehall-ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -0
- package/dist/chunk-2QKZ6DPC.js +27 -0
- package/dist/chunk-3INCIYDO.js +213 -0
- package/dist/chunk-3YIKJK6M.js +181 -0
- package/dist/chunk-4MXR4WNS.js +17 -0
- package/dist/chunk-5AKGRLG2.js +190 -0
- package/dist/chunk-5H55YDJS.js +69 -0
- package/dist/chunk-5PIQJ22R.js +106 -0
- package/dist/chunk-5TI2WXYU.js +64 -0
- package/dist/chunk-5XNKIBMP.js +21 -0
- package/dist/chunk-6VXVJERU.js +38 -0
- package/dist/chunk-72PH2FMG.js +180 -0
- package/dist/chunk-7ZCZQN5N.js +71 -0
- package/dist/chunk-AO6HPG4R.js +50 -0
- package/dist/chunk-CEPBVMFU.js +34 -0
- package/dist/chunk-G6T44BDV.js +75 -0
- package/dist/chunk-GUZIKVAE.js +119 -0
- package/dist/chunk-JESMK3XK.js +105 -0
- package/dist/chunk-JFZN5XP6.js +88 -0
- package/dist/chunk-KD4LPFIZ.js +67 -0
- package/dist/chunk-KWAC6IEK.js +95 -0
- package/dist/chunk-LRNZYPC2.js +107 -0
- package/dist/chunk-M6CLPMRP.js +227 -0
- package/dist/chunk-N67H5OUQ.js +51 -0
- package/dist/chunk-NRXTKHI2.js +169 -0
- package/dist/chunk-OP35ZJ4X.js +46 -0
- package/dist/chunk-P4GCF5FQ.js +62 -0
- package/dist/chunk-PGZHPAT5.js +183 -0
- package/dist/chunk-QTSEOPVX.js +94 -0
- package/dist/chunk-RPV43YDC.js +93 -0
- package/dist/chunk-SK27BMU5.js +140 -0
- package/dist/chunk-TXGBUZB4.js +44 -0
- package/dist/chunk-UWQFFFTB.js +136 -0
- package/dist/chunk-VB6V3PHD.js +67 -0
- package/dist/chunk-VQOCX44T.js +41 -0
- package/dist/chunk-WONVZ7WK.js +29 -0
- package/dist/chunk-WPPWPEFV.js +150 -0
- package/dist/chunk-XQOYWPKV.js +48 -0
- package/dist/chunk-YAKI4SI7.js +205 -0
- package/dist/chunk-YCLGXX3R.js +68 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +39 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +1 -0
- package/dist/ui/accordion.d.ts +27 -0
- package/dist/ui/accordion.js +2 -0
- package/dist/ui/back-link.d.ts +9 -0
- package/dist/ui/back-link.js +2 -0
- package/dist/ui/breadcrumbs.d.ts +22 -0
- package/dist/ui/breadcrumbs.js +2 -0
- package/dist/ui/button.d.ts +17 -0
- package/dist/ui/button.js +2 -0
- package/dist/ui/character-count.d.ts +27 -0
- package/dist/ui/character-count.js +3 -0
- package/dist/ui/checkboxes.d.ts +30 -0
- package/dist/ui/checkboxes.js +2 -0
- package/dist/ui/cookie-banner.d.ts +24 -0
- package/dist/ui/cookie-banner.js +2 -0
- package/dist/ui/date-input.d.ts +21 -0
- package/dist/ui/date-input.js +2 -0
- package/dist/ui/details.d.ts +20 -0
- package/dist/ui/details.js +2 -0
- package/dist/ui/error-message.d.ts +9 -0
- package/dist/ui/error-message.js +2 -0
- package/dist/ui/error-summary.d.ts +15 -0
- package/dist/ui/error-summary.js +2 -0
- package/dist/ui/exit-this-page.d.ts +14 -0
- package/dist/ui/exit-this-page.js +3 -0
- package/dist/ui/fieldset.d.ts +22 -0
- package/dist/ui/fieldset.js +2 -0
- package/dist/ui/file-upload.d.ts +19 -0
- package/dist/ui/file-upload.js +2 -0
- package/dist/ui/footer.d.ts +61 -0
- package/dist/ui/footer.js +2 -0
- package/dist/ui/generic-header.d.ts +22 -0
- package/dist/ui/generic-header.js +2 -0
- package/dist/ui/header.d.ts +39 -0
- package/dist/ui/header.js +2 -0
- package/dist/ui/hint.d.ts +8 -0
- package/dist/ui/hint.js +2 -0
- package/dist/ui/inset-text.d.ts +8 -0
- package/dist/ui/inset-text.js +2 -0
- package/dist/ui/label.d.ts +18 -0
- package/dist/ui/label.js +2 -0
- package/dist/ui/link.d.ts +16 -0
- package/dist/ui/link.js +2 -0
- package/dist/ui/notification-banner.d.ts +29 -0
- package/dist/ui/notification-banner.js +2 -0
- package/dist/ui/pagination.d.ts +45 -0
- package/dist/ui/pagination.js +2 -0
- package/dist/ui/panel.d.ts +16 -0
- package/dist/ui/panel.js +2 -0
- package/dist/ui/password-input.d.ts +16 -0
- package/dist/ui/password-input.js +4 -0
- package/dist/ui/phase-banner.d.ts +20 -0
- package/dist/ui/phase-banner.js +2 -0
- package/dist/ui/radios.d.ts +25 -0
- package/dist/ui/radios.js +2 -0
- package/dist/ui/select.d.ts +36 -0
- package/dist/ui/select.js +2 -0
- package/dist/ui/service-navigation.d.ts +30 -0
- package/dist/ui/service-navigation.js +2 -0
- package/dist/ui/skip-link.d.ts +8 -0
- package/dist/ui/skip-link.js +2 -0
- package/dist/ui/summary-list.d.ts +49 -0
- package/dist/ui/summary-list.js +2 -0
- package/dist/ui/table.d.ts +40 -0
- package/dist/ui/table.js +2 -0
- package/dist/ui/tabs.d.ts +25 -0
- package/dist/ui/tabs.js +2 -0
- package/dist/ui/tag.d.ts +15 -0
- package/dist/ui/tag.js +2 -0
- package/dist/ui/task-list.d.ts +30 -0
- package/dist/ui/task-list.js +2 -0
- package/dist/ui/text-input.d.ts +18 -0
- package/dist/ui/text-input.js +2 -0
- package/dist/ui/textarea.d.ts +14 -0
- package/dist/ui/textarea.js +2 -0
- package/dist/ui/warning-text.d.ts +9 -0
- package/dist/ui/warning-text.js +2 -0
- package/package.json +263 -0
- package/registry/default/theme/govuk-tokens.css +434 -0
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Whitehall-UI
|
|
2
|
+
|
|
3
|
+
GOV.UK Design System component library for **React 19** + **Tailwind CSS 4**.
|
|
4
|
+
|
|
5
|
+
Distributed two ways:
|
|
6
|
+
|
|
7
|
+
- **npm package** — install `whitehall-ui` and import components.
|
|
8
|
+
- **shadcn registry** — copy component source straight into your project with the shadcn CLI.
|
|
9
|
+
|
|
10
|
+
**Live Storybook & full component list:** https://dawidmakos.github.io/whitehall-ui/
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Requirements
|
|
15
|
+
|
|
16
|
+
These are peer dependencies — install them in your app:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install react@^19 react-dom@^19 tailwindcss@^4 @base-ui/react
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Option A — npm package
|
|
25
|
+
|
|
26
|
+
### 1. Install
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install whitehall-ui
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Load the theme tokens
|
|
33
|
+
|
|
34
|
+
Import the GOV.UK design tokens in your CSS entry point, **after** Tailwind:
|
|
35
|
+
|
|
36
|
+
```css
|
|
37
|
+
@import 'tailwindcss';
|
|
38
|
+
@import 'whitehall-ui/tokens.css';
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 3. Use a component
|
|
42
|
+
|
|
43
|
+
Import from the package root:
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
import { Button, TextInput, Label } from 'whitehall-ui';
|
|
47
|
+
|
|
48
|
+
export function Example() {
|
|
49
|
+
return (
|
|
50
|
+
<form>
|
|
51
|
+
<Label htmlFor='name'>Full name</Label>
|
|
52
|
+
<TextInput id='name' name='name' />
|
|
53
|
+
<Button>Continue</Button>
|
|
54
|
+
</form>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Per-component subpath imports also work (better tree-shaking):
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
import { Button } from 'whitehall-ui/button';
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Option B — shadcn registry
|
|
68
|
+
|
|
69
|
+
Copy the component source into your own codebase (fully editable, no runtime dependency on the package).
|
|
70
|
+
|
|
71
|
+
### 1. Add the theme tokens (once)
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx shadcn@latest add https://dawidmakos.github.io/whitehall-ui/r/govuk-tokens.json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 2. Add components
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npx shadcn@latest add https://dawidmakos.github.io/whitehall-ui/r/button.json
|
|
81
|
+
npx shadcn@latest add https://dawidmakos.github.io/whitehall-ui/r/text-input.json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Swap `button` / `text-input` for any component name below. The CLI resolves each component's dependencies (e.g. the `cn` util) automatically.
|
|
85
|
+
|
|
86
|
+
### 3. Use it
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
import { Button } from '@/components/ui/button';
|
|
90
|
+
|
|
91
|
+
export function Example() {
|
|
92
|
+
return <Button>Continue</Button>;
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Available components
|
|
99
|
+
|
|
100
|
+
`accordion` · `back-link` · `breadcrumbs` · `button` · `character-count` · `checkboxes` · `cookie-banner` · `date-input` · `details` · `error-message` · `error-summary` · `exit-this-page` · `fieldset` · `file-upload` · `footer` · `generic-header` · `header` · `hint` · `inset-text` · `label` · `link` · `notification-banner` · `pagination` · `panel` · `password-input` · `phase-banner` · `radios` · `select` · `service-navigation` · `skip-link` · `summary-list` · `table` · `tabs` · `tag` · `task-list` · `text-input` · `textarea` · `warning-text`
|
|
101
|
+
|
|
102
|
+
See the [Storybook](https://dawidmakos.github.io/whitehall-ui/) for props and live examples.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
MIT
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cn } from './chunk-WONVZ7WK.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
var SkipLink = ({
|
|
5
|
+
className,
|
|
6
|
+
ref,
|
|
7
|
+
children = "Skip to main content",
|
|
8
|
+
href = "#main-content",
|
|
9
|
+
...props
|
|
10
|
+
}) => /* @__PURE__ */ jsx(
|
|
11
|
+
"a",
|
|
12
|
+
{
|
|
13
|
+
ref,
|
|
14
|
+
href,
|
|
15
|
+
className: cn(
|
|
16
|
+
"govuk-skip-link",
|
|
17
|
+
"font-govuk text-govuk-header leading-tight",
|
|
18
|
+
"block py-govuk-2 px-govuk-3",
|
|
19
|
+
"text-govuk-black no-underline",
|
|
20
|
+
className
|
|
21
|
+
),
|
|
22
|
+
...props,
|
|
23
|
+
children
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export { SkipLink };
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { cn } from './chunk-WONVZ7WK.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
var SummaryList = ({
|
|
5
|
+
className,
|
|
6
|
+
noBorder,
|
|
7
|
+
ref,
|
|
8
|
+
children,
|
|
9
|
+
...props
|
|
10
|
+
}) => /* @__PURE__ */ jsx(
|
|
11
|
+
"dl",
|
|
12
|
+
{
|
|
13
|
+
ref,
|
|
14
|
+
className: cn(
|
|
15
|
+
"font-govuk text-govuk-body text-govuk-black",
|
|
16
|
+
"m-0 mb-govuk-6",
|
|
17
|
+
"sm:table sm:w-full sm:table-fixed sm:border-collapse",
|
|
18
|
+
noBorder && "[&_div]:border-0 sm:[&_dt]:pb-2.75 sm:[&_dd]:pb-2.75",
|
|
19
|
+
className
|
|
20
|
+
),
|
|
21
|
+
...props,
|
|
22
|
+
children
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
var SummaryListRow = ({
|
|
26
|
+
className,
|
|
27
|
+
noBorder,
|
|
28
|
+
noActions,
|
|
29
|
+
ref,
|
|
30
|
+
children,
|
|
31
|
+
...props
|
|
32
|
+
}) => /* @__PURE__ */ jsx(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
ref,
|
|
36
|
+
className: cn(
|
|
37
|
+
"border-b border-govuk-mid-grey",
|
|
38
|
+
"max-sm:mb-govuk-3",
|
|
39
|
+
"sm:table-row",
|
|
40
|
+
noBorder && "border-0 sm:[&>dt]:pb-2.75 sm:[&>dd]:pb-2.75",
|
|
41
|
+
noActions && 'sm:after:content-[""] sm:after:table-cell sm:after:w-[20%]',
|
|
42
|
+
className
|
|
43
|
+
),
|
|
44
|
+
...props,
|
|
45
|
+
children
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
var SummaryListKey = ({
|
|
49
|
+
className,
|
|
50
|
+
ref,
|
|
51
|
+
children,
|
|
52
|
+
...props
|
|
53
|
+
}) => /* @__PURE__ */ jsx(
|
|
54
|
+
"dt",
|
|
55
|
+
{
|
|
56
|
+
ref,
|
|
57
|
+
className: cn(
|
|
58
|
+
"m-0 mb-govuk-1 font-bold",
|
|
59
|
+
"wrap-break-word",
|
|
60
|
+
"sm:table-cell sm:pt-govuk-2 sm:pr-govuk-4 sm:pb-govuk-2 sm:align-top sm:w-[30%]",
|
|
61
|
+
className
|
|
62
|
+
),
|
|
63
|
+
...props,
|
|
64
|
+
children
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
var SummaryListValue = ({
|
|
68
|
+
className,
|
|
69
|
+
ref,
|
|
70
|
+
children,
|
|
71
|
+
...props
|
|
72
|
+
}) => /* @__PURE__ */ jsx(
|
|
73
|
+
"dd",
|
|
74
|
+
{
|
|
75
|
+
ref,
|
|
76
|
+
className: cn(
|
|
77
|
+
"m-0 max-sm:mb-govuk-3",
|
|
78
|
+
"wrap-break-word",
|
|
79
|
+
"sm:table-cell sm:pt-govuk-2 sm:pr-govuk-4 sm:pb-govuk-2 sm:align-top",
|
|
80
|
+
className
|
|
81
|
+
),
|
|
82
|
+
...props,
|
|
83
|
+
children
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
var SummaryListActions = ({
|
|
87
|
+
className,
|
|
88
|
+
ref,
|
|
89
|
+
children,
|
|
90
|
+
...props
|
|
91
|
+
}) => /* @__PURE__ */ jsx(
|
|
92
|
+
"dd",
|
|
93
|
+
{
|
|
94
|
+
ref,
|
|
95
|
+
className: cn(
|
|
96
|
+
"m-0 mb-govuk-3",
|
|
97
|
+
"sm:table-cell sm:pt-govuk-2 sm:pb-govuk-2 sm:w-[20%] sm:text-right sm:align-top",
|
|
98
|
+
className
|
|
99
|
+
),
|
|
100
|
+
...props,
|
|
101
|
+
children
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
var SummaryListCard = ({
|
|
105
|
+
className,
|
|
106
|
+
ref,
|
|
107
|
+
children,
|
|
108
|
+
...props
|
|
109
|
+
}) => /* @__PURE__ */ jsx(
|
|
110
|
+
"div",
|
|
111
|
+
{
|
|
112
|
+
ref,
|
|
113
|
+
className: cn("mb-govuk-6 border border-govuk-mid-grey", className),
|
|
114
|
+
...props,
|
|
115
|
+
children
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
var SummaryListCardTitle = ({
|
|
119
|
+
className,
|
|
120
|
+
ref,
|
|
121
|
+
children,
|
|
122
|
+
...props
|
|
123
|
+
}) => /* @__PURE__ */ jsx(
|
|
124
|
+
"h2",
|
|
125
|
+
{
|
|
126
|
+
ref,
|
|
127
|
+
className: cn(
|
|
128
|
+
"font-govuk text-govuk-body font-bold text-govuk-black",
|
|
129
|
+
"m-0 mr-govuk-4 mb-govuk-1",
|
|
130
|
+
className
|
|
131
|
+
),
|
|
132
|
+
...props,
|
|
133
|
+
children
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
var SummaryListCardHeader = ({
|
|
137
|
+
className,
|
|
138
|
+
ref,
|
|
139
|
+
children,
|
|
140
|
+
...props
|
|
141
|
+
}) => /* @__PURE__ */ jsx(
|
|
142
|
+
"div",
|
|
143
|
+
{
|
|
144
|
+
ref,
|
|
145
|
+
className: cn(
|
|
146
|
+
"p-govuk-3 sm:px-govuk-4",
|
|
147
|
+
"border-b border-transparent bg-govuk-light-grey",
|
|
148
|
+
"sm:flex sm:flex-nowrap sm:justify-between",
|
|
149
|
+
className
|
|
150
|
+
),
|
|
151
|
+
...props,
|
|
152
|
+
children
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
var SummaryListCardActions = ({
|
|
156
|
+
className,
|
|
157
|
+
ref,
|
|
158
|
+
children,
|
|
159
|
+
...props
|
|
160
|
+
}) => /* @__PURE__ */ jsx(
|
|
161
|
+
"ul",
|
|
162
|
+
{
|
|
163
|
+
ref,
|
|
164
|
+
className: cn(
|
|
165
|
+
"font-govuk text-govuk-body font-bold",
|
|
166
|
+
"m-0 my-govuk-1 p-0 list-none",
|
|
167
|
+
"flex flex-wrap gap-y-govuk-2",
|
|
168
|
+
"sm:justify-end sm:text-right",
|
|
169
|
+
className
|
|
170
|
+
),
|
|
171
|
+
...props,
|
|
172
|
+
children
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
var SummaryListCardAction = ({
|
|
176
|
+
className,
|
|
177
|
+
ref,
|
|
178
|
+
children,
|
|
179
|
+
...props
|
|
180
|
+
}) => /* @__PURE__ */ jsx(
|
|
181
|
+
"li",
|
|
182
|
+
{
|
|
183
|
+
ref,
|
|
184
|
+
className: cn(
|
|
185
|
+
"inline",
|
|
186
|
+
"max-sm:mr-govuk-2 max-sm:pr-govuk-2 max-sm:border-r max-sm:border-govuk-mid-grey max-sm:last:mr-0 max-sm:last:pr-0 max-sm:last:border-0",
|
|
187
|
+
"sm:ml-govuk-2 sm:pl-govuk-2 sm:first:ml-0 sm:first:pl-0 sm:first:border-0 sm:not-first:border-l sm:not-first:border-govuk-mid-grey",
|
|
188
|
+
className
|
|
189
|
+
),
|
|
190
|
+
...props,
|
|
191
|
+
children
|
|
192
|
+
}
|
|
193
|
+
);
|
|
194
|
+
var SummaryListCardContent = ({
|
|
195
|
+
className,
|
|
196
|
+
ref,
|
|
197
|
+
children,
|
|
198
|
+
...props
|
|
199
|
+
}) => /* @__PURE__ */ jsx(
|
|
200
|
+
"div",
|
|
201
|
+
{
|
|
202
|
+
ref,
|
|
203
|
+
className: cn(
|
|
204
|
+
"pt-govuk-3 px-govuk-3 sm:px-govuk-4 sm:pb-govuk-3",
|
|
205
|
+
"[&_dl]:mb-0 [&_dl_div:last-of-type]:mb-0 [&_dl_div:last-of-type]:border-b-0",
|
|
206
|
+
className
|
|
207
|
+
),
|
|
208
|
+
...props,
|
|
209
|
+
children
|
|
210
|
+
}
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
export { SummaryList, SummaryListActions, SummaryListCard, SummaryListCardAction, SummaryListCardActions, SummaryListCardContent, SummaryListCardHeader, SummaryListCardTitle, SummaryListKey, SummaryListRow, SummaryListValue };
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { cn } from './chunk-WONVZ7WK.js';
|
|
2
|
+
import { useState, useId } from 'react';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var serviceNavigationLinkStyles = [
|
|
6
|
+
"font-govuk cursor-pointer",
|
|
7
|
+
"no-underline hover:underline",
|
|
8
|
+
"hover:govuk-link-underline hover:govuk-link-underline-hover",
|
|
9
|
+
"focus:govuk-link-focus"
|
|
10
|
+
];
|
|
11
|
+
var itemStyles = [
|
|
12
|
+
"relative my-govuk-2",
|
|
13
|
+
"sm:my-0 sm:inline-block sm:py-govuk-3",
|
|
14
|
+
"sm:not-last:mr-govuk-6"
|
|
15
|
+
];
|
|
16
|
+
var ServiceNavigation = ({
|
|
17
|
+
className,
|
|
18
|
+
ref,
|
|
19
|
+
children,
|
|
20
|
+
...props
|
|
21
|
+
}) => /* @__PURE__ */ jsx(
|
|
22
|
+
"section",
|
|
23
|
+
{
|
|
24
|
+
ref,
|
|
25
|
+
"aria-label": props["aria-label"] ?? "Service information",
|
|
26
|
+
className: cn(
|
|
27
|
+
"font-govuk text-govuk-body text-govuk-black",
|
|
28
|
+
"border-b border-b-govuk-mid-grey",
|
|
29
|
+
"bg-govuk-light-grey",
|
|
30
|
+
className
|
|
31
|
+
),
|
|
32
|
+
...props,
|
|
33
|
+
children
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
var ServiceNavigationContainer = ({
|
|
37
|
+
className,
|
|
38
|
+
ref,
|
|
39
|
+
children,
|
|
40
|
+
...props
|
|
41
|
+
}) => /* @__PURE__ */ jsx(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
ref,
|
|
45
|
+
className: cn(
|
|
46
|
+
"max-w-240 mx-auto px-govuk-3",
|
|
47
|
+
"flex flex-col items-start",
|
|
48
|
+
"sm:flex-row sm:flex-wrap",
|
|
49
|
+
className
|
|
50
|
+
),
|
|
51
|
+
...props,
|
|
52
|
+
children
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
var ServiceNavigationServiceName = ({
|
|
56
|
+
className,
|
|
57
|
+
ref,
|
|
58
|
+
children,
|
|
59
|
+
...props
|
|
60
|
+
}) => /* @__PURE__ */ jsx(
|
|
61
|
+
"a",
|
|
62
|
+
{
|
|
63
|
+
ref,
|
|
64
|
+
className: cn(
|
|
65
|
+
itemStyles,
|
|
66
|
+
"font-bold",
|
|
67
|
+
"text-govuk-black visited:text-govuk-black hover:text-govuk-black",
|
|
68
|
+
serviceNavigationLinkStyles,
|
|
69
|
+
className
|
|
70
|
+
),
|
|
71
|
+
...props,
|
|
72
|
+
children
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
var ServiceNavigationNav = ({
|
|
76
|
+
className,
|
|
77
|
+
ref,
|
|
78
|
+
children,
|
|
79
|
+
menuButtonText = "Menu",
|
|
80
|
+
...props
|
|
81
|
+
}) => {
|
|
82
|
+
const [menuOpen, setMenuOpen] = useState(false);
|
|
83
|
+
const listId = useId();
|
|
84
|
+
return /* @__PURE__ */ jsxs(
|
|
85
|
+
"nav",
|
|
86
|
+
{
|
|
87
|
+
ref,
|
|
88
|
+
"aria-label": props["aria-label"] ?? menuButtonText,
|
|
89
|
+
className: cn("max-sm:w-full sm:grow", className),
|
|
90
|
+
...props,
|
|
91
|
+
children: [
|
|
92
|
+
/* @__PURE__ */ jsxs(
|
|
93
|
+
"button",
|
|
94
|
+
{
|
|
95
|
+
type: "button",
|
|
96
|
+
className: cn(
|
|
97
|
+
"sm:hidden inline-flex items-center gap-govuk-1",
|
|
98
|
+
"my-govuk-2 p-0",
|
|
99
|
+
"font-govuk text-govuk-body font-bold",
|
|
100
|
+
"bg-transparent border-0 text-govuk-brand cursor-pointer",
|
|
101
|
+
"hover:underline focus:govuk-link-focus"
|
|
102
|
+
),
|
|
103
|
+
onClick: () => setMenuOpen((prev) => !prev),
|
|
104
|
+
"aria-expanded": menuOpen,
|
|
105
|
+
"aria-controls": listId,
|
|
106
|
+
children: [
|
|
107
|
+
menuButtonText,
|
|
108
|
+
/* @__PURE__ */ jsx(
|
|
109
|
+
"svg",
|
|
110
|
+
{
|
|
111
|
+
viewBox: "0 0 10 6",
|
|
112
|
+
width: "10",
|
|
113
|
+
height: "6",
|
|
114
|
+
fill: "currentColor",
|
|
115
|
+
"aria-hidden": "true",
|
|
116
|
+
className: cn("transition-transform", menuOpen && "rotate-180"),
|
|
117
|
+
children: /* @__PURE__ */ jsx("path", { d: "M0 0l5 6 5-6z" })
|
|
118
|
+
}
|
|
119
|
+
)
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
"ul",
|
|
125
|
+
{
|
|
126
|
+
id: listId,
|
|
127
|
+
className: cn(
|
|
128
|
+
"list-none m-0 mb-govuk-3 p-0",
|
|
129
|
+
"sm:flex sm:flex-wrap sm:mb-0",
|
|
130
|
+
menuOpen ? "max-sm:block" : "max-sm:hidden"
|
|
131
|
+
),
|
|
132
|
+
children
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
};
|
|
139
|
+
var ServiceNavigationItem = ({
|
|
140
|
+
className,
|
|
141
|
+
active,
|
|
142
|
+
ref,
|
|
143
|
+
children,
|
|
144
|
+
...props
|
|
145
|
+
}) => /* @__PURE__ */ jsx(
|
|
146
|
+
"li",
|
|
147
|
+
{
|
|
148
|
+
ref,
|
|
149
|
+
className: cn(
|
|
150
|
+
itemStyles,
|
|
151
|
+
"border-govuk-brand",
|
|
152
|
+
active && [
|
|
153
|
+
"max-sm:-ml-govuk-3 max-sm:pl-govuk-2 max-sm:border-l-govuk-standard",
|
|
154
|
+
"sm:border-b-govuk-standard sm:pb-govuk-2"
|
|
155
|
+
],
|
|
156
|
+
className
|
|
157
|
+
),
|
|
158
|
+
...props,
|
|
159
|
+
children
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
var ServiceNavigationLink = ({
|
|
163
|
+
className,
|
|
164
|
+
ref,
|
|
165
|
+
children,
|
|
166
|
+
...props
|
|
167
|
+
}) => /* @__PURE__ */ jsx(
|
|
168
|
+
"a",
|
|
169
|
+
{
|
|
170
|
+
ref,
|
|
171
|
+
className: cn(
|
|
172
|
+
"text-govuk-brand visited:text-govuk-brand hover:text-govuk-brand-hover",
|
|
173
|
+
serviceNavigationLinkStyles,
|
|
174
|
+
className
|
|
175
|
+
),
|
|
176
|
+
...props,
|
|
177
|
+
children
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
export { ServiceNavigation, ServiceNavigationContainer, ServiceNavigationItem, ServiceNavigationLink, ServiceNavigationNav, ServiceNavigationServiceName };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { cn } from './chunk-WONVZ7WK.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
var Hint = ({ className, ref, ...props }) => /* @__PURE__ */ jsx(
|
|
5
|
+
"div",
|
|
6
|
+
{
|
|
7
|
+
ref,
|
|
8
|
+
className: cn(
|
|
9
|
+
"font-govuk text-govuk-body text-govuk-dark-grey",
|
|
10
|
+
"mb-govuk-3",
|
|
11
|
+
className
|
|
12
|
+
),
|
|
13
|
+
...props
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export { Hint };
|