@hearthscale/app-ui 0.0.0-stage → 0.2.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.
@@ -0,0 +1,745 @@
1
+ import * as react from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode, MouseEvent, CSSProperties, InputHTMLAttributes, RefObject, Key, Ref } from 'react';
3
+
4
+ type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
5
+ type ButtonSize = 'sm' | 'md' | 'lg';
6
+ interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onClick'> {
7
+ children: ReactNode;
8
+ /**
9
+ * `primary` is the accent: one per view, for its single main action.
10
+ * `secondary` is the everyday glass control, `ghost` the quiet one for
11
+ * toolbars, `danger` a destructive action in the error colour.
12
+ */
13
+ variant?: ButtonVariant;
14
+ /** `sm` sits in a row, `md` closes a section or a dialog, `lg` is a
15
+ * page's call to action. */
16
+ size?: ButtonSize;
17
+ /** A mark before the label; every destructive action carries one. */
18
+ icon?: ReactNode;
19
+ trailingIcon?: ReactNode;
20
+ /** Stretch to the container. */
21
+ fullWidth?: boolean;
22
+ /** An address makes the button a link to it, drawn the same. */
23
+ href?: string;
24
+ onClick?: (event: MouseEvent<HTMLElement>) => void;
25
+ }
26
+ /**
27
+ * The product's text button. Its whole look is `.hs-button` in the
28
+ * stylesheet, keyed on `data-variant` and `data-size`, so a theme reaches
29
+ * every one of them.
30
+ * @category Actions
31
+ */
32
+ declare function Button({ children, variant, size, icon, trailingIcon, fullWidth, href, type, className, onClick, ...rest }: ButtonProps): react.JSX.Element;
33
+ type IconButtonSize = 'sm' | 'md' | 'lg';
34
+ interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
35
+ children: ReactNode;
36
+ /** Required: the control shows no text, so it must carry its own name. */
37
+ 'aria-label': string;
38
+ size?: IconButtonSize;
39
+ }
40
+ /**
41
+ * A square, glyph-only control for toolbars and headers. Its look is
42
+ * `.hs-icon-button` in the stylesheet, keyed on `data-size`.
43
+ * @category Actions
44
+ */
45
+ declare function IconButton({ children, size, type, className, ...rest }: IconButtonProps): react.JSX.Element;
46
+
47
+ interface CardProps {
48
+ children: ReactNode;
49
+ /**
50
+ * `solid` is the raised surface a block of content sits on, `glass` the
51
+ * translucent one over the shell's frost, `gate` the opaque one a person
52
+ * must answer before work goes on.
53
+ */
54
+ variant?: 'solid' | 'glass' | 'gate';
55
+ /** The hue of a card that asks: a warning, or a question. */
56
+ tone?: 'warn' | 'info';
57
+ /** Where the card sits in a page outside the shell's stylesheet rules;
58
+ * inside the shell its look is the stylesheet's alone. */
59
+ style?: CSSProperties;
60
+ }
61
+ /**
62
+ * The bordered surface every grouped block sits on. Its corners, inset,
63
+ * border and fill are `.hs-card` in the stylesheet, keyed on
64
+ * `data-variant`, so a theme reaches every card.
65
+ * @category Surfaces
66
+ */
67
+ declare function Card({ children, variant, tone, style }: CardProps): react.JSX.Element;
68
+
69
+ interface EmptyStateProps {
70
+ /** A mark over the title, drawn in the dim ink. */
71
+ icon?: ReactNode;
72
+ title: ReactNode;
73
+ /** What follows the title: the one action that fills the place. */
74
+ children?: ReactNode;
75
+ }
76
+ /**
77
+ * A place with nothing in it yet: a mark, a title and what fills it,
78
+ * centred in the box it fills. Its look is `.hs-empty-view` in the
79
+ * stylesheet.
80
+ * @category Surfaces
81
+ */
82
+ declare function EmptyState({ icon, title, children }: EmptyStateProps): react.JSX.Element;
83
+
84
+ /**
85
+ * The inline, bordered notice row — how the product states a condition
86
+ * ("no device paired", "relay reconnecting", "stopped") without stealing the
87
+ * page. Compose the message from plain text plus one `hs-link` button for
88
+ * its one remedy.
89
+ * @category Surfaces
90
+ */
91
+ declare function Notice({ children }: {
92
+ children: ReactNode;
93
+ }): react.JSX.Element;
94
+
95
+ type ChipTone = 'neutral' | 'info' | 'ok' | 'warn' | 'bad';
96
+ interface ChipProps {
97
+ children: ReactNode;
98
+ tone?: ChipTone;
99
+ icon?: ReactNode;
100
+ title?: string;
101
+ /** Whether this choice is the chosen one; given, the chip is a choice. */
102
+ selected?: boolean;
103
+ onClick?: (event: MouseEvent<HTMLElement>) => void;
104
+ }
105
+ /**
106
+ * A small named thing inside a row or a card: a file, an agent, a right.
107
+ * A mark may lead the words, and `title` carries what does not fit, such
108
+ * as a file's whole path. With `selected` it is one choice of a row of
109
+ * chips instead, such as a filter: a press with no tone, on a plate while
110
+ * it is the chosen one. Its whole look is `.hs-chip` in the stylesheet,
111
+ * keyed on `data-tone`, or on `data-sel` for a choice.
112
+ * @category Status
113
+ */
114
+ declare function Chip({ children, tone, icon, title, selected, onClick }: ChipProps): react.JSX.Element;
115
+
116
+ type StatusTone = 'ok' | 'bad' | 'warn' | 'info' | 'dim';
117
+ interface StatusWordProps {
118
+ tone: StatusTone;
119
+ live?: boolean;
120
+ children: ReactNode;
121
+ }
122
+ /**
123
+ * A state in one or two words at the end of a row: "Failed", "Waiting for
124
+ * you", "Interrupted". The tone colours it; `live` makes it shine while
125
+ * the state lasts. Its whole look is `.hs-status` in the stylesheet.
126
+ * @category Status
127
+ */
128
+ declare function StatusWord({ tone, live, children }: StatusWordProps): react.JSX.Element;
129
+
130
+ /**
131
+ * A caption: the small label above a group, beside a value or under a
132
+ * mark. It is set in the interface font, in sentence case; monospace is for
133
+ * machine text only.
134
+ * @category Typography
135
+ */
136
+ declare function Label({ children }: {
137
+ children: ReactNode;
138
+ }): react.JSX.Element;
139
+ /**
140
+ * Machine text inside a sentence or a row: a key, an id, a hash, a path.
141
+ * @category Typography
142
+ */
143
+ declare function Mono({ children }: {
144
+ children: ReactNode;
145
+ }): react.JSX.Element;
146
+ interface PageTitleProps {
147
+ children: ReactNode;
148
+ /** The single explanatory line under the heading. Keep it to one sentence. */
149
+ lead?: ReactNode;
150
+ /** Centred and larger: a page that opens with one question. */
151
+ hero?: boolean;
152
+ }
153
+ /**
154
+ * A page's opening heading, with its optional lead paragraph. Every routed
155
+ * screen opens with exactly one.
156
+ * @category Typography
157
+ */
158
+ declare function PageTitle({ children, lead, hero }: PageTitleProps): react.JSX.Element;
159
+
160
+ interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
161
+ /** Always label a field; the product has no placeholder-only inputs. */
162
+ label: ReactNode;
163
+ /** Rendered in muted weight beside the label, e.g. "(optional)". */
164
+ labelNote?: string;
165
+ /** Muted line under the field for format or consequence. */
166
+ hint?: ReactNode;
167
+ }
168
+ /**
169
+ * A labelled text input. It shows nothing on focus: no outline, no border
170
+ * colour, no ring. The caret is the focus. A text control matches
171
+ * `:focus-visible` on a click as well, so any focus treatment would draw on
172
+ * every click, and the product never does that on an input.
173
+ * @category Forms
174
+ */
175
+ declare function TextField({ label, labelNote, hint, id, className, ...rest }: TextFieldProps): react.JSX.Element;
176
+
177
+ interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className'> {
178
+ variant?: 'text' | 'number' | 'password' | 'email' | 'url' | 'date' | 'datetime-local';
179
+ }
180
+ /**
181
+ * A one-line field with a box: text, a number, a secret drawn as dots, an
182
+ * email address, a web address, a day, or a day and a time.
183
+ * The caret is the focus; the box shows no ring. Its whole look is
184
+ * `.hs-input` in the stylesheet, keyed on `data-variant`.
185
+ * @category Forms
186
+ */
187
+ declare function TextInput({ variant, ...rest }: TextInputProps): react.JSX.Element;
188
+
189
+ interface ToggleProps {
190
+ checked: boolean;
191
+ onChange?: (checked: boolean) => void;
192
+ /** Inert: the switch states a fact and takes no press. The row around
193
+ * it dims where the setting is unavailable; the switch stays plain. */
194
+ disabled?: boolean;
195
+ 'aria-label'?: string;
196
+ }
197
+ /** A controlled settings switch. @category Forms */
198
+ declare function Toggle({ checked, onChange, disabled, ...rest }: ToggleProps): react.JSX.Element;
199
+
200
+ interface SegmentedControlProps<T extends string> {
201
+ value: T;
202
+ options: {
203
+ value: T;
204
+ label: string;
205
+ }[];
206
+ onChange: (value: T) => void;
207
+ /** What the choice is about, for a reader that cannot see the control. */
208
+ label: string;
209
+ disabled?: boolean;
210
+ }
211
+ /**
212
+ * One choice of a few, every option in sight: a radio group drawn as one
213
+ * control, the chosen option on a glass plate. The arrow keys move the
214
+ * choice. Its whole look is `.hs-segmented` in the stylesheet.
215
+ * @category Forms
216
+ */
217
+ declare function SegmentedControl<T extends string>({ value, options, onChange, label, disabled, }: SegmentedControlProps<T>): react.JSX.Element;
218
+
219
+ /** One settings group, with a single border around its rows. @category Settings */
220
+ declare function SettingsCard({ children }: {
221
+ children: ReactNode;
222
+ }): react.JSX.Element;
223
+ /** A muted heading above a settings card. @category Settings */
224
+ declare function SettingsSection({ children, first, action, }: {
225
+ children: ReactNode;
226
+ first?: boolean;
227
+ action?: ReactNode;
228
+ }): react.JSX.Element;
229
+ /** The settings surface's search field: the shell's address-field recipe,
230
+ * whose placeholder sits centred and slides left on focus. @category Settings */
231
+ declare function SettingsSearch({ value, placeholder, onChange, }: {
232
+ value: string;
233
+ placeholder: string;
234
+ onChange: (value: string) => void;
235
+ }): react.JSX.Element;
236
+ /** A picker on the shell's own menu, in place of a native select.
237
+ * @category Settings */
238
+ declare function SettingsSelect<T extends string>({ value, options, onPick, minWidth, menuHeight, menuWidth, placeholder, disabled, label, }: {
239
+ value: T;
240
+ /** `disabled` keeps an entry visible and inert, so the reason it cannot
241
+ * be picked is readable where the pick is made. */
242
+ options: {
243
+ value: T;
244
+ label: string;
245
+ sub?: string;
246
+ trailing?: ReactNode;
247
+ disabled?: boolean;
248
+ }[];
249
+ onPick: (value: T) => void;
250
+ minWidth?: number;
251
+ /** Caps the menu of a long list, which then scrolls. */
252
+ menuHeight?: number;
253
+ /** Caps the menu of rows whose sub lines carry prose, which then wraps. */
254
+ menuWidth?: number;
255
+ placeholder?: string;
256
+ disabled?: boolean;
257
+ label?: string;
258
+ }): react.JSX.Element;
259
+ /** A labelled row with a toggle at its end. @category Settings */
260
+ declare function ToggleRow({ id, title, sub, help, on, onFlip, }: {
261
+ id?: string;
262
+ title: string;
263
+ /** Only where the label cannot carry the meaning on its own. */
264
+ sub?: string;
265
+ /** An explanation behind a question mark, for the same case. */
266
+ help?: string;
267
+ on: boolean;
268
+ onFlip?: () => void;
269
+ }): react.JSX.Element;
270
+ /** A labelled row with a value at its end. @category Settings */
271
+ declare function InfoRow({ id, title, sub, help, helpOpen, value, }: {
272
+ id?: string;
273
+ /** A node where part of the label is itself a control — a version that
274
+ * opens its release notes. */
275
+ title: ReactNode;
276
+ /** Only where the label cannot carry the meaning on its own. */
277
+ sub?: string;
278
+ /** An explanation behind a question mark, for the same case. */
279
+ help?: string;
280
+ /** The depth behind the question mark, which then takes a click. */
281
+ helpOpen?: () => void;
282
+ value: ReactNode;
283
+ }): react.JSX.Element;
284
+ /** A row that opens a page of its own: a mark, a title with a line under
285
+ * it, a value, and a chevron. The whole row is the press. @category Settings */
286
+ declare function LinkRow({ id, mark, title, sub, value, onOpen, }: {
287
+ id?: string;
288
+ /** The subject's own mark, such as a connector's icon. */
289
+ mark?: ReactNode;
290
+ title: ReactNode;
291
+ sub?: ReactNode;
292
+ /** A short state at the row's end, such as "Connected". */
293
+ value?: ReactNode;
294
+ onOpen: () => void;
295
+ }): react.JSX.Element;
296
+ /** A row of a list the page manages: a mark, a title with a line under
297
+ * it, and the actions on the row, such as Edit and Delete. @category Settings */
298
+ declare function ListRow({ id, role, mark, title, sub, actions, }: {
299
+ id?: string;
300
+ /** A class naming what the row is, such as `hs-grantrow`, which the
301
+ * theme's guard keeps visible. */
302
+ role?: string;
303
+ mark?: ReactNode;
304
+ title: ReactNode;
305
+ sub?: ReactNode;
306
+ actions?: ReactNode;
307
+ }): react.JSX.Element;
308
+ /** A row of an information table: a label and a value, the value wrapping
309
+ * inside its column however long it is. @category Settings */
310
+ declare function FactRow({ label, value }: {
311
+ label: string;
312
+ value: ReactNode;
313
+ }): react.JSX.Element;
314
+ /** Categories of one page with arrow-key navigation. @category Settings */
315
+ declare function SettingsTabs<T extends string>({ label, value, tabs, onPick, panelRef, }: {
316
+ /** The name of the row of tabs, for assistive technology. */
317
+ label: string;
318
+ value: T;
319
+ tabs: {
320
+ value: T;
321
+ label: string;
322
+ }[];
323
+ onPick: (value: T) => void;
324
+ /** Starts the linked scroll panel at its heading when the category changes. */
325
+ panelRef?: RefObject<HTMLElement | null>;
326
+ }): react.JSX.Element;
327
+
328
+ interface MenuAnchor {
329
+ key: string;
330
+ element: HTMLElement;
331
+ }
332
+ /** Keeps the clicked element as the menu's positioning reference. */
333
+ declare function anchorFrom(key: string, e: MouseEvent<HTMLElement>): MenuAnchor;
334
+ /** The heavy-frost popup surface a context menu or picker sits on. It is
335
+ * drawn into the popup root, so no scroll container clips it and no glass
336
+ * surface it opens from keeps it from frosting what lies behind.
337
+ * @category Overlays */
338
+ declare function MenuSurface({ anchor, align, dir, minWidth, maxWidth, maxHeight, fit, keyboard, onDismiss, children, }: {
339
+ anchor: MenuAnchor;
340
+ align?: 'auto' | 'left' | 'right';
341
+ dir?: 'down' | 'up' | 'right';
342
+ minWidth?: number;
343
+ /** The menu takes its anchor's width and corners exactly, as a picker
344
+ * that opens beneath its own field does. */
345
+ fit?: boolean;
346
+ keyboard?: boolean;
347
+ /** Caps a menu whose rows carry prose, which would otherwise stretch to
348
+ * the width of the longest sentence. */
349
+ maxWidth?: number;
350
+ /** Caps a long list, which then scrolls, opened on its selected row. */
351
+ maxHeight?: number;
352
+ onDismiss: () => void;
353
+ children: ReactNode;
354
+ }): react.ReactPortal;
355
+ /** One row of a shell menu: glyph, label, optional sub/chip/check. @category Overlays */
356
+ declare function MItem({ icon, label, sub, chip, checked, selected, danger, disabled, onClick, trailing, }: {
357
+ icon?: ReactNode;
358
+ label: string;
359
+ sub?: string;
360
+ chip?: string;
361
+ checked?: boolean;
362
+ selected?: boolean;
363
+ danger?: boolean;
364
+ /** Drawn dimmed and inert: the row stays visible so the reason for it
365
+ * being unavailable is readable beside it. */
366
+ disabled?: boolean;
367
+ onClick?: () => void;
368
+ /** What sits at the row's end: a switch, a chevron. */
369
+ trailing?: ReactNode;
370
+ }): react.JSX.Element;
371
+ /** A row that opens a flyout on the side with space while hovered. The
372
+ * flyout closes as a menu does, with this row as its trigger, and a row
373
+ * opens its flyout only while no other row of its menu holds one.
374
+ * @category Overlays */
375
+ declare function MSub({ icon, label, minWidth, children, }: {
376
+ icon?: ReactNode;
377
+ label: string;
378
+ minWidth?: number;
379
+ children: ReactNode;
380
+ }): react.JSX.Element;
381
+ /** Hairline between menu groups. @category Overlays */
382
+ declare function MDivider(): react.JSX.Element;
383
+ /** Mono-caps section label inside a menu. @category Overlays */
384
+ declare function MSection({ children }: {
385
+ children: ReactNode;
386
+ }): react.JSX.Element;
387
+ /** Where a floating tip sits against its mark. */
388
+ type TipPlacement = 'bottom-start' | 'bottom' | 'top' | 'right';
389
+ /** The hover wiring of a `FloatingTip` for the marks of one component,
390
+ * a list of them included. `tips(key, text, chip)` names one mark: spread
391
+ * its `hover` on the mark and render its `tip` inside it, so the tip goes
392
+ * with the mark. A mark with no text shows no tip. @category Overlays */
393
+ declare function useFloatingTips(placement?: TipPlacement): (key: string, text: string | undefined, chip?: string) => {
394
+ hover: {
395
+ onMouseEnter: (e: MouseEvent<HTMLElement>) => void;
396
+ onMouseLeave: () => void;
397
+ };
398
+ tip: react.JSX.Element | null;
399
+ };
400
+
401
+ interface ShellConfirmProps {
402
+ title: string;
403
+ body: ReactNode;
404
+ /** The action's label, in the imperative: "Regenerate", "Delete 3 sessions". */
405
+ action: string;
406
+ /** The action's look: `danger` where the action destroys something,
407
+ * `primary` where it installs or buys. */
408
+ tone?: 'danger' | 'primary';
409
+ onConfirm: () => void;
410
+ onCancel: () => void;
411
+ }
412
+ /** A confirmation dialog styled by the theme, with presence and operability
413
+ * maintained by the guard layer. It asks the person while it shows.
414
+ * @category Overlays */
415
+ declare function ShellConfirm({ title, body, action, tone, onConfirm, onCancel, }: ShellConfirmProps): react.JSX.Element;
416
+
417
+ interface OverlayScrollProps {
418
+ /** The scroller's own classes: its overflow, its padding and the gap
419
+ * between its rows. */
420
+ className: string;
421
+ children: ReactNode;
422
+ }
423
+ /** A scroller with its bar over the right end of its rows. It fills the
424
+ * height its column gives it. @category Layout */
425
+ declare function OverlayScroll({ className, children }: OverlayScrollProps): react.JSX.Element;
426
+
427
+ /**
428
+ * A key the person can press, as a small cap: "Enter", "Esc", "1". Its
429
+ * whole look is `.hs-kbd` in the stylesheet.
430
+ * @category Status
431
+ */
432
+ declare function Kbd({ children }: {
433
+ children: ReactNode;
434
+ }): react.JSX.Element;
435
+
436
+ interface MeterProps {
437
+ /** The share, from 0 to 1. */
438
+ value: number;
439
+ /** What the meter measures, for assistive technology. */
440
+ label: string;
441
+ variant?: 'bar' | 'ring';
442
+ /** The bad hue, for a share that is close to its limit. */
443
+ tone?: 'bad';
444
+ }
445
+ /**
446
+ * How much of something is done or used: a thin bar under a label, or a
447
+ * small ring. Its whole look is `.hs-meter` in the stylesheet, keyed on
448
+ * `data-variant` and `data-tone`.
449
+ * @category Status
450
+ */
451
+ declare function Meter({ value, label, variant, tone }: MeterProps): react.JSX.Element;
452
+
453
+ interface LightboxItem {
454
+ src: string;
455
+ name: string;
456
+ /** Words under the caption, such as what a model read in the picture. */
457
+ note?: ReactNode;
458
+ onSave?: () => void;
459
+ /** Opens the picture where its kind opens; `at` is the press. */
460
+ onOpen?: (at: HTMLElement) => void;
461
+ }
462
+ interface LightboxProps {
463
+ items: LightboxItem[];
464
+ /** The picture it opens on. */
465
+ start: number;
466
+ onClose: () => void;
467
+ }
468
+ /** @category Overlays */
469
+ declare function Lightbox({ items, start, onClose }: LightboxProps): react.JSX.Element | null;
470
+
471
+ interface SliderProps {
472
+ value: number;
473
+ onChange: (value: number) => void;
474
+ min?: number;
475
+ max?: number;
476
+ step?: number;
477
+ /** What the slider sets, for assistive technology. */
478
+ label: string;
479
+ /** The value in words, after the track: "40%", "1.5 s". */
480
+ shown?: string;
481
+ disabled?: boolean;
482
+ }
483
+ /**
484
+ * A value on a scale, set by dragging a thumb along a track, with the
485
+ * value in words after it. It fills the width its container gives it.
486
+ * Its look is `.hs-range` in a `.hs-slider` row.
487
+ * @category Forms
488
+ */
489
+ declare function Slider({ value, onChange, min, max, step, label, shown, disabled, }: SliderProps): react.JSX.Element;
490
+
491
+ /** Where a popover opens against its anchor: the side, then the edge of
492
+ * that side it lines up with. */
493
+ type PopoverPlacement = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
494
+ interface PopoverProps {
495
+ /** The element it opens from, such as the button that opened it. */
496
+ anchor: HTMLElement;
497
+ placement?: PopoverPlacement;
498
+ /** What it holds, for assistive technology. */
499
+ label: string;
500
+ onDismiss: () => void;
501
+ children: ReactNode;
502
+ }
503
+ /**
504
+ * A small panel beside the element it opens from, over everything else:
505
+ * a form, a picker, the details of a row. It takes the focus when it
506
+ * opens, to the element inside marked `data-autofocus` or else the first
507
+ * control, and keeps it, so Tab moves only between its own controls.
508
+ * Escape, a press outside it, or the window losing the focus close it.
509
+ * It draws into the theme root, so no frame or scroller clips it.
510
+ * @category Overlays
511
+ */
512
+ declare function Popover({ anchor, placement, label, onDismiss, children, }: PopoverProps): react.ReactPortal;
513
+
514
+ interface ToastProps {
515
+ /** What happened: "Moved to Archive". */
516
+ children: ReactNode;
517
+ /** The one thing to do about it: "Undo". It closes the toast. */
518
+ action?: {
519
+ label: string;
520
+ onPress: () => void;
521
+ };
522
+ /** How long it shows, in milliseconds, counted while the pointer and the
523
+ * focus are off it. */
524
+ duration?: number;
525
+ /** The element it sits above, centred on it, such as a composer at the
526
+ * bottom of the view; without it, the bottom of the window. */
527
+ above?: RefObject<HTMLElement | null>;
528
+ onClose: () => void;
529
+ }
530
+ /**
531
+ * A short line at the bottom of the window, or above the element `above`
532
+ * names, about something that just happened, with at most one action and
533
+ * a close mark. It closes itself after its time, which waits while the
534
+ * pointer or the focus is on it, and assistive technology reads it out. A
535
+ * view shows one at a time.
536
+ * @category Overlays
537
+ */
538
+ declare function Toast({ children, action, duration, above, onClose }: ToastProps): react.JSX.Element;
539
+
540
+ /** A day of the calendar as `YYYY-MM-DD`, with no time and no zone. */
541
+ type PlainDate = string;
542
+ interface DateGridProps {
543
+ value: PlainDate | null;
544
+ onChange: (date: PlainDate) => void;
545
+ /** The person's locale, as the view's host context gives it: it sets the
546
+ * names, the order and the first day of the week. */
547
+ locale: string;
548
+ /** The first day that can be chosen. */
549
+ min?: PlainDate;
550
+ /** The last day that can be chosen. */
551
+ max?: PlainDate;
552
+ }
553
+ /**
554
+ * A month of days to choose one from, with the month's name and steps to
555
+ * the month before and after. Today is marked and the chosen day filled.
556
+ * The arrow keys move a day or a week, Home and End to the ends of the
557
+ * week, Page Up and Page Down a month (with Shift a year), never past the
558
+ * first or the last day that can be chosen, and Enter chooses.
559
+ * @category Forms
560
+ */
561
+ declare function DateGrid({ value, onChange, locale, min, max }: DateGridProps): react.JSX.Element;
562
+ interface DatePickerProps extends DateGridProps {
563
+ /** What the day is, for assistive technology: "Start date". */
564
+ label: string;
565
+ /** The words in the field while no day is chosen. */
566
+ placeholder?: string;
567
+ disabled?: boolean;
568
+ }
569
+ /**
570
+ * A field that shows a day in the person's own way of writing it and
571
+ * opens a month of days to choose another.
572
+ * @category Forms
573
+ */
574
+ declare function DatePicker({ value, onChange, locale, min, max, label, placeholder, disabled, }: DatePickerProps): react.JSX.Element;
575
+
576
+ /** A time of day as `HH:MM` on the 24-hour clock, with no day and no zone. */
577
+ type PlainTime = string;
578
+ interface TimePickerProps {
579
+ value: PlainTime | null;
580
+ onChange: (time: PlainTime) => void;
581
+ /** The person's locale, as the view's host context gives it: it sets the
582
+ * hour cycle, as its `hc` key does. */
583
+ locale: string;
584
+ /** What the time is, for assistive technology: "Start time". */
585
+ label: string;
586
+ /** The minutes between two times of the list. */
587
+ step?: number;
588
+ /** The words in the field while no time is chosen. */
589
+ placeholder?: string;
590
+ disabled?: boolean;
591
+ }
592
+ /**
593
+ * A field that shows a time of day in the person's own hour cycle and
594
+ * opens a list of the day's times, a step apart, to choose another. The
595
+ * list opens on the chosen time; a chosen time between two steps is in
596
+ * the list too.
597
+ * @category Forms
598
+ */
599
+ declare function TimePicker({ value, onChange, locale, label, step, placeholder, disabled, }: TimePickerProps): react.JSX.Element;
600
+
601
+ /** The colours of the category palette, in the order a picker shows them:
602
+ * twelve hues round the wheel, then a grey. */
603
+ declare const SWATCHES: readonly ["rose", "ember", "amber", "sun", "lime", "moss", "jade", "sky", "ocean", "indigo", "violet", "plum", "slate"];
604
+ /** A colour of the category palette. An element with `data-swatch` set to
605
+ * one draws with `--swatch`, `--swatch-tint` and `--swatch-ink`. */
606
+ type Swatch = (typeof SWATCHES)[number];
607
+ interface SwatchPickerProps {
608
+ value: Swatch;
609
+ onChange: (swatch: Swatch) => void;
610
+ /** What the colour is of, for assistive technology: "Calendar colour". */
611
+ label: string;
612
+ }
613
+ /**
614
+ * A choice of one colour of the category palette: a row of dots, the
615
+ * chosen one ringed, each named in its tooltip. The arrow keys move the
616
+ * choice, as in any group of radio buttons.
617
+ * @category Forms
618
+ */
619
+ declare function SwatchPicker({ value, onChange, label }: SwatchPickerProps): react.JSX.Element;
620
+
621
+ interface PersonMarkProps {
622
+ /** The person's name, or an address where no name is known. */
623
+ name: string;
624
+ /** The address of the person's picture. */
625
+ picture?: string;
626
+ size?: 'sm' | 'md' | 'lg';
627
+ /** The colour of the initials' fill; by default one the name picks. */
628
+ swatch?: Swatch;
629
+ }
630
+ /**
631
+ * A person as a small round mark: their picture, or their initials on a
632
+ * soft fill of a colour that stays the same for the same name. A picture
633
+ * that does not load shows the initials.
634
+ * @category Status
635
+ */
636
+ declare function PersonMark({ name, picture, size, swatch }: PersonMarkProps): react.JSX.Element;
637
+
638
+ /** Resolved publisher identity, independent of the model architecture.
639
+ * `GET /v1/publishers/{owner}/picture` answers the picture of the Hub
640
+ * user or organisation `repository` names first: its bytes as
641
+ * `image/png`, `image/jpeg`, `image/webp`, `image/gif` or
642
+ * `image/svg+xml`, with `cache-control: max-age=86400`. A 404
643
+ * `invalid_request` says no picture is known for the owner, and a 400
644
+ * `invalid_request` refuses a name that is not one Hub path segment of
645
+ * ASCII letters, digits, `-`, `_` and `.`. */
646
+ interface ModelIdentity {
647
+ publisher: string;
648
+ /** The Hub repository whose publisher supplies the artwork; null for other sources. */
649
+ repository: string | null;
650
+ }
651
+
652
+ /** Where a host serves the picture of a model's publisher: the address of
653
+ * the picture the Hearthscale Server `server` keeps of the Hugging Face
654
+ * user or organisation `owner`, or none where the host serves none. */
655
+ type PublisherPictures = (server: string | undefined, owner: string) => string | undefined;
656
+ /** The publisher pictures the avatars under it show; without a provider,
657
+ * none. @category Icons */
658
+ declare const PublisherPicturesContext: react.Context<PublisherPictures>;
659
+ /** A model's publisher: the picture its Server keeps of the publisher,
660
+ * else the bundled brand mark, else the publisher's initial. `server` is
661
+ * the Hearthscale Server the model comes from, a card's `provider` or the
662
+ * Server a Discover search ran on. @category Icons */
663
+ declare function ModelAvatar({ identity, server, size, }: {
664
+ identity: ModelIdentity;
665
+ server?: string;
666
+ size?: number;
667
+ }): react.JSX.Element;
668
+
669
+ interface VirtualListHandle {
670
+ /** Scrolls the row into sight: to the top, the middle or the bottom of
671
+ * the list, or by the least scroll that shows it. */
672
+ scrollToIndex(index: number, align?: 'start' | 'center' | 'end' | 'auto'): void;
673
+ }
674
+ interface VirtualListProps {
675
+ /** How many rows the list holds. */
676
+ count: number;
677
+ /** A row's height in pixels until it is drawn and measured. */
678
+ estimate: number;
679
+ /** The row at a place in the list. */
680
+ row: (index: number) => ReactNode;
681
+ /** What names the row at a place, so a row keeps its state where rows
682
+ * come and go before it. By default its place. */
683
+ rowKey?: (index: number) => Key;
684
+ /** The scroller's own classes: its height, its padding. */
685
+ className?: string;
686
+ ref?: Ref<VirtualListHandle>;
687
+ }
688
+ /**
689
+ * A scrolling list of any length that draws only the rows in sight and a
690
+ * few beyond, each as tall as it draws: a mailbox, a log, a library. Its
691
+ * height is what its container or its class gives it.
692
+ * @category Layout
693
+ */
694
+ declare function VirtualList({ count, estimate, row, rowKey, className, ref }: VirtualListProps): react.JSX.Element;
695
+
696
+ interface ComparedPicture {
697
+ src: string;
698
+ /** The words over its corner: "Before", a model's name. */
699
+ name: string;
700
+ }
701
+ interface PictureCompareProps {
702
+ /** The picture on the left of the line. */
703
+ before: ComparedPicture;
704
+ /** The picture on the right of the line, drawn over the first at its
705
+ * size. */
706
+ after: ComparedPicture;
707
+ }
708
+ /**
709
+ * Two pictures of the same size, one over the other, split by a line the
710
+ * person drags to show more of one or the other. The arrow keys move the
711
+ * line a step, Home and End to the edges.
712
+ * @category Media
713
+ */
714
+ declare function PictureCompare({ before, after }: PictureCompareProps): react.JSX.Element;
715
+
716
+ /**
717
+ * The name of every icon of the Remix Icon font, as https://remixicon.com/
718
+ * shows it. Written by `scripts/icon-names.mjs` from the `remixicon`
719
+ * package; not edited by hand.
720
+ */
721
+ type IconName = '24-hours-fill' | '24-hours-line' | '4k-fill' | '4k-line' | 'a-b' | 'accessibility-fill' | 'accessibility-line' | 'account-box-2-fill' | 'account-box-2-line' | 'account-box-fill' | 'account-box-line' | 'account-circle-2-fill' | 'account-circle-2-line' | 'account-circle-fill' | 'account-circle-line' | 'account-pin-box-fill' | 'account-pin-box-line' | 'account-pin-circle-fill' | 'account-pin-circle-line' | 'add-box-fill' | 'add-box-line' | 'add-circle-fill' | 'add-circle-line' | 'add-fill' | 'add-large-fill' | 'add-large-line' | 'add-line' | 'admin-fill' | 'admin-line' | 'advertisement-fill' | 'advertisement-line' | 'aed-electrodes-fill' | 'aed-electrodes-line' | 'aed-fill' | 'aed-line' | 'ai' | 'ai-agent-fill' | 'ai-agent-line' | 'ai-generate' | 'ai-generate-2' | 'ai-generate-2-fill' | 'ai-generate-2-line' | 'ai-generate-3d-fill' | 'ai-generate-3d-line' | 'ai-generate-text' | 'airplay-fill' | 'airplay-line' | 'alarm-add-fill' | 'alarm-add-line' | 'alarm-fill' | 'alarm-line' | 'alarm-snooze-fill' | 'alarm-snooze-line' | 'alarm-warning-fill' | 'alarm-warning-line' | 'album-fill' | 'album-line' | 'alert-fill' | 'alert-line' | 'alibaba-cloud-fill' | 'alibaba-cloud-line' | 'aliens-fill' | 'aliens-line' | 'align-bottom' | 'align-center' | 'align-item-bottom-fill' | 'align-item-bottom-line' | 'align-item-horizontal-center-fill' | 'align-item-horizontal-center-line' | 'align-item-left-fill' | 'align-item-left-line' | 'align-item-right-fill' | 'align-item-right-line' | 'align-item-top-fill' | 'align-item-top-line' | 'align-item-vertical-center-fill' | 'align-item-vertical-center-line' | 'align-justify' | 'align-left' | 'align-right' | 'align-top' | 'align-vertically' | 'alipay-fill' | 'alipay-line' | 'amazon-fill' | 'amazon-line' | 'anchor-fill' | 'anchor-line' | 'ancient-gate-fill' | 'ancient-gate-line' | 'ancient-pavilion-fill' | 'ancient-pavilion-line' | 'android-fill' | 'android-line' | 'angularjs-fill' | 'angularjs-line' | 'anthropic-fill' | 'anthropic-line' | 'anticlockwise-2-fill' | 'anticlockwise-2-line' | 'anticlockwise-fill' | 'anticlockwise-line' | 'app-store-fill' | 'app-store-line' | 'apple-fill' | 'apple-line' | 'apps-2-add-fill' | 'apps-2-add-line' | 'apps-2-ai-fill' | 'apps-2-ai-line' | 'apps-2-fill' | 'apps-2-line' | 'apps-ai-fill' | 'apps-ai-line' | 'apps-fill' | 'apps-line' | 'archive-2-fill' | 'archive-2-line' | 'archive-drawer-fill' | 'archive-drawer-line' | 'archive-fill' | 'archive-line' | 'archive-stack-fill' | 'archive-stack-line' | 'area-chart-fill' | 'area-chart-line' | 'armchair-fill' | 'armchair-line' | 'arrow-down-box-fill' | 'arrow-down-box-line' | 'arrow-down-circle-fill' | 'arrow-down-circle-line' | 'arrow-down-double-fill' | 'arrow-down-double-line' | 'arrow-down-fill' | 'arrow-down-line' | 'arrow-down-long-fill' | 'arrow-down-long-line' | 'arrow-down-s-fill' | 'arrow-down-s-line' | 'arrow-down-wide-fill' | 'arrow-down-wide-line' | 'arrow-drop-down-fill' | 'arrow-drop-down-line' | 'arrow-drop-left-fill' | 'arrow-drop-left-line' | 'arrow-drop-right-fill' | 'arrow-drop-right-line' | 'arrow-drop-up-fill' | 'arrow-drop-up-line' | 'arrow-go-back-fill' | 'arrow-go-back-line' | 'arrow-go-forward-fill' | 'arrow-go-forward-line' | 'arrow-left-box-fill' | 'arrow-left-box-line' | 'arrow-left-circle-fill' | 'arrow-left-circle-line' | 'arrow-left-double-fill' | 'arrow-left-double-line' | 'arrow-left-down-box-fill' | 'arrow-left-down-box-line' | 'arrow-left-down-fill' | 'arrow-left-down-line' | 'arrow-left-down-long-fill' | 'arrow-left-down-long-line' | 'arrow-left-fill' | 'arrow-left-line' | 'arrow-left-long-fill' | 'arrow-left-long-line' | 'arrow-left-right-fill' | 'arrow-left-right-line' | 'arrow-left-s-fill' | 'arrow-left-s-line' | 'arrow-left-up-box-fill' | 'arrow-left-up-box-line' | 'arrow-left-up-fill' | 'arrow-left-up-line' | 'arrow-left-up-long-fill' | 'arrow-left-up-long-line' | 'arrow-left-wide-fill' | 'arrow-left-wide-line' | 'arrow-right-box-fill' | 'arrow-right-box-line' | 'arrow-right-circle-fill' | 'arrow-right-circle-line' | 'arrow-right-double-fill' | 'arrow-right-double-line' | 'arrow-right-down-box-fill' | 'arrow-right-down-box-line' | 'arrow-right-down-fill' | 'arrow-right-down-line' | 'arrow-right-down-long-fill' | 'arrow-right-down-long-line' | 'arrow-right-fill' | 'arrow-right-line' | 'arrow-right-long-fill' | 'arrow-right-long-line' | 'arrow-right-s-fill' | 'arrow-right-s-line' | 'arrow-right-up-box-fill' | 'arrow-right-up-box-line' | 'arrow-right-up-fill' | 'arrow-right-up-line' | 'arrow-right-up-long-fill' | 'arrow-right-up-long-line' | 'arrow-right-wide-fill' | 'arrow-right-wide-line' | 'arrow-turn-back-fill' | 'arrow-turn-back-line' | 'arrow-turn-forward-fill' | 'arrow-turn-forward-line' | 'arrow-up-box-fill' | 'arrow-up-box-line' | 'arrow-up-circle-fill' | 'arrow-up-circle-line' | 'arrow-up-double-fill' | 'arrow-up-double-line' | 'arrow-up-down-fill' | 'arrow-up-down-line' | 'arrow-up-fill' | 'arrow-up-line' | 'arrow-up-long-fill' | 'arrow-up-long-line' | 'arrow-up-s-fill' | 'arrow-up-s-line' | 'arrow-up-wide-fill' | 'arrow-up-wide-line' | 'artboard-2-fill' | 'artboard-2-line' | 'artboard-fill' | 'artboard-line' | 'article-fill' | 'article-line' | 'aspect-ratio-fill' | 'aspect-ratio-line' | 'asterisk' | 'at-fill' | 'at-line' | 'atom-fill' | 'atom-line' | 'attachment-2' | 'attachment-fill' | 'attachment-line' | 'auction-fill' | 'auction-line' | 'award-fill' | 'award-line' | 'baidu-fill' | 'baidu-line' | 'ball-pen-fill' | 'ball-pen-line' | 'bank-card-2-fill' | 'bank-card-2-line' | 'bank-card-fill' | 'bank-card-line' | 'bank-fill' | 'bank-line' | 'bar-chart-2-fill' | 'bar-chart-2-line' | 'bar-chart-box-ai-fill' | 'bar-chart-box-ai-line' | 'bar-chart-box-fill' | 'bar-chart-box-line' | 'bar-chart-fill' | 'bar-chart-grouped-fill' | 'bar-chart-grouped-line' | 'bar-chart-horizontal-fill' | 'bar-chart-horizontal-line' | 'bar-chart-line' | 'barcode-box-fill' | 'barcode-box-line' | 'barcode-fill' | 'barcode-line' | 'bard-fill' | 'bard-line' | 'barricade-fill' | 'barricade-line' | 'base-station-fill' | 'base-station-line' | 'baseball-fill' | 'baseball-line' | 'basketball-fill' | 'basketball-line' | 'battery-2-charge-fill' | 'battery-2-charge-line' | 'battery-2-fill' | 'battery-2-line' | 'battery-charge-fill' | 'battery-charge-line' | 'battery-fill' | 'battery-line' | 'battery-low-fill' | 'battery-low-line' | 'battery-saver-fill' | 'battery-saver-line' | 'battery-share-fill' | 'battery-share-line' | 'bear-smile-fill' | 'bear-smile-line' | 'beer-fill' | 'beer-line' | 'behance-fill' | 'behance-line' | 'bell-fill' | 'bell-line' | 'bike-fill' | 'bike-line' | 'bilibili-fill' | 'bilibili-line' | 'bill-fill' | 'bill-line' | 'billiards-fill' | 'billiards-line' | 'binoculars-fill' | 'binoculars-line' | 'bit-coin-fill' | 'bit-coin-line' | 'blaze-fill' | 'blaze-line' | 'blender-fill' | 'blender-line' | 'blogger-fill' | 'blogger-line' | 'bluesky-fill' | 'bluesky-line' | 'bluetooth-connect-fill' | 'bluetooth-connect-line' | 'bluetooth-fill' | 'bluetooth-line' | 'blur-off-fill' | 'blur-off-line' | 'bnb-fill' | 'bnb-line' | 'body-scan-fill' | 'body-scan-line' | 'bold' | 'book-2-fill' | 'book-2-line' | 'book-3-fill' | 'book-3-line' | 'book-ai-fill' | 'book-ai-line' | 'book-fill' | 'book-line' | 'book-marked-fill' | 'book-marked-line' | 'book-open-fill' | 'book-open-line' | 'book-read-fill' | 'book-read-line' | 'book-shelf-fill' | 'book-shelf-line' | 'booklet-fill' | 'booklet-line' | 'bookmark-2-fill' | 'bookmark-2-line' | 'bookmark-3-fill' | 'bookmark-3-line' | 'bookmark-fill' | 'bookmark-line' | 'bootstrap-fill' | 'bootstrap-line' | 'bowl-fill' | 'bowl-line' | 'box-1-fill' | 'box-1-line' | 'box-2-fill' | 'box-2-line' | 'box-3-fill' | 'box-3-line' | 'boxing-fill' | 'boxing-line' | 'braces-fill' | 'braces-line' | 'brackets-fill' | 'brackets-line' | 'brain-2-fill' | 'brain-2-line' | 'brain-3-fill' | 'brain-3-line' | 'brain-ai-3-fill' | 'brain-ai-3-line' | 'brain-fill' | 'brain-line' | 'bread-fill' | 'bread-line' | 'briefcase-2-fill' | 'briefcase-2-line' | 'briefcase-3-fill' | 'briefcase-3-line' | 'briefcase-4-fill' | 'briefcase-4-line' | 'briefcase-5-fill' | 'briefcase-5-line' | 'briefcase-fill' | 'briefcase-line' | 'bring-forward' | 'bring-to-front' | 'broadcast-fill' | 'broadcast-line' | 'brush-2-fill' | 'brush-2-line' | 'brush-3-fill' | 'brush-3-line' | 'brush-4-fill' | 'brush-4-line' | 'brush-ai-3-fill' | 'brush-ai-3-line' | 'brush-ai-fill' | 'brush-ai-line' | 'brush-fill' | 'brush-line' | 'btc-fill' | 'btc-line' | 'bubble-chart-fill' | 'bubble-chart-line' | 'bug-2-fill' | 'bug-2-line' | 'bug-fill' | 'bug-line' | 'building-2-fill' | 'building-2-line' | 'building-3-fill' | 'building-3-line' | 'building-4-fill' | 'building-4-line' | 'building-fill' | 'building-line' | 'bus-2-fill' | 'bus-2-line' | 'bus-fill' | 'bus-line' | 'bus-wifi-fill' | 'bus-wifi-line' | 'cactus-fill' | 'cactus-line' | 'cake-2-fill' | 'cake-2-line' | 'cake-3-fill' | 'cake-3-line' | 'cake-fill' | 'cake-line' | 'calculator-fill' | 'calculator-line' | 'calendar-2-fill' | 'calendar-2-line' | 'calendar-check-fill' | 'calendar-check-line' | 'calendar-close-fill' | 'calendar-close-line' | 'calendar-event-fill' | 'calendar-event-line' | 'calendar-fill' | 'calendar-line' | 'calendar-schedule-fill' | 'calendar-schedule-line' | 'calendar-todo-fill' | 'calendar-todo-line' | 'calendar-view' | 'camera-2-fill' | 'camera-2-line' | 'camera-3-fill' | 'camera-3-line' | 'camera-4-fill' | 'camera-4-line' | 'camera-ai-2-fill' | 'camera-ai-2-line' | 'camera-ai-fill' | 'camera-ai-line' | 'camera-fill' | 'camera-lens-ai-fill' | 'camera-lens-ai-line' | 'camera-lens-fill' | 'camera-lens-line' | 'camera-line' | 'camera-off-fill' | 'camera-off-line' | 'camera-switch-fill' | 'camera-switch-line' | 'candle-fill' | 'candle-line' | 'capsule-fill' | 'capsule-line' | 'car-fill' | 'car-line' | 'car-washing-fill' | 'car-washing-line' | 'caravan-fill' | 'caravan-line' | 'carousel-view' | 'cash-fill' | 'cash-line' | 'cast-fill' | 'cast-line' | 'cellphone-fill' | 'cellphone-line' | 'celsius-fill' | 'celsius-line' | 'centos-fill' | 'centos-line' | 'character-recognition-fill' | 'character-recognition-line' | 'charging-pile-2-fill' | 'charging-pile-2-line' | 'charging-pile-fill' | 'charging-pile-line' | 'chat-1-fill' | 'chat-1-line' | 'chat-2-fill' | 'chat-2-line' | 'chat-3-fill' | 'chat-3-line' | 'chat-4-fill' | 'chat-4-line' | 'chat-ai-2-fill' | 'chat-ai-2-line' | 'chat-ai-3-fill' | 'chat-ai-3-line' | 'chat-ai-4-fill' | 'chat-ai-4-line' | 'chat-ai-fill' | 'chat-ai-line' | 'chat-check-fill' | 'chat-check-line' | 'chat-delete-fill' | 'chat-delete-line' | 'chat-download-fill' | 'chat-download-line' | 'chat-follow-up-fill' | 'chat-follow-up-line' | 'chat-forward-fill' | 'chat-forward-line' | 'chat-heart-fill' | 'chat-heart-line' | 'chat-history-fill' | 'chat-history-line' | 'chat-new-fill' | 'chat-new-line' | 'chat-off-fill' | 'chat-off-line' | 'chat-poll-fill' | 'chat-poll-line' | 'chat-private-fill' | 'chat-private-line' | 'chat-quote-fill' | 'chat-quote-line' | 'chat-search-fill' | 'chat-search-line' | 'chat-settings-fill' | 'chat-settings-line' | 'chat-smile-2-fill' | 'chat-smile-2-line' | 'chat-smile-3-fill' | 'chat-smile-3-line' | 'chat-smile-ai-3-fill' | 'chat-smile-ai-3-line' | 'chat-smile-ai-fill' | 'chat-smile-ai-line' | 'chat-smile-fill' | 'chat-smile-line' | 'chat-thread-fill' | 'chat-thread-line' | 'chat-unread-fill' | 'chat-unread-line' | 'chat-upload-fill' | 'chat-upload-line' | 'chat-voice-ai-fill' | 'chat-voice-ai-line' | 'chat-voice-fill' | 'chat-voice-line' | 'check-double-fill' | 'check-double-line' | 'check-fill' | 'check-line' | 'checkbox-blank-circle-fill' | 'checkbox-blank-circle-line' | 'checkbox-blank-fill' | 'checkbox-blank-line' | 'checkbox-circle-fill' | 'checkbox-circle-line' | 'checkbox-fill' | 'checkbox-indeterminate-fill' | 'checkbox-indeterminate-line' | 'checkbox-line' | 'checkbox-multiple-blank-fill' | 'checkbox-multiple-blank-line' | 'checkbox-multiple-fill' | 'checkbox-multiple-line' | 'chess-fill' | 'chess-line' | 'china-railway-fill' | 'china-railway-line' | 'chrome-fill' | 'chrome-line' | 'circle-fill' | 'circle-line' | 'clapperboard-ai-fill' | 'clapperboard-ai-line' | 'clapperboard-fill' | 'clapperboard-line' | 'claude-fill' | 'claude-line' | 'clipboard-fill' | 'clipboard-line' | 'clockwise-2-fill' | 'clockwise-2-line' | 'clockwise-fill' | 'clockwise-line' | 'close-circle-fill' | 'close-circle-line' | 'close-fill' | 'close-large-fill' | 'close-large-line' | 'close-line' | 'closed-captioning-ai-fill' | 'closed-captioning-ai-line' | 'closed-captioning-fill' | 'closed-captioning-line' | 'cloud-fill' | 'cloud-line' | 'cloud-off-fill' | 'cloud-off-line' | 'cloud-windy-fill' | 'cloud-windy-line' | 'cloudy-2-fill' | 'cloudy-2-line' | 'cloudy-fill' | 'cloudy-line' | 'code-ai-fill' | 'code-ai-line' | 'code-block' | 'code-box-fill' | 'code-box-line' | 'code-fill' | 'code-line' | 'code-s-fill' | 'code-s-line' | 'code-s-slash-fill' | 'code-s-slash-line' | 'code-view' | 'codepen-fill' | 'codepen-line' | 'coin-fill' | 'coin-line' | 'coins-fill' | 'coins-line' | 'collage-fill' | 'collage-line' | 'collapse-diagonal-2-fill' | 'collapse-diagonal-2-line' | 'collapse-diagonal-fill' | 'collapse-diagonal-line' | 'collapse-horizontal-fill' | 'collapse-horizontal-line' | 'collapse-vertical-fill' | 'collapse-vertical-line' | 'color-filter-ai-fill' | 'color-filter-ai-line' | 'color-filter-fill' | 'color-filter-line' | 'command-fill' | 'command-line' | 'community-fill' | 'community-line' | 'compass-2-fill' | 'compass-2-line' | 'compass-3-fill' | 'compass-3-line' | 'compass-4-fill' | 'compass-4-line' | 'compass-discover-fill' | 'compass-discover-line' | 'compass-fill' | 'compass-line' | 'compasses-2-fill' | 'compasses-2-line' | 'compasses-fill' | 'compasses-line' | 'computer-fill' | 'computer-line' | 'contacts-book-2-fill' | 'contacts-book-2-line' | 'contacts-book-3-fill' | 'contacts-book-3-line' | 'contacts-book-fill' | 'contacts-book-line' | 'contacts-book-upload-fill' | 'contacts-book-upload-line' | 'contacts-fill' | 'contacts-line' | 'contract-fill' | 'contract-left-fill' | 'contract-left-line' | 'contract-left-right-fill' | 'contract-left-right-line' | 'contract-line' | 'contract-right-fill' | 'contract-right-line' | 'contract-up-down-fill' | 'contract-up-down-line' | 'contrast-2-fill' | 'contrast-2-line' | 'contrast-drop-2-fill' | 'contrast-drop-2-line' | 'contrast-drop-fill' | 'contrast-drop-line' | 'contrast-fill' | 'contrast-line' | 'copilot-fill' | 'copilot-line' | 'copper-coin-fill' | 'copper-coin-line' | 'copper-diamond-fill' | 'copper-diamond-line' | 'copyleft-fill' | 'copyleft-line' | 'copyright-fill' | 'copyright-line' | 'coreos-fill' | 'coreos-line' | 'corner-down-left-fill' | 'corner-down-left-line' | 'corner-down-right-fill' | 'corner-down-right-line' | 'corner-left-down-fill' | 'corner-left-down-line' | 'corner-left-up-fill' | 'corner-left-up-line' | 'corner-right-down-fill' | 'corner-right-down-line' | 'corner-right-up-fill' | 'corner-right-up-line' | 'corner-up-left-double-fill' | 'corner-up-left-double-line' | 'corner-up-left-fill' | 'corner-up-left-line' | 'corner-up-right-double-fill' | 'corner-up-right-double-line' | 'corner-up-right-fill' | 'corner-up-right-line' | 'coupon-2-fill' | 'coupon-2-line' | 'coupon-3-fill' | 'coupon-3-line' | 'coupon-4-fill' | 'coupon-4-line' | 'coupon-5-fill' | 'coupon-5-line' | 'coupon-fill' | 'coupon-line' | 'cpu-fill' | 'cpu-line' | 'creative-commons-by-fill' | 'creative-commons-by-line' | 'creative-commons-fill' | 'creative-commons-line' | 'creative-commons-nc-fill' | 'creative-commons-nc-line' | 'creative-commons-nd-fill' | 'creative-commons-nd-line' | 'creative-commons-sa-fill' | 'creative-commons-sa-line' | 'creative-commons-zero-fill' | 'creative-commons-zero-line' | 'criminal-fill' | 'criminal-line' | 'crop-2-fill' | 'crop-2-line' | 'crop-fill' | 'crop-line' | 'cross-fill' | 'cross-line' | 'crosshair-2-fill' | 'crosshair-2-line' | 'crosshair-fill' | 'crosshair-line' | 'css3-fill' | 'css3-line' | 'cup-fill' | 'cup-line' | 'currency-fill' | 'currency-line' | 'cursor-fill' | 'cursor-hand' | 'cursor-line' | 'custom-size' | 'customer-service-2-fill' | 'customer-service-2-line' | 'customer-service-fill' | 'customer-service-line' | 'dashboard-2-fill' | 'dashboard-2-line' | 'dashboard-3-fill' | 'dashboard-3-line' | 'dashboard-fill' | 'dashboard-horizontal-fill' | 'dashboard-horizontal-line' | 'dashboard-line' | 'database-2-fill' | 'database-2-line' | 'database-fill' | 'database-line' | 'deepseek-fill' | 'deepseek-line' | 'delete-back-2-fill' | 'delete-back-2-line' | 'delete-back-fill' | 'delete-back-line' | 'delete-bin-2-fill' | 'delete-bin-2-line' | 'delete-bin-3-fill' | 'delete-bin-3-line' | 'delete-bin-4-fill' | 'delete-bin-4-line' | 'delete-bin-5-fill' | 'delete-bin-5-line' | 'delete-bin-6-fill' | 'delete-bin-6-line' | 'delete-bin-7-fill' | 'delete-bin-7-line' | 'delete-bin-fill' | 'delete-bin-line' | 'delete-column' | 'delete-row' | 'device-fill' | 'device-line' | 'device-recover-fill' | 'device-recover-line' | 'diamond-fill' | 'diamond-line' | 'diamond-ring-fill' | 'diamond-ring-line' | 'dice-1-fill' | 'dice-1-line' | 'dice-2-fill' | 'dice-2-line' | 'dice-3-fill' | 'dice-3-line' | 'dice-4-fill' | 'dice-4-line' | 'dice-5-fill' | 'dice-5-line' | 'dice-6-fill' | 'dice-6-line' | 'dice-fill' | 'dice-line' | 'dingding-fill' | 'dingding-line' | 'direction-fill' | 'direction-line' | 'disc-fill' | 'disc-line' | 'discord-fill' | 'discord-line' | 'discount-percent-fill' | 'discount-percent-line' | 'discuss-fill' | 'discuss-line' | 'dislike-fill' | 'dislike-line' | 'disqus-fill' | 'disqus-line' | 'divide-fill' | 'divide-line' | 'dna-fill' | 'dna-line' | 'donut-chart-fill' | 'donut-chart-line' | 'door-closed-fill' | 'door-closed-line' | 'door-fill' | 'door-line' | 'door-lock-box-fill' | 'door-lock-box-line' | 'door-lock-fill' | 'door-lock-line' | 'door-open-fill' | 'door-open-line' | 'dossier-fill' | 'dossier-line' | 'douban-fill' | 'douban-line' | 'double-quotes-l' | 'double-quotes-r' | 'download-2-fill' | 'download-2-line' | 'download-cloud-2-fill' | 'download-cloud-2-line' | 'download-cloud-fill' | 'download-cloud-line' | 'download-fill' | 'download-line' | 'draft-fill' | 'draft-line' | 'drag-drop-fill' | 'drag-drop-line' | 'drag-move-2-fill' | 'drag-move-2-line' | 'drag-move-fill' | 'drag-move-line' | 'draggable' | 'dribbble-fill' | 'dribbble-line' | 'drinks-2-fill' | 'drinks-2-line' | 'drinks-fill' | 'drinks-line' | 'drive-fill' | 'drive-line' | 'drizzle-fill' | 'drizzle-line' | 'drop-fill' | 'drop-line' | 'dropbox-fill' | 'dropbox-line' | 'dropdown-list' | 'dropper-fill' | 'dropper-line' | 'dual-sim-1-fill' | 'dual-sim-1-line' | 'dual-sim-2-fill' | 'dual-sim-2-line' | 'dv-fill' | 'dv-line' | 'dvd-ai-fill' | 'dvd-ai-line' | 'dvd-fill' | 'dvd-line' | 'e-bike-2-fill' | 'e-bike-2-line' | 'e-bike-fill' | 'e-bike-line' | 'earth-fill' | 'earth-line' | 'earthquake-fill' | 'earthquake-line' | 'edge-fill' | 'edge-line' | 'edge-new-fill' | 'edge-new-line' | 'edit-2-fill' | 'edit-2-line' | 'edit-box-fill' | 'edit-box-line' | 'edit-circle-fill' | 'edit-circle-line' | 'edit-fill' | 'edit-line' | 'eject-fill' | 'eject-line' | 'emoji-sticker-fill' | 'emoji-sticker-line' | 'emotion-2-fill' | 'emotion-2-line' | 'emotion-add-fill' | 'emotion-add-line' | 'emotion-fill' | 'emotion-happy-fill' | 'emotion-happy-line' | 'emotion-laugh-fill' | 'emotion-laugh-line' | 'emotion-line' | 'emotion-normal-fill' | 'emotion-normal-line' | 'emotion-sad-fill' | 'emotion-sad-line' | 'emotion-unhappy-fill' | 'emotion-unhappy-line' | 'empathize-fill' | 'empathize-line' | 'emphasis' | 'emphasis-cn' | 'english-input' | 'equal-fill' | 'equal-line' | 'equalizer-2-fill' | 'equalizer-2-line' | 'equalizer-3-fill' | 'equalizer-3-line' | 'equalizer-fill' | 'equalizer-line' | 'eraser-fill' | 'eraser-line' | 'error-warning-fill' | 'error-warning-line' | 'eth-fill' | 'eth-line' | 'evernote-fill' | 'evernote-line' | 'exchange-2-fill' | 'exchange-2-line' | 'exchange-box-fill' | 'exchange-box-line' | 'exchange-cny-fill' | 'exchange-cny-line' | 'exchange-dollar-fill' | 'exchange-dollar-line' | 'exchange-fill' | 'exchange-funds-fill' | 'exchange-funds-line' | 'exchange-line' | 'expand-diagonal-2-fill' | 'expand-diagonal-2-line' | 'expand-diagonal-fill' | 'expand-diagonal-line' | 'expand-diagonal-s-2-fill' | 'expand-diagonal-s-2-line' | 'expand-diagonal-s-fill' | 'expand-diagonal-s-line' | 'expand-height-fill' | 'expand-height-line' | 'expand-horizontal-fill' | 'expand-horizontal-line' | 'expand-horizontal-s-fill' | 'expand-horizontal-s-line' | 'expand-left-fill' | 'expand-left-line' | 'expand-left-right-fill' | 'expand-left-right-line' | 'expand-right-fill' | 'expand-right-line' | 'expand-up-down-fill' | 'expand-up-down-line' | 'expand-vertical-fill' | 'expand-vertical-line' | 'expand-vertical-s-fill' | 'expand-vertical-s-line' | 'expand-width-fill' | 'expand-width-line' | 'export-fill' | 'export-line' | 'external-link-fill' | 'external-link-line' | 'eye-2-fill' | 'eye-2-line' | 'eye-close-fill' | 'eye-close-line' | 'eye-fill' | 'eye-line' | 'eye-off-fill' | 'eye-off-line' | 'facebook-box-fill' | 'facebook-box-line' | 'facebook-circle-fill' | 'facebook-circle-line' | 'facebook-fill' | 'facebook-line' | 'fahrenheit-fill' | 'fahrenheit-line' | 'fediverse-fill' | 'fediverse-line' | 'feedback-fill' | 'feedback-line' | 'figma-fill' | 'figma-line' | 'file-2-fill' | 'file-2-line' | 'file-3-fill' | 'file-3-line' | 'file-4-fill' | 'file-4-line' | 'file-add-fill' | 'file-add-line' | 'file-ai-2-fill' | 'file-ai-2-line' | 'file-ai-fill' | 'file-ai-line' | 'file-chart-2-fill' | 'file-chart-2-line' | 'file-chart-fill' | 'file-chart-line' | 'file-check-fill' | 'file-check-line' | 'file-close-fill' | 'file-close-line' | 'file-cloud-fill' | 'file-cloud-line' | 'file-code-fill' | 'file-code-line' | 'file-copy-2-fill' | 'file-copy-2-line' | 'file-copy-fill' | 'file-copy-line' | 'file-damage-fill' | 'file-damage-line' | 'file-download-fill' | 'file-download-line' | 'file-edit-fill' | 'file-edit-line' | 'file-excel-2-fill' | 'file-excel-2-line' | 'file-excel-fill' | 'file-excel-line' | 'file-fill' | 'file-forbid-fill' | 'file-forbid-line' | 'file-gif-fill' | 'file-gif-line' | 'file-history-fill' | 'file-history-line' | 'file-hwp-fill' | 'file-hwp-line' | 'file-image-fill' | 'file-image-line' | 'file-info-fill' | 'file-info-line' | 'file-line' | 'file-list-2-fill' | 'file-list-2-line' | 'file-list-3-fill' | 'file-list-3-line' | 'file-list-fill' | 'file-list-line' | 'file-lock-fill' | 'file-lock-line' | 'file-marked-fill' | 'file-marked-line' | 'file-music-fill' | 'file-music-line' | 'file-paper-2-fill' | 'file-paper-2-line' | 'file-paper-fill' | 'file-paper-line' | 'file-pdf-2-fill' | 'file-pdf-2-line' | 'file-pdf-fill' | 'file-pdf-line' | 'file-ppt-2-fill' | 'file-ppt-2-line' | 'file-ppt-fill' | 'file-ppt-line' | 'file-reduce-fill' | 'file-reduce-line' | 'file-scan-fill' | 'file-scan-line' | 'file-search-fill' | 'file-search-line' | 'file-settings-fill' | 'file-settings-line' | 'file-shield-2-fill' | 'file-shield-2-line' | 'file-shield-fill' | 'file-shield-line' | 'file-shred-fill' | 'file-shred-line' | 'file-text-fill' | 'file-text-line' | 'file-transfer-fill' | 'file-transfer-line' | 'file-unknow-fill' | 'file-unknow-line' | 'file-upload-fill' | 'file-upload-line' | 'file-user-fill' | 'file-user-line' | 'file-video-fill' | 'file-video-line' | 'file-warning-fill' | 'file-warning-line' | 'file-word-2-fill' | 'file-word-2-line' | 'file-word-fill' | 'file-word-line' | 'file-zip-fill' | 'file-zip-line' | 'film-ai-fill' | 'film-ai-line' | 'film-fill' | 'film-line' | 'filter-2-fill' | 'filter-2-line' | 'filter-3-fill' | 'filter-3-line' | 'filter-fill' | 'filter-line' | 'filter-off-fill' | 'filter-off-line' | 'find-replace-fill' | 'find-replace-line' | 'finder-fill' | 'finder-line' | 'fingerprint-2-fill' | 'fingerprint-2-line' | 'fingerprint-fill' | 'fingerprint-line' | 'fire-fill' | 'fire-line' | 'firebase-fill' | 'firebase-line' | 'firefox-browser-fill' | 'firefox-browser-line' | 'firefox-fill' | 'firefox-line' | 'first-aid-kit-fill' | 'first-aid-kit-line' | 'fiverr-fill' | 'fiverr-line' | 'flag-2-fill' | 'flag-2-line' | 'flag-fill' | 'flag-line' | 'flag-off-fill' | 'flag-off-line' | 'flashlight-fill' | 'flashlight-line' | 'flask-fill' | 'flask-line' | 'flickr-fill' | 'flickr-line' | 'flight-land-fill' | 'flight-land-line' | 'flight-takeoff-fill' | 'flight-takeoff-line' | 'flip-horizontal-2-fill' | 'flip-horizontal-2-line' | 'flip-horizontal-fill' | 'flip-horizontal-line' | 'flip-vertical-2-fill' | 'flip-vertical-2-line' | 'flip-vertical-fill' | 'flip-vertical-line' | 'flood-fill' | 'flood-line' | 'flow-chart' | 'flower-fill' | 'flower-line' | 'flutter-fill' | 'flutter-line' | 'focus-2-fill' | 'focus-2-line' | 'focus-3-fill' | 'focus-3-line' | 'focus-fill' | 'focus-line' | 'focus-mode' | 'foggy-fill' | 'foggy-line' | 'folder-2-fill' | 'folder-2-line' | 'folder-3-fill' | 'folder-3-line' | 'folder-4-fill' | 'folder-4-line' | 'folder-5-fill' | 'folder-5-line' | 'folder-6-fill' | 'folder-6-line' | 'folder-add-fill' | 'folder-add-line' | 'folder-chart-2-fill' | 'folder-chart-2-line' | 'folder-chart-fill' | 'folder-chart-line' | 'folder-check-fill' | 'folder-check-line' | 'folder-close-fill' | 'folder-close-line' | 'folder-cloud-fill' | 'folder-cloud-line' | 'folder-download-fill' | 'folder-download-line' | 'folder-fill' | 'folder-forbid-fill' | 'folder-forbid-line' | 'folder-history-fill' | 'folder-history-line' | 'folder-image-fill' | 'folder-image-line' | 'folder-info-fill' | 'folder-info-line' | 'folder-keyhole-fill' | 'folder-keyhole-line' | 'folder-line' | 'folder-lock-fill' | 'folder-lock-line' | 'folder-music-fill' | 'folder-music-line' | 'folder-open-fill' | 'folder-open-line' | 'folder-received-fill' | 'folder-received-line' | 'folder-reduce-fill' | 'folder-reduce-line' | 'folder-settings-fill' | 'folder-settings-line' | 'folder-shared-fill' | 'folder-shared-line' | 'folder-shield-2-fill' | 'folder-shield-2-line' | 'folder-shield-fill' | 'folder-shield-line' | 'folder-transfer-fill' | 'folder-transfer-line' | 'folder-unknow-fill' | 'folder-unknow-line' | 'folder-upload-fill' | 'folder-upload-line' | 'folder-user-fill' | 'folder-user-line' | 'folder-video-fill' | 'folder-video-line' | 'folder-warning-fill' | 'folder-warning-line' | 'folder-zip-fill' | 'folder-zip-line' | 'folders-fill' | 'folders-line' | 'font-color' | 'font-family' | 'font-mono' | 'font-sans-serif' | 'font-serif' | 'font-size' | 'font-size-2' | 'font-size-ai' | 'football-fill' | 'football-line' | 'footprint-fill' | 'footprint-line' | 'forbid-2-fill' | 'forbid-2-line' | 'forbid-fill' | 'forbid-line' | 'format-clear' | 'formula' | 'forward-10-fill' | 'forward-10-line' | 'forward-15-fill' | 'forward-15-line' | 'forward-30-fill' | 'forward-30-line' | 'forward-5-fill' | 'forward-5-line' | 'forward-end-fill' | 'forward-end-line' | 'forward-end-mini-fill' | 'forward-end-mini-line' | 'fridge-fill' | 'fridge-line' | 'friendica-fill' | 'friendica-line' | 'fullscreen-exit-fill' | 'fullscreen-exit-line' | 'fullscreen-fill' | 'fullscreen-line' | 'function-add-fill' | 'function-add-line' | 'function-ai-fill' | 'function-ai-line' | 'function-fill' | 'function-line' | 'functions' | 'funds-box-fill' | 'funds-box-line' | 'funds-fill' | 'funds-line' | 'gallery-fill' | 'gallery-line' | 'gallery-upload-fill' | 'gallery-upload-line' | 'gallery-view' | 'gallery-view-2' | 'game-2-fill' | 'game-2-line' | 'game-fill' | 'game-line' | 'gamepad-fill' | 'gamepad-line' | 'gas-station-fill' | 'gas-station-line' | 'gatsby-fill' | 'gatsby-line' | 'gemini-fill' | 'gemini-line' | 'genderless-fill' | 'genderless-line' | 'ghost-2-fill' | 'ghost-2-line' | 'ghost-3-fill' | 'ghost-3-line' | 'ghost-fill' | 'ghost-line' | 'ghost-smile-fill' | 'ghost-smile-line' | 'gift-2-fill' | 'gift-2-line' | 'gift-fill' | 'gift-line' | 'git-branch-fill' | 'git-branch-line' | 'git-close-pull-request-fill' | 'git-close-pull-request-line' | 'git-commit-fill' | 'git-commit-line' | 'git-fork-fill' | 'git-fork-line' | 'git-merge-fill' | 'git-merge-line' | 'git-pr-draft-fill' | 'git-pr-draft-line' | 'git-pull-request-fill' | 'git-pull-request-line' | 'git-repository-commits-fill' | 'git-repository-commits-line' | 'git-repository-fill' | 'git-repository-line' | 'git-repository-private-fill' | 'git-repository-private-line' | 'gitee-fill' | 'gitee-line' | 'github-fill' | 'github-line' | 'gitlab-fill' | 'gitlab-line' | 'glasses-2-fill' | 'glasses-2-line' | 'glasses-fill' | 'glasses-line' | 'global-fill' | 'global-line' | 'global-off-fill' | 'global-off-line' | 'globe-fill' | 'globe-line' | 'goblet-2-fill' | 'goblet-2-line' | 'goblet-broken-fill' | 'goblet-broken-line' | 'goblet-fill' | 'goblet-line' | 'goggles-fill' | 'goggles-line' | 'golf-ball-fill' | 'golf-ball-line' | 'google-fill' | 'google-line' | 'google-play-fill' | 'google-play-line' | 'government-fill' | 'government-line' | 'gps-fill' | 'gps-line' | 'gradienter-fill' | 'gradienter-line' | 'graduation-cap-fill' | 'graduation-cap-line' | 'grid-fill' | 'grid-line' | 'group-2-fill' | 'group-2-line' | 'group-3-fill' | 'group-3-line' | 'group-fill' | 'group-line' | 'guide-fill' | 'guide-line' | 'h-1' | 'h-2' | 'h-3' | 'h-4' | 'h-5' | 'h-6' | 'hail-fill' | 'hail-line' | 'hammer-fill' | 'hammer-line' | 'hand' | 'hand-coin-fill' | 'hand-coin-line' | 'hand-heart-fill' | 'hand-heart-line' | 'hand-sanitizer-fill' | 'hand-sanitizer-line' | 'handbag-fill' | 'handbag-line' | 'hard-drive-2-fill' | 'hard-drive-2-line' | 'hard-drive-3-fill' | 'hard-drive-3-line' | 'hard-drive-fill' | 'hard-drive-line' | 'hashtag' | 'haze-2-fill' | 'haze-2-line' | 'haze-fill' | 'haze-line' | 'hd-fill' | 'hd-line' | 'heading' | 'headphone-fill' | 'headphone-line' | 'health-book-fill' | 'health-book-line' | 'heart-2-fill' | 'heart-2-line' | 'heart-3-fill' | 'heart-3-line' | 'heart-add-2-fill' | 'heart-add-2-line' | 'heart-add-fill' | 'heart-add-line' | 'heart-fill' | 'heart-line' | 'heart-pulse-fill' | 'heart-pulse-line' | 'hearts-fill' | 'hearts-line' | 'heavy-showers-fill' | 'heavy-showers-line' | 'hexagon-fill' | 'hexagon-line' | 'history-fill' | 'history-line' | 'home-2-fill' | 'home-2-line' | 'home-3-fill' | 'home-3-line' | 'home-4-fill' | 'home-4-line' | 'home-5-fill' | 'home-5-line' | 'home-6-fill' | 'home-6-line' | 'home-7-fill' | 'home-7-line' | 'home-8-fill' | 'home-8-line' | 'home-9-fill' | 'home-9-line' | 'home-fill' | 'home-gear-fill' | 'home-gear-line' | 'home-heart-fill' | 'home-heart-line' | 'home-line' | 'home-office-fill' | 'home-office-line' | 'home-smile-2-fill' | 'home-smile-2-line' | 'home-smile-fill' | 'home-smile-line' | 'home-wifi-fill' | 'home-wifi-line' | 'honor-of-kings-fill' | 'honor-of-kings-line' | 'honour-fill' | 'honour-line' | 'hospital-fill' | 'hospital-line' | 'hotel-bed-fill' | 'hotel-bed-line' | 'hotel-fill' | 'hotel-line' | 'hotspot-fill' | 'hotspot-line' | 'hourglass-2-fill' | 'hourglass-2-line' | 'hourglass-fill' | 'hourglass-line' | 'hq-fill' | 'hq-line' | 'html5-fill' | 'html5-line' | 'id-card-fill' | 'id-card-line' | 'ie-fill' | 'ie-line' | 'image-2-fill' | 'image-2-line' | 'image-add-fill' | 'image-add-line' | 'image-ai-fill' | 'image-ai-line' | 'image-circle-ai-fill' | 'image-circle-ai-line' | 'image-circle-fill' | 'image-circle-line' | 'image-download-fill' | 'image-download-line' | 'image-edit-fill' | 'image-edit-line' | 'image-fill' | 'image-line' | 'image-upload-fill' | 'image-upload-line' | 'import-fill' | 'import-line' | 'inbox-2-fill' | 'inbox-2-line' | 'inbox-archive-fill' | 'inbox-archive-line' | 'inbox-fill' | 'inbox-line' | 'inbox-unarchive-fill' | 'inbox-unarchive-line' | 'increase-decrease-fill' | 'increase-decrease-line' | 'indent-decrease' | 'indent-increase' | 'indeterminate-circle-fill' | 'indeterminate-circle-line' | 'infinity-fill' | 'infinity-line' | 'info-card-fill' | 'info-card-line' | 'info-i' | 'information-2-fill' | 'information-2-line' | 'information-fill' | 'information-line' | 'information-off-fill' | 'information-off-line' | 'infrared-thermometer-fill' | 'infrared-thermometer-line' | 'ink-bottle-fill' | 'ink-bottle-line' | 'input-cursor-move' | 'input-field' | 'input-method-fill' | 'input-method-line' | 'insert-column-left' | 'insert-column-right' | 'insert-row-bottom' | 'insert-row-top' | 'instagram-fill' | 'instagram-line' | 'install-fill' | 'install-line' | 'instance-fill' | 'instance-line' | 'invision-fill' | 'invision-line' | 'issues-fill' | 'issues-line' | 'issues-reopen-fill' | 'issues-reopen-line' | 'italic' | 'java-fill' | 'java-line' | 'javascript-fill' | 'javascript-line' | 'jewelry-fill' | 'jewelry-line' | 'kakao-talk-fill' | 'kakao-talk-line' | 'kanban-view' | 'kanban-view-2' | 'key-2-fill' | 'key-2-line' | 'key-fill' | 'key-line' | 'keyboard-box-fill' | 'keyboard-box-line' | 'keyboard-fill' | 'keyboard-line' | 'keynote-fill' | 'keynote-line' | 'kick-fill' | 'kick-line' | 'knife-blood-fill' | 'knife-blood-line' | 'knife-fill' | 'knife-line' | 'landscape-ai-fill' | 'landscape-ai-line' | 'landscape-fill' | 'landscape-line' | 'layout-2-fill' | 'layout-2-line' | 'layout-3-fill' | 'layout-3-line' | 'layout-4-fill' | 'layout-4-line' | 'layout-5-fill' | 'layout-5-line' | 'layout-6-fill' | 'layout-6-line' | 'layout-bottom-2-fill' | 'layout-bottom-2-line' | 'layout-bottom-fill' | 'layout-bottom-line' | 'layout-column-fill' | 'layout-column-line' | 'layout-fill' | 'layout-grid-2-fill' | 'layout-grid-2-line' | 'layout-grid-fill' | 'layout-grid-line' | 'layout-horizontal-fill' | 'layout-horizontal-line' | 'layout-left-2-fill' | 'layout-left-2-line' | 'layout-left-fill' | 'layout-left-line' | 'layout-line' | 'layout-masonry-fill' | 'layout-masonry-line' | 'layout-right-2-fill' | 'layout-right-2-line' | 'layout-right-fill' | 'layout-right-line' | 'layout-row-fill' | 'layout-row-line' | 'layout-top-2-fill' | 'layout-top-2-line' | 'layout-top-fill' | 'layout-top-line' | 'layout-vertical-fill' | 'layout-vertical-line' | 'leaf-fill' | 'leaf-line' | 'letter-spacing-2' | 'lifebuoy-fill' | 'lifebuoy-line' | 'lightbulb-ai-fill' | 'lightbulb-ai-line' | 'lightbulb-fill' | 'lightbulb-flash-fill' | 'lightbulb-flash-line' | 'lightbulb-line' | 'line-chart-fill' | 'line-chart-line' | 'line-fill' | 'line-height' | 'line-height-2' | 'line-line' | 'link' | 'link-m' | 'link-unlink' | 'link-unlink-m' | 'linkedin-box-fill' | 'linkedin-box-line' | 'linkedin-fill' | 'linkedin-line' | 'links-fill' | 'links-line' | 'list-check' | 'list-check-2' | 'list-check-3' | 'list-indefinite' | 'list-ordered' | 'list-ordered-2' | 'list-radio' | 'list-settings-fill' | 'list-settings-line' | 'list-unordered' | 'list-view' | 'live-fill' | 'live-line' | 'loader-2-fill' | 'loader-2-line' | 'loader-3-fill' | 'loader-3-line' | 'loader-4-fill' | 'loader-4-line' | 'loader-5-fill' | 'loader-5-line' | 'loader-fill' | 'loader-line' | 'lock-2-fill' | 'lock-2-line' | 'lock-fill' | 'lock-line' | 'lock-password-fill' | 'lock-password-line' | 'lock-star-fill' | 'lock-star-line' | 'lock-unlock-fill' | 'lock-unlock-line' | 'login-box-fill' | 'login-box-line' | 'login-circle-fill' | 'login-circle-line' | 'logout-box-fill' | 'logout-box-line' | 'logout-box-r-fill' | 'logout-box-r-line' | 'logout-circle-fill' | 'logout-circle-line' | 'logout-circle-r-fill' | 'logout-circle-r-line' | 'loop-left-ai-fill' | 'loop-left-ai-line' | 'loop-left-fill' | 'loop-left-line' | 'loop-right-ai-fill' | 'loop-right-ai-line' | 'loop-right-fill' | 'loop-right-line' | 'luggage-cart-fill' | 'luggage-cart-line' | 'luggage-deposit-fill' | 'luggage-deposit-line' | 'lungs-fill' | 'lungs-line' | 'mac-fill' | 'mac-line' | 'macbook-fill' | 'macbook-line' | 'magic-fill' | 'magic-line' | 'mail-add-fill' | 'mail-add-line' | 'mail-ai-fill' | 'mail-ai-line' | 'mail-check-fill' | 'mail-check-line' | 'mail-close-fill' | 'mail-close-line' | 'mail-download-fill' | 'mail-download-line' | 'mail-fill' | 'mail-forbid-fill' | 'mail-forbid-line' | 'mail-line' | 'mail-lock-fill' | 'mail-lock-line' | 'mail-open-fill' | 'mail-open-line' | 'mail-send-fill' | 'mail-send-line' | 'mail-settings-fill' | 'mail-settings-line' | 'mail-star-fill' | 'mail-star-line' | 'mail-unread-fill' | 'mail-unread-line' | 'mail-volume-fill' | 'mail-volume-line' | 'map-2-fill' | 'map-2-line' | 'map-fill' | 'map-line' | 'map-pin-2-fill' | 'map-pin-2-line' | 'map-pin-3-fill' | 'map-pin-3-line' | 'map-pin-4-fill' | 'map-pin-4-line' | 'map-pin-5-fill' | 'map-pin-5-line' | 'map-pin-add-fill' | 'map-pin-add-line' | 'map-pin-fill' | 'map-pin-line' | 'map-pin-range-fill' | 'map-pin-range-line' | 'map-pin-time-fill' | 'map-pin-time-line' | 'map-pin-user-fill' | 'map-pin-user-line' | 'mark-pen-fill' | 'mark-pen-line' | 'markdown-fill' | 'markdown-line' | 'markup-fill' | 'markup-line' | 'mastercard-fill' | 'mastercard-line' | 'mastodon-fill' | 'mastodon-line' | 'medal-2-fill' | 'medal-2-line' | 'medal-fill' | 'medal-line' | 'medicine-bottle-fill' | 'medicine-bottle-line' | 'medium-fill' | 'medium-line' | 'megaphone-fill' | 'megaphone-line' | 'memories-fill' | 'memories-line' | 'men-fill' | 'men-line' | 'mental-health-fill' | 'mental-health-line' | 'menu-2-fill' | 'menu-2-line' | 'menu-3-fill' | 'menu-3-line' | 'menu-4-fill' | 'menu-4-line' | 'menu-5-fill' | 'menu-5-line' | 'menu-add-fill' | 'menu-add-line' | 'menu-fill' | 'menu-fold-2-fill' | 'menu-fold-2-line' | 'menu-fold-3-fill' | 'menu-fold-3-line' | 'menu-fold-4-fill' | 'menu-fold-4-line' | 'menu-fold-fill' | 'menu-fold-line' | 'menu-line' | 'menu-search-fill' | 'menu-search-line' | 'menu-unfold-2-fill' | 'menu-unfold-2-line' | 'menu-unfold-3-fill' | 'menu-unfold-3-line' | 'menu-unfold-4-fill' | 'menu-unfold-4-line' | 'menu-unfold-fill' | 'menu-unfold-line' | 'merge-cells-horizontal' | 'merge-cells-vertical' | 'message-2-fill' | 'message-2-line' | 'message-3-fill' | 'message-3-line' | 'message-ai-3-fill' | 'message-ai-3-line' | 'message-fill' | 'message-line' | 'messenger-fill' | 'messenger-line' | 'meta-fill' | 'meta-line' | 'meteor-fill' | 'meteor-line' | 'mic-2-ai-fill' | 'mic-2-ai-line' | 'mic-2-fill' | 'mic-2-line' | 'mic-ai-fill' | 'mic-ai-line' | 'mic-fill' | 'mic-line' | 'mic-off-fill' | 'mic-off-line' | 'mickey-fill' | 'mickey-line' | 'microscope-fill' | 'microscope-line' | 'microsoft-fill' | 'microsoft-line' | 'microsoft-loop-fill' | 'microsoft-loop-line' | 'mind-map' | 'mini-program-fill' | 'mini-program-line' | 'mist-fill' | 'mist-line' | 'mixtral-fill' | 'mixtral-line' | 'mobile-download-fill' | 'mobile-download-line' | 'money-cny-box-fill' | 'money-cny-box-line' | 'money-cny-circle-fill' | 'money-cny-circle-line' | 'money-dollar-box-fill' | 'money-dollar-box-line' | 'money-dollar-circle-fill' | 'money-dollar-circle-line' | 'money-euro-box-fill' | 'money-euro-box-line' | 'money-euro-circle-fill' | 'money-euro-circle-line' | 'money-pound-box-fill' | 'money-pound-box-line' | 'money-pound-circle-fill' | 'money-pound-circle-line' | 'money-rupee-circle-fill' | 'money-rupee-circle-line' | 'moon-clear-fill' | 'moon-clear-line' | 'moon-cloudy-fill' | 'moon-cloudy-line' | 'moon-fill' | 'moon-foggy-fill' | 'moon-foggy-line' | 'moon-line' | 'more-2-fill' | 'more-2-line' | 'more-fill' | 'more-line' | 'motorbike-fill' | 'motorbike-line' | 'mouse-fill' | 'mouse-line' | 'movie-2-ai-fill' | 'movie-2-ai-line' | 'movie-2-fill' | 'movie-2-line' | 'movie-ai-fill' | 'movie-ai-line' | 'movie-fill' | 'movie-line' | 'multi-image-fill' | 'multi-image-line' | 'music-2-fill' | 'music-2-line' | 'music-ai-fill' | 'music-ai-line' | 'music-fill' | 'music-line' | 'mv-ai-fill' | 'mv-ai-line' | 'mv-fill' | 'mv-line' | 'navigation-fill' | 'navigation-line' | 'netease-cloud-music-fill' | 'netease-cloud-music-line' | 'netflix-fill' | 'netflix-line' | 'network-error-fill' | 'network-error-line' | 'network-fill' | 'network-line' | 'network-off-fill' | 'network-off-line' | 'news-fill' | 'news-line' | 'newspaper-fill' | 'newspaper-line' | 'nextjs-fill' | 'nextjs-line' | 'nft-fill' | 'nft-line' | 'no-credit-card-fill' | 'no-credit-card-line' | 'node-tree' | 'nodejs-fill' | 'nodejs-line' | 'notification-2-fill' | 'notification-2-line' | 'notification-3-fill' | 'notification-3-line' | 'notification-4-fill' | 'notification-4-line' | 'notification-badge-fill' | 'notification-badge-line' | 'notification-fill' | 'notification-line' | 'notification-off-fill' | 'notification-off-line' | 'notification-snooze-fill' | 'notification-snooze-line' | 'notion-fill' | 'notion-line' | 'npmjs-fill' | 'npmjs-line' | 'number-0' | 'number-1' | 'number-2' | 'number-3' | 'number-4' | 'number-5' | 'number-6' | 'number-7' | 'number-8' | 'number-9' | 'numbers-fill' | 'numbers-line' | 'nurse-fill' | 'nurse-line' | 'octagon-fill' | 'octagon-line' | 'oil-fill' | 'oil-line' | 'omega' | 'open-arm-fill' | 'open-arm-line' | 'open-source-fill' | 'open-source-line' | 'openai-fill' | 'openai-line' | 'openbase-fill' | 'openbase-line' | 'opera-fill' | 'opera-line' | 'order-play-fill' | 'order-play-line' | 'organization-chart' | 'outlet-2-fill' | 'outlet-2-line' | 'outlet-fill' | 'outlet-line' | 'overline' | 'p2p-fill' | 'p2p-line' | 'page-separator' | 'pages-fill' | 'pages-line' | 'paint-brush-fill' | 'paint-brush-line' | 'paint-fill' | 'paint-line' | 'painting-ai-fill' | 'painting-ai-line' | 'painting-fill' | 'painting-line' | 'palette-fill' | 'palette-line' | 'pantone-fill' | 'pantone-line' | 'paragraph' | 'parent-fill' | 'parent-line' | 'parentheses-fill' | 'parentheses-line' | 'parking-box-fill' | 'parking-box-line' | 'parking-fill' | 'parking-line' | 'pass-expired-fill' | 'pass-expired-line' | 'pass-pending-fill' | 'pass-pending-line' | 'pass-valid-fill' | 'pass-valid-line' | 'passport-fill' | 'passport-line' | 'patreon-fill' | 'patreon-line' | 'pause-circle-fill' | 'pause-circle-line' | 'pause-fill' | 'pause-large-fill' | 'pause-large-line' | 'pause-line' | 'pause-mini-fill' | 'pause-mini-line' | 'paypal-fill' | 'paypal-line' | 'pen-nib-fill' | 'pen-nib-line' | 'pencil-ai-2-fill' | 'pencil-ai-2-line' | 'pencil-ai-fill' | 'pencil-ai-line' | 'pencil-fill' | 'pencil-line' | 'pencil-ruler-2-fill' | 'pencil-ruler-2-line' | 'pencil-ruler-fill' | 'pencil-ruler-line' | 'pentagon-fill' | 'pentagon-line' | 'percent-fill' | 'percent-line' | 'perplexity-fill' | 'perplexity-line' | 'phone-camera-fill' | 'phone-camera-line' | 'phone-fill' | 'phone-find-fill' | 'phone-find-line' | 'phone-line' | 'phone-lock-fill' | 'phone-lock-line' | 'php-fill' | 'php-line' | 'piano-fill' | 'piano-grand-fill' | 'piano-grand-line' | 'piano-line' | 'picture-in-picture-2-fill' | 'picture-in-picture-2-line' | 'picture-in-picture-exit-fill' | 'picture-in-picture-exit-line' | 'picture-in-picture-fill' | 'picture-in-picture-line' | 'pie-chart-2-fill' | 'pie-chart-2-line' | 'pie-chart-box-fill' | 'pie-chart-box-line' | 'pie-chart-fill' | 'pie-chart-line' | 'pin-distance-fill' | 'pin-distance-line' | 'ping-pong-fill' | 'ping-pong-line' | 'pinterest-fill' | 'pinterest-line' | 'pinyin-input' | 'pix-fill' | 'pix-line' | 'pixelfed-fill' | 'pixelfed-line' | 'plane-fill' | 'plane-line' | 'planet-fill' | 'planet-line' | 'plant-fill' | 'plant-line' | 'play-circle-fill' | 'play-circle-line' | 'play-fill' | 'play-large-fill' | 'play-large-line' | 'play-line' | 'play-list-2-fill' | 'play-list-2-line' | 'play-list-add-fill' | 'play-list-add-line' | 'play-list-fill' | 'play-list-line' | 'play-mini-fill' | 'play-mini-line' | 'play-reverse-fill' | 'play-reverse-large-fill' | 'play-reverse-large-line' | 'play-reverse-line' | 'play-reverse-mini-fill' | 'play-reverse-mini-line' | 'playstation-fill' | 'playstation-line' | 'plug-2-fill' | 'plug-2-line' | 'plug-3-fill' | 'plug-3-line' | 'plug-fill' | 'plug-line' | 'poker-clubs-fill' | 'poker-clubs-line' | 'poker-diamonds-fill' | 'poker-diamonds-line' | 'poker-hearts-fill' | 'poker-hearts-line' | 'poker-spades-fill' | 'poker-spades-line' | 'polaroid-2-fill' | 'polaroid-2-line' | 'polaroid-fill' | 'polaroid-line' | 'police-badge-fill' | 'police-badge-line' | 'police-car-fill' | 'police-car-line' | 'presentation-fill' | 'presentation-line' | 'price-tag-2-fill' | 'price-tag-2-line' | 'price-tag-3-fill' | 'price-tag-3-line' | 'price-tag-fill' | 'price-tag-line' | 'printer-cloud-fill' | 'printer-cloud-line' | 'printer-fill' | 'printer-line' | 'product-hunt-fill' | 'product-hunt-line' | 'profile-fill' | 'profile-line' | 'progress-1-fill' | 'progress-1-line' | 'progress-2-fill' | 'progress-2-line' | 'progress-3-fill' | 'progress-3-line' | 'progress-4-fill' | 'progress-4-line' | 'progress-5-fill' | 'progress-5-line' | 'progress-6-fill' | 'progress-6-line' | 'progress-7-fill' | 'progress-7-line' | 'progress-8-fill' | 'progress-8-line' | 'prohibited-2-fill' | 'prohibited-2-line' | 'prohibited-fill' | 'prohibited-line' | 'projector-2-fill' | 'projector-2-line' | 'projector-fill' | 'projector-line' | 'psychotherapy-fill' | 'psychotherapy-line' | 'pulse-ai-fill' | 'pulse-ai-line' | 'pulse-fill' | 'pulse-line' | 'pushpin-2-fill' | 'pushpin-2-line' | 'pushpin-fill' | 'pushpin-line' | 'puzzle-2-fill' | 'puzzle-2-line' | 'puzzle-fill' | 'puzzle-line' | 'qq-fill' | 'qq-line' | 'qr-code-fill' | 'qr-code-line' | 'qr-scan-2-fill' | 'qr-scan-2-line' | 'qr-scan-fill' | 'qr-scan-line' | 'question-answer-fill' | 'question-answer-line' | 'question-fill' | 'question-line' | 'question-mark' | 'questionnaire-fill' | 'questionnaire-line' | 'quill-pen-ai-fill' | 'quill-pen-ai-line' | 'quill-pen-fill' | 'quill-pen-line' | 'quote-text' | 'radar-fill' | 'radar-line' | 'radio-2-fill' | 'radio-2-line' | 'radio-button-fill' | 'radio-button-line' | 'radio-fill' | 'radio-line' | 'rainbow-fill' | 'rainbow-line' | 'rainy-fill' | 'rainy-line' | 'ram-2-fill' | 'ram-2-line' | 'ram-fill' | 'ram-line' | 'reactjs-fill' | 'reactjs-line' | 'receipt-fill' | 'receipt-line' | 'record-circle-fill' | 'record-circle-line' | 'record-mail-fill' | 'record-mail-line' | 'rectangle-fill' | 'rectangle-line' | 'recycle-fill' | 'recycle-line' | 'red-packet-fill' | 'red-packet-line' | 'reddit-fill' | 'reddit-line' | 'refresh-fill' | 'refresh-line' | 'refund-2-fill' | 'refund-2-line' | 'refund-fill' | 'refund-line' | 'registered-fill' | 'registered-line' | 'remix-fill' | 'remix-line' | 'remix-run-fill' | 'remix-run-line' | 'remixicon-fill' | 'remixicon-line' | 'remote-control-2-fill' | 'remote-control-2-line' | 'remote-control-fill' | 'remote-control-line' | 'repeat-2-fill' | 'repeat-2-line' | 'repeat-fill' | 'repeat-line' | 'repeat-one-fill' | 'repeat-one-line' | 'replay-10-fill' | 'replay-10-line' | 'replay-15-fill' | 'replay-15-line' | 'replay-30-fill' | 'replay-30-line' | 'replay-5-fill' | 'replay-5-line' | 'reply-all-fill' | 'reply-all-line' | 'reply-fill' | 'reply-line' | 'reserved-fill' | 'reserved-line' | 'reset-left-fill' | 'reset-left-line' | 'reset-right-fill' | 'reset-right-line' | 'rest-time-fill' | 'rest-time-line' | 'restart-fill' | 'restart-line' | 'restaurant-2-fill' | 'restaurant-2-line' | 'restaurant-fill' | 'restaurant-line' | 'rewind-fill' | 'rewind-line' | 'rewind-mini-fill' | 'rewind-mini-line' | 'rewind-start-fill' | 'rewind-start-line' | 'rewind-start-mini-fill' | 'rewind-start-mini-line' | 'rfid-fill' | 'rfid-line' | 'rhythm-fill' | 'rhythm-line' | 'riding-fill' | 'riding-line' | 'road-map-fill' | 'road-map-line' | 'roadster-fill' | 'roadster-line' | 'robot-2-fill' | 'robot-2-line' | 'robot-3-fill' | 'robot-3-line' | 'robot-fill' | 'robot-line' | 'rocket-2-fill' | 'rocket-2-line' | 'rocket-fill' | 'rocket-line' | 'rotate-lock-fill' | 'rotate-lock-line' | 'rounded-corner' | 'route-fill' | 'route-line' | 'router-fill' | 'router-line' | 'rss-fill' | 'rss-line' | 'ruler-2-fill' | 'ruler-2-line' | 'ruler-fill' | 'ruler-line' | 'run-fill' | 'run-line' | 'safari-fill' | 'safari-line' | 'safe-2-fill' | 'safe-2-line' | 'safe-3-fill' | 'safe-3-line' | 'safe-fill' | 'safe-line' | 'sailboat-fill' | 'sailboat-line' | 'save-2-fill' | 'save-2-line' | 'save-3-fill' | 'save-3-line' | 'save-fill' | 'save-line' | 'scales-2-fill' | 'scales-2-line' | 'scales-3-fill' | 'scales-3-line' | 'scales-fill' | 'scales-line' | 'scan-2-fill' | 'scan-2-line' | 'scan-fill' | 'scan-line' | 'school-fill' | 'school-line' | 'scissors-2-fill' | 'scissors-2-line' | 'scissors-cut-fill' | 'scissors-cut-line' | 'scissors-fill' | 'scissors-line' | 'screenshot-2-fill' | 'screenshot-2-line' | 'screenshot-fill' | 'screenshot-line' | 'scroll-to-bottom-fill' | 'scroll-to-bottom-line' | 'sd-card-fill' | 'sd-card-line' | 'sd-card-mini-fill' | 'sd-card-mini-line' | 'search-2-fill' | 'search-2-line' | 'search-ai-2-fill' | 'search-ai-2-line' | 'search-ai-3-fill' | 'search-ai-3-line' | 'search-ai-4-fill' | 'search-ai-4-line' | 'search-ai-fill' | 'search-ai-line' | 'search-eye-fill' | 'search-eye-line' | 'search-fill' | 'search-line' | 'secure-payment-fill' | 'secure-payment-line' | 'seedling-fill' | 'seedling-line' | 'send-backward' | 'send-ins-fill' | 'send-ins-line' | 'send-plane-2-fill' | 'send-plane-2-line' | 'send-plane-fill' | 'send-plane-line' | 'send-to-back' | 'sensor-fill' | 'sensor-line' | 'seo-fill' | 'seo-line' | 'separator' | 'server-fill' | 'server-line' | 'service-bell-fill' | 'service-bell-line' | 'service-fill' | 'service-line' | 'settings-2-fill' | 'settings-2-line' | 'settings-3-fill' | 'settings-3-line' | 'settings-4-fill' | 'settings-4-line' | 'settings-5-fill' | 'settings-5-line' | 'settings-6-fill' | 'settings-6-line' | 'settings-fill' | 'settings-line' | 'shadow-fill' | 'shadow-line' | 'shake-hands-fill' | 'shake-hands-line' | 'shape-2-fill' | 'shape-2-line' | 'shape-fill' | 'shape-line' | 'shapes-fill' | 'shapes-line' | 'share-2-fill' | 'share-2-line' | 'share-box-fill' | 'share-box-line' | 'share-circle-fill' | 'share-circle-line' | 'share-fill' | 'share-forward-2-fill' | 'share-forward-2-line' | 'share-forward-box-fill' | 'share-forward-box-line' | 'share-forward-fill' | 'share-forward-line' | 'share-line' | 'shield-check-fill' | 'shield-check-line' | 'shield-cross-fill' | 'shield-cross-line' | 'shield-fill' | 'shield-flash-fill' | 'shield-flash-line' | 'shield-keyhole-fill' | 'shield-keyhole-line' | 'shield-line' | 'shield-star-fill' | 'shield-star-line' | 'shield-user-fill' | 'shield-user-line' | 'shining-2-fill' | 'shining-2-line' | 'shining-fill' | 'shining-line' | 'ship-2-fill' | 'ship-2-line' | 'ship-fill' | 'ship-line' | 'shirt-fill' | 'shirt-line' | 'shopping-bag-2-fill' | 'shopping-bag-2-line' | 'shopping-bag-3-fill' | 'shopping-bag-3-line' | 'shopping-bag-4-fill' | 'shopping-bag-4-line' | 'shopping-bag-fill' | 'shopping-bag-line' | 'shopping-basket-2-fill' | 'shopping-basket-2-line' | 'shopping-basket-fill' | 'shopping-basket-line' | 'shopping-cart-2-fill' | 'shopping-cart-2-line' | 'shopping-cart-fill' | 'shopping-cart-line' | 'showers-fill' | 'showers-line' | 'shuffle-fill' | 'shuffle-line' | 'shut-down-fill' | 'shut-down-line' | 'side-bar-fill' | 'side-bar-line' | 'sidebar-fold-fill' | 'sidebar-fold-line' | 'sidebar-unfold-fill' | 'sidebar-unfold-line' | 'signal-cellular-1-fill' | 'signal-cellular-1-line' | 'signal-cellular-2-fill' | 'signal-cellular-2-line' | 'signal-cellular-3-fill' | 'signal-cellular-3-line' | 'signal-cellular-off-fill' | 'signal-cellular-off-line' | 'signal-tower-fill' | 'signal-tower-line' | 'signal-wifi-1-fill' | 'signal-wifi-1-line' | 'signal-wifi-2-fill' | 'signal-wifi-2-line' | 'signal-wifi-3-fill' | 'signal-wifi-3-line' | 'signal-wifi-error-fill' | 'signal-wifi-error-line' | 'signal-wifi-fill' | 'signal-wifi-line' | 'signal-wifi-off-fill' | 'signal-wifi-off-line' | 'signpost-fill' | 'signpost-line' | 'sim-card-2-fill' | 'sim-card-2-line' | 'sim-card-fill' | 'sim-card-line' | 'single-quotes-l' | 'single-quotes-r' | 'sip-fill' | 'sip-line' | 'sketching' | 'skip-back-fill' | 'skip-back-line' | 'skip-back-mini-fill' | 'skip-back-mini-line' | 'skip-down-fill' | 'skip-down-line' | 'skip-forward-fill' | 'skip-forward-line' | 'skip-forward-mini-fill' | 'skip-forward-mini-line' | 'skip-left-fill' | 'skip-left-line' | 'skip-right-fill' | 'skip-right-line' | 'skip-up-fill' | 'skip-up-line' | 'skull-2-fill' | 'skull-2-line' | 'skull-fill' | 'skull-line' | 'skype-fill' | 'skype-line' | 'slack-fill' | 'slack-line' | 'slash-commands' | 'slash-commands-2' | 'slice-fill' | 'slice-line' | 'slideshow-2-fill' | 'slideshow-2-line' | 'slideshow-3-fill' | 'slideshow-3-line' | 'slideshow-4-fill' | 'slideshow-4-line' | 'slideshow-fill' | 'slideshow-line' | 'slideshow-view' | 'slow-down-fill' | 'slow-down-line' | 'smartphone-fill' | 'smartphone-line' | 'snapchat-fill' | 'snapchat-line' | 'snowflake-fill' | 'snowflake-line' | 'snowy-fill' | 'snowy-line' | 'sofa-fill' | 'sofa-line' | 'sort-alphabet-asc' | 'sort-alphabet-desc' | 'sort-asc' | 'sort-desc' | 'sort-number-asc' | 'sort-number-desc' | 'sound-module-fill' | 'sound-module-line' | 'soundcloud-fill' | 'soundcloud-line' | 'space' | 'space-ship-fill' | 'space-ship-line' | 'spam-2-fill' | 'spam-2-line' | 'spam-3-fill' | 'spam-3-line' | 'spam-fill' | 'spam-line' | 'sparkling-2-fill' | 'sparkling-2-line' | 'sparkling-fill' | 'sparkling-line' | 'speak-ai-fill' | 'speak-ai-line' | 'speak-fill' | 'speak-line' | 'speaker-2-fill' | 'speaker-2-line' | 'speaker-3-fill' | 'speaker-3-line' | 'speaker-fill' | 'speaker-line' | 'spectrum-fill' | 'spectrum-line' | 'speech-to-text-fill' | 'speech-to-text-line' | 'speed-fill' | 'speed-line' | 'speed-mini-fill' | 'speed-mini-line' | 'speed-up-fill' | 'speed-up-line' | 'split-cells-horizontal' | 'split-cells-vertical' | 'spotify-fill' | 'spotify-line' | 'spy-fill' | 'spy-line' | 'square-fill' | 'square-line' | 'square-root' | 'stack-fill' | 'stack-line' | 'stack-overflow-fill' | 'stack-overflow-line' | 'stacked-chart-fill' | 'stacked-chart-line' | 'stacked-view' | 'stackshare-fill' | 'stackshare-line' | 'stairs-fill' | 'stairs-line' | 'star-fill' | 'star-half-fill' | 'star-half-line' | 'star-half-s-fill' | 'star-half-s-line' | 'star-line' | 'star-off-fill' | 'star-off-line' | 'star-s-fill' | 'star-s-line' | 'star-smile-fill' | 'star-smile-line' | 'steam-fill' | 'steam-line' | 'steering-2-fill' | 'steering-2-line' | 'steering-fill' | 'steering-line' | 'stethoscope-fill' | 'stethoscope-line' | 'sticky-note-2-fill' | 'sticky-note-2-line' | 'sticky-note-add-fill' | 'sticky-note-add-line' | 'sticky-note-fill' | 'sticky-note-line' | 'stock-fill' | 'stock-line' | 'stop-circle-fill' | 'stop-circle-line' | 'stop-fill' | 'stop-large-fill' | 'stop-large-line' | 'stop-line' | 'stop-mini-fill' | 'stop-mini-line' | 'store-2-fill' | 'store-2-line' | 'store-3-fill' | 'store-3-line' | 'store-fill' | 'store-line' | 'strikethrough' | 'strikethrough-2' | 'subscript' | 'subscript-2' | 'subtract-fill' | 'subtract-line' | 'subway-fill' | 'subway-line' | 'subway-wifi-fill' | 'subway-wifi-line' | 'suitcase-2-fill' | 'suitcase-2-line' | 'suitcase-3-fill' | 'suitcase-3-line' | 'suitcase-fill' | 'suitcase-line' | 'sun-cloudy-fill' | 'sun-cloudy-line' | 'sun-fill' | 'sun-foggy-fill' | 'sun-foggy-line' | 'sun-line' | 'supabase-fill' | 'supabase-line' | 'superscript' | 'superscript-2' | 'surgical-mask-fill' | 'surgical-mask-line' | 'surround-sound-fill' | 'surround-sound-line' | 'survey-fill' | 'survey-line' | 'svelte-fill' | 'svelte-line' | 'swap-2-fill' | 'swap-2-line' | 'swap-3-fill' | 'swap-3-line' | 'swap-box-fill' | 'swap-box-line' | 'swap-fill' | 'swap-line' | 'switch-fill' | 'switch-line' | 'sword-fill' | 'sword-line' | 'syringe-fill' | 'syringe-line' | 't-box-fill' | 't-box-line' | 't-shirt-2-fill' | 't-shirt-2-line' | 't-shirt-air-fill' | 't-shirt-air-line' | 't-shirt-fill' | 't-shirt-line' | 'table-2' | 'table-3' | 'table-alt-fill' | 'table-alt-line' | 'table-fill' | 'table-line' | 'table-view' | 'tablet-fill' | 'tablet-line' | 'tailwind-css-fill' | 'tailwind-css-line' | 'takeaway-fill' | 'takeaway-line' | 'taobao-fill' | 'taobao-line' | 'tape-fill' | 'tape-line' | 'target-fill' | 'target-line' | 'task-fill' | 'task-line' | 'taxi-fill' | 'taxi-line' | 'taxi-wifi-fill' | 'taxi-wifi-line' | 'team-fill' | 'team-line' | 'telegram-2-fill' | 'telegram-2-line' | 'telegram-fill' | 'telegram-line' | 'temp-cold-fill' | 'temp-cold-line' | 'temp-hot-fill' | 'temp-hot-line' | 'tent-fill' | 'tent-line' | 'terminal-box-fill' | 'terminal-box-line' | 'terminal-fill' | 'terminal-line' | 'terminal-window-fill' | 'terminal-window-line' | 'test-tube-fill' | 'test-tube-line' | 'text' | 'text-block' | 'text-direction-l' | 'text-direction-r' | 'text-snippet' | 'text-spacing' | 'text-to-speech-fill' | 'text-to-speech-line' | 'text-wrap' | 'thermometer-fill' | 'thermometer-line' | 'threads-fill' | 'threads-line' | 'thumb-down-fill' | 'thumb-down-line' | 'thumb-up-fill' | 'thumb-up-line' | 'thunderstorms-fill' | 'thunderstorms-line' | 'ticket-2-fill' | 'ticket-2-line' | 'ticket-fill' | 'ticket-line' | 'tiktok-fill' | 'tiktok-line' | 'time-fill' | 'time-line' | 'time-zone-fill' | 'time-zone-line' | 'timeline-view' | 'timer-2-fill' | 'timer-2-line' | 'timer-fill' | 'timer-flash-fill' | 'timer-flash-line' | 'timer-line' | 'todo-fill' | 'todo-line' | 'toggle-fill' | 'toggle-line' | 'token-swap-fill' | 'token-swap-line' | 'tools-fill' | 'tools-line' | 'tooth-fill' | 'tooth-line' | 'tornado-fill' | 'tornado-line' | 'trademark-fill' | 'trademark-line' | 'traffic-light-fill' | 'traffic-light-line' | 'train-fill' | 'train-line' | 'train-wifi-fill' | 'train-wifi-line' | 'translate' | 'translate-2' | 'translate-ai' | 'translate-ai-2' | 'travesti-fill' | 'travesti-line' | 'treasure-map-fill' | 'treasure-map-line' | 'tree-fill' | 'tree-line' | 'trello-fill' | 'trello-line' | 'triangle-fill' | 'triangle-line' | 'triangular-flag-fill' | 'triangular-flag-line' | 'trophy-fill' | 'trophy-line' | 'truck-fill' | 'truck-line' | 'tumblr-fill' | 'tumblr-line' | 'tv-2-fill' | 'tv-2-line' | 'tv-fill' | 'tv-line' | 'twitch-fill' | 'twitch-line' | 'twitter-fill' | 'twitter-line' | 'twitter-x-fill' | 'twitter-x-line' | 'typhoon-fill' | 'typhoon-line' | 'u-disk-fill' | 'u-disk-line' | 'ubuntu-fill' | 'ubuntu-line' | 'umbrella-fill' | 'umbrella-line' | 'underline' | 'uninstall-fill' | 'uninstall-line' | 'unpin-fill' | 'unpin-line' | 'unsplash-fill' | 'unsplash-line' | 'upload-2-fill' | 'upload-2-line' | 'upload-cloud-2-fill' | 'upload-cloud-2-line' | 'upload-cloud-fill' | 'upload-cloud-line' | 'upload-fill' | 'upload-line' | 'upwork-fill' | 'upwork-line' | 'usb-fill' | 'usb-line' | 'user-2-fill' | 'user-2-line' | 'user-3-fill' | 'user-3-line' | 'user-4-fill' | 'user-4-line' | 'user-5-fill' | 'user-5-line' | 'user-6-fill' | 'user-6-line' | 'user-add-fill' | 'user-add-line' | 'user-community-fill' | 'user-community-line' | 'user-fill' | 'user-follow-fill' | 'user-follow-line' | 'user-forbid-fill' | 'user-forbid-line' | 'user-heart-fill' | 'user-heart-line' | 'user-line' | 'user-location-fill' | 'user-location-line' | 'user-minus-fill' | 'user-minus-line' | 'user-received-2-fill' | 'user-received-2-line' | 'user-received-fill' | 'user-received-line' | 'user-search-fill' | 'user-search-line' | 'user-settings-fill' | 'user-settings-line' | 'user-shared-2-fill' | 'user-shared-2-line' | 'user-shared-fill' | 'user-shared-line' | 'user-smile-fill' | 'user-smile-line' | 'user-star-fill' | 'user-star-line' | 'user-unfollow-fill' | 'user-unfollow-line' | 'user-voice-fill' | 'user-voice-line' | 'vercel-fill' | 'vercel-line' | 'verified-badge-fill' | 'verified-badge-line' | 'video-add-fill' | 'video-add-line' | 'video-ai-fill' | 'video-ai-line' | 'video-chat-fill' | 'video-chat-line' | 'video-download-fill' | 'video-download-line' | 'video-fill' | 'video-line' | 'video-off-fill' | 'video-off-line' | 'video-on-ai-fill' | 'video-on-ai-line' | 'video-on-fill' | 'video-on-line' | 'video-upload-fill' | 'video-upload-line' | 'vidicon-2-fill' | 'vidicon-2-line' | 'vidicon-fill' | 'vidicon-line' | 'vimeo-fill' | 'vimeo-line' | 'vip-crown-2-fill' | 'vip-crown-2-line' | 'vip-crown-fill' | 'vip-crown-line' | 'vip-diamond-fill' | 'vip-diamond-line' | 'vip-fill' | 'vip-line' | 'virus-fill' | 'virus-line' | 'visa-fill' | 'visa-line' | 'vk-fill' | 'vk-line' | 'voice-ai-fill' | 'voice-ai-line' | 'voice-recognition-fill' | 'voice-recognition-line' | 'voiceprint-fill' | 'voiceprint-line' | 'volume-down-fill' | 'volume-down-line' | 'volume-mute-fill' | 'volume-mute-line' | 'volume-off-vibrate-fill' | 'volume-off-vibrate-line' | 'volume-up-fill' | 'volume-up-line' | 'volume-vibrate-fill' | 'volume-vibrate-line' | 'vuejs-fill' | 'vuejs-line' | 'walk-fill' | 'walk-line' | 'wallet-2-fill' | 'wallet-2-line' | 'wallet-3-fill' | 'wallet-3-line' | 'wallet-fill' | 'wallet-line' | 'water-flash-fill' | 'water-flash-line' | 'water-percent-fill' | 'water-percent-line' | 'webcam-fill' | 'webcam-line' | 'webhook-fill' | 'webhook-line' | 'wechat-2-fill' | 'wechat-2-line' | 'wechat-channels-fill' | 'wechat-channels-line' | 'wechat-fill' | 'wechat-line' | 'wechat-pay-fill' | 'wechat-pay-line' | 'weibo-fill' | 'weibo-line' | 'weight-fill' | 'weight-line' | 'whatsapp-fill' | 'whatsapp-line' | 'wheelchair-fill' | 'wheelchair-line' | 'wifi-fill' | 'wifi-line' | 'wifi-off-fill' | 'wifi-off-line' | 'window-2-fill' | 'window-2-line' | 'window-fill' | 'window-line' | 'windows-fill' | 'windows-line' | 'windy-fill' | 'windy-line' | 'wireless-charging-fill' | 'wireless-charging-line' | 'women-fill' | 'women-line' | 'wordpress-fill' | 'wordpress-line' | 'wrench-fill' | 'wrench-line' | 'wubi-input' | 'xbox-fill' | 'xbox-line' | 'xing-fill' | 'xing-line' | 'xrp-fill' | 'xrp-line' | 'xtz-fill' | 'xtz-line' | 'youtube-fill' | 'youtube-line' | 'yuque-fill' | 'yuque-line' | 'zcool-fill' | 'zcool-line' | 'zhihu-fill' | 'zhihu-line' | 'zoom-in-fill' | 'zoom-in-line' | 'zoom-out-fill' | 'zoom-out-line' | 'zzz-fill' | 'zzz-line';
722
+
723
+ /** Hearthscale's own marks, which the kit's sheet draws beside the font's:
724
+ * the sidebar open wide and folded narrow. */
725
+ type OwnIconName = 'side-wide' | 'side-narrow';
726
+ interface IconProps {
727
+ /** The icon's name on https://remixicon.com/, such as `mail-line`, or
728
+ * one of Hearthscale's own marks. */
729
+ name: IconName | OwnIconName;
730
+ /** The mark's size in pixels; without one, the font size around it. */
731
+ size?: number;
732
+ className?: string;
733
+ style?: CSSProperties;
734
+ }
735
+ /**
736
+ * A Remix Icon of the font the host loads into every view, or one of
737
+ * Hearthscale's own marks, in the colour of the text around it. `hs-icon`
738
+ * gives it the box of its size and the rules of the design system's drawn
739
+ * marks: the dim ink in a picker or a search field, and the press of the
740
+ * control it sits in.
741
+ */
742
+ declare function Icon({ name, size, className, style }: IconProps): react.JSX.Element;
743
+
744
+ export { Button, Card, Chip, DateGrid, DatePicker, EmptyState, FactRow, Icon, IconButton, InfoRow, Kbd, Label, Lightbox, LinkRow, ListRow, MDivider, MItem, MSection, MSub, MenuSurface, Meter, ModelAvatar, Mono, Notice, OverlayScroll, PageTitle, PersonMark, PictureCompare, Popover, PublisherPicturesContext, SWATCHES, SegmentedControl, SettingsCard, SettingsSearch, SettingsSection, SettingsSelect, SettingsTabs, ShellConfirm, Slider, StatusWord, SwatchPicker, TextField, TextInput, TimePicker, Toast, Toggle, ToggleRow, VirtualList, anchorFrom, useFloatingTips };
745
+ export type { ButtonProps, ButtonSize, ButtonVariant, CardProps, ChipProps, ChipTone, ComparedPicture, DateGridProps, DatePickerProps, EmptyStateProps, IconButtonProps, IconButtonSize, IconName, IconProps, LightboxItem, LightboxProps, MenuAnchor, MeterProps, OverlayScrollProps, OwnIconName, PageTitleProps, PersonMarkProps, PictureCompareProps, PlainDate, PlainTime, PopoverPlacement, PopoverProps, PublisherPictures, SegmentedControlProps, ShellConfirmProps, SliderProps, StatusTone, StatusWordProps, Swatch, SwatchPickerProps, TextFieldProps, TextInputProps, TimePickerProps, ToastProps, ToggleProps, VirtualListHandle, VirtualListProps };