@leabankab/component-library 7.2.0 → 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.
@@ -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;
@@ -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';
@@ -48,7 +48,7 @@ export type HStackProps = Omit<StackProps, "direction">;
48
48
  *
49
49
  * ```tsx
50
50
  * <HStack gap={1} justify="end">
51
- * <Button variant="secondary">Avbryt</Button>
51
+ * <Button variant="outline">Avbryt</Button>
52
52
  * <Button>Lagre</Button>
53
53
  * </HStack>
54
54
  * ```
@@ -1,4 +1,6 @@
1
1
  export * from './form-stepper';
2
+ export * from './linear-form-stepper';
2
3
  export * from './progress-circle';
4
+ export * from './step-progress';
3
5
  export * from './tabs';
4
6
  export * from './use-stepper-labels';
@@ -0,0 +1,58 @@
1
+ import { ReactNode } from 'react';
2
+ import { ProgressCircleColor } from './progress-circle';
3
+ import { StepperLabels } from './use-stepper-labels';
4
+ export type LinearFormStepperProps = {
5
+ /** Active step (1-based). */
6
+ currentStep: number;
7
+ /**
8
+ * Total number of steps. May change between renders, e.g. when the next step
9
+ * from the API reveals a different path; the bar animates to the new value.
10
+ */
11
+ totalSteps: number;
12
+ /** Title of the current step. Rendered as a heading and names the progress bar. */
13
+ title: ReactNode;
14
+ /**
15
+ * Called when the back button is pressed. The back button only renders when
16
+ * this is provided, so omit it on the first step or in forms without a back
17
+ * flow.
18
+ */
19
+ onBack?: () => void;
20
+ /**
21
+ * Bar colour.
22
+ * @default "purple"
23
+ */
24
+ color?: ProgressCircleColor;
25
+ /**
26
+ * Heading level of the title.
27
+ * @default "h1"
28
+ */
29
+ headingLevel?: "h1" | "h2" | "h3";
30
+ /**
31
+ * Id applied to the title. Defaults to a generated id. Use it to move focus to
32
+ * the title when the step changes so the new step is announced. Must be
33
+ * unique in the document.
34
+ */
35
+ titleId?: string;
36
+ /** Override the built-in translated labels per-instance. */
37
+ labels?: StepperLabels;
38
+ };
39
+ /**
40
+ * Header for a multi-step form whose steps aren't all known up front: a linear
41
+ * progress bar above the current step's title, with an optional back button.
42
+ * Use `FormStepper` instead when the full step list is known.
43
+ *
44
+ * The bar is a `progressbar` named by the title heading, with the step count
45
+ * (`"step X of Y"`) as its value text. The title carries `tabIndex={-1}`; move
46
+ * focus to it (via `titleId`) whenever the step changes so screen-reader users
47
+ * hear the new step.
48
+ *
49
+ * ```tsx
50
+ * <LinearFormStepper
51
+ * currentStep={2}
52
+ * totalSteps={5}
53
+ * title="Refinancing"
54
+ * onBack={() => history.back()}
55
+ * />
56
+ * ```
57
+ */
58
+ export declare const LinearFormStepper: ({ currentStep, totalSteps, title, onBack, color, headingLevel: Heading, titleId, labels, }: LinearFormStepperProps) => import("react").JSX.Element;
@@ -0,0 +1,60 @@
1
+ import { ReactNode } from 'react';
2
+ import { LinearFormStepperProps } from './linear-form-stepper';
3
+ /**
4
+ * The step a flow is on, already resolved by the app. The library never
5
+ * defines steps: the app maps its own step (e.g. from the API) to a position
6
+ * and a translated title, then reports it.
7
+ */
8
+ export type StepProgress = {
9
+ /** Active step (1-based). */
10
+ currentStep: number;
11
+ /** Total number of steps. May change as the flow reveals its path. */
12
+ totalSteps: number;
13
+ /** Translated title of the current step. */
14
+ title: string;
15
+ };
16
+ export type StepProgressProviderProps = {
17
+ children: ReactNode;
18
+ /**
19
+ * Progress to show on the first render, before any page has reported, e.g.
20
+ * so a server-rendered layout paints the bar straight away.
21
+ */
22
+ initialProgress?: StepProgress;
23
+ };
24
+ /**
25
+ * Holds the step a persistent flow header shows. Put it in the flow layout,
26
+ * above the route's loading boundary, so the header survives step navigations
27
+ * instead of remounting with the page, and its bar animates between steps.
28
+ *
29
+ * ```tsx
30
+ * <StepProgressProvider>
31
+ * <StepProgressHeader onBack={router.back} />
32
+ * {children}
33
+ * </StepProgressProvider>
34
+ * ```
35
+ */
36
+ export declare const StepProgressProvider: ({ children, initialProgress, }: StepProgressProviderProps) => import("react").JSX.Element;
37
+ /**
38
+ * The last reported step, or `null` before anything has been reported or
39
+ * outside a `StepProgressProvider`. Use it to render `FormStepper` or a custom
40
+ * header from the same state.
41
+ */
42
+ export declare const useStepProgress: () => StepProgress | null;
43
+ /**
44
+ * Publishes the current step to the nearest `StepProgressProvider`. Pass
45
+ * `null` while the step isn't resolved yet; nothing is reported then. Never
46
+ * clears on unmount, so the header holds its value while the next route's
47
+ * loading fallback is on screen.
48
+ *
49
+ * ```tsx
50
+ * useReportStepProgress({ currentStep: 2, totalSteps: 5, title: t("income") });
51
+ * ```
52
+ */
53
+ export declare const useReportStepProgress: (progress: StepProgress | null) => void;
54
+ export type StepProgressHeaderProps = Omit<LinearFormStepperProps, "currentStep" | "totalSteps" | "title">;
55
+ /**
56
+ * A `LinearFormStepper` driven by the nearest `StepProgressProvider`. Renders
57
+ * nothing until a step has been reported. Everything except the step itself
58
+ * (`onBack`, `color`, `headingLevel`, …) is passed as props.
59
+ */
60
+ export declare const StepProgressHeader: (props: StepProgressHeaderProps) => import("react").JSX.Element | null;
@@ -0,0 +1,21 @@
1
+ import { ReactNode } from 'react';
2
+ export type AppHeaderProps = {
3
+ /**
4
+ * Shows the brand divider under the header. Without it, the header gets a
5
+ * bottom border instead.
6
+ * @default true
7
+ */
8
+ brandDivider?: boolean;
9
+ /**
10
+ * Lets the content span the full width instead of stopping at the `lg`
11
+ * breakpoint. The side padding stays.
12
+ * @default false
13
+ */
14
+ fluid?: boolean;
15
+ /**
16
+ * Content for the right-hand side, e.g. buttons. Without children the logo
17
+ * is centred.
18
+ */
19
+ children?: ReactNode;
20
+ };
21
+ export declare const AppHeader: ({ brandDivider, fluid, children, }: AppHeaderProps) => import("react").JSX.Element;
@@ -3,4 +3,10 @@
3
3
  * Brand Divider in Lea colors
4
4
  *
5
5
  */
6
- export declare const BrandDivider: () => import("react").JSX.Element;
6
+ export type BrandDividerProps = {
7
+ /**
8
+ * The size of the divider.
9
+ */
10
+ size?: "sm" | "md" | "lg";
11
+ };
12
+ export declare const BrandDivider: ({ size }: BrandDividerProps) => import("react").JSX.Element;
@@ -1 +1,2 @@
1
1
  export * from './brand-divider';
2
+ export * from './app-header';