@leabankab/component-library 7.1.1 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/component-library.es.js +2169 -1932
  3. package/dist/component-library.es.js.map +1 -1
  4. package/dist/component-library.umd.js +11 -18
  5. package/dist/component-library.umd.js.map +1 -1
  6. package/dist/components/buttons/button-base.d.ts +5 -5
  7. package/dist/components/buttons/button.d.ts +2 -2
  8. package/dist/components/buttons/icon-button.d.ts +1 -1
  9. package/dist/components/feedback/alert-parts.d.ts +328 -0
  10. package/dist/components/feedback/alert.d.ts +13 -18
  11. package/dist/components/feedback/dialog.d.ts +7 -0
  12. package/dist/components/feedback/global-alert.d.ts +24 -0
  13. package/dist/components/feedback/index.d.ts +1 -0
  14. package/dist/components/index.d.ts +1 -0
  15. package/dist/components/layout/container.d.ts +23 -0
  16. package/dist/components/layout/grid.d.ts +51 -0
  17. package/dist/components/layout/index.d.ts +4 -0
  18. package/dist/components/layout/responsive.d.ts +19 -0
  19. package/dist/components/layout/stack.d.ts +56 -0
  20. package/dist/components/navigation/index.d.ts +2 -0
  21. package/dist/components/navigation/linear-form-stepper.d.ts +58 -0
  22. package/dist/components/navigation/step-progress.d.ts +60 -0
  23. package/dist/components/ui/app-header.d.ts +21 -0
  24. package/dist/components/ui/brand-divider.d.ts +7 -1
  25. package/dist/components/ui/index.d.ts +1 -0
  26. package/dist/cookie-consent/consent-dialog.d.ts +15 -0
  27. package/dist/cookie-consent/constants.d.ts +11 -0
  28. package/dist/cookie-consent/copy.d.ts +19 -0
  29. package/dist/cookie-consent/core.d.ts +36 -0
  30. package/dist/cookie-consent/domain.d.ts +15 -0
  31. package/dist/cookie-consent/index.d.ts +4 -0
  32. package/dist/cookie-consent/react.d.ts +23 -0
  33. package/dist/cookie-consent/strapi-blocks.d.ts +65 -0
  34. package/dist/cookie-consent-core-C4MP7GlV.cjs +2 -0
  35. package/dist/cookie-consent-core-C4MP7GlV.cjs.map +1 -0
  36. package/dist/cookie-consent-core-mwVmy5nZ.mjs +124 -0
  37. package/dist/cookie-consent-core-mwVmy5nZ.mjs.map +1 -0
  38. package/dist/cookie-consent-react.cjs +2 -0
  39. package/dist/cookie-consent-react.cjs.map +1 -0
  40. package/dist/cookie-consent-react.mjs +433 -0
  41. package/dist/cookie-consent-react.mjs.map +1 -0
  42. package/dist/cookie-consent.cjs +1 -0
  43. package/dist/cookie-consent.css +1 -0
  44. package/dist/cookie-consent.mjs +2 -0
  45. package/dist/index.css +1 -1
  46. package/dist/tailwind.css +193 -0
  47. package/dist/theme/index.d.ts +1 -0
  48. package/dist/theme/tokens/breakpoints.d.ts +16 -0
  49. package/dist/theme/tokens/index.d.ts +2 -0
  50. package/dist/theme/tokens/opacity.d.ts +5 -0
  51. package/package.json +22 -3
@@ -1,14 +1,14 @@
1
1
  import { Button as BaseButton } from '@base-ui/react/button';
2
- export type ButtonVariant = "primary" | "secondary" | "tertiary";
2
+ export type ButtonVariant = "solid" | "outline" | "ghost";
3
3
  export type ButtonColor = "accent" | "neutral" | "danger";
4
4
  export type ButtonSize = "sm" | "md" | "lg";
