@joanroucoux/cairn-ui 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,69 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, ElementRef } from '@angular/core';
2
+ import { InjectionToken, Signal, ElementRef } from '@angular/core';
3
+
4
+ /** App-wide "amounts are hidden" state. Defaults to never masked; the app overrides it. */
5
+ declare const UI_AMOUNT_MASKED: InjectionToken<Signal<boolean>>;
6
+ /** Available figure styles. `AmountNumeric` is derived from this tuple. */
7
+ declare const AMOUNT_NUMERICS: readonly ["tabular", "proportional"];
8
+ type AmountNumeric = (typeof AMOUNT_NUMERICS)[number];
9
+ /** Available masking behaviors. `AmountMasking` is derived from this tuple. */
10
+ declare const AMOUNT_MASKINGS: readonly ["dots", "hide"];
11
+ type AmountMasking = (typeof AMOUNT_MASKINGS)[number];
12
+ /**
13
+ * A number or an amount of money, formatted for the locale and masked when the app hides amounts.
14
+ *
15
+ * @example
16
+ * <ui-amount [value]="total" currency="EUR" numeric="proportional" />
17
+ * <ui-amount [value]="dayChange" currency="EUR" signed whenMasked="hide" />
18
+ */
19
+ declare class UiAmount {
20
+ #private;
21
+ readonly value: _angular_core.InputSignal<number | null | undefined>;
22
+ readonly currency: _angular_core.InputSignal<string | undefined>;
23
+ readonly locale: _angular_core.InputSignal<string>;
24
+ readonly signed: _angular_core.InputSignalWithTransform<boolean, unknown>;
25
+ readonly fractionDigits: _angular_core.InputSignal<number>;
26
+ readonly numeric: _angular_core.InputSignal<"tabular" | "proportional">;
27
+ readonly whenMasked: _angular_core.InputSignal<"dots" | "hide">;
28
+ protected readonly hidden: Signal<boolean>;
29
+ protected readonly text: Signal<string>;
30
+ protected readonly classes: Signal<string>;
31
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAmount, never>;
32
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiAmount, "ui-amount", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "signed": { "alias": "signed"; "required": false; "isSignal": true; }; "fractionDigits": { "alias": "fractionDigits"; "required": false; "isSignal": true; }; "numeric": { "alias": "numeric"; "required": false; "isSignal": true; }; "whenMasked": { "alias": "whenMasked"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
33
+ }
34
+
35
+ type AmountFormatOptions = {
36
+ locale: string;
37
+ currency?: string;
38
+ signed?: boolean;
39
+ fractionDigits?: number;
40
+ };
41
+ /** Formats a number or an amount for the locale, with a missing value as an em dash and masking behind four bullets. */
42
+ declare function formatAmount(value: number | null | undefined, options: AmountFormatOptions, masked?: boolean): string;
43
+
44
+ /** Available async block states. `AsyncState` is derived from this tuple. */
45
+ declare const ASYNC_STATES: readonly ["loading", "error", "empty", "ready"];
46
+ type AsyncState = (typeof ASYNC_STATES)[number];
47
+ /**
48
+ * The three states of a block that depends on a service call, next to the ready content.
49
+ *
50
+ * @example
51
+ * <ui-async [state]="totalState()" errorTitle="Total could not be loaded" errorMessage="The server did not answer." retryLabel="Retry" (retry)="reload()">
52
+ * <span asyncLoading><ui-skeleton shape="figure" /></span>
53
+ * <span asyncEmpty>Add a holding to see your total.</span>
54
+ * <span>{{ total() }}</span>
55
+ * </ui-async>
56
+ */
57
+ declare class UiAsync {
58
+ readonly state: _angular_core.InputSignal<"loading" | "error" | "empty" | "ready">;
59
+ readonly errorTitle: _angular_core.InputSignal<string | undefined>;
60
+ readonly errorMessage: _angular_core.InputSignal<string | undefined>;
61
+ readonly retryLabel: _angular_core.InputSignal<string | undefined>;
62
+ readonly retry: _angular_core.OutputEmitterRef<void>;
63
+ protected readonly retryButtonClasses = "mt-2 relative inline-flex items-center justify-center gap-2 rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,opacity] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) min-h-(--row-min) px-4 text-label bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow)";
64
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAsync, never>;
65
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiAsync, "ui-async", never, { "state": { "alias": "state"; "required": true; "isSignal": true; }; "errorTitle": { "alias": "errorTitle"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "retryLabel": { "alias": "retryLabel"; "required": false; "isSignal": true; }; }, { "retry": "retry"; }, never, ["[asyncLoading]", "[asyncEmpty]", "*"], true, never>;
66
+ }
3
67
 
4
68
  /** Available avatar sizes. `AvatarSize` is derived from this tuple. */
5
69
  declare const AVATAR_SIZES: readonly ["sm", "md"];
@@ -29,7 +93,7 @@ type BadgeVariant = (typeof BADGE_VARIANTS)[number];
29
93
  * <ui-badge>ETF</ui-badge>
30
94
  */
31
95
  declare class UiBadge {
32
- readonly variant: _angular_core.InputSignal<"outline" | "neutral">;
96
+ readonly variant: _angular_core.InputSignal<"neutral" | "outline">;
33
97
  protected readonly classes: _angular_core.Signal<string>;
34
98
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiBadge, never>;
35
99
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiBadge, "ui-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -42,23 +106,14 @@ type ButtonVariant = (typeof BUTTON_VARIANTS)[number];
42
106
  declare const BUTTON_SIZES: readonly ["md", "lg", "xl", "icon"];
43
107
  type ButtonSize = (typeof BUTTON_SIZES)[number];
44
108
  /**
45
- * Styled native button. Applied as an attribute so the host keeps every native
46
- * button behavior (type, disabled, form submission, accessibility) for free.
47
- *
48
- * Also applies to an anchor, for the one case where the action really is a navigation:
49
- * a download the browser has to perform itself.
50
- *
51
- * `size="icon"` has no visible text: give it an `aria-label`.
52
- *
53
- * A `loading` button shows a spinner before its label and swallows clicks, so a slow first
54
- * response cannot turn into a double submission.
109
+ * Styled native button or anchor, applied as an attribute so the host keeps every native behavior.
55
110
  *
56
111
  * @example
57
112
  * <button ui-button variant="destructive">Delete</button>
58
113
  * <button ui-button size="icon" variant="ghost" aria-label="More actions">...</button>
59
114
  */
60
115
  declare class UiButton {
61
- readonly variant: _angular_core.InputSignal<"primary" | "outline" | "ghost" | "destructive">;
116
+ readonly variant: _angular_core.InputSignal<"outline" | "primary" | "ghost" | "destructive">;
62
117
  readonly size: _angular_core.InputSignal<"md" | "lg" | "xl" | "icon">;
63
118
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
64
119
  protected readonly classes: _angular_core.Signal<string>;
@@ -131,8 +186,8 @@ declare class UiDelta {
131
186
  declare const DIALOG_WIDTHS: readonly ["md", "lg"];
132
187
  type DialogWidth = (typeof DIALOG_WIDTHS)[number];
133
188
  /**
134
- * Modal dialog on the native <dialog>: focus trap, focus return, Escape and the top layer
135
- * come from the platform. Two projection slots - the body, and [dialogActions] for the footer.
189
+ * Modal dialog on the native <dialog>: a sheet rising from the bottom under `64rem`, centered
190
+ * above it. Two projection slots - the body, and [dialogActions] for the footer.
136
191
  *
137
192
  * @example
138
193
  * <ui-dialog heading="Delete this holding?" [open]="confirming()" (dismissed)="confirming.set(false)">
@@ -145,7 +200,7 @@ declare class UiDialog {
145
200
  readonly heading: _angular_core.InputSignal<string>;
146
201
  readonly description: _angular_core.InputSignal<string | undefined>;
147
202
  readonly width: _angular_core.InputSignal<"md" | "lg">;
148
- readonly open: _angular_core.InputSignal<boolean>;
203
+ readonly open: _angular_core.InputSignalWithTransform<boolean, unknown>;
149
204
  readonly dismissed: _angular_core.OutputEmitterRef<void>;
150
205
  protected readonly headingId: string;
151
206
  protected readonly descriptionId: string;
@@ -184,7 +239,6 @@ declare class UiField {
184
239
  readonly labelHidden: _angular_core.InputSignalWithTransform<boolean, unknown>;
185
240
  readonly hint: _angular_core.InputSignal<string | undefined>;
186
241
  readonly error: _angular_core.InputSignal<string | undefined>;
187
- /** Unit shown inside the control's right edge, such as `EUR` or `parts`. Not part of the control's value. */
188
242
  readonly unit: _angular_core.InputSignal<string | undefined>;
189
243
  protected readonly hintId: string;
190
244
  protected readonly errorId: string;
@@ -240,6 +294,61 @@ declare class UiTextarea implements UiControl {
240
294
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTextarea, "textarea[uiTextarea]", never, { "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
241
295
  }
242
296
 
297
+ /**
298
+ * One action of a `ui-menu`; `destructive` paints it in `--negative`.
299
+ *
300
+ * @example
301
+ * <button uiMenuItem destructive (click)="remove()">Delete the line</button>
302
+ */
303
+ declare class UiMenuItem {
304
+ #private;
305
+ readonly destructive: _angular_core.InputSignalWithTransform<boolean, unknown>;
306
+ protected readonly classes: _angular_core.Signal<string>;
307
+ focus(): void;
308
+ hasFocus(): boolean;
309
+ protected onClick(): void;
310
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenuItem, never>;
311
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiMenuItem, "button[uiMenuItem]", never, { "destructive": { "alias": "destructive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
312
+ }
313
+ /**
314
+ * Secondary actions menu, opened from its trigger through the native Popover API.
315
+ *
316
+ * @example
317
+ * <button ui-button size="icon" aria-label="More" [uiMenuTrigger]="menu">...</button>
318
+ * <ui-menu #menu label="Line actions">
319
+ * <button uiMenuItem (click)="edit()">Edit</button>
320
+ * <button uiMenuItem destructive (click)="remove()">Delete the line</button>
321
+ * </ui-menu>
322
+ */
323
+ declare class UiMenu {
324
+ #private;
325
+ readonly label: _angular_core.InputSignal<string>;
326
+ readonly menuId: string;
327
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
328
+ protected readonly classes = "m-0 min-w-44 p-1 rounded-container bg-(--elevated) shadow-[0_8px_24px_rgb(0_0_0/0.16)] text-(--foreground) transition-[opacity,transform,overlay,display] transition-discrete duration-(--duration-fast) ease-out starting:open:opacity-0 starting:open:scale-(--enter-scale) opacity-0 scale-(--enter-scale) open:opacity-100 open:scale-100";
329
+ protected readonly items: _angular_core.Signal<readonly UiMenuItem[]>;
330
+ open(trigger: HTMLElement): void;
331
+ close(): void;
332
+ protected onToggle(event: Event): void;
333
+ protected onKeydown(event: KeyboardEvent): void;
334
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenu, never>;
335
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiMenu, "ui-menu", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
336
+ }
337
+ /**
338
+ * Opens a `ui-menu` from a trigger element and wires `aria-haspopup`, `aria-expanded` and
339
+ * `aria-controls` on it.
340
+ *
341
+ * @example
342
+ * <button ui-button size="icon" aria-label="More" [uiMenuTrigger]="menu">...</button>
343
+ */
344
+ declare class UiMenuTrigger {
345
+ #private;
346
+ readonly uiMenuTrigger: _angular_core.InputSignal<UiMenu>;
347
+ protected toggle(): void;
348
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenuTrigger, never>;
349
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiMenuTrigger, "[uiMenuTrigger]", never, { "uiMenuTrigger": { "alias": "uiMenuTrigger"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
350
+ }
351
+
243
352
  /** Ramp step used to paint the fill. `MeterTone` is derived from this tuple. */
244
353
  declare const METER_TONES: readonly [1, 2, 3, 4, 5, 6];
245
354
  type MeterTone = (typeof METER_TONES)[number];
@@ -254,13 +363,44 @@ declare class UiMeter {
254
363
  readonly value: _angular_core.InputSignal<number>;
255
364
  readonly label: _angular_core.InputSignal<string>;
256
365
  readonly valueText: _angular_core.InputSignal<string>;
257
- readonly tone: _angular_core.InputSignal<4 | 1 | 2 | 3 | 5 | 6>;
366
+ readonly tone: _angular_core.InputSignal<2 | 1 | 3 | 4 | 5 | 6>;
258
367
  protected readonly percent: _angular_core.Signal<number>;
259
368
  protected readonly fillClasses: _angular_core.Signal<string>;
260
369
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMeter, never>;
261
370
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiMeter, "ui-meter", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "valueText": { "alias": "valueText"; "required": true; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
262
371
  }
263
372
 
373
+ /**
374
+ * One destination of the sidebar navigation (Portfolio, Holdings, Allocation, Accounts).
375
+ *
376
+ * @example
377
+ * <a ui-nav-item [active]="url === '/'" routerLink="/">
378
+ * <lucide-icon navIcon name="house" />
379
+ * Portfolio
380
+ * </a>
381
+ */
382
+ declare class UiNavItem {
383
+ readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
384
+ protected readonly classes: _angular_core.Signal<string>;
385
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiNavItem, never>;
386
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiNavItem, "a[ui-nav-item]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[navIcon]", "*"], true, never>;
387
+ }
388
+
389
+ /**
390
+ * Clickable row of a list: a holding, an envelope, an account.
391
+ *
392
+ * @example
393
+ * <a ui-row [selected]="holding.id === openId()" [routerLink]="['/holdings', holding.id]">
394
+ * {{ holding.name }}
395
+ * </a>
396
+ */
397
+ declare class UiRow {
398
+ readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
399
+ protected readonly classes: _angular_core.Signal<string>;
400
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRow, never>;
401
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiRow, "a[ui-row], button[ui-row]", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
402
+ }
403
+
264
404
  type SegmentedOption = {
265
405
  value: string;
266
406
  label: string;
@@ -306,19 +446,15 @@ declare class UiSelect implements UiControl {
306
446
  }
307
447
 
308
448
  /**
309
- * Decorative placeholder for content that is still loading, at the shape of the content it stands
310
- * in for. Deliberately hidden from assistive technology: the calling screen keeps its own
311
- * `role="status"` sentence.
312
- *
313
- * Pulses opacity from 1 to 0.45 and back over `--pulse-duration`, which `tokens.css` sets to `0ms`
314
- * under `prefers-reduced-motion: reduce`: the pulse stops there with no branching in this component.
449
+ * Decorative, pulsing placeholder for content that is still loading, at the shape of the content
450
+ * it stands in for.
315
451
  *
316
452
  * @example
317
453
  * <ui-skeleton shape="figure" />
318
454
  * <ui-skeleton [lines]="3" />
319
455
  */
320
456
  declare class UiSkeleton {
321
- readonly shape: _angular_core.InputSignal<"text" | "figure" | "row" | "chart" | "ring">;
457
+ readonly shape: _angular_core.InputSignal<"figure" | "text" | "row" | "chart" | "ring">;
322
458
  readonly lines: _angular_core.InputSignal<number>;
323
459
  readonly height: _angular_core.InputSignal<number>;
324
460
  protected readonly animation = "cairn-pulse var(--pulse-duration) var(--ease-out) infinite alternate";
@@ -354,6 +490,18 @@ declare class UiStat {
354
490
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiStat, "ui-stat", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["[uiStatValue]", "[uiStatDelta]", "[uiStatCaption]", "[uiStatAside]"], true, never>;
355
491
  }
356
492
 
493
+ /**
494
+ * Native checkbox styled as an iOS-style switch, exposed to assistive technology as `role="switch"`.
495
+ *
496
+ * @example
497
+ * <input type="checkbox" uiSwitch [checked]="hidden()" (change)="toggle()" aria-label="Hide amounts" />
498
+ */
499
+ declare class UiSwitch {
500
+ protected readonly classes = "relative shrink-0 w-[51px] h-[31px] appearance-none cursor-pointer rounded-pill bg-(--muted) checked:bg-(--primary) transition-colors duration-(--duration-fast) ease-out disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) before:absolute before:inset-x-0 before:top-1/2 before:-translate-y-1/2 before:h-(--row-min) before:content-[''] after:absolute after:top-0.5 after:left-0.5 after:size-[27px] after:rounded-pill after:bg-(--card) after:shadow-[0_1px_3px_rgb(0_0_0/0.2)] after:transition-transform after:duration-(--duration-fast) after:ease-out after:content-[''] checked:after:translate-x-[20px]";
501
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSwitch, never>;
502
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiSwitch, "input[type=checkbox][uiSwitch]", never, {}, {}, never, never, true, never>;
503
+ }
504
+
357
505
  /** Breakpoints a secondary column can be held back until. */
358
506
  declare const CELL_BREAKPOINTS: readonly ["md", "lg"];
359
507
  type CellBreakpoint = (typeof CELL_BREAKPOINTS)[number];
@@ -399,5 +547,30 @@ declare class UiTd {
399
547
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTd, "td[uiTd]", never, { "numeric": { "alias": "numeric"; "required": false; "isSignal": true; }; "from": { "alias": "from"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
400
548
  }
401
549
 
402
- export { AVATAR_SIZES, BADGE_VARIANTS, BUTTON_SIZES, BUTTON_VARIANTS, CARD_PADDINGS, CARD_VARIANTS, CELL_BREAKPOINTS, CONTROL_SIZES, DELTA_EMPHASES, DIALOG_WIDTHS, METER_TONES, STAT_SIZES, UiAvatar, UiBadge, UiButton, UiCard, UiDelta, UiDialog, UiField, UiInput, UiMeter, UiSegmented, UiSelect, UiSkeleton, UiStat, UiTable, UiTd, UiTextarea, UiTh, UiTr };
403
- export type { AvatarSize, BadgeVariant, ButtonSize, ButtonVariant, CardPadding, CardVariant, CellBreakpoint, ControlSize, DeltaEmphasis, DialogWidth, MeterTone, SegmentedOption, StatSize, UiControlError };
550
+ /**
551
+ * Bottom navigation bar for iPhone: 52px of tabs plus the home indicator's safe area.
552
+ *
553
+ * @example
554
+ * <nav ui-tab-bar>
555
+ * <a ui-tab [active]="url === '/'" routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
556
+ * </nav>
557
+ */
558
+ declare class UiTabBar {
559
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTabBar, never>;
560
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiTabBar, "nav[ui-tab-bar]", never, {}, {}, never, ["*"], true, never>;
561
+ }
562
+ /**
563
+ * One destination of `ui-tab-bar`.
564
+ *
565
+ * @example
566
+ * <a ui-tab active routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
567
+ */
568
+ declare class UiTab {
569
+ readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
570
+ protected readonly classes: _angular_core.Signal<string>;
571
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTab, never>;
572
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiTab, "a[ui-tab]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[tabIcon]", "*"], true, never>;
573
+ }
574
+
575
+ export { AMOUNT_MASKINGS, AMOUNT_NUMERICS, ASYNC_STATES, AVATAR_SIZES, BADGE_VARIANTS, BUTTON_SIZES, BUTTON_VARIANTS, CARD_PADDINGS, CARD_VARIANTS, CELL_BREAKPOINTS, CONTROL_SIZES, DELTA_EMPHASES, DIALOG_WIDTHS, METER_TONES, STAT_SIZES, UI_AMOUNT_MASKED, UiAmount, UiAsync, UiAvatar, UiBadge, UiButton, UiCard, UiDelta, UiDialog, UiField, UiInput, UiMenu, UiMenuItem, UiMenuTrigger, UiMeter, UiNavItem, UiRow, UiSegmented, UiSelect, UiSkeleton, UiStat, UiSwitch, UiTab, UiTabBar, UiTable, UiTd, UiTextarea, UiTh, UiTr, formatAmount };
576
+ export type { AmountFormatOptions, AmountMasking, AmountNumeric, AsyncState, AvatarSize, BadgeVariant, ButtonSize, ButtonVariant, CardPadding, CardVariant, CellBreakpoint, ControlSize, DeltaEmphasis, DialogWidth, MeterTone, SegmentedOption, StatSize, UiControlError };