@reliability-design/web 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/components/rel-accordion/rel-accordion.ts +289 -135
  2. package/dist/components/rel-alert/rel-alert.ts +8 -1
  3. package/dist/components/rel-avatar/README.md +15 -4
  4. package/dist/components/rel-avatar/rel-avatar.ts +138 -96
  5. package/dist/components/rel-badge/README.md +7 -0
  6. package/dist/components/rel-badge/rel-badge.ts +61 -8
  7. package/dist/components/rel-button/rel-button.ts +64 -7
  8. package/dist/components/rel-chip/README.md +7 -0
  9. package/dist/components/rel-chip/rel-chip.ts +250 -130
  10. package/dist/components/rel-date-picker/rel-date-picker.ts +116 -14
  11. package/dist/components/rel-drawer/rel-drawer.ts +5 -2
  12. package/dist/components/rel-menubar/rel-menubar.ts +1 -0
  13. package/dist/components/rel-pagination/rel-pagination.ts +442 -425
  14. package/dist/components/rel-radio/rel-radio.ts +16 -16
  15. package/dist/components/rel-range-picker/rel-range-picker.css +349 -349
  16. package/dist/components/rel-range-picker/rel-range-picker.ts +1080 -1079
  17. package/dist/components/rel-select/README.md +34 -28
  18. package/dist/components/rel-select/rel-select.ts +1015 -346
  19. package/dist/components/rel-sheet/rel-sheet.ts +6 -3
  20. package/dist/components/rel-skeleton/rel-skeleton.ts +139 -0
  21. package/dist/components/rel-tab/rel-tab.ts +10 -4
  22. package/dist/components/rel-textfield/rel-textfield.ts +637 -349
  23. package/dist/components/rel-toast/rel-toast.ts +1 -6
  24. package/dist/components/rel-topbar/rel-topbar-actions.ts +4 -0
  25. package/dist/components/rel-topbar/rel-topbar-brand.ts +4 -0
  26. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +4 -0
  27. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +4 -0
  28. package/dist/components/rel-topbar/rel-topbar-item.ts +4 -0
  29. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +4 -0
  30. package/dist/components/rel-topbar/rel-topbar-profile.ts +3 -0
  31. package/dist/components/rel-topbar/rel-topbar-utilities.ts +4 -0
  32. package/dist/components/rel-topbar/rel-topbar.ts +6 -0
  33. package/dist/index.d.mts +239 -22
  34. package/dist/index.d.ts +239 -22
  35. package/dist/index.js +2609 -981
  36. package/dist/index.js.map +1 -1
  37. package/dist/index.mjs +2621 -994
  38. package/dist/index.mjs.map +1 -1
  39. package/dist/styles/vars.css +17 -0
  40. package/dist/{vars-I2PC74XD.css → vars-F54UGCHM.css} +17 -0
  41. package/package.json +1 -1