5
5
  export type ButtonBaseProps = Omit<BaseButton.Props, "color"> & {
6
6
  /**
7
7
  * Visual weight.
8
- * - `"primary"` — solid fill, for the main action.
9
- * - `"secondary"` — outlined.
10
- * - `"tertiary"` — ghost: no border or fill until hovered.
11
- * @default "primary"
8
+ * - `"solid"` — filled, for the main action.
9
+ * - `"outline"` — bordered, no fill.
10
+ * - `"ghost"` — no border or fill until hovered.
11
+ * @default "solid"
12
12
  */
13
13
  variant?: ButtonVariant;
14
14
  /**
@@ -14,11 +14,11 @@ export type ButtonProps = ButtonBaseProps & {
14
14
  };
15
15
  /**
16
16
  * A button built on Base UI's `Button` primitive and styled with Lea's design
17
- * tokens. Pick a `variant` (`primary`, `secondary`, `tertiary`), a `color`
17
+ * tokens. Pick a `variant` (`solid`, `outline`, `ghost`), a `color`
18
18
  * (`accent`, `neutral`, `danger`) and a `size` (`sm`, `md`, `lg`).
19
19
  *
20
20
  * ```tsx
21
- * <Button variant="secondary" startIcon={<Plus aria-hidden />}>Add</Button>
21
+ * <Button variant="outline" startIcon={<Plus aria-hidden />}>Add</Button>
22
22
  * ```
23
23
  *
24
24
  * To render a link that looks like a button, pass the link through `render`.
@@ -21,7 +21,7 @@ export type IconButtonProps = Omit<ButtonBaseProps, "children" | "aria-label" |
21
21
  * `aria-label` or `aria-labelledby`.
22
22
  *
23
23
  * ```tsx
24
- * <IconButton aria-label="Add" variant="secondary">
24
+ * <IconButton aria-label="Add" variant="outline">
25
25
  * <Plus aria-hidden />
26
26
  * </IconButton>
27
27
  * ```
@@ -0,0 +1,328 @@
1
+ import { ComponentPropsWithRef, ReactNode, SyntheticEvent } from 'react';
2
+ export type AlertSeverity = "success" | "info" | "warning" | "error";
3
+ export type AlertColor = AlertSeverity | "purple" | "grey";
4
+ export type AlertVariant = "standard" | "filled" | "outlined";
5
+ export type AlertSize = "sm" | "lg";
6
+ export type AlertProps = Omit<ComponentPropsWithRef<"div">, "color"> & {
7
+ /**
8
+ * Semantic meaning — picks the icon and how screen readers announce it.
9
+ * @default "success", or "info" with a brand `color`
10
+ */
11
+ severity?: AlertSeverity;
12
+ /**
13
+ * Colour scheme. Defaults to the colour of `severity`. `"purple"` and
14
+ * `"grey"` carry no status meaning.
15
+ */
16
+ color?: AlertColor;
17
+ /**
18
+ * `"standard"` is a tinted fill, `"filled"` a solid one, `"outlined"` a
19
+ * border only.
20
+ * @default "standard"
21
+ */
22
+ variant?: AlertVariant;
23
+ /**
24
+ * `"sm"` for tighter padding and smaller text.
25
+ * @default "lg"
26
+ */
27
+ size?: AlertSize;
28
+ /** Replaces the severity icon. Pass `false` to hide it. */
29
+ icon?: ReactNode | false;
30
+ /** Content for the end of the alert, e.g. a button. Replaces the close button. */
31
+ action?: ReactNode;
32
+ /** Renders a close button that calls this when pressed. */
33
+ onClose?: (event: SyntheticEvent) => void;
34
+ /** Accessible name of the close button. Defaults to a translated "Close". */
35
+ closeLabel?: string;
36
+ };
37
+ /**
38
+ * Resolves the props shared by `Alert` and `GlobalAlert` into the root's
39
+ * attributes and its inner markup. Internal — not exported from the package.
40
+ */
41
+ export declare function resolveAlert({ severity, color, variant, size, icon, action, onClose, closeLabel, role, children, ...rest }: AlertProps): {
42
+ rootProps: {
43
+ role: import('react').AriaRole;
44
+ "data-color": "purple" | "grey" | "success" | "error" | "info" | "warning";
45
+ "data-variant": AlertVariant;
46
+ "data-size": AlertSize;
47
+ content?: string | undefined | undefined;
48
+ translate?: "yes" | "no" | undefined | undefined;
49
+ hidden?: boolean | undefined | undefined;
50
+ slot?: string | undefined | undefined;
51
+ style?: import('react').CSSProperties | undefined;
52
+ title?: string | undefined | undefined;
53
+ onAnimationStart?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
54
+ onDragStart?: import('react').DragEventHandler<HTMLDivElement> | undefined;
55
+ onDragEnd?: import('react').DragEventHandler<HTMLDivElement> | undefined;
56
+ onDrag?: import('react').DragEventHandler<HTMLDivElement> | undefined;
57
+ ref?: import('react').Ref<HTMLDivElement> | undefined;
58
+ key?: import('react').Key | null | undefined;
59
+ defaultChecked?: boolean | undefined | undefined;
60
+ defaultValue?: string | number | readonly string[] | undefined;
61
+ suppressContentEditableWarning?: boolean | undefined | undefined;
62
+ suppressHydrationWarning?: boolean | undefined | undefined;
63
+ accessKey?: string | undefined | undefined;
64
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
65
+ autoFocus?: boolean | undefined | undefined;
66
+ className?: string | undefined | undefined;
67
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
68
+ contextMenu?: string | undefined | undefined;
69
+ dir?: string | undefined | undefined;
70
+ draggable?: (boolean | "true" | "false") | undefined;
71
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
72
+ id?: string | undefined | undefined;
73
+ lang?: string | undefined | undefined;
74
+ nonce?: string | undefined | undefined;
75
+ spellCheck?: (boolean | "true" | "false") | undefined;
76
+ tabIndex?: number | undefined | undefined;
77
+ radioGroup?: string | undefined | undefined;
78
+ about?: string | undefined | undefined;
79
+ datatype?: string | undefined | undefined;
80
+ inlist?: any;
81
+ prefix?: string | undefined | undefined;
82
+ property?: string | undefined | undefined;
83
+ rel?: string | undefined | undefined;
84
+ resource?: string | undefined | undefined;
85
+ rev?: string | undefined | undefined;
86
+ typeof?: string | undefined | undefined;
87
+ vocab?: string | undefined | undefined;
88
+ autoCorrect?: string | undefined | undefined;
89
+ autoSave?: string | undefined | undefined;
90
+ itemProp?: string | undefined | undefined;
91
+ itemScope?: boolean | undefined | undefined;
92
+ itemType?: string | undefined | undefined;
93
+ itemID?: string | undefined | undefined;
94
+ itemRef?: string | undefined | undefined;
95
+ results?: number | undefined | undefined;
96
+ security?: string | undefined | undefined;
97
+ unselectable?: "on" | "off" | undefined | undefined;
98
+ popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
99
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
100
+ popoverTarget?: string | undefined | undefined;
101
+ inert?: boolean | undefined | undefined;
102
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
103
+ is?: string | undefined | undefined;
104
+ exportparts?: string | undefined | undefined;
105
+ part?: string | undefined | undefined;
106
+ "aria-activedescendant"?: string | undefined | undefined;
107
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
108
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
109
+ "aria-braillelabel"?: string | undefined | undefined;
110
+ "aria-brailleroledescription"?: string | undefined | undefined;
111
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
112
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
113
+ "aria-colcount"?: number | undefined | undefined;
114
+ "aria-colindex"?: number | undefined | undefined;
115
+ "aria-colindextext"?: string | undefined | undefined;
116
+ "aria-colspan"?: number | undefined | undefined;
117
+ "aria-controls"?: string | undefined | undefined;
118
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
119
+ "aria-describedby"?: string | undefined | undefined;
120
+ "aria-description"?: string | undefined | undefined;
121
+ "aria-details"?: string | undefined | undefined;
122
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
123
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
124
+ "aria-errormessage"?: string | undefined | undefined;
125
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
126
+ "aria-flowto"?: string | undefined | undefined;
127
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
128
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
129
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
130
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
131
+ "aria-keyshortcuts"?: string | undefined | undefined;
132
+ "aria-label"?: string | undefined | undefined;
133
+ "aria-labelledby"?: string | undefined | undefined;
134
+ "aria-level"?: number | undefined | undefined;
135
+ "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
136
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
137
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
138
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
139
+ "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
140
+ "aria-owns"?: string | undefined | undefined;
141
+ "aria-placeholder"?: string | undefined | undefined;
142
+ "aria-posinset"?: number | undefined | undefined;
143
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
144
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
145
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
146
+ "aria-required"?: (boolean | "true" | "false") | undefined;
147
+ "aria-roledescription"?: string | undefined | undefined;
148
+ "aria-rowcount"?: number | undefined | undefined;
149
+ "aria-rowindex"?: number | undefined | undefined;
150
+ "aria-rowindextext"?: string | undefined | undefined;
151
+ "aria-rowspan"?: number | undefined | undefined;
152
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
153
+ "aria-setsize"?: number | undefined | undefined;
154
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
155
+ "aria-valuemax"?: number | undefined | undefined;
156
+ "aria-valuemin"?: number | undefined | undefined;
157
+ "aria-valuenow"?: number | undefined | undefined;
158
+ "aria-valuetext"?: string | undefined | undefined;
159
+ dangerouslySetInnerHTML?: {
160
+ __html: string | TrustedHTML;
161
+ } | undefined | undefined;
162
+ onCopy?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
163
+ onCopyCapture?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
164
+ onCut?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
165
+ onCutCapture?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
166
+ onPaste?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
167
+ onPasteCapture?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
168
+ onCompositionEnd?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
169
+ onCompositionEndCapture?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
170
+ onCompositionStart?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
171
+ onCompositionStartCapture?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
172
+ onCompositionUpdate?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
173
+ onCompositionUpdateCapture?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
174
+ onFocus?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
175
+ onFocusCapture?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
176
+ onBlur?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
177
+ onBlurCapture?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
178
+ onChange?: import('react').ChangeEventHandler<HTMLDivElement, Element> | undefined;
179
+ onChangeCapture?: import('react').ChangeEventHandler<HTMLDivElement, Element> | undefined;
180
+ onBeforeInput?: import('react').InputEventHandler<HTMLDivElement> | undefined;
181
+ onBeforeInputCapture?: import('react').InputEventHandler<HTMLDivElement> | undefined;
182
+ onInput?: import('react').InputEventHandler<HTMLDivElement> | undefined;
183
+ onInputCapture?: import('react').InputEventHandler<HTMLDivElement> | undefined;
184
+ onReset?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
185
+ onResetCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
186
+ onSubmit?: import('react').SubmitEventHandler<HTMLDivElement> | undefined;
187
+ onSubmitCapture?: import('react').SubmitEventHandler<HTMLDivElement> | undefined;
188
+ onInvalid?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
189
+ onInvalidCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
190
+ onLoad?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
191
+ onLoadCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
192
+ onError?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
193
+ onErrorCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
194
+ onKeyDown?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
195
+ onKeyDownCapture?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
196
+ onKeyPress?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
197
+ onKeyPressCapture?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
198
+ onKeyUp?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
199
+ onKeyUpCapture?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
200
+ onAbort?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
201
+ onAbortCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
202
+ onCanPlay?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
203
+ onCanPlayCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
204
+ onCanPlayThrough?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
205
+ onCanPlayThroughCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
206
+ onDurationChange?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
207
+ onDurationChangeCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
208
+ onEmptied?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
209
+ onEmptiedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
210
+ onEncrypted?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
211
+ onEncryptedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
212
+ onEnded?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
213
+ onEndedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
214
+ onLoadedData?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
215
+ onLoadedDataCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
216
+ onLoadedMetadata?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
217
+ onLoadedMetadataCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
218
+ onLoadStart?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
219
+ onLoadStartCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
220
+ onPause?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
221
+ onPauseCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
222
+ onPlay?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
223
+ onPlayCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
224
+ onPlaying?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
225
+ onPlayingCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
226
+ onProgress?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
227
+ onProgressCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
228
+ onRateChange?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
229
+ onRateChangeCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
230
+ onSeeked?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
231
+ onSeekedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
232
+ onSeeking?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
233
+ onSeekingCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
234
+ onStalled?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
235
+ onStalledCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
236
+ onSuspend?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
237
+ onSuspendCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
238
+ onTimeUpdate?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
239
+ onTimeUpdateCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
240
+ onVolumeChange?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
241
+ onVolumeChangeCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
242
+ onWaiting?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
243
+ onWaitingCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
244
+ onAuxClick?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
245
+ onAuxClickCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
246
+ onClick?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
247
+ onClickCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
248
+ onContextMenu?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
249
+ onContextMenuCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
250
+ onDoubleClick?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
251
+ onDoubleClickCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
252
+ onDragCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
253
+ onDragEndCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
254
+ onDragEnter?: import('react').DragEventHandler<HTMLDivElement> | undefined;
255
+ onDragEnterCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
256
+ onDragExit?: import('react').DragEventHandler<HTMLDivElement> | undefined;
257
+ onDragExitCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
258
+ onDragLeave?: import('react').DragEventHandler<HTMLDivElement> | undefined;
259
+ onDragLeaveCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
260
+ onDragOver?: import('react').DragEventHandler<HTMLDivElement> | undefined;
261
+ onDragOverCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
262
+ onDragStartCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
263
+ onDrop?: import('react').DragEventHandler<HTMLDivElement> | undefined;
264
+ onDropCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
265
+ onMouseDown?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
266
+ onMouseDownCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
267
+ onMouseEnter?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
268
+ onMouseLeave?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
269
+ onMouseMove?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
270
+ onMouseMoveCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
271
+ onMouseOut?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
272
+ onMouseOutCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
273
+ onMouseOver?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
274
+ onMouseOverCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
275
+ onMouseUp?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
276
+ onMouseUpCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
277
+ onSelect?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
278
+ onSelectCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
279
+ onTouchCancel?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
280
+ onTouchCancelCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
281
+ onTouchEnd?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
282
+ onTouchEndCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
283
+ onTouchMove?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
284
+ onTouchMoveCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
285
+ onTouchStart?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
286
+ onTouchStartCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
287
+ onPointerDown?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
288
+ onPointerDownCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
289
+ onPointerMove?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
290
+ onPointerMoveCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
291
+ onPointerUp?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
292
+ onPointerUpCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
293
+ onPointerCancel?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
294
+ onPointerCancelCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
295
+ onPointerEnter?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
296
+ onPointerLeave?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
297
+ onPointerOver?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
298
+ onPointerOverCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
299
+ onPointerOut?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
300
+ onPointerOutCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
301
+ onGotPointerCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
302
+ onGotPointerCaptureCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
303
+ onLostPointerCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
304
+ onLostPointerCaptureCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
305
+ onScroll?: import('react').UIEventHandler<HTMLDivElement> | undefined;
306
+ onScrollCapture?: import('react').UIEventHandler<HTMLDivElement> | undefined;
307
+ onScrollEnd?: import('react').UIEventHandler<HTMLDivElement> | undefined;
308
+ onScrollEndCapture?: import('react').UIEventHandler<HTMLDivElement> | undefined;
309
+ onWheel?: import('react').WheelEventHandler<HTMLDivElement> | undefined;
310
+ onWheelCapture?: import('react').WheelEventHandler<HTMLDivElement> | undefined;
311
+ onAnimationStartCapture?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
312
+ onAnimationEnd?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
313
+ onAnimationEndCapture?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
314
+ onAnimationIteration?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
315
+ onAnimationIterationCapture?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
316
+ onToggle?: import('react').ToggleEventHandler<HTMLDivElement> | undefined;
317
+ onBeforeToggle?: import('react').ToggleEventHandler<HTMLDivElement> | undefined;
318
+ onTransitionCancel?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
319
+ onTransitionCancelCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
320
+ onTransitionEnd?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
321
+ onTransitionEndCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
322
+ onTransitionRun?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
323
+ onTransitionRunCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
324
+ onTransitionStart?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
325
+ onTransitionStartCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
326
+ };
327
+ content: import("react").JSX.Element;
328
+ };
@@ -1,21 +1,14 @@
1
- import { AlertProps as MuiAlertProps, AlertColor } from '@mui/material';
2
- export type AlertSize = "sm" | "lg";
3
- export type AlertProps = Omit<MuiAlertProps, "severity"> & {
4
- /** Semantic meaning — picks the icon and how screen readers announce it. */
5
- severity?: AlertColor;
6
- /** `"lg"` (default) or `"sm"` for tighter padding and smaller text. */
7
- size?: AlertSize;
8
- };
1
+ import { ComponentPropsWithRef } from 'react';
2
+ import { AlertProps } from './alert-parts';
3
+ export type { AlertColor, AlertProps, AlertSeverity, AlertSize, AlertVariant, } from './alert-parts';
9
4
  /**
10
- * Alert wraps MUI's `Alert` with Lea Bank's status colours and border radius
11
- * (applied via the theme). The ARIA `role` is derived from `severity`:
12
- * `error` / `warning` announce assertively (`role="alert"`) while `info` /
13
- * `success` announce politely (`role="status"`). Pass an explicit `role` to
14
- * override.
5
+ * A message with Lea Bank's status colours. The ARIA `role` is derived from
6
+ * `severity`: `error` / `warning` announce assertively (`role="alert"`) while
7
+ * `info` / `success` announce politely (`role="status"`). Pass an explicit
8
+ * `role` to override.
15
9
  *
16
- * Status icons come from Lucide via `iconMapping` (`alertIcons` in this file).
17
- * With `onClose`, the dismiss button's accessible name is translated — override
18
- * it per-instance with MUI's `closeText`.
10
+ * With `onClose`, a close button is rendered with a translated accessible
11
+ * name — override it per-instance with `closeLabel`.
19
12
  *
20
13
  * ```tsx
21
14
  * <Alert color="purple" size="sm">
@@ -23,5 +16,7 @@ export type AlertProps = Omit<MuiAlertProps, "severity"> & {
23
16
  * </Alert>
24
17
  * ```
25
18
  */
