@reliability-design/web 1.4.8 → 1.4.9

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.
package/dist/index.d.ts CHANGED
@@ -118,7 +118,7 @@ type FieldLabelStyle = "default" | "floating" | "none";
118
118
  * @slot prefix - Custom content at the far left of the control (e.g. a unit dropdown); shares the prefix block with `prefixIcon` / `prefixText`. Hidden when `multiline` is set.
119
119
  * @slot suffix - Custom content at the far right of the control (e.g. an action button); shares the suffix block with `rightIcon` / `suffixText`. Hidden when `multiline` is set.
120
120
  * @csspart label - The visible label element (default and floating label styles)
121
- * @csspart control - The bordered control box (the fieldset in the legend variant)
121
+ * @csspart control - The bordered control box. Changed in 1.4.9: in `variant="legend"` this is now the same `div` as every other variant, not the `fieldset` — the fieldset was demoted to a decorative outline layer behind the content so the control sits on the 32/40/48 size ladder and centres its value like the other variants. `::part(control)` still matches; only rules that depended on it being a fieldset do not.
122
122
  * @csspart input - The native input / textarea
123
123
  * @csspart prefix - The prefix block (leading icon, prefix text and the `prefix` slot)
124
124
  * @csspart suffix - The suffix block (suffix text, trailing icon and the `suffix` slot)
@@ -126,7 +126,7 @@ type FieldLabelStyle = "default" | "floating" | "none";
126
126
  * @csspart helper - The helper / error text line below the control
127
127
  * @csspart helper-icon - The leading `rel-icon` in the helper line; rendered only when `helper-icon` is set and there is helper text
128
128
  * @cssprop --rel-field-label-reserve - Height held for the label row whenever no label renders above the control — `labelStyle="none"`, and `labelStyle="floating"` where the label sits inside the control — so the control still lines up with labelled siblings in a form row. Defaults to that size's label line-height plus the wrapper gap (24px at `small`, 26px at `medium` and `large`). Set to `0` to collapse the row entirely (toolbars, table cells).
129
- * @cssprop --rel-textfield-surface - Colour the floating label's strip paints to mask the border behind it; defaults to the control's own fill (`--rel-bg-neutral`). Set it when the field sits on a tinted or elevated surface, otherwise the strip shows as a light dash across the border.
129
+ * @cssprop --rel-textfield-surface - Colour of the strip the floating label lays over the control's top border and focus ring so the label appears to sit in a notch. It overshoots the band by 2px on the page side, so it must match the surface the field sits on; defaults to the control's own fill (`--rel-bg-neutral`). Set it on a tinted or elevated surface, otherwise the strip shows as a light dash across the border.
130
130
  */
