@reliability-design/web 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/components/rel-accordion/README.md +13 -13
  2. package/dist/components/rel-accordion/rel-accordion.ts +80 -45
  3. package/dist/components/rel-alert/README.md +15 -15
  4. package/dist/components/rel-alert/rel-alert.ts +161 -159
  5. package/dist/components/rel-avatar/README.md +15 -15
  6. package/dist/components/rel-avatar/rel-avatar.ts +42 -38
  7. package/dist/components/rel-badge/README.md +5 -5
  8. package/dist/components/rel-badge/rel-badge.ts +69 -17
  9. package/dist/components/rel-breadcrumb/README.md +7 -7
  10. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +16 -13
  11. package/dist/components/rel-button/README.md +20 -20
  12. package/dist/components/rel-button/rel-button.ts +327 -105
  13. package/dist/components/rel-calendar/README.md +5 -5
  14. package/dist/components/rel-calendar/rel-calendar.ts +61 -45
  15. package/dist/components/rel-card/README.md +6 -6
  16. package/dist/components/rel-card/rel-card.ts +88 -35
  17. package/dist/components/rel-cardmedia/README.md +9 -9
  18. package/dist/components/rel-cardmedia/rel-cardmedia.ts +27 -20
  19. package/dist/components/rel-carousel/README.md +3 -3
  20. package/dist/components/rel-carousel/rel-carousel.ts +174 -90
  21. package/dist/components/rel-chart/README.md +8 -8
  22. package/dist/components/rel-chart/rel-chart.ts +59 -41
  23. package/dist/components/rel-checkbox/README.md +7 -7
  24. package/dist/components/rel-checkbox/rel-checkbox.ts +61 -61
  25. package/dist/components/rel-chip/README.md +16 -16
  26. package/dist/components/rel-chip/rel-chip.ts +143 -111
  27. package/dist/components/rel-container/README.md +11 -11
  28. package/dist/components/rel-container/rel-container.ts +35 -9
  29. package/dist/components/rel-date-picker/README.md +43 -7
  30. package/dist/components/rel-date-picker/date-format.test.ts +43 -0
  31. package/dist/components/rel-date-picker/date-format.ts +47 -0
  32. package/dist/components/rel-date-picker/rel-date-picker.ts +257 -83
  33. package/dist/components/rel-divider/README.md +9 -9
  34. package/dist/components/rel-divider/rel-divider.ts +10 -9
  35. package/dist/components/rel-drawer/README.md +1 -1
  36. package/dist/components/rel-drawer/rel-drawer-footer.ts +1 -1
  37. package/dist/components/rel-drawer/rel-drawer.ts +56 -28
  38. package/dist/components/rel-kbd/README.md +20 -20
  39. package/dist/components/rel-kbd/rel-kbd.ts +119 -25
  40. package/dist/components/rel-layout/README.md +1 -1
  41. package/dist/components/rel-layout/rel-layout.ts +2 -2
  42. package/dist/components/rel-menu/README.md +15 -15
  43. package/dist/components/rel-menu/rel-menu.ts +155 -88
  44. package/dist/components/rel-menubar/README.md +20 -20
  45. package/dist/components/rel-menubar/rel-menubar.ts +47 -31
  46. package/dist/components/rel-nav-menu/README.md +21 -21
  47. package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +17 -14
  48. package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +33 -14
  49. package/dist/components/rel-nav-menu/rel-nav-menu.ts +14 -7
  50. package/dist/components/rel-navbar/README.md +7 -7
  51. package/dist/components/rel-navbar/rel-navbar.ts +12 -11
  52. package/dist/components/rel-otp/README.md +3 -3
  53. package/dist/components/rel-otp/rel-otp.ts +46 -30
  54. package/dist/components/rel-pagination/README.md +18 -18
  55. package/dist/components/rel-pagination/rel-pagination.ts +141 -90
  56. package/dist/components/rel-popover/README.md +13 -13
  57. package/dist/components/rel-popover/rel-popover-content.ts +39 -14
  58. package/dist/components/rel-popover/rel-popover.ts +18 -7
  59. package/dist/components/rel-progress/README.md +5 -5
  60. package/dist/components/rel-progress/rel-progress.ts +16 -12
  61. package/dist/components/rel-radio/README.md +9 -9
  62. package/dist/components/rel-radio/rel-radio.ts +64 -50
  63. package/dist/components/rel-range-picker/rel-range-picker.ts +120 -117
  64. package/dist/components/rel-resizable/README.md +4 -4
  65. package/dist/components/rel-resizable/rel-resizable-group.ts +15 -4
  66. package/dist/components/rel-resizable/rel-resizable-handle.ts +13 -9
  67. package/dist/components/rel-resizable/rel-resizable-panel.ts +11 -0
  68. package/dist/components/rel-segmented-button/README.md +10 -10
  69. package/dist/components/rel-segmented-button/rel-segmented-button.ts +39 -40
  70. package/dist/components/rel-select/README.md +14 -14
  71. package/dist/components/rel-select/rel-select.ts +120 -188
  72. package/dist/components/rel-sheet/README.md +10 -10
  73. package/dist/components/rel-sheet/rel-sheet.ts +82 -23
  74. package/dist/components/rel-sidebar/README.md +5 -5
  75. package/dist/components/rel-sidebar/rel-sidebar.ts +75 -60
  76. package/dist/components/rel-skeleton/rel-skeleton.ts +8 -13
  77. package/dist/components/rel-slider/README.md +10 -10
  78. package/dist/components/rel-slider/rel-slider.ts +230 -57
  79. package/dist/components/rel-snackbar/README.md +9 -9
  80. package/dist/components/rel-snackbar/rel-snackbar.ts +44 -32
  81. package/dist/components/rel-stepper/README.md +10 -10
  82. package/dist/components/rel-stepper/rel-stepper.ts +110 -46
  83. package/dist/components/rel-switch/README.md +5 -5
  84. package/dist/components/rel-switch/rel-switch.ts +23 -12
  85. package/dist/components/rel-tab/README.md +13 -13
  86. package/dist/components/rel-tab/rel-tab.ts +73 -23
  87. package/dist/components/rel-table/README.md +7 -7
  88. package/dist/components/rel-table/rel-table-body.ts +2 -1
  89. package/dist/components/rel-table/rel-table-caption.ts +10 -7
  90. package/dist/components/rel-table/rel-table-cell.ts +7 -6
  91. package/dist/components/rel-table/rel-table-footer.ts +4 -3
  92. package/dist/components/rel-table/rel-table-head.ts +11 -9
  93. package/dist/components/rel-table/rel-table-header.ts +2 -1
  94. package/dist/components/rel-table/rel-table-row.ts +5 -4
  95. package/dist/components/rel-table/rel-table.ts +16 -7
  96. package/dist/components/rel-textfield/README.md +11 -11
  97. package/dist/components/rel-textfield/rel-textfield.ts +718 -397
  98. package/dist/components/rel-toast/README.md +11 -11
  99. package/dist/components/rel-toast/rel-toast.ts +33 -30
  100. package/dist/components/rel-tooltip/README.md +7 -7
  101. package/dist/components/rel-tooltip/rel-tooltip.ts +160 -123
  102. package/dist/components/rel-topbar/rel-topbar-actions.ts +5 -2
  103. package/dist/components/rel-topbar/rel-topbar-brand.ts +12 -5
  104. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +14 -8
  105. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +8 -5
  106. package/dist/components/rel-topbar/rel-topbar-item.ts +27 -22
  107. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +4 -1
  108. package/dist/components/rel-topbar/rel-topbar-profile.ts +71 -50
  109. package/dist/components/rel-topbar/rel-topbar-utilities.ts +5 -2
  110. package/dist/components/rel-topbar/rel-topbar.ts +37 -29
  111. package/dist/index.d.mts +227 -40
  112. package/dist/index.d.ts +227 -40
  113. package/dist/index.js +3930 -2247
  114. package/dist/index.js.map +1 -1
  115. package/dist/index.mjs +4311 -2629
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/styles/vars.css +653 -346
  118. package/dist/vars-WY2XCF5G.css +653 -0
  119. package/package.json +3 -2
  120. package/dist/components/rel-range-picker/rel-range-picker.css +0 -349
  121. package/dist/styles/vars-v2.css +0 -525
  122. package/dist/vars-I2PC74XD.css +0 -346
  123. package/dist/vars-v2-VMGWTFJZ.css +0 -525