26
- export declare function Alert({ color, severity, role, size, iconMapping, ...rest }: AlertProps): import("react").JSX.Element;
27
- export { AlertTitle } from '@mui/material';
19
+ export declare function Alert({ className, ...props }: AlertProps): import("react").JSX.Element;
20
+ export type AlertTitleProps = ComponentPropsWithRef<"div">;
21
+ /** A heading above the alert's message. */
22
+ export declare function AlertTitle({ className, ...rest }: AlertTitleProps): import("react").JSX.Element;
@@ -64,6 +64,13 @@ export declare function Description({ className, ...rest }: DescriptionProps): i
64
64
  export type ContentProps = ComponentPropsWithRef<"div">;
65
65
  /** The body. Scrolls on its own once the popup runs out of height. */
66
66
  export declare function Content({ className, ...rest }: ContentProps): import("react").JSX.Element;
67
+ export type FooterProps = ComponentPropsWithRef<"div">;
68
+ /**
69
+ * The action row, placed after `Dialog.Content`. Stays pinned to the bottom of
70
+ * the popup while `Dialog.Content` scrolls, and lines its children up at the
71
+ * end.
72
+ */
73
+ export declare function Footer({ className, ...rest }: FooterProps): import("react").JSX.Element;
67
74
  /**
68
75
  * Closes the dialog. Renders a bare `<button>` for text actions — use
69
76
  * `render` for a styled one: `<Dialog.Close render={<Button />}>Cancel</Dialog.Close>`.
@@ -0,0 +1,24 @@
1
+ import { AlertProps } from './alert-parts';
2
+ export type GlobalAlertProps = AlertProps & {
3
+ /**
4
+ * Lets the content span the full width instead of stopping at the `lg`
5
+ * breakpoint. The side padding stays.
6
+ * @default false
7
+ */
8
+ fluid?: boolean;
9
+ };
10
+ /**
11
+ * An `Alert` that spans the whole page width, for messages about the whole
12
+ * page or session. Place it directly above or below `AppHeader`. It takes the
13
+ * same props and styling as `Alert`, without the rounded corners, and its
14
+ * content follows the `Container` breakpoints and side padding.
15
+ *
16
+ * ```tsx
17
+ * <AppHeader />
18
+ * <GlobalAlert severity="warning" onClose={dismiss}>
19
+ * <AlertTitle>Planned maintenance</AlertTitle>
20
+ * Online banking is unavailable tonight from 22:00 to 23:00.
21
+ * </GlobalAlert>
22
+ * ```
23
+ */
24
+ export declare function GlobalAlert({ fluid, className, ...props }: GlobalAlertProps): import("react").JSX.Element;
@@ -1,5 +1,6 @@
1
1
  export * from './alert';
