@leabankab/component-library 7.2.0 → 8.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.
Files changed (194) hide show
  1. package/CHANGELOG.md +685 -0
  2. package/README.md +2 -5
  3. package/dist/component-library.es.js +2778 -5628
  4. package/dist/component-library.es.js.map +1 -1
  5. package/dist/component-library.umd.js +2 -35
  6. package/dist/component-library.umd.js.map +1 -1
  7. package/dist/components/animations/icons/status-icon.d.ts +4 -0
  8. package/dist/components/animations/illustrations/check-animation.d.ts +8 -0
  9. package/dist/components/animations/illustrations/pulse-animation.d.ts +5 -1
  10. package/dist/components/animations/illustrations/status-animation.d.ts +8 -1
  11. package/dist/components/animations/shared.d.ts +6 -32
  12. package/dist/components/animations/spinner.d.ts +18 -0
  13. package/dist/components/animations/use-animation-labels.d.ts +0 -5
  14. package/dist/components/buttons/action-button.d.ts +8 -10
  15. package/dist/components/buttons/button-base.d.ts +31 -17
  16. package/dist/components/buttons/button.d.ts +4 -4
  17. package/dist/components/buttons/close-button.d.ts +1 -1
  18. package/dist/components/buttons/icon-button.d.ts +2 -14
  19. package/dist/components/buttons/skip-link.d.ts +21 -4
  20. package/dist/components/color-roles.d.ts +8 -0
  21. package/dist/components/data-display/card.d.ts +31 -4
  22. package/dist/components/data-display/chip.d.ts +50 -8
  23. package/dist/components/data-display/data-field.d.ts +15 -4
  24. package/dist/components/data-display/tooltip.d.ts +74 -22
  25. package/dist/components/feedback/alert-parts.d.ts +329 -0
  26. package/dist/components/feedback/alert.d.ts +14 -19
  27. package/dist/components/feedback/global-alert.d.ts +24 -0
  28. package/dist/components/feedback/index.d.ts +1 -0
  29. package/dist/components/feedback/simple-dialog.d.ts +1 -1
  30. package/dist/components/form/amount-slider.d.ts +68 -0
  31. package/dist/components/form/autocomplete.d.ts +56 -59
  32. package/dist/components/form/checkbox-box.d.ts +11 -0
  33. package/dist/components/form/checkbox.d.ts +67 -7
  34. package/dist/components/form/combo-field.d.ts +60 -0
  35. package/dist/components/form/email-input.d.ts +20 -26
  36. package/dist/components/form/field-parts.d.ts +36 -0
  37. package/dist/components/form/index.d.ts +3 -9
  38. package/dist/components/form/input.d.ts +51 -13
  39. package/dist/components/form/multi-select.d.ts +12 -14
  40. package/dist/components/form/number-input.d.ts +20 -14
  41. package/dist/components/form/phone-number-input/phone-number-input.d.ts +25 -14
  42. package/dist/components/form/radio-card.d.ts +94 -43
  43. package/dist/components/form/radio-circle.d.ts +14 -13
  44. package/dist/components/form/radio-group-root.d.ts +88 -0
  45. package/dist/components/form/radio.d.ts +68 -24
  46. package/dist/components/form/select-field.d.ts +78 -0
  47. package/dist/components/form/select.d.ts +30 -42
  48. package/dist/components/form/slider-parts.d.ts +34 -0
  49. package/dist/components/form/slider.d.ts +40 -16
  50. package/dist/components/form/use-autocomplete-labels.d.ts +3 -16
  51. package/dist/components/form/use-blur-outside.d.ts +7 -0
  52. package/dist/components/form/use-focus-target-ref.d.ts +11 -0
  53. package/dist/components/form/use-tooltip-trigger-labels.d.ts +5 -0
  54. package/dist/components/index.d.ts +0 -1
  55. package/dist/components/layout/stack.d.ts +1 -1
  56. package/dist/components/navigation/form-stepper.d.ts +1 -1
  57. package/dist/components/navigation/index.d.ts +3 -1
  58. package/dist/components/navigation/linear-form-stepper.d.ts +58 -0
  59. package/dist/components/navigation/progress-circle.d.ts +14 -8
  60. package/dist/components/navigation/step-progress.d.ts +60 -0
  61. package/dist/components/navigation/tabs.d.ts +37 -34
  62. package/dist/components/navigation/use-stepper-labels.d.ts +1 -1
  63. package/dist/components/typography/link.d.ts +25 -16
  64. package/dist/components/typography/lists.d.ts +20 -23
  65. package/dist/components/typography/text.d.ts +46 -10
  66. package/dist/components/ui/app-header.d.ts +29 -0
  67. package/dist/components/ui/brand-divider.d.ts +7 -1
  68. package/dist/components/ui/index.d.ts +1 -0
  69. package/dist/cookie-consent/react.d.ts +0 -1
  70. package/dist/cookie-consent-react.cjs +1 -1
  71. package/dist/cookie-consent-react.cjs.map +1 -1
  72. package/dist/cookie-consent-react.mjs +107 -97
  73. package/dist/cookie-consent-react.mjs.map +1 -1
  74. package/dist/cookie-consent.css +1 -1
  75. package/dist/date-picker/datepicker.d.ts +140 -0
  76. package/dist/date-picker/index.d.ts +18 -0
  77. package/dist/date-picker/theme/field-base.d.ts +23 -0
  78. package/dist/date-picker/theme/form-control.theme.d.ts +7 -0
  79. package/dist/date-picker/theme/index.d.ts +12 -0
  80. package/dist/date-picker/theme/input.theme.d.ts +6 -0
  81. package/dist/{components/form/datepicker → date-picker}/use-view-toggle-labels.d.ts +1 -1
  82. package/dist/date-picker.cjs +2 -0
  83. package/dist/date-picker.cjs.map +1 -0
  84. package/dist/date-picker.mjs +1012 -0
  85. package/dist/date-picker.mjs.map +1 -0
  86. package/dist/{components/dev-panel → dev-panel}/dev-panel-payload.d.ts +1 -1
  87. package/dist/{components/dev-panel → dev-panel}/dev-panel-status.d.ts +2 -2
  88. package/dist/{components/dev-panel → dev-panel}/dev-panel-steps.d.ts +2 -1
  89. package/dist/{components/dev-panel → dev-panel}/dev-panel.d.ts +25 -19
  90. package/dist/dev-panel/index.d.ts +10 -0
  91. package/dist/{components/dev-panel → dev-panel}/json-highlight.d.ts +2 -2
  92. package/dist/dev-panel/parts.d.ts +9 -0
  93. package/dist/{components/dev-panel → dev-panel}/segmented-control.d.ts +5 -4
  94. package/dist/{components/dev-panel → dev-panel}/use-dev-panel-labels.d.ts +1 -1
  95. package/dist/{components/dev-panel → dev-panel}/use-roving-radio.d.ts +2 -2
  96. package/dist/dev-panel.cjs +3 -0
  97. package/dist/dev-panel.cjs.map +1 -0
  98. package/dist/dev-panel.css +1 -0
  99. package/dist/dev-panel.mjs +818 -0
  100. package/dist/dev-panel.mjs.map +1 -0
  101. package/dist/fonts/ClashGrotesk-Variable.woff2 +0 -0
  102. package/dist/index.css +1 -1
  103. package/dist/index.d.ts +1 -3
  104. package/dist/provider/lea-provider.d.ts +4 -7
  105. package/dist/react-hook-form/form-field.d.ts +76 -0
  106. package/dist/react-hook-form/index.d.ts +1 -0
  107. package/dist/react-hook-form.cjs +2 -0
  108. package/dist/react-hook-form.cjs.map +1 -0
  109. package/dist/react-hook-form.mjs +33 -0
  110. package/dist/react-hook-form.mjs.map +1 -0
  111. package/dist/tailwind.css +103 -17
  112. package/dist/theme/index.d.ts +0 -4
  113. package/dist/theme/token-types.d.ts +15 -3
  114. package/dist/theme/tokens/colors.d.ts +13 -0
  115. package/dist/theme/tokens/font-family.d.ts +9 -0
  116. package/dist/theme/tokens/font-sizes.d.ts +8 -0
  117. package/dist/theme/tokens/index.d.ts +5 -1
  118. package/dist/theme/tokens/line-heights.d.ts +11 -0
  119. package/dist/theme/tokens/opacity.d.ts +5 -0
  120. package/dist/theme/tokens/spacing.d.ts +6 -0
  121. package/dist/theme/tokens/text-styles.d.ts +61 -0
  122. package/dist/theme/tokens/type-scale.d.ts +21 -0
  123. package/dist/theme/types.d.ts +19 -30
  124. package/package.json +42 -6
  125. package/dist/components/dev-panel/index.d.ts +0 -9
  126. package/dist/components/form/datepicker/datepicker.d.ts +0 -99
  127. package/dist/components/form/datepicker/index.d.ts +0 -1
  128. package/dist/components/form/fields/autocomplete-field.d.ts +0 -17
  129. package/dist/components/form/fields/boolean-radio-field.d.ts +0 -3
  130. package/dist/components/form/fields/checkbox-field.d.ts +0 -12
  131. package/dist/components/form/fields/datepicker-field.d.ts +0 -9
  132. package/dist/components/form/fields/email-field.d.ts +0 -10
  133. package/dist/components/form/fields/field-types.d.ts +0 -18
  134. package/dist/components/form/fields/index.d.ts +0 -14
  135. package/dist/components/form/fields/input-field.d.ts +0 -9
  136. package/dist/components/form/fields/multi-select-field.d.ts +0 -9
  137. package/dist/components/form/fields/number-field.d.ts +0 -10
  138. package/dist/components/form/fields/phone-number-field.d.ts +0 -11
  139. package/dist/components/form/fields/radio-card-field.d.ts +0 -22
  140. package/dist/components/form/fields/radio-field.d.ts +0 -16
  141. package/dist/components/form/fields/select-field.d.ts +0 -9
  142. package/dist/components/form/fields/use-field-control.d.ts +0 -6
  143. package/dist/components/form/fields/use-tooltip-trigger-labels.d.ts +0 -5
  144. package/dist/components/form/form-control/form-control-context.d.ts +0 -35
  145. package/dist/components/form/form-control/form-control-label.d.ts +0 -1
  146. package/dist/components/form/form-control/form-control.d.ts +0 -13
  147. package/dist/components/form/form-control/form-helper-text.d.ts +0 -9
  148. package/dist/components/form/form-control/form-label.d.ts +0 -9
  149. package/dist/components/form/form-control/index.d.ts +0 -5
  150. package/dist/components/form/input-label.d.ts +0 -9
  151. package/dist/theme/components/accordion.theme.d.ts +0 -7
  152. package/dist/theme/components/action-button.theme.d.ts +0 -45
  153. package/dist/theme/components/alert.theme.d.ts +0 -2
  154. package/dist/theme/components/autocomplete.theme.d.ts +0 -2
  155. package/dist/theme/components/baseline-css.d.ts +0 -2
  156. package/dist/theme/components/button.theme.d.ts +0 -2
  157. package/dist/theme/components/card.theme.d.ts +0 -2
  158. package/dist/theme/components/checkbox.theme.d.ts +0 -2
  159. package/dist/theme/components/chip.theme.d.ts +0 -2
  160. package/dist/theme/components/dev-panel.theme.d.ts +0 -95
  161. package/dist/theme/components/dialog.theme.d.ts +0 -2
  162. package/dist/theme/components/drawer.theme.d.ts +0 -4
  163. package/dist/theme/components/field-base.d.ts +0 -31
  164. package/dist/theme/components/form-control-label.theme.d.ts +0 -2
  165. package/dist/theme/components/form-control.theme.d.ts +0 -2
  166. package/dist/theme/components/index.d.ts +0 -2
  167. package/dist/theme/components/input.theme.d.ts +0 -3
  168. package/dist/theme/components/link.theme.d.ts +0 -2
  169. package/dist/theme/components/menu-item.theme.d.ts +0 -2
  170. package/dist/theme/components/number-input.theme.d.ts +0 -23
  171. package/dist/theme/components/phone-number-input.theme.d.ts +0 -43
  172. package/dist/theme/components/radio.theme.d.ts +0 -2
  173. package/dist/theme/components/select.theme.d.ts +0 -2
  174. package/dist/theme/components/slider.theme.d.ts +0 -2
  175. package/dist/theme/components/tabs.theme.d.ts +0 -34
  176. package/dist/theme/components/tooltip.theme.d.ts +0 -110
  177. package/dist/theme/components/typography.theme.d.ts +0 -2
  178. package/dist/theme/mui-augmentation.d.ts +0 -147
  179. package/dist/theme/sx-config.d.ts +0 -10
  180. /package/dist/{components/form/datepicker → date-picker}/calendar-header.d.ts +0 -0
  181. /package/dist/{components/form/datepicker → date-picker}/drawer-toolbar.d.ts +0 -0
  182. /package/dist/{theme/components → date-picker/theme}/date-picker.theme.d.ts +0 -0
  183. /package/dist/{theme/components → date-picker/theme}/icon-button.theme.d.ts +0 -0
  184. /package/dist/{theme/tokens → date-picker/theme}/typography.d.ts +0 -0
  185. /package/dist/{components/form/datepicker → date-picker}/use-calendar-header-labels.d.ts +0 -0
  186. /package/dist/{components/form/datepicker → date-picker}/use-datepicker-title-labels.d.ts +0 -0
  187. /package/dist/{components/form/datepicker → date-picker}/view-renderers.d.ts +0 -0
  188. /package/dist/{components/form/datepicker → date-picker}/view-toggle.d.ts +0 -0
  189. /package/dist/{components/dev-panel → dev-panel}/dev-panel-country.d.ts +0 -0
  190. /package/dist/{components/dev-panel → dev-panel}/dev-panel-flow.d.ts +0 -0
  191. /package/dist/{components/dev-panel → dev-panel}/dev-panel-footer.d.ts +0 -0
  192. /package/dist/{components/dev-panel → dev-panel}/dev-panel-step-state.d.ts +0 -0
  193. /package/dist/{components/dev-panel → dev-panel}/dev-panel-variant.d.ts +0 -0
  194. /package/dist/{components/dev-panel → dev-panel}/use-copy.d.ts +0 -0