131
131
  declare class RelTextfield extends LitElement {
132
132
  /**
@@ -290,10 +290,11 @@ declare class RelCheckbox extends LitElement {
290
290
  value: string;
291
291
  /** Control scale (Figma Size), on Figma's four-step ramp of control frames:
292
292
  * `"small"` 16px / body-sm, `"medium"` (default) 18px / body-md,
293
- * `"large"` 20px / body-lg, `"extra-large"` 24px / body-xl. The drawn
294
- * square is inset to 80% of the frame, so the frame is the layout
295
- * footprint (what the row gap and the compact indent measure from) rather
296
- * than the visible square. */
293
+ * `"large"` 20px / body-lg, `"extra-large"` 24px / body-xl. Supporting
294
+ * text sits one body step below the label at every size (body-xs / sm /
295
+ * md / lg, i.e. 10 / 12 / 14 / 16px). The drawn square is inset to 80% of
296
+ * the frame, so the frame is the layout footprint (what the row gap and the
297
+ * compact indent measure from) rather than the visible square. */
297
298
  size: CheckboxSize;
298
299
  /** Supporting-text layout (Figma Density). `"compact"` (default) puts the
299
300
  * supporting text on its own line under the row, indented past the box;
@@ -304,6 +305,17 @@ declare class RelCheckbox extends LitElement {
304
305
  * Trailing has no compact layout in the spec, so it always renders with
305
306
  * comfortable density. */
306
307
  alignment: CheckboxAlignment;
308
+ /** Accessible name for the native checkbox, for when the visible `label` is
309
+ * absent or not a usable name on its own — a checkbox in a table row, or one
310
+ * whose meaning comes from its column header.
311
+ *
312
+ * Normally you do not need it: the input is wrapped in the `<label>` that
313
+ * renders `label`, so the visible text already names it natively. Setting
314
+ * this puts an `aria-label` on the input, which OVERRIDES that wrapping
315
+ * label — so set it only when the visible text is the wrong name, not to
316
+ * repeat it. Left unset the attribute is not emitted at all and the native
317
+ * labelling is untouched. */
318
+ fieldAriaLabel?: string;
307
319
  /** Boolean view of `status`: `true` when `status === "checked"`; setting it writes `"checked"` / `"unchecked"`. */
308
320
  get checked(): boolean;
309
321
  set checked(val: boolean);
@@ -486,6 +498,7 @@ type AutocompleteSearchFn = (query: string) => Promise<AutocompleteItem[]>;
486
498
  * @cssprop --rel-autocomplete-icon-color - Colour of a row's leading `icon`
487
499
  * @cssprop --rel-autocomplete-status-color - Colour of the loading / no-results status rows
488
500
  * @cssprop --rel-autocomplete-menu-max-height - Scroll ceiling of the suggestion panel; default `360px`. Code-owned rather than Figma-derived — every Figma Menu variant hugs its content with no ceiling, which is not shippable for an unbounded result list.
501
+ * @cssprop --rel-overlay-fallback-z - z-index of the panel on the NO-POPOVER-API fallback path only. Wherever the browser top layer is available the panel is promoted into it and this value is inert, because top-layer elements are not in the page stacking order at all. Shared with rel-select, rel-autocomplete and the other pickers so the whole overlay family can be moved from one place; default 1001.
489
502
  */
490
503
  declare class RelAutocomplete extends LitElement {
491
504
  /** Local (or fallback initial) suggestion list. Ignored while searchFn drives results. Object items are read through `displayField` / `valueField` plus the fixed keys `icon`, `disabled` and `supportingText` (the last renamable via `supporting-field`); `supportingText` renders as a second line in the row and is matched by the filter alongside the label. */
@@ -627,6 +640,11 @@ declare class RelAutocomplete extends LitElement {
627
640
  * and once that ramp was realigned to Figma the compensation became the bug.
628
641
  */
629
642
  private get optionCheckboxSize();
643
+ /** Native tooltip carrying the row's full text. Both lines truncate to one
644
+ * line with an ellipsis, so a long supporting line is otherwise unrecoverable
645
+ * by sight; hovering the row reveals it. Only rows that carry a second line
646
+ * get one, so plain lists do not sprout tooltips. */
647
+ private rowTitle;
630
648
  private get selectAllStatus();
631
649
  private toggleMultiOption;
632
650
  private toggleSelectAll;
@@ -869,6 +887,7 @@ declare class RelCard extends LitElement {
869
887
  * @cssprop --rel-carousel-dot-size - Diameter of an inactive dot (default 8px).
870
888
  * @cssprop --rel-carousel-dot-size-active - Width of the active (brand-coloured, pill-shaped) dot (default 16px).
871
889
  * @cssprop --rel-carousel-slide-width - Written by the component on its own host to the computed panel width (viewport width for `panels="1"`, a fraction of it above that); not meant to be set by consumers (an inline value is overwritten on resize).
890
+ * @cssprop --rel-carousel-slide-display - `display` given to each slide in `orientation="vertical"` only; defaults to `flex`, which is what centres the slide's content in the fixed-height viewport as Figma draws it. Set it to `block` to opt out if forcing flex reflows your slide's own children. Horizontal slides are never touched.
872
891
  * @cssprop --rel-carousel-slide-height - Written by the component on its own host to the computed panel height (used for vertical slides); not meant to be set by consumers.
873
892
  */
874
893
  declare class RelCarousel extends LitElement {
@@ -1010,6 +1029,7 @@ declare class RelCardMedia extends LitElement {
1010
1029
  * @csspart trigger - The field box that wraps the text input and the clear/calendar icons
1011
1030
  * @csspart value - The editable text input inside the trigger
1012
1031
  * @csspart shortcuts - The Today / Tomorrow / Yesterday chip row at the top of the popover
1032
+ * @cssprop --rel-overlay-fallback-z - z-index of the panel on the NO-POPOVER-API fallback path only. Wherever the browser top layer is available the panel is promoted into it and this value is inert, because top-layer elements are not in the page stacking order at all. Shared with rel-select, rel-autocomplete and the other pickers so the whole overlay family can be moved from one place; default 1001.
1013
1033
  */
1014
1034
  declare class RelDatePicker extends LitElement {
1015
1035
  /** Selected date as an ISO `YYYY-MM-DD` string, or `null` when empty; setting it also moves the popover to that month. */
@@ -1110,6 +1130,7 @@ declare class RelDatePicker extends LitElement {
1110
1130
  private showTopLayer;
1111
1131
  private hideTopLayer;
1112
1132
  private onReposition;
1133
+ private onPageScroll;
1113
1134
  private updatePopoverPosition;
1114
1135
  /** Focus the roving day cell (selected day, else today, else first). */
1115
1136
  private focusPanelSelection;
@@ -1193,6 +1214,28 @@ declare class RelDatePicker extends LitElement {
1193
1214
  * Index of the single grid cell carrying tabindex="0". The old expression
1194
1215
  * (`isSelected || (index === 0 && !value)`) left the grid with ZERO tab
1195
1216
  * stops once the user arrowed around without a selection.
1217
+ *
1218
+ * KNOWN GAP (deferred from 1.4.9, needs a ticket covering BOTH calendars):
1219
+ * `focusedDate` is read here as the first candidate but is never assigned
1220
+ * anywhere in this file, so it is permanently null and the tab stop tracks
1221
+ * the SELECTION rather than focus. Tab out of the grid and back and you
1222
+ * return to the selected day, not the day you left.
1223
+ *
1224
+ * Wiring it from each cell's `@focus` was tried and is NOT sufficient, which
1225
+ * is why this is still open. Measured 2026-09-25 by driving real keys: from
1226
+ * Sun 27 Sep, one ArrowDown lands focus on Sun 25 Oct instead of Sun 4 Oct,
1227
+ * because handleDayKeydown moves by grid INDEX and then lets the view flip
1228
+ * month, so index+7 addresses a different date in the new grid. lit reuses
1229
+ * the same button elements across that re-render, so the focused element
1230
+ * never changes and NO focus event fires — the handler cannot observe the
1231
+ * move it is supposed to record.
1232
+ *
1233
+ * The real fix is to navigate by DATE and set the rove explicitly before
1234
+ * focusing, the way rel-range-picker.moveGridFocusTo already does (verified
1235
+ * correct in the same run: Sep 27 → Oct 4 → Oct 11, tab stop and focus
1236
+ * agreeing at every step). That is a rewrite of this component's arrow-key
1237
+ * model, not a contained fix, and it must land on both calendars together or
1238
+ * they diverge again.
1196
1239
  */
1197
1240
  private getRovingIndex;
1198
1241
  /** Days view: weekday header + the six week rows. */
@@ -1222,6 +1265,7 @@ type RangePickerSizeInput = RangePickerSize | RangePickerSizeAlias;
1222
1265
  * @csspart option - Each quick-select preset button
1223
1266
  * @csspart action - The header's previous and next buttons; they step a month, a year or a 12-year page depending on which view the panel is showing
1224
1267
  * @csspart footer - The Reset / Cancel / Apply button row
1268
+ * @cssprop --rel-overlay-fallback-z - z-index of the panel on the NO-POPOVER-API fallback path only. Wherever the browser top layer is available the panel is promoted into it and this value is inert, because top-layer elements are not in the page stacking order at all. Shared with rel-select, rel-autocomplete and the other pickers so the whole overlay family can be moved from one place; default 1001.
1225
1269
  */
1226
1270
  declare class RelRangePicker extends LitElement {
1227
1271
  /** Committed range start as an ISO `YYYY-MM-DD` string; empty string when no range is set. */
@@ -1297,6 +1341,7 @@ declare class RelRangePicker extends LitElement {
1297
1341
  private showTopLayer;
1298
1342
  private hideTopLayer;
1299
1343
  private onReposition;
1344
+ private onPageScroll;
1300
1345
  private updatePopoverPosition;
1301
1346
  private handleClickOutside;
1302
1347
  private handleGlobalKeydown;
@@ -1399,6 +1444,21 @@ declare class RelRangePicker extends LitElement {
1399
1444
  * The cell that carries tabindex="0". Prefers the last roved date, then the
1400
1445
  * draft start, then today, then the first selectable day — always exactly
1401
1446
  * one Tab stop, even after arrowing away with nothing selected.
1447
+ *
1448
+ * `focusedDate` is written by moveGridFocusTo, which sets it from the DATE
1449
+ * before moving focus rather than reading it back off a focus event. That
1450
+ * ordering is what makes the arrow keys correct across a month boundary —
1451
+ * verified 2026-09-25 by driving real keys: Sep 27 → Oct 4 → Oct 11 with the
1452
+ * tab stop and focus agreeing at every step, including the view change.
1453
+ * rel-date-picker moves by grid INDEX instead and lands on the wrong date
1454
+ * there; see the note on its getRovingIndex. Do not "simplify" this to a
1455
+ * focus listener — lit reuses the same cell elements across the re-render, so
1456
+ * the focused element does not change and no focus event fires.
1457
+ *
1458
+ * Still open for BOTH calendars: focus arriving from a click or from Tab does
1459
+ * not update the rove, only the arrow keys do. Deferred from 1.4.9 as a
1460
+ * shared ticket, since fixing one calendar alone reintroduces the divergence
1461
+ * the shared period-page module exists to prevent.
1402
1462
  */
1403
1463
  private getRovingIso;
1404
1464
  private handleGridKeydown;
@@ -1633,6 +1693,9 @@ type Orientation = "horizontal" | "vertical";
1633
1693
  type StepperSize = "small" | "large";
1634
1694
  /** Figma "Type": indicator content — default (number, check when done), dot, number, icon. */
1635
1695
  type StepperType = "default" | "dot" | "number" | "icon";
1696
+ /** How the line BETWEEN steps is drawn (Figma ".Line Types"). Distinct from
1697
+ * `StepperType`, which is the indicator disc — both spell one value "dot". */
1698
+ type StepperConnector = "solid" | "dot";
1636
1699
  /** Figma "Typel": label placement relative to the indicator. */
1637
1700
  type LabelPlacement = "top" | "centered" | "inverted";
1638
1701
  interface Step {
@@ -1673,8 +1736,26 @@ declare class RelStepper extends LitElement {
1673
1736
  * with `--rel-stepper-connector-length` instead. Logs a one-time notice.
1674
1737
  */
1675
1738
  size: StepperSize;
1676
- /** Figma "Type" axis — what the indicator shows: `default` (step number, check mark once done), `dot` (8px dot, no glyph), `number` (always the number) or `icon` (always the check mark). */
1739
+ /**
1740
+ * Figma "Type" axis — what the INDICATOR shows: `default` (step number, check
1741
+ * mark once done), `dot` (8px dot, no glyph), `number` (always the number) or
1742
+ * `icon` (always the check mark).
1743
+ *
1744
+ * Note `type="dot"` and `connector="dot"` are different axes that both use the
1745
+ * word "dot": this one replaces the numbered disc, `connector` dashes the line
1746
+ * BETWEEN discs. They are independent and can be combined.
1747
+ */
1677
1748
  type: StepperType;
1749
+ /**
1750
+ * Figma ".Line Types" axis — how the connector line between steps is drawn:
1751
+ * `solid` (default, an unbroken 1px rule) or `dot` (a 1px rule dashed 2px on,
1752
+ * 2px off).
1753
+ *
1754
+ * Not to be confused with `type="dot"`, which is the INDICATOR disc. This axis
1755
+ * only ever affects the line between steps, and it applies to both
1756
+ * orientations.
1757
+ */
1758
+ connector: StepperConnector;
1678
1759
  /** Figma "Typel" axis — where the label sits: `top` (top-aligned beside the indicator), `centered` (vertically centred beside it) or `inverted` (indicator above the label). When unset, the deprecated `textAlign` prop drives the layout (`below` ≈ `inverted`, `right` ≈ `centered`). Figma marks Top + Horizontal as an unsupported combination. */
1679
1760
  labelPlacement?: LabelPlacement;
1680
1761
  static styles: lit.CSSResult;
@@ -1725,17 +1806,20 @@ declare class RelRadio extends LitElement {
1725
1806
  /** Layout axis of the option list. `"vertical"` (default) stacks options in
1726
1807
  * a column; `"horizontal"` lays them out in a wrapping row. */
1727
1808
  orientation: Orientation;
1728
- /** Control scale. `"medium"` (default, Figma M) = 20px control with body-lg
1729
- * labels; `"large"` (Figma L) = 24px control with body-xl labels;
1730
- * `"small"` = 16px control with body-md labels. `sm` / `md` / `lg` are
1809
+ /** Control scale, matching Figma's Size axis. `"small"` and `"medium"`
1810
+ * (default) both draw a 20px control — they differ by TYPE, body-md labels
1811
+ * against body-lg — and `"large"` steps the control to 24px with body-xl
1812
+ * labels. Supporting text sits one body step below the label at every
1813
+ * size (body-sm / md / lg, i.e. 12 / 14 / 16px). `sm` / `md` / `lg` are
1731
1814
  * alternative spellings and stay supported — normalised to the full words,
1732
1815
  * not deprecated.
1733
1816
  *
1734
- * DELIBERATE FIGMA DIVERGENCE on Small. Figma's `.Radio Control` has one
1735
- * size (20x20) and its row variants pin Small AND Medium to 20, so the two
1736
- * rendered identically and the Size axis did nothing between them. 16px is
1737
- * not invented: it is rel-checkbox's Small, and checkbox is radio's sibling
1738
- * selection control. See the size ramp in the styles below. */
1817
+ * Small and Medium sharing a control is Figma's design, not an oversight:
1818
+ * verified against the live Published DS file on 2026-09-25, `.Radio
1819
+ * Control` measures 20x20 in all 15 Small variants and all 15 Medium ones.
1820
+ * v1.4.8 briefly gave Small its own 16px control on the mistaken premise
1821
+ * that the ramp was 16/20/24; 1.4.9 reverts that. Do not reintroduce it
1822
+ * without re-reading the live file. */
1739
1823
  size: RadioSizeInput;
1740
1824
  /** Supporting-text layout (Figma Density). `"compact"` (default) puts the
1741
1825
  * supporting text on its own line under the row, indented past the control;
@@ -1773,6 +1857,11 @@ declare class RelRadio extends LitElement {
1773
1857
  private _onTouched;
1774
1858
  static styles: lit.CSSResult;
1775
1859
  protected willUpdate(changed: PropertyValues<this>): void;
1860
+ /** Whether the author wrote `density` themselves, as opposed to inheriting
1861
+ * the default. Read once at connect: Lit reflects during update, which is
1862
+ * after this runs, so the attribute is present here only if authored. */
1863
+ private densityExplicit;
1864
+ connectedCallback(): void;
1776
1865
  /** Trailing has no compact layout in the spec — trailing wins. */
1777
1866
  private get effectiveDensity();
1778
1867
  private onChange;
@@ -1875,7 +1964,7 @@ declare class RelMenu extends LitElement {
1875
1964
  private _items;
1876
1965
  /** Stable id prefix for aria-activedescendant targets. */
1877
1966
  private menuId;
1878
- 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 /* Audit 17: 8px (border-radius/sm), was 16px; Figma Menu (6326:2931) = shadow/md */\n border-radius: var(--rel-border-radius-sm);\n box-shadow: var(--rel-shadows-md);\n /* Figma's Menu container is 300px around 288px rows. */\n min-width: 300px;\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: 0;\n }\n\n /* Rows follow Figma \".Menu Item\" (6326:616) per size:\n Large 48px = pad 12/12 + body-lg (24 line-height)\n Medium 40px = pad 8/12 + body-md (22)\n Small 32px = pad 4/8 + body-sm (20)\n (audit 17a \u2014 before 1.4.7 every row was 36px: pad 8/12 + a 20px line-height) */\n .rel-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-md);\n padding: var(--rel-spacing-sm) var(--rel-spacing-sm);\n line-height: var(--rel-body-lg-regular-line-height);\n min-height: 48px;\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n user-select: none;\n box-sizing: border-box;\n /* Figma strokes every item with --rel-border-subtle. Drawn as an inset\n shadow on the BOTTOM edge only (the pattern rel-menubar already uses)\n so the rows read as a divided list rather than 45 boxed cells, and so\n it costs no layout height. */\n box-shadow: inset 0 calc(-1 * var(--rel-stroke-sm)) 0 var(--rel-border-subtle);\n }\n\n .rel-menu-item:last-child {\n box-shadow: none;\n }\n\n /* Light-DOM component: :host never matches here, so size rules key off the\n reflected attribute on the <rel-menu> element itself. */\n rel-menu[size=\"medium\"] .rel-menu,\n rel-menu[size=\"medium\"] .rel-submenu {\n font-family: var(--rel-body-md-regular-font-family);\n font-weight: var(--rel-body-md-regular-font-weight);\n font-size: var(--rel-body-md-regular-font-size);\n line-height: var(--rel-body-md-regular-line-height);\n letter-spacing: var(--rel-body-md-regular-letter-spacing);\n }\n\n /* Figma Medium / Small frames are fixed at 40 / 32 (content sums to 38 / 28) */\n rel-menu[size=\"medium\"] .rel-menu-item {\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n line-height: var(--rel-body-md-regular-line-height);\n min-height: 40px;\n }\n\n rel-menu[size=\"small\"] .rel-menu,\n rel-menu[size=\"small\"] .rel-submenu {\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 rel-menu[size=\"small\"] .rel-menu-item {\n padding: var(--rel-spacing-2xs) var(--rel-spacing-xs);\n line-height: var(--rel-body-sm-regular-line-height);\n min-height: 32px;\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-sm);\n border-top-right-radius: var(--rel-border-radius-sm);\n }\n\n .rel-menu > .rel-menu-item:last-child {\n border-bottom-left-radius: var(--rel-border-radius-sm);\n border-bottom-right-radius: var(--rel-border-radius-sm);\n }\n\n /* Figma states (6326:616): Hover = action overlay 0.05, Pressed = 0.10\n (nearest token: overlay-pressed), Active/selected list row = the hover\n overlay + medium label; Checkbox / Select Option rows keep no fill when\n selected. Disabled = 40% opacity. (audit 17) */\n .rel-menu-item:hover {\n background: var(--rel-action-overlay-hover);\n }\n\n .rel-menu-item:active {\n background: var(--rel-action-overlay-pressed);\n }\n\n .rel-menu-item.active {\n background: var(--rel-action-overlay-hover);\n }\n\n /* The active weight bump follows the row's own size, and applies to plain\n rows only \u2014 a checkbox row carries its state in the control, and Figma\n does not bold its label. */\n .rel-menu:not(.type-checkbox) .rel-menu-item.active {\n font-weight: var(--rel-body-lg-medium-font-weight);\n }\n\n rel-menu[size=\"medium\"] .rel-menu:not(.type-checkbox) .rel-menu-item.active {\n font-weight: var(--rel-body-md-medium-font-weight);\n }\n\n /* Small's active row is Figma's mixed tuple: an xs-medium WEIGHT with\n sm-medium METRICS on the sm-regular family. Large and Medium step only\n their weight and keep regular metrics, which is why they are one line\n each and this one is four. */\n rel-menu[size=\"small\"] .rel-menu:not(.type-checkbox) .rel-menu-item.active {\n font-weight: var(--rel-body-xs-medium-font-weight);\n font-size: var(--rel-body-sm-medium-font-size);\n line-height: var(--rel-body-sm-medium-line-height);\n letter-spacing: var(--rel-body-sm-medium-letter-spacing);\n }\n\n .rel-menu.type-checkbox .rel-menu-item.active,\n .rel-menu.type-select-option .rel-menu-item.active {\n background: transparent;\n }\n\n .rel-menu.type-checkbox .rel-menu-item.active:hover,\n .rel-menu.type-select-option .rel-menu-item.active:hover {\n background: var(--rel-action-overlay-hover);\n }\n\n .rel-menu-item.disabled {\n background-color: transparent;\n opacity: 0.4;\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 /* [data-focused] (presence, not =\"true\"): the ?data-focused boolean\n binding renders the attribute with an EMPTY value, so a =\"true\"\n selector never matches. */\n /* Inset ring: items run the full width of the panel and butt against its\n padding, so an outside ring would cross the panel edge. rel-menu has no\n State=Focused variant in Figma; kept deliberately. */\n .rel-menu-item[data-focused] {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: -2px;\n }\n\n /* Width modes (Figma Type=Fixed / Type=Fit). BOTH are 300px wide \u2014\n COMPONENT \"Type=Fixed\" is 300x500 sizing=FIXED/FIXED and\n COMPONENT \"Type=Fit\" is 300x48 sizing=FIXED/HUG \u2014 so the axis varies the\n HEIGHT, not the width: Fixed pins a scrolling panel, Fit hugs its rows.\n This had it inverted: fit varied the width (max-content) and neither mode\n constrained the height, so the two modes differed on the wrong dimension. */\n .rel-menu.fixed {\n width: var(--rel-menu-width, 300px);\n height: var(--rel-menu-height, 500px);\n overflow-y: auto;\n min-width: 0;\n box-sizing: border-box;\n }\n\n .rel-menu.fit {\n width: var(--rel-menu-width, 300px);\n min-width: 0;\n box-sizing: border-box;\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 /* No border: the flyout is the same surface as the parent menu, which has\n none \u2014 overlapping surfaces are separated by shadow. Min-width tracks the\n parent's 300px rather than a narrower 200px. */\n .rel-submenu {\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: 300px;\n background: var(--rel-bg-neutral);\n color: var(--rel-text-default);\n border-radius: var(--rel-border-radius-sm);\n box-shadow: var(--rel-shadows-md);\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-sm) var(--rel-spacing-sm);\n }\n\n rel-menu[size=\"medium\"] .rel-submenu .rel-menu-item {\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n }\n\n rel-menu[size=\"small\"] .rel-submenu .rel-menu-item {\n padding: var(--rel-spacing-2xs) var(--rel-spacing-xs);\n }\n ";
1967
+ 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 /* Audit 17: 8px (border-radius/sm), was 16px; Figma Menu (6326:2931) = shadow/md */\n border-radius: var(--rel-border-radius-sm);\n box-shadow: var(--rel-shadows-md);\n /* Figma's Menu container is 300px around 288px rows. */\n min-width: 300px;\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: 0;\n }\n\n /* Rows follow Figma \".Menu Item\" (6326:616) per size:\n Large 48px = pad 12/12 + body-lg (24 line-height)\n Medium 40px = pad 8/12 + body-md (22)\n Small 32px = pad 4/8 + body-sm (20)\n (audit 17a \u2014 before 1.4.7 every row was 36px: pad 8/12 + a 20px line-height) */\n .rel-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-md);\n padding: var(--rel-spacing-sm) var(--rel-spacing-sm);\n line-height: var(--rel-body-lg-regular-line-height);\n min-height: 48px;\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n user-select: none;\n box-sizing: border-box;\n /* Figma strokes every item with --rel-border-subtle. Drawn as an inset\n shadow on the BOTTOM edge only (the pattern rel-menubar already uses)\n so the rows read as a divided list rather than 45 boxed cells, and so\n it costs no layout height. */\n box-shadow: inset 0 calc(-1 * var(--rel-stroke-sm)) 0 var(--rel-border-subtle);\n }\n\n .rel-menu-item:last-child {\n box-shadow: none;\n }\n\n /* Light-DOM component: :host never matches here, so size rules key off the\n reflected attribute on the <rel-menu> element itself. */\n rel-menu[size=\"medium\"] .rel-menu,\n rel-menu[size=\"medium\"] .rel-submenu {\n font-family: var(--rel-body-md-regular-font-family);\n font-weight: var(--rel-body-md-regular-font-weight);\n font-size: var(--rel-body-md-regular-font-size);\n line-height: var(--rel-body-md-regular-line-height);\n letter-spacing: var(--rel-body-md-regular-letter-spacing);\n }\n\n /* Figma Medium / Small frames are fixed at 40 / 32 (content sums to 38 / 28) */\n rel-menu[size=\"medium\"] .rel-menu-item {\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n line-height: var(--rel-body-md-regular-line-height);\n min-height: 40px;\n }\n\n rel-menu[size=\"small\"] .rel-menu,\n rel-menu[size=\"small\"] .rel-submenu {\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 rel-menu[size=\"small\"] .rel-menu-item {\n padding: var(--rel-spacing-2xs) var(--rel-spacing-xs);\n line-height: var(--rel-body-sm-regular-line-height);\n min-height: 32px;\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-sm);\n border-top-right-radius: var(--rel-border-radius-sm);\n }\n\n .rel-menu > .rel-menu-item:last-child {\n border-bottom-left-radius: var(--rel-border-radius-sm);\n border-bottom-right-radius: var(--rel-border-radius-sm);\n }\n\n /* Figma states (6326:616): Hover = action overlay 0.05, Pressed = 0.10\n (nearest token: overlay-pressed), Active/selected list row = the hover\n overlay + medium label; Checkbox / Select Option rows keep no fill when\n selected. Disabled = 40% opacity. (audit 17) */\n .rel-menu-item:hover {\n background: var(--rel-action-overlay-hover);\n }\n\n .rel-menu-item:active {\n background: var(--rel-action-overlay-pressed);\n }\n\n .rel-menu-item.active {\n background: var(--rel-action-overlay-hover);\n }\n\n /* The active weight bump follows the row's own size, and applies to plain\n rows only \u2014 a checkbox row carries its state in the control, and Figma\n does not bold its label. */\n .rel-menu:not(.type-checkbox) .rel-menu-item.active {\n font-weight: var(--rel-body-lg-medium-font-weight);\n }\n\n rel-menu[size=\"medium\"] .rel-menu:not(.type-checkbox) .rel-menu-item.active {\n font-weight: var(--rel-body-md-medium-font-weight);\n }\n\n /* Small's active row is Figma's mixed tuple: an xs-medium WEIGHT with\n sm-medium METRICS on the sm-regular family. Large and Medium step only\n their weight and keep regular metrics, which is why they are one line\n each and this one is four. */\n rel-menu[size=\"small\"] .rel-menu:not(.type-checkbox) .rel-menu-item.active {\n font-weight: var(--rel-body-xs-medium-font-weight);\n font-size: var(--rel-body-sm-medium-font-size);\n line-height: var(--rel-body-sm-medium-line-height);\n letter-spacing: var(--rel-body-sm-medium-letter-spacing);\n }\n\n .rel-menu.type-checkbox .rel-menu-item.active,\n .rel-menu.type-select-option .rel-menu-item.active {\n background: transparent;\n }\n\n .rel-menu.type-checkbox .rel-menu-item.active:hover,\n .rel-menu.type-select-option .rel-menu-item.active:hover {\n background: var(--rel-action-overlay-hover);\n }\n\n .rel-menu-item.disabled {\n background-color: transparent;\n opacity: 0.4;\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 /* [data-focused] (presence, not =\"true\"): the ?data-focused boolean\n binding renders the attribute with an EMPTY value, so a =\"true\"\n selector never matches. */\n /* Inset ring: items run the full width of the panel and butt against its\n padding, so an outside ring would cross the panel edge. rel-menu has no\n State=Focused variant in Figma; kept deliberately. */\n .rel-menu-item[data-focused] {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: -2px;\n }\n\n /* Width modes (Figma Type=Fixed / Type=Fit). BOTH are 300px wide \u2014\n COMPONENT \"Type=Fixed\" is 300x500 sizing=FIXED/FIXED and\n COMPONENT \"Type=Fit\" is 300x48 sizing=FIXED/HUG \u2014 so the axis varies the\n HEIGHT, not the width: Fixed pins a scrolling panel, Fit hugs its rows.\n This had it inverted: fit varied the width (max-content) and neither mode\n constrained the height, so the two modes differed on the wrong dimension. */\n .rel-menu.fixed {\n width: var(--rel-menu-width, 300px);\n height: var(--rel-menu-height, 500px);\n overflow-y: auto;\n min-width: 0;\n box-sizing: border-box;\n }\n\n .rel-menu.fit {\n width: var(--rel-menu-width, 300px);\n min-width: 0;\n box-sizing: border-box;\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\n No opacity here: verified against the live Figma file, \"Chevron Right\"\n is opacity 1 on both the instance and its vector, on every State and\n Size, bound to the same colour variable as the row label beside it.\n The 0.6 that used to sit here dulled it to a mid grey.\n\n The colour is declared rather than inherited on purpose. rel-menu\n renders to the LIGHT DOM (createRenderRoot returns this), so these\n selectors are unscoped globals and an inherited colour would travel\n through the consumer's page cascade \u2014 an app setting a colour on any\n ancestor would have been repainting this chevron. */\n .submenu-chevron {\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n color: var(--rel-text-default);\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 /* No border: the flyout is the same surface as the parent menu, which has\n none \u2014 overlapping surfaces are separated by shadow. Min-width tracks the\n parent's 300px rather than a narrower 200px. */\n .rel-submenu {\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: 300px;\n background: var(--rel-bg-neutral);\n color: var(--rel-text-default);\n border-radius: var(--rel-border-radius-sm);\n box-shadow: var(--rel-shadows-md);\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-sm) var(--rel-spacing-sm);\n }\n\n rel-menu[size=\"medium\"] .rel-submenu .rel-menu-item {\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n }\n\n rel-menu[size=\"small\"] .rel-submenu .rel-menu-item {\n padding: var(--rel-spacing-2xs) var(--rel-spacing-xs);\n }\n ";
1879
1968
  createRenderRoot(): this;
1880
1969
  connectedCallback(): void;
1881
1970
  disconnectedCallback(): void;
@@ -2438,8 +2527,10 @@ type SelectOption = string | SelectOptionObject;
2438
2527
  * @csspart option-label - A single-select row's first line (the option label)
2439
2528
  * @csspart option-supporting-text - A single-select row's optional second line; rendered only when the option supplies `supportingText`
2440
2529
  * @cssprop --rel-field-label-reserve - Height held for the label row whenever no label renders above the trigger — `labelStyle="none"`, and `labelStyle="floating"` where the label sits inside the trigger — so the trigger still lines up with labelled siblings in a form row. Defaults to that size's label line-height plus the wrapper gap (24px at `small`, 26px at `medium` and `large`). Set to `0` to collapse the row entirely (toolbars, table cells).
2441
- * @cssprop --rel-select-bg - Background of the trigger, the floating label, the panel and its sticky header
2530
+ * @cssprop --rel-select-bg - Background of the trigger, the panel and its sticky header. No longer paints behind the floating label — see `--rel-select-surface`.
2442
2531
  * @cssprop --rel-select-bg-disabled - Trigger background when `state="disabled"`
2532
+ * @cssprop --rel-select-surface - Colour of the strip the floating label lays over the trigger's top border and focus ring, so the label appears to sit in a notch. It overshoots the band by 2px on the page side, so it must match the surface the field sits on. Defaults to `--rel-select-bg`. Set it when the field sits on a surface that is not the trigger's own fill, otherwise the strip shows as a short dash of the wrong colour. Mirrors `--rel-textfield-surface`.
2533
+ * @cssprop --rel-select-surface-disabled - The same strip while `state="disabled"`, where the trigger fill changes. Defaults to `--rel-select-bg-disabled`.
2443
2534
  * @cssprop --rel-select-border-default - Trigger border colour at rest
2444
2535
  * @cssprop --rel-select-border-disabled - Trigger border colour when `state="disabled"`
2445
2536
  * @cssprop --rel-select-border-focus - Trigger border colour on hover, while focused (where it also thickens to 2px) and while the panel is open
@@ -2458,6 +2549,7 @@ type SelectOption = string | SelectOptionObject;
2458
2549
  * @cssprop --rel-select-divider - Hairline under the search field, the Select-all row and every option row
2459
2550
  * @cssprop --rel-select-option-hover - Background of the hovered / keyboard-highlighted / selected option and Select-all row
2460
2551
  * @cssprop --rel-select-option-pressed - Background of an option row while it is being pressed
2552
+ * @cssprop --rel-overlay-fallback-z - z-index of the panel on the NO-POPOVER-API fallback path only. Wherever the browser top layer is available the panel is promoted into it and this value is inert, because top-layer elements are not in the page stacking order at all. Shared with rel-select, rel-autocomplete and the other pickers so the whole overlay family can be moved from one place; default 1001.
2461
2553
  */
2462
2554
  declare class RelSelect extends LitElement {
2463
2555
  /** Visible label. Rendered above the trigger (`labelStyle="default"`) or floating inside it; omitted under `labelStyle="none"`. */
@@ -2596,11 +2688,30 @@ declare class RelSelect extends LitElement {
2596
2688
  * through their own padding and min-height.
2597
2689
  */
2598
2690
  private get optionCheckboxSize();
2691
+ /** Native tooltip carrying the row's full text. Both lines truncate to one
2692
+ * line with an ellipsis, so a long supporting line is otherwise unrecoverable
2693
+ * by sight; hovering the row reveals it. Only rows that carry a second line
2694
+ * get one, so plain lists do not sprout tooltips. */
2695
+ private rowTitle;
2599
2696
  private get selectAllStatus();
2600
2697
  private addGlobalListeners;
2601
2698
  private removeGlobalListeners;
2602
2699
  private onOutsidePointerDown;
2603
2700
  private onPageScroll;
2701
+ /**
2702
+ * BOTH events fire, deliberately — do not delete either.
2703
+ *
2704
+ * This repo is split down the middle on the convention, not inconsistent in
2705
+ * one place: rel-select and rel-segmented-button emit `changed`, while
2706
+ * rel-switch, rel-checkbox and rel-radio emit `rel-change`. Renaming
2707
+ * `changed` would break every existing rel-select consumer, so 1.4.9 adds
2708
+ * the prefixed name alongside it rather than moving anyone. New code should
2709
+ * listen for `rel-change`; `changed` stays for as long as 1.x does.
2710
+ *
2711
+ * One `detail` object is shared by both dispatches so the two events cannot
2712
+ * drift apart — a listener on one sees exactly what a listener on the other
2713
+ * sees.
2714
+ */
2604
2715
  private emitChange;
2605
2716
  private openListbox;
2606
2717
  private closeListbox;
@@ -3133,6 +3244,7 @@ declare class RelTab extends LitElement {
3133
3244
  * @csspart option - Each hour / minute / second / AM-PM entry button
3134
3245
  * @csspart footer - The Now / Cancel / OK row
3135
3246
  * @csspart helper - The helper / error text live region under the field
3247
+ * @cssprop --rel-overlay-fallback-z - z-index of the panel on the NO-POPOVER-API fallback path only. Wherever the browser top layer is available the panel is promoted into it and this value is inert, because top-layer elements are not in the page stacking order at all. Shared with rel-select, rel-autocomplete and the other pickers so the whole overlay family can be moved from one place; default 1001.
3136
3248
  * @fires rel-focus - Fired when the text input receives focus. No detail.
3137
3249
  */
3138
3250
  declare class RelTimePicker extends LitElement {
@@ -3204,6 +3316,7 @@ declare class RelTimePicker extends LitElement {
3204
3316
  private showTopLayer;
3205
3317
  private hideTopLayer;
3206
3318
  private onReposition;
3319
+ private onPageScroll;
3207
3320
  private updatePopoverPosition;
3208
3321
  /** Focus the selected (or first enabled) option in the columns. */
3209
3322
  private focusPanelSelection;
@@ -3791,4 +3904,4 @@ type Politeness = "polite" | "assertive";
3791
3904
  */
3792
3905
  declare function announce(message: string, politeness?: Politeness): void;
3793
3906
 
3794
- export { type AlertTone, type AlertToneAlias, type AlertToneInput, type AutocompleteFilter, type AutocompleteItem, type AutocompleteSearchFn, type AvatarSize, type AvatarSizeAlias, type AvatarSizeInput, type BadgeSize, type BadgeSizeAlias, type BadgeSizeInput, type BindShortcutOptions, type BreadcrumbItem, type ButtonTone, type ButtonVariant, type ChipBorder, type ChipSize, type ChipSizeAlias, type ChipSizeInput, type ChipTone, type ChipToneAlias, type ChipToneInput, type ChipVariant, type ChipVariantAlias, type ChipVariantInput, type ContainerBackground, type ContainerPadding, type ContainerPaddingAlias, type ContainerPaddingInput, type ContainerSurface, type DrawerCloseReason, type DrawerSide, type FieldLabelStyle, FocusTrap, type KbdSize, type LabelPlacement, type MenuItem, type MenuSize, type MenuType, type MenuWidth, type MenubarType, type ModalSide, type ModalSize, type ModalSizeAlias, type ModalSizeInput, type ModalVariant, type Orientation, type OtpInputMode, type OtpSize, type OtpType, type PopoverContentSize, type PopoverContentSizeAlias, type PopoverContentSizeInput, type ProgressMode, type RadioOption, type RadioSize, type RadioSizeAlias, type RadioSizeInput, type RangePickerSize, type RangePickerSizeAlias, type RangePickerSizeInput, RelAccordion, RelAlert, RelAutocomplete, RelAvatar, RelBadge, RelBreadcrumbs, RelButton, RelCalendar, RelCard, RelCardMedia, RelCarousel, RelCheckbox, RelChip, RelContainer, RelDatePicker, RelDivider, RelDrawer, RelDrawerFooter, RelKbd, RelKbdGroup, RelLayout, RelMenu, RelMenuItem, RelMenubar, RelMenubarMenu, RelModal, RelOtp, RelPagination, RelPopover, RelPopoverContent, RelProgress, RelRadio, RelRangePicker, RelResizableGroup, RelResizableHandle, RelResizablePanel, RelSegmentedButton, RelSelect, RelSkeleton, RelSlider, RelSnackbar, RelStepper, RelSwitch, RelTab, RelTabItem, RelTextfield, RelTimePicker, RelToast, RelTooltip, RelUpload, RelUploadActions, type SegmentAlign, type SegmentOption, type SegmentSize, type SelectBorder, type SelectLabelStyle, type SelectOption, type SelectOptionObject, type SelectSize, type SelectState, type ShortcutHandler, type SkeletonAnimation, type SkeletonShape, type SliderSize, type SliderSizeAlias, type SliderSizeInput, type SliderType, type SnackbarLines, type SnackbarTone, type SnackbarToneAlias, type SnackbarToneInput, type SnackbarType, type SnackbarVariant, type Step, type StepStatus, type StepperSize, type StepperType, type SwitchLabelPlacement, type SwitchSize, type SwitchSizeAlias, type SwitchSizeInput, type TabItem, type TabSize, type TextAlign, type TextFieldPrefixStyle, type TextFieldSize, type TextFieldState, type TextFieldVariant, type ToastPosition, type ToastSize, type ToastSizeAlias, type ToastSizeInput, type ToastTone, type ToastToneAlias, type ToastToneInput, type ToastType, type TooltipPosition, type TooltipTone, type TooltipType, type TrackStyle, type UploadFile, type UploadPhase, type UploadRejection, type UploadState, type UploadStatus, type Uploader, type UploaderContext, announce, bindShortcut, formatShortcutParts, getDeepActiveElement, getFocusableElements, isApplePlatform, isEditableTarget, matchesShortcut, parseShortcut, trapTabKey };
3907
+ export { type AlertTone, type AlertToneAlias, type AlertToneInput, type AutocompleteFilter, type AutocompleteItem, type AutocompleteSearchFn, type AvatarSize, type AvatarSizeAlias, type AvatarSizeInput, type BadgeSize, type BadgeSizeAlias, type BadgeSizeInput, type BindShortcutOptions, type BreadcrumbItem, type ButtonTone, type ButtonVariant, type ChipBorder, type ChipSize, type ChipSizeAlias, type ChipSizeInput, type ChipTone, type ChipToneAlias, type ChipToneInput, type ChipVariant, type ChipVariantAlias, type ChipVariantInput, type ContainerBackground, type ContainerPadding, type ContainerPaddingAlias, type ContainerPaddingInput, type ContainerSurface, type DrawerCloseReason, type DrawerSide, type FieldLabelStyle, FocusTrap, type KbdSize, type LabelPlacement, type MenuItem, type MenuSize, type MenuType, type MenuWidth, type MenubarType, type ModalSide, type ModalSize, type ModalSizeAlias, type ModalSizeInput, type ModalVariant, type Orientation, type OtpInputMode, type OtpSize, type OtpType, type PopoverContentSize, type PopoverContentSizeAlias, type PopoverContentSizeInput, type ProgressMode, type RadioOption, type RadioSize, type RadioSizeAlias, type RadioSizeInput, type RangePickerSize, type RangePickerSizeAlias, type RangePickerSizeInput, RelAccordion, RelAlert, RelAutocomplete, RelAvatar, RelBadge, RelBreadcrumbs, RelButton, RelCalendar, RelCard, RelCardMedia, RelCarousel, RelCheckbox, RelChip, RelContainer, RelDatePicker, RelDivider, RelDrawer, RelDrawerFooter, RelKbd, RelKbdGroup, RelLayout, RelMenu, RelMenuItem, RelMenubar, RelMenubarMenu, RelModal, RelOtp, RelPagination, RelPopover, RelPopoverContent, RelProgress, RelRadio, RelRangePicker, RelResizableGroup, RelResizableHandle, RelResizablePanel, RelSegmentedButton, RelSelect, RelSkeleton, RelSlider, RelSnackbar, RelStepper, RelSwitch, RelTab, RelTabItem, RelTextfield, RelTimePicker, RelToast, RelTooltip, RelUpload, RelUploadActions, type SegmentAlign, type SegmentOption, type SegmentSize, type SelectBorder, type SelectLabelStyle, type SelectOption, type SelectOptionObject, type SelectSize, type SelectState, type ShortcutHandler, type SkeletonAnimation, type SkeletonShape, type SliderSize, type SliderSizeAlias, type SliderSizeInput, type SliderType, type SnackbarLines, type SnackbarTone, type SnackbarToneAlias, type SnackbarToneInput, type SnackbarType, type SnackbarVariant, type Step, type StepStatus, type StepperConnector, type StepperSize, type StepperType, type SwitchLabelPlacement, type SwitchSize, type SwitchSizeAlias, type SwitchSizeInput, type TabItem, type TabSize, type TextAlign, type TextFieldPrefixStyle, type TextFieldSize, type TextFieldState, type TextFieldVariant, type ToastPosition, type ToastSize, type ToastSizeAlias, type ToastSizeInput, type ToastTone, type ToastToneAlias, type ToastToneInput, type ToastType, type TooltipPosition, type TooltipTone, type TooltipType, type TrackStyle, type UploadFile, type UploadPhase, type UploadRejection, type UploadState, type UploadStatus, type Uploader, type UploaderContext, announce, bindShortcut, formatShortcutParts, getDeepActiveElement, getFocusableElements, isApplePlatform, isEditableTarget, matchesShortcut, parseShortcut, trapTabKey };