@@ -62,7 +62,7 @@ export class RelToast extends LitElement {
62
62
  .toast-action {
63
63
  background: transparent;
64
64
  border: none;
65
- color: var(--rel-colors-green-primary);
65
+ color: inherit;
66
66
  font-weight: 600;
67
67
  font-size: 0.85rem;
68
68
  cursor: pointer;
@@ -103,11 +103,6 @@ export class RelToast extends LitElement {
103
103
  }
104
104
 
105
105
  /* Dark mode overrides */
106
- :host-context([data-theme="dark"]) .toast-action,
107
- :host-context(.dark) .toast-action {
108
- color: var(--rel-colors-green-tertiary);
109
- }
110
-
111
106
  :host-context([data-theme="dark"]) .toast.error,
112
107
  :host-context(.dark) .toast.error {
113
108
  background-color: var(--rel-error-surface-default);
@@ -2,6 +2,10 @@ import { LitElement, html, css } from "lit";
2
2
  import { customElement } from "lit/decorators.js";
3
3
  import "../../styles/vars-v2.css";
4
4
 
5
+ /**
6
+ * @deprecated Part of the deprecated rel-topbar family. Use plain
7
+ * `rel-button` elements inside the "App Topbar" recipe at /docs/recipes/app-topbar.
8
+ */
5
9
  @customElement("rel-topbar-actions")
6
10
  export class RelTopbarActions extends LitElement {
7
11
  static styles = css`
@@ -2,6 +2,10 @@ import { LitElement, html, css } from "lit";
2
2
  import { customElement, property } from "lit/decorators.js";
3
3
  import "../../styles/vars-v2.css";
4
4
 
5
+ /**
6
+ * @deprecated Part of the deprecated rel-topbar family. Use a plain
7
+ * `<a>`/logo markup inside the "App Topbar" recipe at /docs/recipes/app-topbar.
8
+ */
5
9
  @customElement("rel-topbar-brand")
6
10
  export class RelTopbarBrand extends LitElement {
7
11
  @property({ type: String }) src: string = "";
@@ -2,6 +2,10 @@ import { LitElement, html, css } from "lit";
2
2
  import { customElement, property } from "lit/decorators.js";
3
3
  import "../../styles/vars-v2.css";
4
4
 
5
+ /**
6
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-menu`'s
7
+ * item slots or `rel-popover` content in the "App Topbar" recipe at /docs/recipes/app-topbar.
8
+ */
5
9
  @customElement("rel-topbar-dropdown-item")
6
10
  export class RelTopbarDropdownItem extends LitElement {
7
11
  @property({ type: String }) label: string = "";
@@ -2,6 +2,10 @@ import { LitElement, html, css } from "lit";
2
2
  import { customElement } from "lit/decorators.js";
3
3
  import "../../styles/vars-v2.css";
4
4
 
5
+ /**
6
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-menu` or
7
+ * `rel-popover` for nav dropdowns in the "App Topbar" recipe at /docs/recipes/app-topbar.
8
+ */
5
9
  @customElement("rel-topbar-dropdown")
6
10
  export class RelTopbarDropdown extends LitElement {
7
11
  static styles = css`
@@ -8,6 +8,10 @@ import "@reliability-design/icons/rel-icon";
8
8
  /**
9
9
  * `rel-topbar-item` — A navigation item within rel-topbar.
10
10
  *
11
+ * @deprecated Part of the deprecated rel-topbar family. Use the "App
12
+ * Topbar" recipe at /docs/recipes/app-topbar, which composes nav links and
13
+ * `rel-menu`/`rel-popover` dropdowns directly instead of a dedicated item component.
14
+ *
11
15
  * Renders as an `<a>` when `href` is supplied, otherwise a `<button>`.
12
16
  *
13
17
  * Slots:
@@ -2,6 +2,10 @@ import { LitElement, html, css } from "lit";
2
2
  import { customElement } from "lit/decorators.js";
3
3
  import "../../styles/vars-v2.css";
4
4
 
5
+ /**
6
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-drawer`
7
+ * for the mobile nav panel in the "App Topbar" recipe at /docs/recipes/app-topbar.
8
+ */
5
9
  @customElement("rel-topbar-mobile-panel")
6
10
  export class RelTopbarMobilePanel extends LitElement {
7
11
  static styles = css`
@@ -9,6 +9,9 @@ export type TopbarRewardTier = "gold" | "silver" | "platinum" | "bronze" | "regu
9
9
  /**
10
10
  * `rel-topbar-profile` — Profile / user tile for the topbar right region.
11
11
  *
12
+ * @deprecated Part of the deprecated rel-topbar family. Compose `rel-avatar`
13
+ * directly inside the "App Topbar" recipe at /docs/recipes/app-topbar.
14
+ *
12
15
  * type="avatar" Customer avatar with initials circle + optional name/subtitle.
13
16
  * type="carrier" Carrier reward tile with reward-tier badge + name/subtitle.
14
17
  */
@@ -2,6 +2,10 @@ import { LitElement, html, css } from "lit";
2
2
  import { customElement } from "lit/decorators.js";
3
3
  import "../../styles/vars-v2.css";
4
4
 
5
+ /**
6
+ * @deprecated Part of the deprecated rel-topbar family. Use plain
7
+ * `rel-button` (icon variant) elements inside the "App Topbar" recipe at /docs/recipes/app-topbar.
8
+ */
5
9
  @customElement("rel-topbar-utilities")
6
10
  export class RelTopbarUtilities extends LitElement {
7
11
  static styles = css`
@@ -15,6 +15,12 @@ export type TopbarForceLayout = "auto" | "desktop" | "tablet" | "mobile";
15
15
  /**
16
16
  * `rel-topbar` — Application-level top navigation / header shell.
17
17
  *
18
+ * @deprecated This component's fixed slot structure, hardcoded breakpoint,
19
+ * and built-in overflow logic are too rigid for most real layouts. Use the
20
+ * "App Topbar" recipe at /docs/recipes/app-topbar instead, composed from
21
+ * rel-menu/rel-popover, rel-drawer, and rel-button. Still supported, but
22
+ * will be removed in a future major version.
23
+ *
18
24
  * Slots:
19
25
  * brand — Logo / wordmark region (left)
20
26
  * (default) — Primary nav items (rel-topbar-item elements)
package/dist/index.d.mts CHANGED
@@ -1,14 +1,15 @@
1
1
  import * as lit_html from 'lit-html';
2
2
  import * as lit from 'lit';
3
- import { LitElement } from 'lit';
3
+ import { LitElement, PropertyValues } from 'lit';
4
4
  export * from '@reliability-design/icons';
5
5
 
6
6
  declare class RelAccordion extends LitElement {
7
7
  title: string;
8
8
  open: boolean;
9
+ size: "md" | "sm";
10
+ type: "default" | "action";
9
11
  static styles: lit.CSSResult;
10
12
  private toggle;
11
- private chevron;
12
13
  render(): lit_html.TemplateResult<1>;
13
14
  }
14
15
 
@@ -29,10 +30,12 @@ declare class RelAlert extends LitElement {
29
30
  declare class RelAvatar extends LitElement {
30
31
  size: "lg" | "md" | "sm" | "xs";
31
32
  type: "image" | "text" | "icon";
33
+ variant: "fill" | "subtle" | "outline";
32
34
  src: string;
33
35
  text: string;
34
36
  alt: string;
35
37
  bg: string;
38
+ color: string;
36
39
  static styles: lit.CSSResult;
37
40
  render(): lit_html.TemplateResult<1>;
38
41
  }
@@ -43,8 +46,23 @@ declare class RelBadge extends LitElement {
43
46
  suffix: string;
44
47
  size: "sm" | "md" | "lg";
45
48
  variant: "dot" | "number";
49
+ /**
50
+ * Direct CSS color override for the badge background. Accepts any valid
51
+ * CSS color value: hex, rgb(...), hsl(...), named color, or var(--token).
52
+ *
53
+ * Clear it (set to `''`) to fall back to the default token.
54
+ */
55
+ color: string;
56
+ /**
57
+ * Direct CSS color override for the badge text/icon color. Accepts any
58
+ * valid CSS color value: hex, rgb(...), hsl(...), named color, or var(--token).
59
+ *
60
+ * Clear it (set to `''`) to fall back to the default (white).
61
+ */
62
+ textColor: string;
46
63
  static styles: lit.CSSResult;
47
64
  private get classes();
65
+ updated(changedProperties: Map<PropertyKey, unknown>): void;
48
66
  render(): lit_html.TemplateResult<1>;
49
67
  }
50
68
 
@@ -65,7 +83,14 @@ declare class RelButton extends LitElement {
65
83
  border: "corner-radius" | "small-corner-radius" | "no-corner-radius";
66
84
  disabled: boolean;
67
85
  ariaLabel: string | null;
86
+ /** Numeric/overflow text shown in a corner badge (e.g. "3", "999+"). Ignored when badgeDot is set. */
87
+ badge: string;
88
+ /** Shows a small corner dot instead of a numbered badge — takes precedence over `badge`. */
89
+ badgeDot: boolean;
68
90
  static styles: lit.CSSResult;
91
+ connectedCallback(): void;
92
+ disconnectedCallback(): void;
93
+ private handleHostClick;
69
94
  private get classes();
70
95
  private handleClick;
71
96
  render(): lit_html.TemplateResult<1>;
@@ -189,14 +214,28 @@ declare class RelDatePicker extends LitElement {
189
214
  label: string | null;
190
215
  disabled: boolean;
191
216
  required: boolean;
217
+ readonly: boolean;
218
+ minDate: string | null;
219
+ maxDate: string | null;
220
+ /** @deprecated use minDate */
192
221
  min: string | null;
222
+ /** @deprecated use maxDate */
193
223
  max: string | null;
194
224
  weekStart: "sun" | "mon";
195
225
  locale: string;
196
226
  open: boolean;
197
227
  closeOnSelect: boolean;
198
228
  clearable: boolean;
229
+ error: boolean;
230
+ errorMessage?: string;
231
+ helperText?: string;
232
+ name?: string;
233
+ size: "small" | "medium" | "large";
234
+ variant: "outlined";
235
+ fullWidth: boolean;
199
236
  isDateDisabled?: (date: Date) => boolean;
237
+ private get minBound();
238
+ private get maxBound();
200
239
  private viewYear;
201
240
  private viewMonth;
202
241
  private focusedDate;
@@ -246,6 +285,14 @@ declare class RelRangePicker extends LitElement {
246
285
  disabled: boolean;
247
286
  open: boolean;
248
287
  mode: "popover" | "popup";
288
+ width: string;
289
+ minWidth: string;
290
+ maxWidth: string;
291
+ height: string;
292
+ minHeight: string;
293
+ maxHeight: string;
294
+ placeholder: string;
295
+ triggerVariant: "default" | "icon";
249
296
  private draftFrom;
250
297
  private draftTo;
251
298
  private draftActivePreset;
@@ -257,6 +304,7 @@ declare class RelRangePicker extends LitElement {
257
304
  static styles: lit.CSSResult;
258
305
  connectedCallback(): void;
259
306
  disconnectedCallback(): void;
307
+ updated(): void;
260
308
  private handleClickOutside;
261
309
  private handleGlobalKeydown;
262
310
  private toggleOpen;
@@ -265,6 +313,8 @@ declare class RelRangePicker extends LitElement {
265
313
  private applySelection;
266
314
  private resetDraft;
267
315
  private getTriggerLabel;
316
+ /** Formatted "MM/DD/YYYY → MM/DD/YYYY" (or single date / "") for the current committed `from`/`to`. */
317
+ get displayLabel(): string;
268
318
  private parseISODate;
269
319
  private formatISODate;
270
320
  private formatDisplayDate;
@@ -287,9 +337,18 @@ declare global {
287
337
  }
288
338
  }
289
339
 
340
+ type ChipTone = "neutral" | "danger" | "warning" | "success" | "info";
341
+ type ChipVariant = "fill" | "subtle";
342
+ type ChipSize = "sm" | "md" | "lg";
343
+ type ChipBorder = "default" | "rounded";
290
344
  declare class RelChip extends LitElement {
345
+ static shadowRootOptions: ShadowRootInit;
291
346
  label: string;
292
- tone: "default" | "blue" | "orange" | "red" | "green";
347
+ tone: ChipTone;
348
+ variant: ChipVariant;
349
+ size: ChipSize;
350
+ border: ChipBorder;
351
+ /** Icon name from the generated icon dictionary (e.g. "settings") — rendered via <rel-icon>. */
293
352
  leadingIcon?: string;
294
353
  trailingIcon?: string;
295
354
  /** Initials text for the avatar (e.g. "JD"). Mutually exclusive with leadingIcon. */
@@ -297,11 +356,22 @@ declare class RelChip extends LitElement {
297
356
  removable: boolean;
298
357
  /** IMPORTANT: reflected so CSS + Angular can see it */
299
358
  removed: boolean;
359
+ /** Opt-in native drag-and-drop — reflects the Figma "Dragged" state automatically during a real drag gesture. */
360
+ draggableChip: boolean;
361
+ /** Reflected so CSS can target the Figma "Dragged" visual state. Driven automatically by dragstart/dragend when draggableChip is set. */
362
+ private dragging;
300
363
  static styles: lit.CSSResult;
301
364
  private get classes();
302
365
  private handleRemove;
366
+ private onDragStart;
367
+ private onDragEnd;
368
+ protected updated(changed: Map<string, unknown>): void;
303
369
  render(): lit_html.TemplateResult<1>;
304
- private renderIcon;
370
+ }
371
+ declare global {
372
+ interface HTMLElementTagNameMap {
373
+ "rel-chip": RelChip;
374
+ }
305
375
  }
306
376
 
307
377
  declare class RelContainer extends LitElement {
@@ -460,6 +530,7 @@ declare class RelRadio extends LitElement {
460
530
  registerOnChange(fn: (value: string) => void): void;
461
531
  registerOnTouched(fn: () => void): void;
462
532
  writeValue(value: string): void;
533
+ private get hasSelection();
463
534
  private renderOption;
464
535
  render(): lit_html.TemplateResult<1>;
465
536
  }
@@ -472,7 +543,7 @@ declare class RelMenubar extends LitElement {
472
543
  private openSubmenuElement;
473
544
  private hoverSwitchEnabled;
474
545
  private _onScroll?;
475
- static readonly _css = "\n :host {\n display: block;\n }\n\n :host > slot {\n display: none;\n }\n\n .menubar-container {\n display: flex;\n align-items: stretch;\n background: var(--rel-color-bg-secondary);\n border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);\n border-radius: var(--rel-borders-radius-border-radius-200);\n overflow: hidden;\n padding: 0;\n gap: var(--rel-spacing-space-3xs);\n font-family: var(--rel-fontFamilies-primary);\n font-size: var(--rel-fontSizes-sm);\n height: 40px;\n }\n\n .menubar-trigger {\n display: flex;\n align-items: center;\n align-self: stretch;\n height: 100%;\n padding: 0 var(--rel-spacing-space-sm);\n background: transparent;\n border: none;\n cursor: pointer;\n font-family: inherit;\n font-size: inherit;\n color: var(--rel-color-text-heading);\n transition: background 0.15s ease;\n user-select: none;\n outline: none;\n }\n\n .menubar-trigger:hover,\n .menubar-trigger.active {\n background: var(--rel-color-bg-selected);\n }\n\n .menubar-trigger:focus-visible {\n outline: 2px solid var(--rel-color-border-focus);\n outline-offset: 2px;\n }\n\n .menubar-panel {\n position: fixed;\n min-width: 220px;\n background: var(--rel-color-bg-primary);\n border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);\n border-radius: var(--rel-borders-radius-border-radius-200);\n box-shadow: var(--rel-shadows-shadow-300);\n padding: 0;\n overflow: hidden;\n z-index: 1000;\n display: none;\n }\n\n .menubar-panel.open {\n display: block;\n }\n\n .menu-item {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--rel-spacing-space-sm);\n padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-md);\n cursor: pointer;\n transition: background 0.15s ease;\n user-select: none;\n color: var(--rel-color-text-heading);\n line-height: var(--rel-lineHeights-sm);\n }\n\n .menu-item:hover,\n .menu-item.focused {\n background: var(--rel-color-bg-selected);\n }\n\n .menu-item[data-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .menu-separator {\n height: var(--rel-borders-width-stroke-100);\n background: var(--rel-color-border-divider);\n margin: 0;\n padding: 0;\n }\n\n rel-icon {\n display: inline-flex;\n pointer-events: none;\n }\n\n .menu-submenu-trigger {\n position: relative;\n }\n\n .menu-submenu-trigger rel-icon {\n opacity: 0.6;\n }\n\n .submenu-panel {\n position: fixed;\n min-width: 200px;\n background: var(--rel-color-bg-primary);\n border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);\n border-radius: var(--rel-borders-radius-border-radius-200);\n box-shadow: var(--rel-shadows-shadow-300);\n padding: 0;\n overflow: hidden;\n z-index: 1001;\n display: none;\n }\n\n .submenu-panel.open {\n display: block;\n }\n\n .menu-shortcut {\n opacity: 0.6;\n font-size: var(--rel-fontSizes-xs);\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-space-3xs);\n }\n\n .menubar-panel rel-checkbox {\n display: block;\n width: 100%;\n padding: var(--rel-spacing-space-xs, 8px) var(--rel-spacing-space-md, 16px);\n box-sizing: border-box;\n cursor: pointer;\n }\n ";
546
+ static readonly _css = "\n :host {\n display: block;\n }\n\n :host > slot {\n display: none;\n }\n\n .menubar-container {\n display: flex;\n align-items: stretch;\n background: var(--rel-color-bg-secondary);\n border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);\n border-radius: var(--rel-borders-radius-border-radius-200);\n overflow: hidden;\n padding: 0;\n gap: var(--rel-spacing-space-3xs);\n font-family: var(--rel-fontFamilies-primary);\n font-size: var(--rel-fontSizes-sm);\n height: 40px;\n width: fit-content;\n }\n\n .menubar-trigger {\n display: flex;\n align-items: center;\n align-self: stretch;\n height: 100%;\n padding: 0 var(--rel-spacing-space-sm);\n background: transparent;\n border: none;\n cursor: pointer;\n font-family: inherit;\n font-size: inherit;\n color: var(--rel-color-text-heading);\n transition: background 0.15s ease;\n user-select: none;\n outline: none;\n }\n\n .menubar-trigger:hover,\n .menubar-trigger.active {\n background: var(--rel-color-bg-selected);\n }\n\n .menubar-trigger:focus-visible {\n outline: 2px solid var(--rel-color-border-focus);\n outline-offset: 2px;\n }\n\n .menubar-panel {\n position: fixed;\n min-width: 220px;\n background: var(--rel-color-bg-primary);\n border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);\n border-radius: var(--rel-borders-radius-border-radius-200);\n box-shadow: var(--rel-shadows-shadow-300);\n padding: 0;\n overflow: hidden;\n z-index: 1000;\n display: none;\n }\n\n .menubar-panel.open {\n display: block;\n }\n\n .menu-item {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--rel-spacing-space-sm);\n padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-md);\n cursor: pointer;\n transition: background 0.15s ease;\n user-select: none;\n color: var(--rel-color-text-heading);\n line-height: var(--rel-lineHeights-sm);\n }\n\n .menu-item:hover,\n .menu-item.focused {\n background: var(--rel-color-bg-selected);\n }\n\n .menu-item[data-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .menu-separator {\n height: var(--rel-borders-width-stroke-100);\n background: var(--rel-color-border-divider);\n margin: 0;\n padding: 0;\n }\n\n rel-icon {\n display: inline-flex;\n pointer-events: none;\n }\n\n .menu-submenu-trigger {\n position: relative;\n }\n\n .menu-submenu-trigger rel-icon {\n opacity: 0.6;\n }\n\n .submenu-panel {\n position: fixed;\n min-width: 200px;\n background: var(--rel-color-bg-primary);\n border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);\n border-radius: var(--rel-borders-radius-border-radius-200);\n box-shadow: var(--rel-shadows-shadow-300);\n padding: 0;\n overflow: hidden;\n z-index: 1001;\n display: none;\n }\n\n .submenu-panel.open {\n display: block;\n }\n\n .menu-shortcut {\n opacity: 0.6;\n font-size: var(--rel-fontSizes-xs);\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-space-3xs);\n }\n\n .menubar-panel rel-checkbox {\n display: block;\n width: 100%;\n padding: var(--rel-spacing-space-xs, 8px) var(--rel-spacing-space-md, 16px);\n box-sizing: border-box;\n cursor: pointer;\n }\n ";
476
547
  createRenderRoot(): this;
477
548
  connectedCallback(): void;
478
549
  disconnectedCallback(): void;
@@ -519,6 +590,10 @@ declare class RelNavbar extends LitElement {
519
590
  render(): lit_html.TemplateResult<1>;
520
591
  }
521
592
 
593
+ /**
594
+ * @deprecated Part of the deprecated rel-topbar family. Use a plain
595
+ * `<a>`/logo markup inside the "App Topbar" recipe at /docs/recipes/app-topbar.
596
+ */
522
597
  declare class RelTopbarBrand extends LitElement {
523
598
  src: string;
524
599
  href: string;
@@ -532,6 +607,10 @@ declare global {
532
607
  }
533
608
  }
534
609
 
610
+ /**
611
+ * @deprecated Part of the deprecated rel-topbar family. Use plain
612
+ * `rel-button` elements inside the "App Topbar" recipe at /docs/recipes/app-topbar.
613
+ */
535
614
  declare class RelTopbarActions extends LitElement {
536
615
  static styles: lit.CSSResult;
537
616
  render(): lit_html.TemplateResult<1>;
@@ -542,6 +621,10 @@ declare global {
542
621
  }
543
622
  }
544
623
 
624
+ /**
625
+ * @deprecated Part of the deprecated rel-topbar family. Use plain
626
+ * `rel-button` (icon variant) elements inside the "App Topbar" recipe at /docs/recipes/app-topbar.
627
+ */
545
628
  declare class RelTopbarUtilities extends LitElement {
546
629
  static styles: lit.CSSResult;
547
630
  render(): lit_html.TemplateResult<1>;
@@ -552,6 +635,10 @@ declare global {
552
635
  }
553
636
  }
554
637
 
638
+ /**
639
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-drawer`
640
+ * for the mobile nav panel in the "App Topbar" recipe at /docs/recipes/app-topbar.
641
+ */
555
642
  declare class RelTopbarMobilePanel extends LitElement {
556
643
  static styles: lit.CSSResult;
557
644
  render(): lit_html.TemplateResult<1>;
@@ -562,6 +649,10 @@ declare global {
562
649
  }
563
650
  }
564
651
 
652
+ /**
653
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-menu` or
654
+ * `rel-popover` for nav dropdowns in the "App Topbar" recipe at /docs/recipes/app-topbar.
655
+ */
565
656
  declare class RelTopbarDropdown extends LitElement {
566
657
  static styles: lit.CSSResult;
567
658
  render(): lit_html.TemplateResult<1>;
@@ -572,6 +663,10 @@ declare global {
572
663
  }
573
664
  }
574
665
 
666
+ /**
667
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-menu`'s
668
+ * item slots or `rel-popover` content in the "App Topbar" recipe at /docs/recipes/app-topbar.
669
+ */
575
670
  declare class RelTopbarDropdownItem extends LitElement {
576
671
  label: string;
577
672
  href: string;
@@ -591,6 +686,12 @@ type TopbarForceLayout = "auto" | "desktop" | "tablet" | "mobile";
591
686
  /**
592
687
  * `rel-topbar` — Application-level top navigation / header shell.
593
688
  *
689
+ * @deprecated This component's fixed slot structure, hardcoded breakpoint,
690
+ * and built-in overflow logic are too rigid for most real layouts. Use the
691
+ * "App Topbar" recipe at /docs/recipes/app-topbar instead, composed from
692
+ * rel-menu/rel-popover, rel-drawer, and rel-button. Still supported, but
693
+ * will be removed in a future major version.
694
+ *
594
695
  * Slots:
595
696
  * brand — Logo / wordmark region (left)
596
697
  * (default) — Primary nav items (rel-topbar-item elements)
@@ -640,6 +741,10 @@ declare class RelTopbar extends LitElement {
640
741
  /**
641
742
  * `rel-topbar-item` — A navigation item within rel-topbar.
642
743
  *
744
+ * @deprecated Part of the deprecated rel-topbar family. Use the "App
745
+ * Topbar" recipe at /docs/recipes/app-topbar, which composes nav links and
746
+ * `rel-menu`/`rel-popover` dropdowns directly instead of a dedicated item component.
747
+ *
643
748
  * Renders as an `<a>` when `href` is supplied, otherwise a `<button>`.
644
749
  *
645
750
  * Slots:
@@ -686,6 +791,9 @@ type TopbarRewardTier = "gold" | "silver" | "platinum" | "bronze" | "regular";
686
791
  /**
687
792
  * `rel-topbar-profile` — Profile / user tile for the topbar right region.
688
793
  *
794
+ * @deprecated Part of the deprecated rel-topbar family. Compose `rel-avatar`
795
+ * directly inside the "App Topbar" recipe at /docs/recipes/app-topbar.
796
+ *
689
797
  * type="avatar" Customer avatar with initials circle + optional name/subtitle.
690
798
  * type="carrier" Carrier reward tile with reward-tier badge + name/subtitle.
691
799
  */
@@ -759,31 +867,38 @@ declare global {
759
867
  }
760
868
  }
761
869
 
762
- type DensityType = "comfortable" | "compact";
763
- type VariantType = "default" | "icons";
764
870
  declare class RelPagination extends LitElement {
871
+ /** Layout type from Figma: extended (numbered pages), compact (prev/next + page text), count-text (range + nav) */
872
+ type: "extended" | "compact" | "count-text";
873
+ /** Controlled current page */
765
874
  page?: number;
875
+ /** Uncontrolled starting page */
766
876
  defaultPage: number;
877
+ /** Total number of pages */
767
878
  totalPages: number;
768
- siblingCount: number;
769
- boundaryCount: number;
879
+ /** Total items (used with perPage to auto-compute totalPages in count-text mode) */
880
+ totalItems: number;
881
+ /** Items per page (count-text mode) */
882
+ perPage: number;
883
+ /** Show "Viewing page X of Y" label below extended pagination */
884
+ showLabel: boolean;
770
885
  disabled: boolean;
771
- density: DensityType;
772
- variant: VariantType;
773
886
  hrefTemplate: string;
774
887
  ariaLabel: string;
775
888
  private currentPage;
776
889
  static styles: lit.CSSResult;
777
890
  connectedCallback(): void;
778
- updated(changedProperties: Map<string, any>): void;
891
+ updated(changedProperties: Map<string, unknown>): void;
779
892
  private get activePage();
780
- private generatePageItems;
893
+ private get computedTotalPages();
894
+ private generatePageNumbers;
781
895
  private handlePageChange;
782
- private getHref;
783
- private handleKeyDown;
784
- private renderPrevIcon;
785
- private renderNextIcon;
786
- private renderItem;
896
+ private renderChevronLeft;
897
+ private renderChevronRight;
898
+ private renderNavBtn;
899
+ private renderExtended;
900
+ private renderCompact;
901
+ private renderCountText;
787
902
  render(): lit_html.TemplateResult<1>;
788
903
  }
789
904
 
@@ -945,21 +1060,101 @@ declare class RelSegmentedButton extends LitElement {
945
1060
  type SelectState = "default" | "error" | "disabled";
946
1061
  type SelectSize = "small" | "medium" | "large";
947
1062
  type SelectBorder = "rounded" | "sharp";
1063
+ type SelectLabelStyle = "default" | "floating";
1064
+ interface SelectOptionObject {
1065
+ value: string;
1066
+ label?: string;
1067
+ supportingText?: string;
1068
+ }
1069
+ type SelectOption = string | SelectOptionObject;
948
1070
  declare class RelSelect extends LitElement {
949
1071
  label: string;
950
- options: string[];
1072
+ labelStyle: SelectLabelStyle;
1073
+ options: SelectOption[];
1074
+ /** Enables multi-select: selected values render as removable chips and options as checkboxes. */
1075
+ multiple: boolean;
1076
+ /** Selected value — single-select mode only. */
951
1077
  selected: string;
1078
+ /** Selected values — multi-select mode only. */
1079
+ selectedValues: string[];
952
1080
  state: SelectState;
953
1081
  supportingText: string;
954
1082
  size: SelectSize;
955
1083
  border: SelectBorder;
956
1084
  leftIcon: string;
957
1085
  rightIcon: string;
1086
+ placeholder: string;
1087
+ searchPlaceholder: string;
1088
+ selectAllLabel: string;
1089
+ /** Max selected chips shown before collapsing the rest into a "+N" badge. */
1090
+ maxVisibleChips: number;
1091
+ /** Hides the in-panel search field. Figma's "Single Option" dropdown has no search bar at all — use this for short, non-searchable lists. */
1092
+ noSearch: boolean;
1093
+ private open;
1094
+ private highlightedIndex;
1095
+ private panelStyle;
1096
+ private searchValue;
1097
+ private internalState;
1098
+ private triggerEl;
1099
+ private searchInputEl;
1100
+ private listboxEl;
1101
+ private uniqueId;
958
1102
  static styles: lit.CSSResult;
959
- connectedCallback(): void;
960
- private onChange;
1103
+ disconnectedCallback(): void;
1104
+ protected willUpdate(changed: PropertyValues<this>): void;
1105
+ private get normalizedOptions();
1106
+ /** Options matching the current search text (substring match, case-insensitive). */
1107
+ private get filteredOptions();
1108
+ private get hasValue();
1109
+ /** Icon size scales with the select's own size, matching the trigger. */
1110
+ private get iconSize();
1111
+ /** The search field uses "small" sizing for both small and medium select — only "large" select bumps it to "medium". */
1112
+ private get searchIconSize();
1113
+ private get selectAllStatus();
1114
+ private addGlobalListeners;
1115
+ private removeGlobalListeners;
1116
+ private onOutsidePointerDown;
1117
+ private onPageScroll;
1118
+ private emitChange;
1119
+ private openListbox;
1120
+ private closeListbox;
1121
+ private updatePosition;
1122
+ private selectSingleOption;
1123
+ private toggleMultiOption;
1124
+ private toggleSelectAll;
1125
+ private removeChip;
1126
+ private onTriggerClick;
1127
+ private onTriggerKeyDown;
1128
+ private onSearchInput;
1129
+ private onSearchKeyDown;
1130
+ private handleListNavigation;
1131
+ private renderChips;
961
1132
  render(): lit_html.TemplateResult<1>;
962
1133
  }
1134
+ declare global {
1135
+ interface HTMLElementTagNameMap {
1136
+ "rel-select": RelSelect;
1137
+ }
1138
+ }
1139
+
1140
+ type SkeletonShape = "line" | "circle" | "block";
1141
+ type SkeletonAnimation = "pulse" | "shimmer" | "none";
1142
+ declare class RelSkeleton extends LitElement {
1143
+ shape: SkeletonShape;
1144
+ lines: number;
1145
+ width: string;
1146
+ height: string;
1147
+ animation: SkeletonAnimation;
1148
+ loaded: boolean;
1149
+ protected updated(changed: Map<string, unknown>): void;
1150
+ static styles: lit.CSSResult;
1151
+ render(): lit_html.TemplateResult<1>;
1152
+ }
1153
+ declare global {
1154
+ interface HTMLElementTagNameMap {
1155
+ "rel-skeleton": RelSkeleton;
1156
+ }
1157
+ }
963
1158
 
964
1159
  type ModalSide = "top" | "bottom" | "center";
965
1160
  declare class RelModal extends LitElement {
@@ -1097,12 +1292,15 @@ declare class RelSwitch extends LitElement {
1097
1292
  interface TabItem {
1098
1293
  label: string;
1099
1294
  badge?: number;
1295
+ badgeDot?: boolean;
1100
1296
  disabled?: boolean;
1101
1297
  }
1102
1298
  declare class RelTabItem extends LitElement {
1103
1299
  label: string;
1104
1300
  value: string;
1105
1301
  badge: number;
1302
+ /** Shows a small dot instead of a numbered badge — takes precedence over `badge`. */
1303
+ badgeDot: boolean;
1106
1304
  disabled: boolean;
1107
1305
  render(): lit_html.TemplateResult<1>;
1108
1306
  }
@@ -1120,6 +1318,7 @@ declare class RelTab extends LitElement {
1120
1318
 
1121
1319
  type TextFieldState = "default" | "error" | "disabled";
1122
1320
  type TextFieldSize = "small" | "medium" | "large";
1321
+ type TextFieldVariant = "default" | "underline" | "legend";
1123
1322
  declare class RelTextfield extends LitElement {
1124
1323
  label?: string;
1125
1324
  placeholder: string;
@@ -1131,9 +1330,27 @@ declare class RelTextfield extends LitElement {
1131
1330
  state: TextFieldState;
1132
1331
  size: TextFieldSize;
1133
1332
  floatingLabel: boolean;
1333
+ variant: TextFieldVariant;
1334
+ disabled: boolean;
1335
+ required: boolean;
1336
+ multiline: boolean;
1337
+ rows: number;
1338
+ prefixIcon?: string;
1339
+ prefixIconAriaLabel?: string;
1340
+ error: boolean;
1341
+ errorMessage?: string;
1342
+ helperText?: string;
1343
+ readonly: boolean;
1344
+ maxLength?: number;
1345
+ name?: string;
1346
+ fullWidth: boolean;
1134
1347
  private internalState;
1135
1348
  private _wasError;
1136
1349
  private uniqueId;
1350
+ private get isDisabled();
1351
+ private get isError();
1352
+ private get leadingIcon();
1353
+ private get helper();
1137
1354
  static styles: lit.CSSResult;
1138
1355
  connectedCallback(): void;
1139
1356
  private handleFocus;
@@ -1172,4 +1389,4 @@ declare class RelTooltip extends LitElement {
1172
1389
  render(): lit_html.TemplateResult<1>;
1173
1390
  }
1174
1391
 
1175
- export { type BreadcrumbItem, type DrawerCloseReason, type DrawerSide, type MenuItem, type MenuType, type ModalSide, type Orientation, type OtpType, type ProgressMode, type RadioOption, RelAccordion, RelAlert, RelAvatar, RelBadge, RelBreadcrumbs, RelButton, RelCalendar, RelCard, RelCardMedia, RelCarousel, RelCheckbox, RelChip, RelContainer, RelDatePicker, RelDivider, RelDrawer, RelDrawerFooter, RelKbd, RelLayout, RelMenu, RelMenuItem, RelMenubar, RelMenubarMenu, RelModal, RelNavbar, RelOtp, RelPagination, RelPopover, RelPopoverContent, RelProgress, RelRadio, RelRangePicker, RelResizableGroup, RelResizableHandle, RelResizablePanel, RelSegmentedButton, RelSelect, RelSlider, RelSnackbar, RelStepper, RelSwitch, RelTab, RelTabItem, RelTextfield, RelToast, RelTooltip, RelTopbar, RelTopbarActions, RelTopbarBrand, RelTopbarDropdown, RelTopbarDropdownItem, RelTopbarItem, RelTopbarMobilePanel, RelTopbarProfile, RelTopbarUtilities, type SegmentAlign, type SegmentOption, type SegmentSize, type SelectBorder, type SelectSize, type SelectState, type SliderType, type SnackbarLines, type SnackbarType, type Step, type StepStatus, type StepperSize, type TabItem, type TextAlign, type TextFieldSize, type TextFieldState, type ToastType, type TooltipPosition, type TopbarForceLayout, type TopbarProfileType, type TopbarRewardTier, type TopbarVariant, type TrackStyle };
1392
+ export { type BreadcrumbItem, type ChipBorder, type ChipSize, type ChipTone, type ChipVariant, type DrawerCloseReason, type DrawerSide, type MenuItem, type MenuType, type ModalSide, type Orientation, type OtpType, type ProgressMode, type RadioOption, RelAccordion, RelAlert, RelAvatar, RelBadge, RelBreadcrumbs, RelButton, RelCalendar, RelCard, RelCardMedia, RelCarousel, RelCheckbox, RelChip, RelContainer, RelDatePicker, RelDivider, RelDrawer, RelDrawerFooter, RelKbd, RelLayout, RelMenu, RelMenuItem, RelMenubar, RelMenubarMenu, RelModal, RelNavbar, RelOtp, RelPagination, RelPopover, RelPopoverContent, RelProgress, RelRadio, RelRangePicker, RelResizableGroup, RelResizableHandle, RelResizablePanel, RelSegmentedButton, RelSelect, RelSkeleton, RelSlider, RelSnackbar, RelStepper, RelSwitch, RelTab, RelTabItem, RelTextfield, RelToast, RelTooltip, RelTopbar, RelTopbarActions, RelTopbarBrand, RelTopbarDropdown, RelTopbarDropdownItem, RelTopbarItem, RelTopbarMobilePanel, RelTopbarProfile, RelTopbarUtilities, type SegmentAlign, type SegmentOption, type SegmentSize, type SelectBorder, type SelectLabelStyle, type SelectOption, type SelectOptionObject, type SelectSize, type SelectState, type SkeletonAnimation, type SkeletonShape, type SliderType, type SnackbarLines, type SnackbarType, type Step, type StepStatus, type StepperSize, type TabItem, type TextAlign, type TextFieldSize, type TextFieldState, type TextFieldVariant, type ToastType, type TooltipPosition, type TopbarForceLayout, type TopbarProfileType, type TopbarRewardTier, type TopbarVariant, type TrackStyle };