package/dist/index.d.mts CHANGED
@@ -8,6 +8,8 @@ declare class RelAccordion extends LitElement {
8
8
  open: boolean;
9
9
  size: "md" | "sm";
10
10
  type: "default" | "action";
11
+ /** Figma "Style" axis — named appearance because `style` collides with the HTML style attribute. */
12
+ appearance: "shadow" | "plain";
11
13
  static styles: lit.CSSResult;
12
14
  private toggle;
13
15
  render(): lit_html.TemplateResult<1>;
@@ -15,6 +17,8 @@ declare class RelAccordion extends LitElement {
15
17
 
16
18
  declare class RelAlert extends LitElement {
17
19
  type: "info" | "success" | "warning" | "error" | "neutral";
20
+ /** Visual treatment (Figma "Style"): solid | subtle | outline. "filled" is a deprecated alias of solid. */
21
+ appearance: "solid" | "subtle" | "outline" | "filled";
18
22
  message1: string;
19
23
  message2?: string;
20
24
  urlText?: string;
@@ -23,7 +27,7 @@ declare class RelAlert extends LitElement {
23
27
  dismissed: boolean;
24
28
  static styles: lit.CSSResult;
25
29
  private dismissAlert;
26
- private get iconSvg();
30
+ private get iconTemplate();
27
31
  render(): lit_html.TemplateResult<1>;
28
32
  }
29
33
 
@@ -44,7 +48,7 @@ declare class RelBadge extends LitElement {
44
48
  number: string;
45
49
  ariaLabel: string;
46
50
  suffix: string;
47
- size: "sm" | "md" | "lg";
51
+ size: "sm" | "md" | "lg" | "xl";
48
52
  variant: "dot" | "number";
49
53
  /**
50
54
  * Direct CSS color override for the badge background. Accepts any valid
@@ -76,17 +80,43 @@ declare class RelBreadcrumbs extends LitElement {
76
80
  render(): lit_html.TemplateResult<1>;
77
81
  }
78
82
 
83
+ /**
84
+ * Style axis. Canonical values are the historical ones; "outline"/"ghost" are
85
+ * accepted Figma-vocabulary aliases for "secondary"/"text". "static" is the
86
+ * Figma Style=Static treatment (transparent, static-light label — for use on
87
+ * colored/dark surfaces). Legacy "icon" is the pre-2.0 collapsed icon-button
88
+ * variant and keeps its exact behavior; prefer icon-only + a style instead.
89
+ */
90
+ type ButtonVariant = "default" | "primary" | "secondary" | "text" | "link" | "icon" | "static" | "outline" | "ghost";
91
+ /** Tone axis. "neutral"/"brand"/"danger" are Figma-vocabulary aliases. */
92
+ type ButtonTone = "default" | "primary" | "secondary" | "critical" | "success" | "neutral" | "brand" | "danger";
79
93
  declare class RelButton extends LitElement {
80
- variant: "default" | "primary" | "secondary" | "text" | "link" | "icon";
81
- tone: "default" | "primary" | "secondary" | "critical" | "success";
94
+ variant: ButtonVariant;
95
+ tone: ButtonTone;
96
+ /**
97
+ * Figma "Type=Icon Only" as an independent axis: a square button of the
98
+ * current style/tone. Unlike legacy variant="icon", this composes with
99
+ * every style (outline/ghost/link included).
100
+ */
101
+ iconOnly: boolean;
102
+ /** Figma "State=Loading": shows a spinner, blocks interaction. */
103
+ loading: boolean;
82
104
  size: "small" | "medium" | "large";
83
105
  border: "corner-radius" | "small-corner-radius" | "no-corner-radius";
84
106
  disabled: boolean;
85
107
  ariaLabel: string | null;
108
+ /** Numeric/overflow text shown in a corner badge (e.g. "3", "999+"). Ignored when badgeDot is set. */
109
+ badge: string;
110
+ /** Shows a small corner dot instead of a numbered badge — takes precedence over `badge`. */
111
+ badgeDot: boolean;
86
112
  static styles: lit.CSSResult;
87
113
  connectedCallback(): void;
88
114
  disconnectedCallback(): void;
89
115
  private handleHostClick;
116
+ /** Style axis with Figma-vocabulary aliases folded onto canonical values. */
117
+ private get styleVariant();
118
+ /** Tone axis with Figma-vocabulary aliases folded onto canonical values. */
119
+ private get effectiveTone();
90
120
  private get classes();
91
121
  private handleClick;
92
122
  render(): lit_html.TemplateResult<1>;
@@ -121,6 +151,12 @@ declare class RelCalendar extends LitElement {
121
151
  }
122
152
 
123
153
  declare class RelCard extends LitElement {
154
+ /**
155
+ * Figma "Type" axis: custom (default) renders slotted content with card
156
+ * padding; media adds a flush media region (slot name="media") above the
157
+ * content — pair it with <rel-card-media>.
158
+ */
159
+ type: "custom" | "media";
124
160
  static styles: lit.CSSResult;
125
161
  render(): lit_html.TemplateResult<1>;
126
162
  }
@@ -133,6 +169,13 @@ declare class RelCarousel extends LitElement {
133
169
  pauseOnHover: boolean;
134
170
  showButtons: boolean;
135
171
  showDots: boolean;
172
+ /**
173
+ * Figma "Type" axis. When set it drives which controls render:
174
+ * default = content only · only-indicators = dots · side-arrows = overlaid
175
+ * arrows + dots · bottom-arrows = dots flanked by arrows below the slide.
176
+ * When unset, the legacy show-buttons/show-dots booleans apply unchanged.
177
+ */
178
+ type?: "default" | "only-indicators" | "side-arrows" | "bottom-arrows";
136
179
  orientation: "horizontal" | "vertical";
137
180
  label: string;
138
181
  gap?: number;
@@ -156,6 +199,9 @@ declare class RelCarousel extends LitElement {
156
199
  firstUpdated(): void;
157
200
  disconnectedCallback(): void;
158
201
  private handleSlotChange;
202
+ private get vertical();
203
+ /** Translate along the orientation axis. */
204
+ private axisTransform;
159
205
  private unit;
160
206
  private updateTransform;
161
207
  private goToPrevious;
@@ -172,6 +218,10 @@ declare class RelCarousel extends LitElement {
172
218
  private handleMouseEnter;
173
219
  private handleMouseLeave;
174
220
  updated(changedProperties: Map<string, any>): void;
221
+ /** Where nav arrows render, honouring the Figma type when set. */
222
+ private get buttonPlacement();
223
+ private get dotsVisible();
224
+ private renderNavButton;
175
225
  render(): lit_html.TemplateResult<1>;
176
226
  }
177
227
 
@@ -210,14 +260,35 @@ declare class RelDatePicker extends LitElement {
210
260
  label: string | null;
211
261
  disabled: boolean;
212
262
  required: boolean;
263
+ readonly: boolean;
264
+ minDate: string | null;
265
+ maxDate: string | null;
266
+ /** @deprecated use minDate */
213
267
  min: string | null;
268
+ /** @deprecated use maxDate */
214
269
  max: string | null;
215
270
  weekStart: "sun" | "mon";
216
271
  locale: string;
272
+ displayFormat: string | null;
273
+ /**
274
+ * Full control over the selected-value display; wins over `displayFormat`.
275
+ * Reactive (attribute:false) so assigning it after render re-renders the
276
+ * trigger — frameworks set callbacks as properties post-creation.
277
+ */
278
+ formatDate?: (date: Date) => string;
217
279
  open: boolean;
218
280
  closeOnSelect: boolean;
219
281
  clearable: boolean;
282
+ error: boolean;
283
+ errorMessage?: string;
284
+ helperText?: string;
285
+ name?: string;
286
+ size: "small" | "medium" | "large";
287
+ variant: "outlined";
288
+ fullWidth: boolean;
220
289
  isDateDisabled?: (date: Date) => boolean;
290
+ private get minBound();
291
+ private get maxBound();
221
292
  private viewYear;
222
293
  private viewMonth;
223
294
  private focusedDate;
@@ -357,7 +428,7 @@ declare global {
357
428
  }
358
429
 
359
430
  declare class RelContainer extends LitElement {
360
- padding: "sm" | "md" | "lg";
431
+ padding: "sm" | "md" | "lg" | "xl";
361
432
  shadow: boolean;
362
433
  background: "light" | "white" | "none";
363
434
  static styles: lit.CSSResult;
@@ -442,6 +513,20 @@ declare class RelKbd extends LitElement {
442
513
  static styles: lit.CSSResult;
443
514
  render(): lit_html.TemplateResult<1>;
444
515
  }
516
+ /**
517
+ * Multi-key shortcut (Figma Kbd Items=1/2/3/4): renders one <rel-kbd> per
518
+ * entry in `items` with "+" separators between them. Slotted <rel-kbd>
519
+ * children may be used instead of the items array.
520
+ *
521
+ * <rel-kbd-group .items=${["Ctrl", "Shift", "P"]} size="md"></rel-kbd-group>
522
+ */
523
+ declare class RelKbdGroup extends LitElement {
524
+ items: string[];
525
+ size: "sm" | "md" | "lg";
526
+ variant: "default" | "muted";
527
+ static styles: lit.CSSResult;
528
+ render(): lit_html.TemplateResult<1>;
529
+ }
445
530
 
446
531
  declare class RelLayout extends LitElement {
447
532
  gap: string;
@@ -452,7 +537,34 @@ declare class RelLayout extends LitElement {
452
537
  render(): lit_html.TemplateResult<1>;
453
538
  }
454
539
 
455
- type MenuType = "default" | "checkbox" | "arrow";
540
+ interface RadioOption {
541
+ value: string;
542
+ label: string;
543
+ supportingText?: string;
544
+ disabled?: boolean;
545
+ }
546
+ declare class RelRadio extends LitElement {
547
+ options: RadioOption[];
548
+ name: string;
549
+ selectedValue: string | null;
550
+ disabled: boolean;
551
+ error: boolean;
552
+ errorMessage: string;
553
+ value: string;
554
+ checked: boolean;
555
+ private _onChange;
556
+ private _onTouched;
557
+ static styles: lit.CSSResult;
558
+ private onChange;
559
+ registerOnChange(fn: (value: string) => void): void;
560
+ registerOnTouched(fn: () => void): void;
561
+ writeValue(value: string): void;
562
+ private get hasSelection();
563
+ private renderOption;
564
+ render(): lit_html.TemplateResult<1>;
565
+ }
566
+
567
+ type MenuType = "default" | "checkbox" | "arrow" | "select-option" | "fixed" | "fit";
456
568
  interface MenuItem {
457
569
  label: string;
458
570
  active?: boolean;
@@ -474,49 +586,23 @@ declare class RelMenu extends LitElement {
474
586
  items: MenuItem[];
475
587
  private focusedIndex;
476
588
  private _items;
477
- static readonly _css = "\n :host {\n display: inline-block;\n }\n\n .rel-menu {\n position: relative;\n display: inline-block;\n background: var(--rel-color-bg-primary);\n color: var(--rel-color-text-primary);\n border-radius: var(--rel-borders-radius-border-radius-300);\n box-shadow: var(--rel-shadows-shadow-300);\n min-width: 220px;\n font-family: var(--rel-fontFamilies-primary, sans-serif);\n font-size: var(--rel-fontSizes-sm);\n padding: var(--rel-spacing-space-3xs) 0;\n outline: none;\n overflow: hidden;\n }\n\n .rel-menu:focus-visible,\n :host(:focus-visible) .rel-menu {\n outline: 2px solid var(--rel-color-border-focus);\n outline-offset: 2px;\n }\n\n .rel-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-space-xs);\n padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-sm);\n line-height: var(--rel-lineHeights-sm);\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n user-select: none;\n }\n\n .rel-menu-item:hover {\n background: var(--rel-color-bg-hover);\n }\n\n .rel-menu-item:active {\n background: var(--rel-color-bg-hover);\n }\n\n .rel-menu-item.active {\n background: var(--rel-color-bg-hover);\n font-weight: var(--rel-fontWeights-medium);\n }\n\n .rel-menu-item.disabled {\n background-color: transparent;\n color: var(--rel-color-text-disabled);\n cursor: not-allowed;\n }\n\n .rel-menu-item[data-focused=\"true\"] {\n outline: 2px solid var(--rel-color-border-focus);\n outline-offset: -2px;\n }\n\n .menu-check-row {\n display: inline-flex;\n align-items: center;\n gap: var(--rel-spacing-space-2xs);\n width: 100%;\n }\n\n .menu-checkbox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n }\n\n .menu-checkbox:disabled {\n cursor: not-allowed;\n }\n\n .menu-label {\n flex: 1 1 auto;\n }\n\n .chevron {\n font-size: var(--rel-fontSizes-lg);\n opacity: 0.75;\n transform: translateY(1px);\n }\n\n .rel-submenu {\n position: absolute;\n top: calc(-1 * var(--rel-spacing-space-3xs));\n left: calc(100% + var(--rel-spacing-space-2xs));\n min-width: 200px;\n background: var(--rel-color-bg-primary);\n color: var(--rel-color-text-primary);\n border-radius: var(--rel-borders-radius-border-radius-300);\n box-shadow: var(--rel-shadows-shadow-300);\n padding: var(--rel-spacing-space-3xs) 0;\n visibility: hidden;\n pointer-events: none;\n z-index: 20;\n }\n\n .rel-submenu.visible {\n visibility: visible;\n pointer-events: auto;\n }\n\n .rel-submenu .rel-menu-item {\n padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-sm);\n }\n ";
589
+ static readonly _css = "\n :host {\n color: var(--rel-text-default);\n display: inline-block;\n }\n\n .rel-menu {\n position: relative;\n display: inline-block;\n background: var(--rel-bg-neutral);\n color: var(--rel-text-default);\n border-radius: var(--rel-border-radius-md);\n box-shadow: var(--rel-shadows-shadow-300);\n min-width: 220px;\n /* No vertical padding: items fill edge-to-edge so a first/last-item hover\n reaches the menu's top/bottom. NOT overflow:hidden \u2014 that clips the\n type=arrow flyout (position:absolute at left:100%). Instead the first\n and last items carry the outer corner radius so hover backgrounds clip\n to the rounded shape without any overflow. */\n padding: 0;\n outline: none;\n overflow: visible;\n font-family: var(--rel-body-lg-regular-font-family);\n font-weight: var(--rel-body-lg-regular-font-weight);\n font-size: var(--rel-body-lg-regular-font-size);\n line-height: var(--rel-body-lg-regular-line-height);\n letter-spacing: var(--rel-body-lg-regular-letter-spacing);\n }\n\n .rel-menu:focus-visible,\n :host(:focus-visible) .rel-menu {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: 2px;\n }\n\n .rel-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-xs);\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n line-height: var(--rel-body-sm-regular-line-height);\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n user-select: none;\n }\n\n /* First/last items carry the menu's outer radius so their hover fill clips\n to the rounded corners (replaces the removed overflow:hidden). */\n .rel-menu > .rel-menu-item:first-child {\n border-top-left-radius: var(--rel-border-radius-md);\n border-top-right-radius: var(--rel-border-radius-md);\n }\n\n .rel-menu > .rel-menu-item:last-child {\n border-bottom-left-radius: var(--rel-border-radius-md);\n border-bottom-right-radius: var(--rel-border-radius-md);\n }\n\n .rel-menu-item:hover {\n background: var(--rel-bg-neutral-elevated-1);\n }\n\n .rel-menu-item:active {\n background: var(--rel-bg-neutral-elevated-1);\n }\n\n .rel-menu-item.active {\n background: var(--rel-bg-neutral-elevated-2);\n font-weight: var(--rel-body-lg-medium-font-weight);\n }\n\n .rel-menu-item.disabled {\n background-color: transparent;\n color: var(--rel-text-disabled);\n /* Keep the item pointer-interactive so cursor:not-allowed actually\n renders; clicks are already neutralised by the item.disabled guard in\n onItemClick/onItemEnter. pointer-events:none here would make the row\n transparent to the pointer and suppress the cursor. */\n cursor: not-allowed;\n }\n\n .rel-menu-item[data-focused=\"true\"] {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: -2px;\n }\n\n /* Width modes (Figma Type=Fixed / Type=Fit) */\n .rel-menu.fixed {\n width: var(--rel-menu-width, 300px);\n min-width: 0;\n box-sizing: border-box;\n }\n\n .rel-menu.fit {\n min-width: 0;\n width: max-content;\n }\n\n /* Checkbox (Type=Checkbox) / radio (Type=Select Option) rows render the real\n rel-checkbox / rel-radio. pointer-events:none keeps the whole row the click\n target so onItemClick stays the single source of truth. */\n .menu-control {\n pointer-events: none;\n width: 100%;\n }\n\n .menu-label {\n flex: 1 1 auto;\n }\n\n /* Submenu affordance \u2014 same rel-icon chevron the menubar uses. */\n .submenu-chevron {\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n opacity: 0.6;\n pointer-events: none;\n }\n\n /* Shortcut / hint text (Figma body-sm-regular, caption tone) */\n .menu-shortcut,\n ::slotted([slot=\"shortcut\"]) {\n font-family: var(--rel-body-sm-regular-font-family);\n font-weight: var(--rel-body-sm-regular-font-weight);\n font-size: var(--rel-body-sm-regular-font-size);\n line-height: var(--rel-body-sm-regular-line-height);\n letter-spacing: var(--rel-body-sm-regular-letter-spacing);\n color: var(--rel-text-caption);\n margin-left: auto;\n padding-left: var(--rel-spacing-md);\n }\n\n \n .rel-submenu {\n border: 1px solid var(--rel-border-subtle);\n position: absolute;\n top: calc(-1 * var(--rel-spacing-3xs));\n /* flush against the trigger (no gap) so moving the pointer into the flyout\n never crosses a dead zone that would fire the trigger's mouseleave */\n left: 100%;\n min-width: 200px;\n background: var(--rel-bg-neutral);\n color: var(--rel-text-default);\n border-radius: var(--rel-border-radius-md);\n box-shadow: var(--rel-shadows-shadow-300);\n /* padding:0 + overflow:hidden \u2014 safe here (a submenu has no further nested\n flyout to clip) \u2014 so sub-item hovers fill fully and clip to the corners */\n padding: 0;\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n z-index: 20;\n }\n\n .rel-submenu.visible {\n visibility: visible;\n pointer-events: auto;\n }\n\n .rel-submenu .rel-menu-item {\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n }\n ";
478
590
  createRenderRoot(): this;
479
591
  connectedCallback(): void;
480
592
  disconnectedCallback(): void;
481
593
  updated(changedProperties: Map<string, unknown>): void;
594
+ /** Index of a submenu locked open by a click (survives hover-out). -1 = none. */
595
+ private lockedIndex;
482
596
  private handleDocumentClick;
483
597
  private onItemEnter;
484
598
  private onItemLeave;
485
599
  private onItemClick;
486
600
  private onSubClick;
487
- private toggleCheckbox;
488
601
  private onKeydown;
489
602
  private renderMenuItem;
490
603
  render(): lit_html.TemplateResult<1>;
491
604
  }
492
605
 
493
- interface RadioOption {
494
- value: string;
495
- label: string;
496
- supportingText?: string;
497
- disabled?: boolean;
498
- }
499
- declare class RelRadio extends LitElement {
500
- options: RadioOption[];
501
- name: string;
502
- selectedValue: string | null;
503
- disabled: boolean;
504
- error: boolean;
505
- errorMessage: string;
506
- value: string;
507
- checked: boolean;
508
- private _onChange;
509
- private _onTouched;
510
- static styles: lit.CSSResult;
511
- private onChange;
512
- registerOnChange(fn: (value: string) => void): void;
513
- registerOnTouched(fn: () => void): void;
514
- writeValue(value: string): void;
515
- private get hasSelection();
516
- private renderOption;
517
- render(): lit_html.TemplateResult<1>;
518
- }
519
-
520
606
  declare class RelMenubar extends LitElement {
521
607
  private menus;
522
608
  private openMenuIndex;
@@ -525,7 +611,7 @@ declare class RelMenubar extends LitElement {
525
611
  private openSubmenuElement;
526
612
  private hoverSwitchEnabled;
527
613
  private _onScroll?;
528
- 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 ";
614
+ static readonly _css = "\n /* This component renders into LIGHT DOM (createRenderRoot returns this), so\n :host / <slot> don't work here \u2014 the raw <rel-menubar-menu> definitions\n are data holders that must be hidden with a plain selector. Relying on the\n global rel-menubar-menu.css is not enough: it can't cross a consumer's\n shadow boundary AND it's a no-op in the tsup-built package (css:\"copy\"). */\n rel-menubar {\n color: var(--rel-text-default);\n display: block;\n }\n\n rel-menubar-menu {\n display: none;\n }\n\n .menubar-container {\n display: flex;\n align-items: stretch;\n background: var(--rel-bg-surface-elevated);\n border: var(--rel-stroke-sm) solid var(--rel-border-default);\n border-radius: var(--rel-border-radius-sm);\n overflow: hidden;\n padding: 0;\n gap: var(--rel-spacing-3xs);\n height: 40px;\n width: fit-content;\n font-family: var(--rel-body-sm-regular-font-family);\n font-weight: var(--rel-body-sm-regular-font-weight);\n font-size: var(--rel-body-sm-regular-font-size);\n line-height: var(--rel-body-sm-regular-line-height);\n letter-spacing: var(--rel-body-sm-regular-letter-spacing);\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-sm);\n background: transparent;\n border: none;\n cursor: pointer;\n font-family: inherit;\n font-size: inherit;\n color: var(--rel-text-label);\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-bg-neutral-elevated-2);\n }\n\n .menubar-trigger:focus-visible {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: 2px;\n }\n\n .menubar-panel {\n position: fixed;\n min-width: 220px;\n background: var(--rel-bg-surface);\n border: var(--rel-stroke-sm) solid var(--rel-border-default);\n border-radius: var(--rel-border-radius-sm);\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-sm);\n padding: var(--rel-spacing-xs) var(--rel-spacing-md);\n cursor: pointer;\n transition: background 0.15s ease;\n user-select: none;\n color: var(--rel-text-label);\n line-height: var(--rel-body-sm-regular-line-height);\n }\n\n .menu-item:hover,\n .menu-item.focused {\n background: var(--rel-bg-neutral-elevated-2);\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-stroke-sm);\n background: var(--rel-border-default);\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-bg-surface);\n border: var(--rel-stroke-sm) solid var(--rel-border-default);\n border-radius: var(--rel-border-radius-sm);\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 margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-3xs);\n font-family: var(--rel-body-xs-regular-font-family);\n font-weight: var(--rel-body-xs-regular-font-weight);\n font-size: var(--rel-body-xs-regular-font-size);\n line-height: var(--rel-body-xs-regular-line-height);\n letter-spacing: var(--rel-body-xs-regular-letter-spacing);\n }\n\n .menubar-panel rel-checkbox {\n display: block;\n width: 100%;\n padding: var(--rel-spacing-xs, 8px) var(--rel-spacing-md, 16px);\n box-sizing: border-box;\n cursor: pointer;\n }\n ";
529
615
  createRenderRoot(): this;
530
616
  connectedCallback(): void;
531
617
  disconnectedCallback(): void;
@@ -572,6 +658,10 @@ declare class RelNavbar extends LitElement {
572
658
  render(): lit_html.TemplateResult<1>;
573
659
  }
574
660
 
661
+ /**
662
+ * @deprecated Part of the deprecated rel-topbar family. Use a plain
663
+ * `<a>`/logo markup inside the "App Topbar" recipe at /docs/recipes/app-topbar.
664
+ */
575
665
  declare class RelTopbarBrand extends LitElement {
576
666
  src: string;
577
667
  href: string;
@@ -585,6 +675,10 @@ declare global {
585
675
  }
586
676
  }
587
677
 
678
+ /**
679
+ * @deprecated Part of the deprecated rel-topbar family. Use plain
680
+ * `rel-button` elements inside the "App Topbar" recipe at /docs/recipes/app-topbar.
681
+ */
588
682
  declare class RelTopbarActions extends LitElement {
589
683
  static styles: lit.CSSResult;
590
684
  render(): lit_html.TemplateResult<1>;
@@ -595,6 +689,10 @@ declare global {
595
689
  }
596
690
  }
597
691
 
692
+ /**
693
+ * @deprecated Part of the deprecated rel-topbar family. Use plain
694
+ * `rel-button` (icon variant) elements inside the "App Topbar" recipe at /docs/recipes/app-topbar.
695
+ */
598
696
  declare class RelTopbarUtilities extends LitElement {
599
697
  static styles: lit.CSSResult;
600
698
  render(): lit_html.TemplateResult<1>;
@@ -605,6 +703,10 @@ declare global {
605
703
  }
606
704
  }
607
705
 
706
+ /**
707
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-drawer`
708
+ * for the mobile nav panel in the "App Topbar" recipe at /docs/recipes/app-topbar.
709
+ */
608
710
  declare class RelTopbarMobilePanel extends LitElement {
609
711
  static styles: lit.CSSResult;
610
712
  render(): lit_html.TemplateResult<1>;
@@ -615,6 +717,10 @@ declare global {
615
717
  }
616
718
  }
617
719
 
720
+ /**
721
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-menu` or
722
+ * `rel-popover` for nav dropdowns in the "App Topbar" recipe at /docs/recipes/app-topbar.
723
+ */
618
724
  declare class RelTopbarDropdown extends LitElement {
619
725
  static styles: lit.CSSResult;
620
726
  render(): lit_html.TemplateResult<1>;
@@ -625,6 +731,10 @@ declare global {
625
731
  }
626
732
  }
627
733
 
734
+ /**
735
+ * @deprecated Part of the deprecated rel-topbar family. Use `rel-menu`'s
736
+ * item slots or `rel-popover` content in the "App Topbar" recipe at /docs/recipes/app-topbar.
737
+ */
628
738
  declare class RelTopbarDropdownItem extends LitElement {
629
739
  label: string;
630
740
  href: string;
@@ -644,6 +754,12 @@ type TopbarForceLayout = "auto" | "desktop" | "tablet" | "mobile";
644
754
  /**
645
755
  * `rel-topbar` — Application-level top navigation / header shell.
646
756
  *
757
+ * @deprecated This component's fixed slot structure, hardcoded breakpoint,
758
+ * and built-in overflow logic are too rigid for most real layouts. Use the
759
+ * "App Topbar" recipe at /docs/recipes/app-topbar instead, composed from
760
+ * rel-menu/rel-popover, rel-drawer, and rel-button. Still supported, but
761
+ * will be removed in a future major version.
762
+ *
647
763
  * Slots:
648
764
  * brand — Logo / wordmark region (left)
649
765
  * (default) — Primary nav items (rel-topbar-item elements)
@@ -693,6 +809,10 @@ declare class RelTopbar extends LitElement {
693
809
  /**
694
810
  * `rel-topbar-item` — A navigation item within rel-topbar.
695
811
  *
812
+ * @deprecated Part of the deprecated rel-topbar family. Use the "App
813
+ * Topbar" recipe at /docs/recipes/app-topbar, which composes nav links and
814
+ * `rel-menu`/`rel-popover` dropdowns directly instead of a dedicated item component.
815
+ *
696
816
  * Renders as an `<a>` when `href` is supplied, otherwise a `<button>`.
697
817
  *
698
818
  * Slots:
@@ -739,6 +859,9 @@ type TopbarRewardTier = "gold" | "silver" | "platinum" | "bronze" | "regular";
739
859
  /**
740
860
  * `rel-topbar-profile` — Profile / user tile for the topbar right region.
741
861
  *
862
+ * @deprecated Part of the deprecated rel-topbar family. Compose `rel-avatar`
863
+ * directly inside the "App Topbar" recipe at /docs/recipes/app-topbar.
864
+ *
742
865
  * type="avatar" Customer avatar with initials circle + optional name/subtitle.
743
866
  * type="carrier" Carrier reward tile with reward-tier badge + name/subtitle.
744
867
  */
@@ -898,6 +1021,8 @@ declare global {
898
1021
 
899
1022
  declare class RelPopoverContent extends LitElement {
900
1023
  ariaLabel: string;
1024
+ /** Figma Size axis (S/M/L): panel padding 12/16/20px. */
1025
+ size: "sm" | "md" | "lg";
901
1026
  static styles: lit.CSSResult;
902
1027
  render(): lit_html.TemplateResult<1>;
903
1028
  }
@@ -1109,6 +1234,11 @@ declare class RelModal extends LitElement {
1109
1234
  description: string;
1110
1235
  dismissible: boolean;
1111
1236
  modal: boolean;
1237
+ /**
1238
+ * Figma "Breakpoint" axis. responsive (default) collapses to a full-width
1239
+ * bottom sheet below 480px; web keeps the fixed desktop panel at every size.
1240
+ */
1241
+ breakpoint: "responsive" | "web";
1112
1242
  private overlayElement;
1113
1243
  private previousFocus;
1114
1244
  private originalBodyOverflow;
@@ -1132,10 +1262,16 @@ declare global {
1132
1262
  }
1133
1263
  }
1134
1264
 
1135
- type SliderType = "continuous" | "discrete";
1265
+ /**
1266
+ * "continuous"/"discrete" are the legacy tick-mode values; Figma's Type axis
1267
+ * adds "default" (alias of continuous) and "range" (dual-thumb interval).
1268
+ */
1269
+ type SliderType = "continuous" | "discrete" | "default" | "range";
1136
1270
  type TrackStyle = "solid" | "dotted";
1137
1271
  declare class RelSlider extends LitElement {
1138
1272
  type: SliderType;
1273
+ /** Figma Size axis (S/M/L): scales track, thumb and ticks. */
1274
+ size: "sm" | "md" | "lg";
1139
1275
  min: number;
1140
1276
  max: number;
1141
1277
  step: number;
@@ -1144,13 +1280,26 @@ declare class RelSlider extends LitElement {
1144
1280
  showTickLabels: boolean;
1145
1281
  showBubble: boolean;
1146
1282
  value: number;
1283
+ /** Upper value when type="range" (attribute value-end). */
1284
+ valueEnd: number;
1147
1285
  private ticks;
1148
1286
  private _onChange;
1149
1287
  private _onTouched;
1150
1288
  static styles: lit.CSSResult;
1151
1289
  connectedCallback(): void;
1152
1290
  updated(changedProperties: Map<string, any>): void;
1291
+ private get isRange();
1153
1292
  private get percentage();
1293
+ private get percentageEnd();
1294
+ private dragThumb;
1295
+ private valueFromPointer;
1296
+ private onRangePointerDown;
1297
+ private onRangePointerMove;
1298
+ private onRangePointerUp;
1299
+ private applyRangeValue;
1300
+ private emitRangeChange;
1301
+ private onRangeInputStart;
1302
+ private onRangeInputEnd;
1154
1303
  private setupTicks;
1155
1304
  private getTickLeftPct;
1156
1305
  private isTickActive;
@@ -1195,6 +1344,10 @@ type StepStatus = "done" | "progress" | "disabled";
1195
1344
  type TextAlign = "right" | "below";
1196
1345
  type Orientation = "horizontal" | "vertical";
1197
1346
  type StepperSize = "small" | "large";
1347
+ /** Figma "Type": indicator content — default (number, check when done), dot, number, icon. */
1348
+ type StepperType = "default" | "dot" | "number" | "icon";
1349
+ /** Figma "Typel": label placement relative to the indicator. */
1350
+ type LabelPlacement = "top" | "centered" | "inverted";
1198
1351
  interface Step {
1199
1352
  title: string;
1200
1353
  status: StepStatus;
@@ -1204,6 +1357,15 @@ declare class RelStepper extends LitElement {
1204
1357
  textAlign: TextAlign;
1205
1358
  orientation: Orientation;
1206
1359
  size: StepperSize;
1360
+ type: StepperType;
1361
+ /**
1362
+ * Figma Typel axis: top = label top-aligned beside the indicator,
1363
+ * centered = label vertically centered beside it, inverted = indicator above
1364
+ * the label. When unset, the legacy textAlign prop drives the layout
1365
+ * (below ≈ inverted, right ≈ centered). Note Figma marks Top+Horizontal
1366
+ * as an unsupported combination.
1367
+ */
1368
+ labelPlacement?: LabelPlacement;
1207
1369
  static styles: lit.CSSResult;
1208
1370
  private isDone;
1209
1371
  private isProgress;
@@ -1237,18 +1399,23 @@ declare class RelSwitch extends LitElement {
1237
1399
  interface TabItem {
1238
1400
  label: string;
1239
1401
  badge?: number;
1402
+ badgeDot?: boolean;
1240
1403
  disabled?: boolean;
1241
1404
  }
1242
1405
  declare class RelTabItem extends LitElement {
1243
1406
  label: string;
1244
1407
  value: string;
1245
1408
  badge: number;
1409
+ /** Shows a small dot instead of a numbered badge — takes precedence over `badge`. */
1410
+ badgeDot: boolean;
1246
1411
  disabled: boolean;
1247
1412
  render(): lit_html.TemplateResult<1>;
1248
1413
  }
1249
1414
  declare class RelTab extends LitElement {
1250
1415
  tabs: TabItem[];
1251
1416
  activeIndex: number;
1417
+ /** Tab size — styled via :host([size]) rules. */
1418
+ size: "sm" | "md" | "lg";
1252
1419
  private _tabItems;
1253
1420
  static styles: lit.CSSResult;
1254
1421
  private _onSlotChange;
@@ -1260,7 +1427,7 @@ declare class RelTab extends LitElement {
1260
1427
 
1261
1428
  type TextFieldState = "default" | "error" | "disabled";
1262
1429
  type TextFieldSize = "small" | "medium" | "large";
1263
- type TextFieldVariant = "default" | "underline";
1430
+ type TextFieldVariant = "default" | "underline" | "legend";
1264
1431
  declare class RelTextfield extends LitElement {
1265
1432
  label?: string;
1266
1433
  placeholder: string;
@@ -1273,9 +1440,26 @@ declare class RelTextfield extends LitElement {
1273
1440
  size: TextFieldSize;
1274
1441
  floatingLabel: boolean;
1275
1442
  variant: TextFieldVariant;
1443
+ disabled: boolean;
1444
+ required: boolean;
1445
+ multiline: boolean;
1446
+ rows: number;
1447
+ prefixIcon?: string;
1448
+ prefixIconAriaLabel?: string;
1449
+ error: boolean;
1450
+ errorMessage?: string;
1451
+ helperText?: string;
1452
+ readonly: boolean;
1453
+ maxLength?: number;
1454
+ name?: string;
1455
+ fullWidth: boolean;
1276
1456
  private internalState;
1277
1457
  private _wasError;
1278
1458
  private uniqueId;
1459
+ private get isDisabled();
1460
+ private get isError();
1461
+ private get leadingIcon();
1462
+ private get helper();
1279
1463
  static styles: lit.CSSResult;
1280
1464
  connectedCallback(): void;
1281
1465
  private handleFocus;
@@ -1302,11 +1486,14 @@ declare class RelToast extends LitElement {
1302
1486
  render(): lit_html.TemplateResult<1>;
1303
1487
  }
1304
1488
 
1305
- type TooltipPosition = "above" | "below";
1489
+ type TooltipPosition = "above" | "below" | "left" | "right";
1490
+ type TooltipType = "single-line" | "multi-line";
1306
1491
  declare class RelTooltip extends LitElement {
1307
1492
  text: string;
1308
1493
  position: TooltipPosition;
1309
1494
  showTail: boolean;
1495
+ /** Figma "Type": single-line stays on one line; multi-line wraps at a max width. */
1496
+ type: TooltipType;
1310
1497
  private uniqueId;
1311
1498
  static styles: lit.CSSResult;
1312
1499
  firstUpdated(): void;
@@ -1314,4 +1501,4 @@ declare class RelTooltip extends LitElement {
1314
1501
  render(): lit_html.TemplateResult<1>;
1315
1502
  }
1316
1503
 
1317
- 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 };
1504
+ export { type BreadcrumbItem, type ButtonTone, type ButtonVariant, type ChipBorder, type ChipSize, type ChipTone, type ChipVariant, type DrawerCloseReason, type DrawerSide, type LabelPlacement, 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, RelKbdGroup, 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 StepperType, type TabItem, type TextAlign, type TextFieldSize, type TextFieldState, type TextFieldVariant, type ToastType, type TooltipPosition, type TooltipType, type TopbarForceLayout, type TopbarProfileType, type TopbarRewardTier, type TopbarVariant, type TrackStyle };