@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/CHANGELOG.md +61 -0
- package/dist/components/rel-alert/README.md +1 -1
- package/dist/components/rel-autocomplete/README.md +2 -1
- package/dist/components/rel-carousel/README.md +1 -0
- package/dist/components/rel-checkbox/README.md +2 -1
- package/dist/components/rel-date-picker/README.md +7 -1
- package/dist/components/rel-radio/README.md +1 -1
- package/dist/components/rel-range-picker/README.md +7 -1
- package/dist/components/rel-segmented-button/README.md +5 -4
- package/dist/components/rel-select/README.md +6 -3
- package/dist/components/rel-stepper/README.md +12 -3
- package/dist/components/rel-tab/README.md +1 -0
- package/dist/components/rel-textfield/README.md +2 -2
- package/dist/components/rel-time-picker/README.md +6 -0
- package/dist/index.d.mts +131 -18
- package/dist/index.d.ts +131 -18
- package/dist/index.js +1086 -239
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1071 -224
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
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.
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
*
|
|
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
|
-
/**
|
|
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. `"
|
|
1729
|
-
*
|
|
1730
|
-
* `"
|
|
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
|
-
*
|
|
1735
|
-
*
|
|
1736
|
-
*
|
|
1737
|
-
*
|
|
1738
|
-
*
|
|
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
|
|
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 };
|