@@ -0,0 +1,329 @@
1
+ import { ComponentPropsWithRef, ReactNode, SyntheticEvent } from 'react';
2
+ import { ColorRoles } from '../color-roles';
3
+ export type AlertSeverity = ColorRoles<"success" | "info" | "warning" | "error">;
4
+ export type AlertColor = AlertSeverity | ColorRoles<"primary" | "neutral">;
5
+ export type AlertVariant = "standard" | "filled" | "outlined";
6
+ export type AlertSize = "sm" | "lg";
7
+ export type AlertProps = Omit<ComponentPropsWithRef<"div">, "color"> & {
8
+ /**
9
+ * Semantic meaning — picks the icon and how screen readers announce it.
10
+ * @default "success", or "info" with a brand `color`
11
+ */
12
+ severity?: AlertSeverity;
13
+ /**
14
+ * Colour scheme. Defaults to the colour of `severity`. `"primary"` (the
15
+ * brand purple) and `"neutral"` (grey) carry no status meaning.
16
+ */
17
+ color?: AlertColor;
18
+ /**
19
+ * `"standard"` is a tinted fill, `"filled"` a solid one, `"outlined"` a
20
+ * border only.
21
+ * @default "standard"
22
+ */
23
+ variant?: AlertVariant;
24
+ /**
25
+ * `"sm"` for tighter padding and smaller text.
26
+ * @default "lg"
27
+ */
28
+ size?: AlertSize;
29
+ /** Replaces the severity icon. Pass `false` to hide it. */
30
+ icon?: ReactNode | false;
31
+ /** Content for the end of the alert, e.g. a button. Replaces the close button. */
32
+ action?: ReactNode;
33
+ /** Renders a close button that calls this when pressed. */
34
+ onClose?: (event: SyntheticEvent) => void;
35
+ /** Accessible name of the close button. Defaults to a translated "Close". */
36
+ closeLabel?: string;
37
+ };
38
+ /**
39
+ * Resolves the props shared by `Alert` and `GlobalAlert` into the root's
40
+ * attributes and its inner markup. Internal — not exported from the package.
41
+ */
42
+ export declare function resolveAlert({ severity, color, variant, size, icon, action, onClose, closeLabel, role, children, ...rest }: AlertProps): {
43
+ rootProps: {
44
+ role: import('react').AriaRole;
45
+ "data-color": AlertColor;
46
+ "data-variant": AlertVariant;
47
+ "data-size": AlertSize;
48
+ className?: string | undefined | undefined;
49
+ slot?: string | undefined | undefined;
50
+ style?: import('react').CSSProperties | undefined;
51
+ title?: string | undefined | undefined;
52
+ onAnimationStart?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
53
+ onDragStart?: import('react').DragEventHandler<HTMLDivElement> | undefined;
54
+ onDragEnd?: import('react').DragEventHandler<HTMLDivElement> | undefined;
55
+ onDrag?: import('react').DragEventHandler<HTMLDivElement> | undefined;
56
+ ref?: import('react').Ref<HTMLDivElement> | undefined;
57
+ key?: import('react').Key | null | undefined;
58
+ defaultChecked?: boolean | undefined | undefined;
59
+ defaultValue?: string | number | readonly string[] | undefined;
60
+ suppressContentEditableWarning?: boolean | undefined | undefined;
61
+ suppressHydrationWarning?: boolean | undefined | undefined;
62
+ accessKey?: string | undefined | undefined;
63
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
64
+ autoFocus?: boolean | undefined | undefined;
65
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
66
+ contextMenu?: string | undefined | undefined;
67
+ dir?: string | undefined | undefined;
68
+ draggable?: (boolean | "true" | "false") | undefined;
69
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
70
+ hidden?: boolean | undefined | undefined;
71
+ id?: string | undefined | undefined;
72
+ lang?: string | undefined | undefined;
73
+ nonce?: string | undefined | undefined;
74
+ spellCheck?: (boolean | "true" | "false") | undefined;
75
+ tabIndex?: number | undefined | undefined;
76
+ translate?: "yes" | "no" | undefined | undefined;
77
+ radioGroup?: string | undefined | undefined;
78
+ about?: string | undefined | undefined;
79
+ content?: string | undefined | undefined;
80
+ datatype?: string | undefined | undefined;
81
+ inlist?: any;
82
+ prefix?: string | undefined | undefined;
83
+ property?: string | undefined | undefined;
84
+ rel?: string | undefined | undefined;
85
+ resource?: string | undefined | undefined;
86
+ rev?: string | undefined | undefined;
87
+ typeof?: string | undefined | undefined;
88
+ vocab?: string | undefined | undefined;
89
+ autoCorrect?: string | undefined | undefined;
90
+ autoSave?: string | undefined | undefined;
91
+ itemProp?: string | undefined | undefined;
92
+ itemScope?: boolean | undefined | undefined;
93
+ itemType?: string | undefined | undefined;
94
+ itemID?: string | undefined | undefined;
95
+ itemRef?: string | undefined | undefined;
96
+ results?: number | undefined | undefined;
97
+ security?: string | undefined | undefined;
98
+ unselectable?: "on" | "off" | undefined | undefined;
99
+ popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
100
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
101
+ popoverTarget?: string | undefined | undefined;
102
+ inert?: boolean | undefined | undefined;
103
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
104
+ is?: string | undefined | undefined;
105
+ exportparts?: string | undefined | undefined;
106
+ part?: string | undefined | undefined;
107
+ "aria-activedescendant"?: string | undefined | undefined;
108
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
109
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
110
+ "aria-braillelabel"?: string | undefined | undefined;
111
+ "aria-brailleroledescription"?: string | undefined | undefined;
112
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
113
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
114
+ "aria-colcount"?: number | undefined | undefined;
115
+ "aria-colindex"?: number | undefined | undefined;
116
+ "aria-colindextext"?: string | undefined | undefined;
117
+ "aria-colspan"?: number | undefined | undefined;
118
+ "aria-controls"?: string | undefined | undefined;
119
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
120
+ "aria-describedby"?: string | undefined | undefined;
121
+ "aria-description"?: string | undefined | undefined;
122
+ "aria-details"?: string | undefined | undefined;
123
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
124
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
125
+ "aria-errormessage"?: string | undefined | undefined;
126
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
127
+ "aria-flowto"?: string | undefined | undefined;
128
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
129
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
130
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
131
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
132
+ "aria-keyshortcuts"?: string | undefined | undefined;
133
+ "aria-label"?: string | undefined | undefined;
134
+ "aria-labelledby"?: string | undefined | undefined;
135
+ "aria-level"?: number | undefined | undefined;
136
+ "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
137
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
138
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
139
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
140
+ "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
141
+ "aria-owns"?: string | undefined | undefined;
142
+ "aria-placeholder"?: string | undefined | undefined;
143
+ "aria-posinset"?: number | undefined | undefined;
144
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
145
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
146
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
147
+ "aria-required"?: (boolean | "true" | "false") | undefined;
148
+ "aria-roledescription"?: string | undefined | undefined;
149
+ "aria-rowcount"?: number | undefined | undefined;
150
+ "aria-rowindex"?: number | undefined | undefined;
151
+ "aria-rowindextext"?: string | undefined | undefined;
152
+ "aria-rowspan"?: number | undefined | undefined;
153
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
154
+ "aria-setsize"?: number | undefined | undefined;
155
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
156
+ "aria-valuemax"?: number | undefined | undefined;
157
+ "aria-valuemin"?: number | undefined | undefined;
158
+ "aria-valuenow"?: number | undefined | undefined;
159
+ "aria-valuetext"?: string | undefined | undefined;
160
+ dangerouslySetInnerHTML?: {
161
+ __html: string | TrustedHTML;
162
+ } | undefined | undefined;
163
+ onCopy?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
164
+ onCopyCapture?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
165
+ onCut?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
166
+ onCutCapture?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
167
+ onPaste?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
168
+ onPasteCapture?: import('react').ClipboardEventHandler<HTMLDivElement> | undefined;
169
+ onCompositionEnd?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
170
+ onCompositionEndCapture?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
171
+ onCompositionStart?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
172
+ onCompositionStartCapture?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
173
+ onCompositionUpdate?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
174
+ onCompositionUpdateCapture?: import('react').CompositionEventHandler<HTMLDivElement> | undefined;
175
+ onFocus?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
176
+ onFocusCapture?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
177
+ onBlur?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
178
+ onBlurCapture?: import('react').FocusEventHandler<HTMLDivElement> | undefined;
179
+ onChange?: import('react').ChangeEventHandler<HTMLDivElement, Element> | undefined;
180
+ onChangeCapture?: import('react').ChangeEventHandler<HTMLDivElement, Element> | undefined;
181
+ onBeforeInput?: import('react').InputEventHandler<HTMLDivElement> | undefined;
182
+ onBeforeInputCapture?: import('react').InputEventHandler<HTMLDivElement> | undefined;
183
+ onInput?: import('react').InputEventHandler<HTMLDivElement> | undefined;
184
+ onInputCapture?: import('react').InputEventHandler<HTMLDivElement> | undefined;
185
+ onReset?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
186
+ onResetCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
187
+ onSubmit?: import('react').SubmitEventHandler<HTMLDivElement> | undefined;
188
+ onSubmitCapture?: import('react').SubmitEventHandler<HTMLDivElement> | undefined;
189
+ onInvalid?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
190
+ onInvalidCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
191
+ onLoad?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
192
+ onLoadCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
193
+ onError?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
194
+ onErrorCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
195
+ onKeyDown?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
196
+ onKeyDownCapture?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
197
+ onKeyPress?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
198
+ onKeyPressCapture?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
199
+ onKeyUp?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
200
+ onKeyUpCapture?: import('react').KeyboardEventHandler<HTMLDivElement> | undefined;
201
+ onAbort?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
202
+ onAbortCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
203
+ onCanPlay?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
204
+ onCanPlayCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
205
+ onCanPlayThrough?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
206
+ onCanPlayThroughCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
207
+ onDurationChange?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
208
+ onDurationChangeCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
209
+ onEmptied?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
210
+ onEmptiedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
211
+ onEncrypted?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
212
+ onEncryptedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
213
+ onEnded?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
214
+ onEndedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
215
+ onLoadedData?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
216
+ onLoadedDataCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
217
+ onLoadedMetadata?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
218
+ onLoadedMetadataCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
219
+ onLoadStart?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
220
+ onLoadStartCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
221
+ onPause?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
222
+ onPauseCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
223
+ onPlay?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
224
+ onPlayCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
225
+ onPlaying?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
226
+ onPlayingCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
227
+ onProgress?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
228
+ onProgressCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
229
+ onRateChange?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
230
+ onRateChangeCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
231
+ onSeeked?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
232
+ onSeekedCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
233
+ onSeeking?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
234
+ onSeekingCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
235
+ onStalled?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
236
+ onStalledCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
237
+ onSuspend?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
238
+ onSuspendCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
239
+ onTimeUpdate?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
240
+ onTimeUpdateCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
241
+ onVolumeChange?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
242
+ onVolumeChangeCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
243
+ onWaiting?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
244
+ onWaitingCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
245
+ onAuxClick?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
246
+ onAuxClickCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
247
+ onClick?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
248
+ onClickCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
249
+ onContextMenu?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
250
+ onContextMenuCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
251
+ onDoubleClick?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
252
+ onDoubleClickCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
253
+ onDragCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
254
+ onDragEndCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
255
+ onDragEnter?: import('react').DragEventHandler<HTMLDivElement> | undefined;
256
+ onDragEnterCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
257
+ onDragExit?: import('react').DragEventHandler<HTMLDivElement> | undefined;
258
+ onDragExitCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
259
+ onDragLeave?: import('react').DragEventHandler<HTMLDivElement> | undefined;
260
+ onDragLeaveCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
261
+ onDragOver?: import('react').DragEventHandler<HTMLDivElement> | undefined;
262
+ onDragOverCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
263
+ onDragStartCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
264
+ onDrop?: import('react').DragEventHandler<HTMLDivElement> | undefined;
265
+ onDropCapture?: import('react').DragEventHandler<HTMLDivElement> | undefined;
266
+ onMouseDown?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
267
+ onMouseDownCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
268
+ onMouseEnter?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
269
+ onMouseLeave?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
270
+ onMouseMove?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
271
+ onMouseMoveCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
272
+ onMouseOut?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
273
+ onMouseOutCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
274
+ onMouseOver?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
275
+ onMouseOverCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
276
+ onMouseUp?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
277
+ onMouseUpCapture?: import('react').MouseEventHandler<HTMLDivElement> | undefined;
278
+ onSelect?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
279
+ onSelectCapture?: import('react').ReactEventHandler<HTMLDivElement> | undefined;
280
+ onTouchCancel?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
281
+ onTouchCancelCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
282
+ onTouchEnd?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
283
+ onTouchEndCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
284
+ onTouchMove?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
285
+ onTouchMoveCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
286
+ onTouchStart?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
287
+ onTouchStartCapture?: import('react').TouchEventHandler<HTMLDivElement> | undefined;
288
+ onPointerDown?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
289
+ onPointerDownCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
290
+ onPointerMove?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
291
+ onPointerMoveCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
292
+ onPointerUp?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
293
+ onPointerUpCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
294
+ onPointerCancel?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
295
+ onPointerCancelCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
296
+ onPointerEnter?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
297
+ onPointerLeave?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
298
+ onPointerOver?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
299
+ onPointerOverCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
300
+ onPointerOut?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
301
+ onPointerOutCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
302
+ onGotPointerCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
303
+ onGotPointerCaptureCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
304
+ onLostPointerCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
305
+ onLostPointerCaptureCapture?: import('react').PointerEventHandler<HTMLDivElement> | undefined;
306
+ onScroll?: import('react').UIEventHandler<HTMLDivElement> | undefined;
307
+ onScrollCapture?: import('react').UIEventHandler<HTMLDivElement> | undefined;
308
+ onScrollEnd?: import('react').UIEventHandler<HTMLDivElement> | undefined;
309
+ onScrollEndCapture?: import('react').UIEventHandler<HTMLDivElement> | undefined;
310
+ onWheel?: import('react').WheelEventHandler<HTMLDivElement> | undefined;
311
+ onWheelCapture?: import('react').WheelEventHandler<HTMLDivElement> | undefined;
312
+ onAnimationStartCapture?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
313
+ onAnimationEnd?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
314
+ onAnimationEndCapture?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
315
+ onAnimationIteration?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
316
+ onAnimationIterationCapture?: import('react').AnimationEventHandler<HTMLDivElement> | undefined;
317
+ onToggle?: import('react').ToggleEventHandler<HTMLDivElement> | undefined;
318
+ onBeforeToggle?: import('react').ToggleEventHandler<HTMLDivElement> | undefined;
319
+ onTransitionCancel?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
320
+ onTransitionCancelCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
321
+ onTransitionEnd?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
322
+ onTransitionEndCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
323
+ onTransitionRun?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
324
+ onTransitionRunCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
325
+ onTransitionStart?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
326
+ onTransitionStartCapture?: import('react').TransitionEventHandler<HTMLDivElement> | undefined;
327
+ };
328
+ content: import("react").JSX.Element;
329
+ };
@@ -1,27 +1,22 @@
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
- * <Alert color="purple" size="sm">
14
+ * <Alert color="primary" size="sm">
22
15
  * Lånet forutsetter at du løser skulder for totalt 80 000 kr.
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';
@@ -33,7 +33,7 @@ export type SimpleDialogProps = Omit<Dialog.RootProps, "children"> & {
33
33
  * title="Update your details"
34
34
  * description="Keep your contact information up to date."
35
35
  * >
36
- * <TextField label="Phone" />
36
+ * <Input label="Phone" />
37
37
  * </SimpleDialog>
38
38
  * ```
39
39
  */
@@ -0,0 +1,68 @@
1
+ import { ComponentPropsWithRef, ReactNode } from 'react';
2
+ export type AmountSliderProps = Omit<ComponentPropsWithRef<"div">, "children" | "defaultValue" | "onChange"> & {
3
+ /**
4
+ * The question above the amount, e.g. "Hur mycket vill du låna?". It labels
5
+ * the amount field and names the slider, so it is required.
6
+ */
7
+ label: ReactNode;
8
+ /** The lowest amount that can be chosen. */
9
+ min: number;
10
+ /** The highest amount that can be chosen. */
11
+ max: number;
12
+ /**
13
+ * How far the slider, and the arrow keys in the amount field, move the
14
+ * amount. A typed amount is kept as typed, also between two steps.
15
+ * @default 1
16
+ */
17
+ step?: number;
18
+ /** The amount. Use with `onValueChange` to control the component. */
19
+ value?: number;
20
+ /**
21
+ * The amount when first rendered, for uncontrolled use.
22
+ * @default min
23
+ */
24
+ defaultValue?: number;
25
+ /**
26
+ * Called with the new amount when the slider moves, and when an amount
27
+ * within `min` and `max` is typed.
28
+ */
29
+ onValueChange?: (value: number) => void;
30
+ /** How the amount, `min` and `max` are written, e.g. as a currency. */
31
+ format?: Intl.NumberFormatOptions;
32
+ /** The locale the amount is written and typed in. Defaults to the runtime locale. */
33
+ locale?: Intl.LocalesArgument;
34
+ /** Submits the amount under this name when inside a form. */
35
+ name?: string;
36
+ /** Disables both the amount field and the slider. */
37
+ disabled?: boolean;
38
+ /** Helper / error text shown below the slider and linked via `aria-describedby`. */
39
+ helperText?: ReactNode;
40
+ /** Puts the amount field, the slider and the helper text into the error state. */
41
+ error?: boolean;
42
+ };
43
+ /**
44
+ * An amount chosen by dragging a slider or by typing it, for questions like
45
+ * "how much do you want to borrow?". The amount field and the slider share one
46
+ * value: moving the slider rewrites the amount, and typing moves the thumb.
47
+ *
48
+ * The `label` is a real `<label>` for the amount field and also names the
49
+ * slider, and the helper text describes both. A typed amount outside `min`
50
+ * and `max` is brought back into range when the field loses focus, and an
51
+ * emptied field goes back to the last amount.
52
+ *
53
+ * Use `Slider` instead when the value does not need to be typed.
54
+ *
55
+ * ```tsx
56
+ * <AmountSlider
57
+ * label="Hur mycket vill du låna?"
58
+ * min={20000}
59
+ * max={600000}
60
+ * step={5000}
61
+ * defaultValue={200000}
62
+ * locale="sv-SE"
63
+ * format={{ style: "currency", currency: "SEK", maximumFractionDigits: 0 }}
64
+ * onValueChange={(amount) => setAmount(amount)}
65
+ * />
66
+ * ```
67
+ */
68
+ export declare function AmountSlider({ label, min, max, step, value: valueProp, defaultValue, onValueChange, format, locale, name, disabled, helperText, error, className, ...rest }: AmountSliderProps): import("react").JSX.Element;
@@ -1,71 +1,68 @@
1
- import { AutocompleteProps as MuiAutocompleteProps } from '@mui/material';
2
- import { ReactNode } from 'react';
3
- import { SelectOption } from './select';
4
- type AutocompleteOption = SelectOption | string;
5
- /** MUI props we forward untouched (free-solo so both modes type-check). */
6
- type ForwardedMuiProps = Omit<MuiAutocompleteProps<AutocompleteOption, false, false, true>, "ref" | "renderInput" | "renderValue" | "options" | "value" | "defaultValue" | "onChange" | "onInputChange" | "inputValue" | "freeSolo" | "multiple" | "getOptionLabel" | "getOptionDisabled" | "isOptionEqualToValue" | "filterOptions">;
7
- type AutocompleteBaseProps = ForwardedMuiProps & {
8
- /** Floating label. Rendered as an `InputLabel` and linked automatically. */
9
- label?: ReactNode;
10
- /** Helper / error text shown below the control and linked via `aria-describedby`. */
11
- helperText?: ReactNode;
12
- /** Searchable options. Ignored in `email` mode, where suggestions are derived from the input. */
13
- options?: SelectOption[];
14
- /** Puts the control in an error state. */
15
- error?: boolean;
16
- /** Marks the control as required. */
17
- required?: boolean;
18
- /** Placeholder shown in the text input. */
19
- placeholder?: string;
20
- };
21
- type AutocompleteSingleProps = {
22
- /** Enable selecting multiple values. Omit (or `false`) for single-select. */
23
- multiple?: false;
24
- /** Selected value (controlled). */
25
- value?: string;
26
- /** Initial value (uncontrolled). */
27
- defaultValue?: string;
28
- /** Called with the next string value. */
29
- onChange?: (value: string) => void;
1
+ import { ReactElement, ReactNode } from 'react';
2
+ import { ComboFieldBaseProps } from './combo-field';
3
+ import { SelectOption } from './select-field';
4
+ type AutocompleteBaseProps<Value extends string> = ComboFieldBaseProps & {
5
+ /** The choices. Typing filters them by their label. */
6
+ options: readonly SelectOption<Value>[];
7
+ /** Shown in the list when nothing matches. Translated by default. */
8
+ noOptionsText?: ReactNode;
30
9
  /**
31
- * Email mode: lets the user type freely and, once they type `@`, suggests
32
- * completions from common providers (gmail, outlook, …).
10
+ * Whether the options are on their way. While there are none to show, the
11
+ * list says so instead of "no options".
33
12
  */
34
- email?: boolean;
35
- /** Domains offered in `email` mode. @default COMMON_EMAIL_DOMAINS */
36
- domains?: readonly string[];
37
- /** Maximum number of email suggestions to show. @default 6 */
38
- maxSuggestions?: number;
13
+ loading?: boolean;
39
14
  };
40
- type AutocompleteMultipleProps = {
41
- /** Enable selecting multiple values, rendered as removable chips. */
15
+ type SingleValueProps<Value extends string> = {
16
+ /** Choose several values, shown as chips. */
17
+ multiple?: false;
18
+ /** The chosen value (controlled). `""` means nothing is chosen. */
19
+ value?: Value | "";
20
+ /** The chosen value when first rendered, for uncontrolled use. */
21
+ defaultValue?: Value | "";
22
+ /** Called with the chosen value, or `""` when the control is emptied. */
23
+ onValueChange?: (value: Value | "") => void;
24
+ };
25
+ type MultipleValueProps<Value extends string> = {
26
+ /** Choose several values, shown as chips. */
42
27
  multiple: true;
43
- /** Currently selected values (controlled). */
44
- value?: string[];
45
- /** Initially selected values (uncontrolled). */
46
- defaultValue?: string[];
47
- /** Called with the next array of selected values. */
48
- onChange?: (value: string[]) => void;
49
- /** Minimum number of values that must stay selected. @default 1 */
28
+ /** The chosen values (controlled). */
29
+ value?: Value[];
30
+ /** The chosen values when first rendered, for uncontrolled use. */
31
+ defaultValue?: Value[];
32
+ /** Called with the next array of chosen values. */
33
+ onValueChange?: (value: Value[]) => void;
34
+ /** Fewest values that must stay chosen. @default 1 */
50
35
  min?: number;
51
- /** Maximum number of values that can be selected. Unlimited when omitted. */
36
+ /** Most values that can be chosen. Unlimited when omitted. */
52
37
  max?: number;
53
38
  };
54
- export type AutocompleteProps = AutocompleteBaseProps & (AutocompleteSingleProps | AutocompleteMultipleProps);
39
+ type AutocompleteSingleProps<Value extends string = string> = AutocompleteBaseProps<Value> & SingleValueProps<Value>;
40
+ type AutocompleteMultipleProps<Value extends string = string> = AutocompleteBaseProps<Value> & MultipleValueProps<Value>;
41
+ export type AutocompleteProps<Value extends string = string> = AutocompleteSingleProps<Value> | AutocompleteMultipleProps<Value>;
55
42
  /**
56
- * Searchable select built on MUI's `Autocomplete`.
43
+ * A select to search in, on Base UI's `Combobox`, in the same box as `Input`.
44
+ * Typing filters the options. The label, the helper text and the ids that
45
+ * link them to the input are all rendered and wired for you.
46
+ *
47
+ * ```tsx
48
+ * <Autocomplete
49
+ * label="Land"
50
+ * options={[
51
+ * { value: "no", label: "Norge" },
52
+ * { value: "se", label: "Sverige" },
53
+ * ]}
54
+ * value={country}
55
+ * onValueChange={setCountry}
56
+ * />
57
+ * ```
57
58
  *
58
- * Works two ways:
59
- * - **Standalone (all-in-one):** pass `label` / `helperText` and `options` and
60
- * it renders its own `FormControl`, label and helper text, generating and
61
- * wiring all ids for you.
62
- * - **Composed:** drop it inside a `FormControl` next to `InputLabel` /
63
- * `FormHelperText` and it picks up the shared ids from context.
59
+ * Values are strings, typed from the options as in `Select`, and `""` means
60
+ * nothing is chosen. Pass `multiple` to choose several: they show as chips
61
+ * inside the field, bounded by `min` (default 1) and `max`.
64
62
  *
65
- * Pass `multiple` to select several values at once, shown as removable chips and
66
- * bounded by `min` (default 1) and `max`. Pass `email` (single mode only) to
67
- * turn it into an email field that suggests common domains once the user types
68
- * `@` — the same autocomplete behaviour, driven by free text.
63
+ * For an email address with suggested domains, use `EmailInput`.
69
64
  */
70
- export declare const Autocomplete: import('react').ForwardRefExoticComponent<AutocompleteProps & import('react').RefAttributes<HTMLDivElement>>;
65
+ export declare function Autocomplete<Value extends string = string>(props: AutocompleteMultipleProps<Value>): ReactElement;
66
+ export declare function Autocomplete<Value extends string = string>(props: AutocompleteSingleProps<Value>): ReactElement;
67
+ export declare function Autocomplete<Value extends string = string>(props: AutocompleteProps<Value>): ReactElement;
71
68
  export {};
@@ -0,0 +1,11 @@
1
+ /** The tick. It is drawn in by a transition when its box becomes checked. */
2
+ export declare const checkboxTick: import("react").JSX.Element;
3
+ /**
4
+ * Internal. The checkbox box as a picture only, for places where something
5
+ * else is the control: `MultiSelect` shows it inside each option, and the
6
+ * option is what gets picked. It looks exactly like `Checkbox`, which uses
7
+ * the same class on the real control.
8
+ */
9
+ export declare const CheckboxBox: ({ checked }: {
10
+ checked: boolean;
11
+ }) => import("react").JSX.Element;