2
2
  export * as Dialog from './dialog';
3
3
  export * as Drawer from './drawer';
4
+ export * from './global-alert';
4
5
  export * from './simple-dialog';
5
6
  export * from './simple-drawer';
@@ -4,6 +4,7 @@ export * from './data-display';
4
4
  export * from './dev-panel';
5
5
  export * from './feedback';
6
6
  export * from './form';
7
+ export * from './layout';
7
8
  export * from './navigation';
8
9
  export * from './surfaces';
9
10
  export * from './typography';
@@ -0,0 +1,23 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ import { Breakpoint } from '../../theme/tokens/breakpoints';
3
+ export type ContainerSize = Exclude<Breakpoint, "xs">;
4
+ export type ContainerProps = Omit<useRender.ComponentProps<"div">, "ref"> & {
5
+ /**
6
+ * Maximum width, named after the breakpoint it matches: `"md"` stops
7
+ * growing at the `md` breakpoint width.
8
+ * @default "lg"
9
+ */
10
+ size?: ContainerSize;
11
+ };
12
+ /**
13
+ * Centres page content, caps its width and keeps it clear of the screen edge.
14
+ * The side padding grows with the viewport: `spacing(2)` on phones,
15
+ * `spacing(3)` from `sm` and `spacing(4)` from `md`.
16
+ *
17
+ * ```tsx
18
+ * <Container render={<main />}>
19
+ * <Text variant="h1">Mine lån</Text>
20
+ * </Container>
21
+ * ```
22
+ */
23
+ export declare function Container({ size, render, className, ...rest }: ContainerProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
@@ -0,0 +1,51 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ import { SpacingFactor } from '../../theme/token-types';
3
+ import { Responsive } from './responsive';
4
+ export type GridProps = Omit<useRender.ComponentProps<"div">, "ref"> & {
5
+ /**
6
+ * Number of equal-width columns.
7
+ * @default 12
8
+ */
9
+ columns?: Responsive<number>;
10
+ /**
11
+ * Space between rows and columns, as a multiple of the spacing step
12
+ * (`spacing(n)`).
13
+ * @default 0
14
+ */
15
+ gap?: Responsive<SpacingFactor>;
16
+ };
17
+ /**
18
+ * A grid of equal-width columns. Children fill one column each; wrap them in
19
+ * `GridItem` to span several. Both props take a value per breakpoint,
20
+ * mobile-first:
21
+ *
22
+ * ```tsx
23
+ * <Grid columns={{ base: 1, sm: 2, lg: 3 }} gap={2}>
24
+ * <Card />
25
+ * <Card />
26
+ * <Card />
27
+ * </Grid>
28
+ * ```
29
+ */
30
+ export declare function Grid({ columns, gap, render, className, style, ...rest }: GridProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
31
+ export type GridItemSpan = number | "full";
32
+ export type GridItemProps = Omit<useRender.ComponentProps<"div">, "ref"> & {
33
+ /**
34
+ * How many of the grid's columns the item covers. `"full"` covers the whole
35
+ * row whatever the column count.
36
+ * @default "full"
37
+ */
38
+ span?: Responsive<GridItemSpan>;
39
+ };
40
+ /**
41
+ * An item in a `Grid`. It takes the whole row until `span` says otherwise, so
42
+ * layouts stay single-column on small screens by default:
43
+ *
44
+ * ```tsx
45
+ * <Grid gap={3}>
46
+ * <GridItem span={{ md: 8 }}>Main content</GridItem>
47
+ * <GridItem span={{ md: 4 }}>Sidebar</GridItem>
48
+ * </Grid>
49
+ * ```
50
+ */
51
+ export declare function GridItem({ span, render, className, style, ...rest }: GridItemProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
@@ -0,0 +1,4 @@
1
+ export * from './container';
2
+ export * from './grid';
3
+ export type { Responsive, ResponsiveKey } from './responsive';
4
+ export * from './stack';
@@ -0,0 +1,19 @@
1
+ import { CSSProperties } from 'react';
2
+ import { Breakpoint } from '../../theme/tokens/breakpoints';
3
+ /** `base` applies from zero width; each other key from its breakpoint up. */
4
+ export type ResponsiveKey = "base" | Exclude<Breakpoint, "xs">;
5
+ /**
6
+ * A single value, or one per breakpoint, mobile-first. Unset breakpoints keep
7
+ * the value of the nearest smaller one: `{ base: 1, md: 3 }` is 1 below `md`
8
+ * and 3 from `md` up.
9
+ */
10
+ export type Responsive<T> = T | Partial<Record<ResponsiveKey, T>>;
11
+ /**
12
+ * Writes a responsive prop as inline custom properties — `--_gap-base`,
13
+ * `--_gap-md`, … — which the component's CSS Module picks up in its media
14
+ * queries. Only the breakpoints that are set are written; the stylesheet
15
+ * falls back through the smaller ones.
16
+ *
17
+ * Internal helper — not part of the public API.
18
+ */
19
+ export declare function responsiveVars<T>(name: string, value: Responsive<T> | undefined, format?: (value: T) => string | number): CSSProperties;
@@ -0,0 +1,56 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ import { SpacingFactor } from '../../theme/token-types';
3
+ import { Responsive } from './responsive';
4
+ export type StackDirection = "column" | "row";
5
+ export type StackAlign = "start" | "center" | "end" | "stretch" | "baseline";
6
+ export type StackJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
7
+ export type StackProps = Omit<useRender.ComponentProps<"div">, "ref"> & {
8
+ /**
9
+ * Main axis. There is deliberately no reversed direction: it would make the
10
+ * visual order differ from the reading and focus order.
11
+ * @default "column"
12
+ */
13
+ direction?: Responsive<StackDirection>;
14
+ /**
15
+ * Space between children, as a multiple of the spacing step (`spacing(n)`).
16
+ * @default 0
17
+ */
18
+ gap?: Responsive<SpacingFactor>;
19
+ /** Cross-axis alignment (`align-items`). Stretches when unset. */
20
+ align?: StackAlign;
21
+ /** Main-axis distribution (`justify-content`). */
22
+ justify?: StackJustify;
23
+ /**
24
+ * Lets children wrap onto new lines.
25
+ * @default false
26
+ */
27
+ wrap?: boolean;
28
+ };
29
+ /**
30
+ * Lays its children out in one direction with even, token-based spacing.
31
+ * `direction` and `gap` take a value per breakpoint, mobile-first:
32
+ *
33
+ * ```tsx
34
+ * <Stack direction={{ base: "column", md: "row" }} gap={{ base: 2, md: 3 }}>
35
+ * <Card />
36
+ * <Card />
37
+ * </Stack>
38
+ * ```
39
+ *
40
+ * Renders a `div`; pass `render` for another element, e.g.
41
+ * `render={<ul />}` with `<li>` children.
42
+ */
43
+ export declare function Stack({ direction, gap, align, justify, wrap, render, className, style, ...rest }: StackProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
44
+ export type HStackProps = Omit<StackProps, "direction">;
45
+ /**
46
+ * A `Stack` fixed to `direction="row"`. Children stay on one line unless
47
+ * `wrap` is set.
48
+ *
49
+ * ```tsx
50
+ * <HStack gap={1} justify="end">
51
+ * <Button variant="outline">Avbryt</Button>
52
+ * <Button>Lagre</Button>
53
+ * </HStack>
54
+ * ```
55
+ */
56
+ export declare function HStack(props: HStackProps): import("react").JSX.Element;