@reliability-design/web 1.3.1 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/components/rel-accordion/README.md +13 -13
- package/dist/components/rel-accordion/rel-accordion.ts +80 -45
- package/dist/components/rel-alert/README.md +15 -15
- package/dist/components/rel-alert/rel-alert.ts +149 -158
- package/dist/components/rel-avatar/README.md +15 -15
- package/dist/components/rel-avatar/rel-avatar.ts +42 -38
- package/dist/components/rel-badge/README.md +5 -5
- package/dist/components/rel-badge/rel-badge.ts +46 -11
- package/dist/components/rel-breadcrumb/README.md +7 -7
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +16 -13
- package/dist/components/rel-button/README.md +20 -20
- package/dist/components/rel-button/rel-button.ts +292 -105
- package/dist/components/rel-calendar/README.md +5 -5
- package/dist/components/rel-calendar/rel-calendar.ts +68 -45
- package/dist/components/rel-card/README.md +6 -6
- package/dist/components/rel-card/rel-card.ts +88 -35
- package/dist/components/rel-cardmedia/README.md +9 -9
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +27 -20
- package/dist/components/rel-carousel/README.md +3 -3
- package/dist/components/rel-carousel/rel-carousel.ts +174 -90
- package/dist/components/rel-chart/README.md +8 -8
- package/dist/components/rel-chart/rel-chart.ts +59 -41
- package/dist/components/rel-checkbox/README.md +7 -7
- package/dist/components/rel-checkbox/rel-checkbox.ts +61 -61
- package/dist/components/rel-chip/README.md +16 -16
- package/dist/components/rel-chip/rel-chip.ts +143 -111
- package/dist/components/rel-container/README.md +11 -11
- package/dist/components/rel-container/rel-container.ts +35 -9
- package/dist/components/rel-date-picker/README.md +43 -7
- package/dist/components/rel-date-picker/date-format.test.ts +43 -0
- package/dist/components/rel-date-picker/date-format.ts +47 -0
- package/dist/components/rel-date-picker/rel-date-picker.ts +154 -82
- package/dist/components/rel-divider/README.md +9 -9
- package/dist/components/rel-divider/rel-divider.ts +10 -9
- package/dist/components/rel-drawer/README.md +1 -1
- package/dist/components/rel-drawer/rel-drawer-footer.ts +1 -1
- package/dist/components/rel-drawer/rel-drawer.ts +88 -25
- package/dist/components/rel-kbd/README.md +20 -20
- package/dist/components/rel-kbd/rel-kbd.ts +119 -25
- package/dist/components/rel-layout/README.md +1 -1
- package/dist/components/rel-layout/rel-layout.ts +2 -2
- package/dist/components/rel-menu/README.md +15 -15
- package/dist/components/rel-menu/rel-menu.ts +155 -88
- package/dist/components/rel-menubar/README.md +20 -20
- package/dist/components/rel-menubar/rel-menubar.ts +47 -31
- package/dist/components/rel-nav-menu/README.md +21 -21
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +17 -14
- package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +33 -14
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +14 -7
- package/dist/components/rel-navbar/README.md +7 -7
- package/dist/components/rel-navbar/rel-navbar.ts +12 -11
- package/dist/components/rel-otp/README.md +3 -3
- package/dist/components/rel-otp/rel-otp.ts +46 -30
- package/dist/components/rel-pagination/README.md +18 -18
- package/dist/components/rel-pagination/rel-pagination.ts +141 -90
- package/dist/components/rel-popover/README.md +13 -13
- package/dist/components/rel-popover/rel-popover-content.ts +39 -14
- package/dist/components/rel-popover/rel-popover.ts +18 -7
- package/dist/components/rel-progress/README.md +5 -5
- package/dist/components/rel-progress/rel-progress.ts +16 -12
- package/dist/components/rel-radio/README.md +9 -9
- package/dist/components/rel-radio/rel-radio.ts +64 -50
- package/dist/components/rel-range-picker/rel-range-picker.ts +120 -117
- package/dist/components/rel-resizable/README.md +4 -4
- package/dist/components/rel-resizable/rel-resizable-group.ts +15 -4
- package/dist/components/rel-resizable/rel-resizable-handle.ts +13 -9
- package/dist/components/rel-resizable/rel-resizable-panel.ts +11 -0
- package/dist/components/rel-segmented-button/README.md +10 -10
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +39 -40
- package/dist/components/rel-select/README.md +14 -14
- package/dist/components/rel-select/rel-select.ts +120 -188
- package/dist/components/rel-sheet/README.md +10 -10
- package/dist/components/rel-sheet/rel-sheet.ts +82 -23
- package/dist/components/rel-sidebar/README.md +5 -5
- package/dist/components/rel-sidebar/rel-sidebar.ts +75 -60
- package/dist/components/rel-skeleton/rel-skeleton.ts +8 -13
- package/dist/components/rel-slider/README.md +10 -10
- package/dist/components/rel-slider/rel-slider.ts +230 -57
- package/dist/components/rel-snackbar/README.md +9 -9
- package/dist/components/rel-snackbar/rel-snackbar.ts +44 -32
- package/dist/components/rel-stepper/README.md +10 -10
- package/dist/components/rel-stepper/rel-stepper.ts +110 -46
- package/dist/components/rel-switch/README.md +5 -5
- package/dist/components/rel-switch/rel-switch.ts +23 -12
- package/dist/components/rel-tab/README.md +13 -13
- package/dist/components/rel-tab/rel-tab.ts +63 -19
- package/dist/components/rel-table/README.md +7 -7
- package/dist/components/rel-table/rel-table-body.ts +2 -1
- package/dist/components/rel-table/rel-table-caption.ts +10 -7
- package/dist/components/rel-table/rel-table-cell.ts +7 -6
- package/dist/components/rel-table/rel-table-footer.ts +4 -3
- package/dist/components/rel-table/rel-table-head.ts +11 -9
- package/dist/components/rel-table/rel-table-header.ts +2 -1
- package/dist/components/rel-table/rel-table-row.ts +5 -4
- package/dist/components/rel-table/rel-table.ts +16 -7
- package/dist/components/rel-textfield/README.md +11 -11
- package/dist/components/rel-textfield/rel-textfield.ts +218 -92
- package/dist/components/rel-toast/README.md +11 -11
- package/dist/components/rel-toast/rel-toast.ts +33 -30
- package/dist/components/rel-tooltip/README.md +7 -7
- package/dist/components/rel-tooltip/rel-tooltip.ts +160 -123
- package/dist/components/rel-topbar/rel-topbar-actions.ts +1 -2
- package/dist/components/rel-topbar/rel-topbar-brand.ts +8 -5
- package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +10 -8
- package/dist/components/rel-topbar/rel-topbar-dropdown.ts +4 -5
- package/dist/components/rel-topbar/rel-topbar-item.ts +23 -22
- package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +0 -1
- package/dist/components/rel-topbar/rel-topbar-profile.ts +68 -50
- package/dist/components/rel-topbar/rel-topbar-utilities.ts +1 -2
- package/dist/components/rel-topbar/rel-topbar.ts +31 -29
- package/dist/index.d.mts +159 -39
- package/dist/index.d.ts +159 -39
- package/dist/index.js +3600 -2269
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3930 -2600
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +866 -363
- package/dist/vars-BYCEEKWJ.css +866 -0
- package/package.json +5 -3
- package/dist/components/rel-range-picker/rel-range-picker.css +0 -349
- package/dist/styles/vars-v2.css +0 -525
- package/dist/vars-F54UGCHM.css +0 -363
- package/dist/vars-v2-VMGWTFJZ.css +0 -525
package/dist/index.d.mts
CHANGED
|
@@ -8,6 +8,8 @@ declare class RelAccordion extends LitElement {
|
|
|
8
8
|
open: boolean;
|
|
9
9
|
size: "md" | "sm";
|
|
10
10
|
type: "default" | "action";
|
|
11
|
+
/** Figma "Style" axis — named appearance because `style` collides with the HTML style attribute. */
|
|
12
|
+
appearance: "shadow" | "plain";
|
|
11
13
|
static styles: lit.CSSResult;
|
|
12
14
|
private toggle;
|
|
13
15
|
render(): lit_html.TemplateResult<1>;
|
|
@@ -15,6 +17,8 @@ declare class RelAccordion extends LitElement {
|
|
|
15
17
|
|
|
16
18
|
declare class RelAlert extends LitElement {
|
|
17
19
|
type: "info" | "success" | "warning" | "error" | "neutral";
|
|
20
|
+
/** Visual treatment (Figma "Style"): solid | subtle | outline. "filled" is a deprecated alias of solid. */
|
|
21
|
+
appearance: "solid" | "subtle" | "outline" | "filled";
|
|
18
22
|
message1: string;
|
|
19
23
|
message2?: string;
|
|
20
24
|
urlText?: string;
|
|
@@ -23,7 +27,7 @@ declare class RelAlert extends LitElement {
|
|
|
23
27
|
dismissed: boolean;
|
|
24
28
|
static styles: lit.CSSResult;
|
|
25
29
|
private dismissAlert;
|
|
26
|
-
private get
|
|
30
|
+
private get iconTemplate();
|
|
27
31
|
render(): lit_html.TemplateResult<1>;
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -44,7 +48,7 @@ declare class RelBadge extends LitElement {
|
|
|
44
48
|
number: string;
|
|
45
49
|
ariaLabel: string;
|
|
46
50
|
suffix: string;
|
|
47
|
-
size: "sm" | "md" | "lg";
|
|
51
|
+
size: "sm" | "md" | "lg" | "xl";
|
|
48
52
|
variant: "dot" | "number";
|
|
49
53
|
/**
|
|
50
54
|
* Direct CSS color override for the badge background. Accepts any valid
|
|
@@ -76,9 +80,27 @@ declare class RelBreadcrumbs extends LitElement {
|
|
|
76
80
|
render(): lit_html.TemplateResult<1>;
|
|
77
81
|
}
|
|
78
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Style axis. Canonical values are the historical ones; "outline"/"ghost" are
|
|
85
|
+
* accepted Figma-vocabulary aliases for "secondary"/"text". "static" is the
|
|
86
|
+
* Figma Style=Static treatment (transparent, static-light label — for use on
|
|
87
|
+
* colored/dark surfaces). Legacy "icon" is the pre-2.0 collapsed icon-button
|
|
88
|
+
* variant and keeps its exact behavior; prefer icon-only + a style instead.
|
|
89
|
+
*/
|
|
90
|
+
type ButtonVariant = "default" | "primary" | "secondary" | "text" | "link" | "icon" | "static" | "outline" | "ghost";
|
|
91
|
+
/** Tone axis. "neutral"/"brand"/"danger" are Figma-vocabulary aliases. */
|
|
92
|
+
type ButtonTone = "default" | "primary" | "secondary" | "critical" | "success" | "neutral" | "brand" | "danger";
|
|
79
93
|
declare class RelButton extends LitElement {
|
|
80
|
-
variant:
|
|
81
|
-
tone:
|
|
94
|
+
variant: ButtonVariant;
|
|
95
|
+
tone: ButtonTone;
|
|
96
|
+
/**
|
|
97
|
+
* Figma "Type=Icon Only" as an independent axis: a square button of the
|
|
98
|
+
* current style/tone. Unlike legacy variant="icon", this composes with
|
|
99
|
+
* every style (outline/ghost/link included).
|
|
100
|
+
*/
|
|
101
|
+
iconOnly: boolean;
|
|
102
|
+
/** Figma "State=Loading": shows a spinner, blocks interaction. */
|
|
103
|
+
loading: boolean;
|
|
82
104
|
size: "small" | "medium" | "large";
|
|
83
105
|
border: "corner-radius" | "small-corner-radius" | "no-corner-radius";
|
|
84
106
|
disabled: boolean;
|
|
@@ -91,6 +113,10 @@ declare class RelButton extends LitElement {
|
|
|
91
113
|
connectedCallback(): void;
|
|
92
114
|
disconnectedCallback(): void;
|
|
93
115
|
private handleHostClick;
|
|
116
|
+
/** Style axis with Figma-vocabulary aliases folded onto canonical values. */
|
|
117
|
+
private get styleVariant();
|
|
118
|
+
/** Tone axis with Figma-vocabulary aliases folded onto canonical values. */
|
|
119
|
+
private get effectiveTone();
|
|
94
120
|
private get classes();
|
|
95
121
|
private handleClick;
|
|
96
122
|
render(): lit_html.TemplateResult<1>;
|
|
@@ -125,6 +151,12 @@ declare class RelCalendar extends LitElement {
|
|
|
125
151
|
}
|
|
126
152
|
|
|
127
153
|
declare class RelCard extends LitElement {
|
|
154
|
+
/**
|
|
155
|
+
* Figma "Type" axis: custom (default) renders slotted content with card
|
|
156
|
+
* padding; media adds a flush media region (slot name="media") above the
|
|
157
|
+
* content — pair it with <rel-card-media>.
|
|
158
|
+
*/
|
|
159
|
+
type: "custom" | "media";
|
|
128
160
|
static styles: lit.CSSResult;
|
|
129
161
|
render(): lit_html.TemplateResult<1>;
|
|
130
162
|
}
|
|
@@ -137,6 +169,13 @@ declare class RelCarousel extends LitElement {
|
|
|
137
169
|
pauseOnHover: boolean;
|
|
138
170
|
showButtons: boolean;
|
|
139
171
|
showDots: boolean;
|
|
172
|
+
/**
|
|
173
|
+
* Figma "Type" axis. When set it drives which controls render:
|
|
174
|
+
* default = content only · only-indicators = dots · side-arrows = overlaid
|
|
175
|
+
* arrows + dots · bottom-arrows = dots flanked by arrows below the slide.
|
|
176
|
+
* When unset, the legacy show-buttons/show-dots booleans apply unchanged.
|
|
177
|
+
*/
|
|
178
|
+
type?: "default" | "only-indicators" | "side-arrows" | "bottom-arrows";
|
|
140
179
|
orientation: "horizontal" | "vertical";
|
|
141
180
|
label: string;
|
|
142
181
|
gap?: number;
|
|
@@ -160,6 +199,9 @@ declare class RelCarousel extends LitElement {
|
|
|
160
199
|
firstUpdated(): void;
|
|
161
200
|
disconnectedCallback(): void;
|
|
162
201
|
private handleSlotChange;
|
|
202
|
+
private get vertical();
|
|
203
|
+
/** Translate along the orientation axis. */
|
|
204
|
+
private axisTransform;
|
|
163
205
|
private unit;
|
|
164
206
|
private updateTransform;
|
|
165
207
|
private goToPrevious;
|
|
@@ -176,6 +218,10 @@ declare class RelCarousel extends LitElement {
|
|
|
176
218
|
private handleMouseEnter;
|
|
177
219
|
private handleMouseLeave;
|
|
178
220
|
updated(changedProperties: Map<string, any>): void;
|
|
221
|
+
/** Where nav arrows render, honouring the Figma type when set. */
|
|
222
|
+
private get buttonPlacement();
|
|
223
|
+
private get dotsVisible();
|
|
224
|
+
private renderNavButton;
|
|
179
225
|
render(): lit_html.TemplateResult<1>;
|
|
180
226
|
}
|
|
181
227
|
|
|
@@ -223,6 +269,13 @@ declare class RelDatePicker extends LitElement {
|
|
|
223
269
|
max: string | null;
|
|
224
270
|
weekStart: "sun" | "mon";
|
|
225
271
|
locale: string;
|
|
272
|
+
displayFormat: string | null;
|
|
273
|
+
/**
|
|
274
|
+
* Full control over the selected-value display; wins over `displayFormat`.
|
|
275
|
+
* Reactive (attribute:false) so assigning it after render re-renders the
|
|
276
|
+
* trigger — frameworks set callbacks as properties post-creation.
|
|
277
|
+
*/
|
|
278
|
+
formatDate?: (date: Date) => string;
|
|
226
279
|
open: boolean;
|
|
227
280
|
closeOnSelect: boolean;
|
|
228
281
|
clearable: boolean;
|
|
@@ -375,7 +428,7 @@ declare global {
|
|
|
375
428
|
}
|
|
376
429
|
|
|
377
430
|
declare class RelContainer extends LitElement {
|
|
378
|
-
padding: "sm" | "md" | "lg";
|
|
431
|
+
padding: "sm" | "md" | "lg" | "xl";
|
|
379
432
|
shadow: boolean;
|
|
380
433
|
background: "light" | "white" | "none";
|
|
381
434
|
static styles: lit.CSSResult;
|
|
@@ -419,6 +472,7 @@ declare class RelDrawer extends LitElement {
|
|
|
419
472
|
description: string;
|
|
420
473
|
private isDragging;
|
|
421
474
|
private dragOffset;
|
|
475
|
+
private settled;
|
|
422
476
|
private panelElement;
|
|
423
477
|
private overlayElement;
|
|
424
478
|
private previousFocus;
|
|
@@ -460,6 +514,20 @@ declare class RelKbd extends LitElement {
|
|
|
460
514
|
static styles: lit.CSSResult;
|
|
461
515
|
render(): lit_html.TemplateResult<1>;
|
|
462
516
|
}
|
|
517
|
+
/**
|
|
518
|
+
* Multi-key shortcut (Figma Kbd Items=1/2/3/4): renders one <rel-kbd> per
|
|
519
|
+
* entry in `items` with "+" separators between them. Slotted <rel-kbd>
|
|
520
|
+
* children may be used instead of the items array.
|
|
521
|
+
*
|
|
522
|
+
* <rel-kbd-group .items=${["Ctrl", "Shift", "P"]} size="md"></rel-kbd-group>
|
|
523
|
+
*/
|
|
524
|
+
declare class RelKbdGroup extends LitElement {
|
|
525
|
+
items: string[];
|
|
526
|
+
size: "sm" | "md" | "lg";
|
|
527
|
+
variant: "default" | "muted";
|
|
528
|
+
static styles: lit.CSSResult;
|
|
529
|
+
render(): lit_html.TemplateResult<1>;
|
|
530
|
+
}
|
|
463
531
|
|
|
464
532
|
declare class RelLayout extends LitElement {
|
|
465
533
|
gap: string;
|
|
@@ -470,7 +538,34 @@ declare class RelLayout extends LitElement {
|
|
|
470
538
|
render(): lit_html.TemplateResult<1>;
|
|
471
539
|
}
|
|
472
540
|
|
|
473
|
-
|
|
541
|
+
interface RadioOption {
|
|
542
|
+
value: string;
|
|
543
|
+
label: string;
|
|
544
|
+
supportingText?: string;
|
|
545
|
+
disabled?: boolean;
|
|
546
|
+
}
|
|
547
|
+
declare class RelRadio extends LitElement {
|
|
548
|
+
options: RadioOption[];
|
|
549
|
+
name: string;
|
|
550
|
+
selectedValue: string | null;
|
|
551
|
+
disabled: boolean;
|
|
552
|
+
error: boolean;
|
|
553
|
+
errorMessage: string;
|
|
554
|
+
value: string;
|
|
555
|
+
checked: boolean;
|
|
556
|
+
private _onChange;
|
|
557
|
+
private _onTouched;
|
|
558
|
+
static styles: lit.CSSResult;
|
|
559
|
+
private onChange;
|
|
560
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
561
|
+
registerOnTouched(fn: () => void): void;
|
|
562
|
+
writeValue(value: string): void;
|
|
563
|
+
private get hasSelection();
|
|
564
|
+
private renderOption;
|
|
565
|
+
render(): lit_html.TemplateResult<1>;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
type MenuType = "default" | "checkbox" | "arrow" | "select-option" | "fixed" | "fit";
|
|
474
569
|
interface MenuItem {
|
|
475
570
|
label: string;
|
|
476
571
|
active?: boolean;
|
|
@@ -492,49 +587,23 @@ declare class RelMenu extends LitElement {
|
|
|
492
587
|
items: MenuItem[];
|
|
493
588
|
private focusedIndex;
|
|
494
589
|
private _items;
|
|
495
|
-
static readonly _css = "\n :host {\n display: inline-block;\n }\n\n .rel-menu {\n position: relative;\n display: inline-block;\n background: var(--rel-
|
|
590
|
+
static readonly _css = "\n :host {\n color: var(--rel-text-default);\n display: inline-block;\n }\n\n .rel-menu {\n position: relative;\n display: inline-block;\n background: var(--rel-bg-neutral);\n color: var(--rel-text-default);\n border-radius: var(--rel-border-radius-md);\n box-shadow: var(--rel-shadows-shadow-300);\n min-width: 220px;\n /* No vertical padding: items fill edge-to-edge so a first/last-item hover\n reaches the menu's top/bottom. NOT overflow:hidden \u2014 that clips the\n type=arrow flyout (position:absolute at left:100%). Instead the first\n and last items carry the outer corner radius so hover backgrounds clip\n to the rounded shape without any overflow. */\n padding: 0;\n outline: none;\n overflow: visible;\n font-family: var(--rel-body-lg-regular-font-family);\n font-weight: var(--rel-body-lg-regular-font-weight);\n font-size: var(--rel-body-lg-regular-font-size);\n line-height: var(--rel-body-lg-regular-line-height);\n letter-spacing: var(--rel-body-lg-regular-letter-spacing);\n }\n\n .rel-menu:focus-visible,\n :host(:focus-visible) .rel-menu {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: 2px;\n }\n\n .rel-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-xs);\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n line-height: var(--rel-body-sm-regular-line-height);\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n user-select: none;\n }\n\n /* First/last items carry the menu's outer radius so their hover fill clips\n to the rounded corners (replaces the removed overflow:hidden). */\n .rel-menu > .rel-menu-item:first-child {\n border-top-left-radius: var(--rel-border-radius-md);\n border-top-right-radius: var(--rel-border-radius-md);\n }\n\n .rel-menu > .rel-menu-item:last-child {\n border-bottom-left-radius: var(--rel-border-radius-md);\n border-bottom-right-radius: var(--rel-border-radius-md);\n }\n\n .rel-menu-item:hover {\n background: var(--rel-bg-neutral-elevated-1);\n }\n\n .rel-menu-item:active {\n background: var(--rel-bg-neutral-elevated-1);\n }\n\n .rel-menu-item.active {\n background: var(--rel-bg-neutral-elevated-2);\n font-weight: var(--rel-body-lg-medium-font-weight);\n }\n\n .rel-menu-item.disabled {\n background-color: transparent;\n color: var(--rel-text-disabled);\n /* Keep the item pointer-interactive so cursor:not-allowed actually\n renders; clicks are already neutralised by the item.disabled guard in\n onItemClick/onItemEnter. pointer-events:none here would make the row\n transparent to the pointer and suppress the cursor. */\n cursor: not-allowed;\n }\n\n .rel-menu-item[data-focused=\"true\"] {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: -2px;\n }\n\n /* Width modes (Figma Type=Fixed / Type=Fit) */\n .rel-menu.fixed {\n width: var(--rel-menu-width, 300px);\n min-width: 0;\n box-sizing: border-box;\n }\n\n .rel-menu.fit {\n min-width: 0;\n width: max-content;\n }\n\n /* Checkbox (Type=Checkbox) / radio (Type=Select Option) rows render the real\n rel-checkbox / rel-radio. pointer-events:none keeps the whole row the click\n target so onItemClick stays the single source of truth. */\n .menu-control {\n pointer-events: none;\n width: 100%;\n }\n\n .menu-label {\n flex: 1 1 auto;\n }\n\n /* Submenu affordance \u2014 same rel-icon chevron the menubar uses. */\n .submenu-chevron {\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n opacity: 0.6;\n pointer-events: none;\n }\n\n /* Shortcut / hint text (Figma body-sm-regular, caption tone) */\n .menu-shortcut,\n ::slotted([slot=\"shortcut\"]) {\n font-family: var(--rel-body-sm-regular-font-family);\n font-weight: var(--rel-body-sm-regular-font-weight);\n font-size: var(--rel-body-sm-regular-font-size);\n line-height: var(--rel-body-sm-regular-line-height);\n letter-spacing: var(--rel-body-sm-regular-letter-spacing);\n color: var(--rel-text-caption);\n margin-left: auto;\n padding-left: var(--rel-spacing-md);\n }\n\n \n .rel-submenu {\n border: 1px solid var(--rel-border-subtle);\n position: absolute;\n top: calc(-1 * var(--rel-spacing-3xs));\n /* flush against the trigger (no gap) so moving the pointer into the flyout\n never crosses a dead zone that would fire the trigger's mouseleave */\n left: 100%;\n min-width: 200px;\n background: var(--rel-bg-neutral);\n color: var(--rel-text-default);\n border-radius: var(--rel-border-radius-md);\n box-shadow: var(--rel-shadows-shadow-300);\n /* padding:0 + overflow:hidden \u2014 safe here (a submenu has no further nested\n flyout to clip) \u2014 so sub-item hovers fill fully and clip to the corners */\n padding: 0;\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n z-index: 20;\n }\n\n .rel-submenu.visible {\n visibility: visible;\n pointer-events: auto;\n }\n\n .rel-submenu .rel-menu-item {\n padding: var(--rel-spacing-xs) var(--rel-spacing-sm);\n }\n ";
|
|
496
591
|
createRenderRoot(): this;
|
|
497
592
|
connectedCallback(): void;
|
|
498
593
|
disconnectedCallback(): void;
|
|
499
594
|
updated(changedProperties: Map<string, unknown>): void;
|
|
595
|
+
/** Index of a submenu locked open by a click (survives hover-out). -1 = none. */
|
|
596
|
+
private lockedIndex;
|
|
500
597
|
private handleDocumentClick;
|
|
501
598
|
private onItemEnter;
|
|
502
599
|
private onItemLeave;
|
|
503
600
|
private onItemClick;
|
|
504
601
|
private onSubClick;
|
|
505
|
-
private toggleCheckbox;
|
|
506
602
|
private onKeydown;
|
|
507
603
|
private renderMenuItem;
|
|
508
604
|
render(): lit_html.TemplateResult<1>;
|
|
509
605
|
}
|
|
510
606
|
|
|
511
|
-
interface RadioOption {
|
|
512
|
-
value: string;
|
|
513
|
-
label: string;
|
|
514
|
-
supportingText?: string;
|
|
515
|
-
disabled?: boolean;
|
|
516
|
-
}
|
|
517
|
-
declare class RelRadio extends LitElement {
|
|
518
|
-
options: RadioOption[];
|
|
519
|
-
name: string;
|
|
520
|
-
selectedValue: string | null;
|
|
521
|
-
disabled: boolean;
|
|
522
|
-
error: boolean;
|
|
523
|
-
errorMessage: string;
|
|
524
|
-
value: string;
|
|
525
|
-
checked: boolean;
|
|
526
|
-
private _onChange;
|
|
527
|
-
private _onTouched;
|
|
528
|
-
static styles: lit.CSSResult;
|
|
529
|
-
private onChange;
|
|
530
|
-
registerOnChange(fn: (value: string) => void): void;
|
|
531
|
-
registerOnTouched(fn: () => void): void;
|
|
532
|
-
writeValue(value: string): void;
|
|
533
|
-
private get hasSelection();
|
|
534
|
-
private renderOption;
|
|
535
|
-
render(): lit_html.TemplateResult<1>;
|
|
536
|
-
}
|
|
537
|
-
|
|
538
607
|
declare class RelMenubar extends LitElement {
|
|
539
608
|
private menus;
|
|
540
609
|
private openMenuIndex;
|
|
@@ -543,7 +612,7 @@ declare class RelMenubar extends LitElement {
|
|
|
543
612
|
private openSubmenuElement;
|
|
544
613
|
private hoverSwitchEnabled;
|
|
545
614
|
private _onScroll?;
|
|
546
|
-
static readonly _css = "\n :host {\n display: block;\n }\n\n
|
|
615
|
+
static readonly _css = "\n /* This component renders into LIGHT DOM (createRenderRoot returns this), so\n :host / <slot> don't work here \u2014 the raw <rel-menubar-menu> definitions\n are data holders that must be hidden with a plain selector. Relying on the\n global rel-menubar-menu.css is not enough: it can't cross a consumer's\n shadow boundary AND it's a no-op in the tsup-built package (css:\"copy\"). */\n rel-menubar {\n color: var(--rel-text-default);\n display: block;\n }\n\n rel-menubar-menu {\n display: none;\n }\n\n .menubar-container {\n display: flex;\n align-items: stretch;\n background: var(--rel-bg-surface-elevated);\n border: var(--rel-stroke-sm) solid var(--rel-border-default);\n border-radius: var(--rel-border-radius-sm);\n overflow: hidden;\n padding: 0;\n gap: var(--rel-spacing-3xs);\n height: 40px;\n width: fit-content;\n font-family: var(--rel-body-sm-regular-font-family);\n font-weight: var(--rel-body-sm-regular-font-weight);\n font-size: var(--rel-body-sm-regular-font-size);\n line-height: var(--rel-body-sm-regular-line-height);\n letter-spacing: var(--rel-body-sm-regular-letter-spacing);\n }\n\n .menubar-trigger {\n display: flex;\n align-items: center;\n align-self: stretch;\n height: 100%;\n padding: 0 var(--rel-spacing-sm);\n background: transparent;\n border: none;\n cursor: pointer;\n font-family: inherit;\n font-size: inherit;\n color: var(--rel-text-label);\n transition: background 0.15s ease;\n user-select: none;\n outline: none;\n }\n\n .menubar-trigger:hover,\n .menubar-trigger.active {\n background: var(--rel-bg-neutral-elevated-2);\n }\n\n .menubar-trigger:focus-visible {\n outline: 2px solid var(--rel-border-focus);\n outline-offset: 2px;\n }\n\n .menubar-panel {\n position: fixed;\n min-width: 220px;\n background: var(--rel-bg-surface);\n border: var(--rel-stroke-sm) solid var(--rel-border-default);\n border-radius: var(--rel-border-radius-sm);\n box-shadow: var(--rel-shadows-shadow-300);\n padding: 0;\n overflow: hidden;\n z-index: 1000;\n display: none;\n }\n\n .menubar-panel.open {\n display: block;\n }\n\n .menu-item {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--rel-spacing-sm);\n padding: var(--rel-spacing-xs) var(--rel-spacing-md);\n cursor: pointer;\n transition: background 0.15s ease;\n user-select: none;\n color: var(--rel-text-label);\n line-height: var(--rel-body-sm-regular-line-height);\n }\n\n .menu-item:hover,\n .menu-item.focused {\n background: var(--rel-bg-neutral-elevated-2);\n }\n\n .menu-item[data-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .menu-separator {\n height: var(--rel-stroke-sm);\n background: var(--rel-border-default);\n margin: 0;\n padding: 0;\n }\n\n rel-icon {\n display: inline-flex;\n pointer-events: none;\n }\n\n .menu-submenu-trigger {\n position: relative;\n }\n\n .menu-submenu-trigger rel-icon {\n opacity: 0.6;\n }\n\n .submenu-panel {\n position: fixed;\n min-width: 200px;\n background: var(--rel-bg-surface);\n border: var(--rel-stroke-sm) solid var(--rel-border-default);\n border-radius: var(--rel-border-radius-sm);\n box-shadow: var(--rel-shadows-shadow-300);\n padding: 0;\n overflow: hidden;\n z-index: 1001;\n display: none;\n }\n\n .submenu-panel.open {\n display: block;\n }\n\n .menu-shortcut {\n opacity: 0.6;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--rel-spacing-3xs);\n font-family: var(--rel-body-xs-regular-font-family);\n font-weight: var(--rel-body-xs-regular-font-weight);\n font-size: var(--rel-body-xs-regular-font-size);\n line-height: var(--rel-body-xs-regular-line-height);\n letter-spacing: var(--rel-body-xs-regular-letter-spacing);\n }\n\n .menubar-panel rel-checkbox {\n display: block;\n width: 100%;\n padding: var(--rel-spacing-xs, 8px) var(--rel-spacing-md, 16px);\n box-sizing: border-box;\n cursor: pointer;\n }\n ";
|
|
547
616
|
createRenderRoot(): this;
|
|
548
617
|
connectedCallback(): void;
|
|
549
618
|
disconnectedCallback(): void;
|
|
@@ -953,6 +1022,8 @@ declare global {
|
|
|
953
1022
|
|
|
954
1023
|
declare class RelPopoverContent extends LitElement {
|
|
955
1024
|
ariaLabel: string;
|
|
1025
|
+
/** Figma Size axis (S/M/L): panel padding 12/16/20px. */
|
|
1026
|
+
size: "sm" | "md" | "lg";
|
|
956
1027
|
static styles: lit.CSSResult;
|
|
957
1028
|
render(): lit_html.TemplateResult<1>;
|
|
958
1029
|
}
|
|
@@ -1164,6 +1235,11 @@ declare class RelModal extends LitElement {
|
|
|
1164
1235
|
description: string;
|
|
1165
1236
|
dismissible: boolean;
|
|
1166
1237
|
modal: boolean;
|
|
1238
|
+
/**
|
|
1239
|
+
* Figma "Breakpoint" axis. responsive (default) collapses to a full-width
|
|
1240
|
+
* bottom sheet below 480px; web keeps the fixed desktop panel at every size.
|
|
1241
|
+
*/
|
|
1242
|
+
breakpoint: "responsive" | "web";
|
|
1167
1243
|
private overlayElement;
|
|
1168
1244
|
private previousFocus;
|
|
1169
1245
|
private originalBodyOverflow;
|
|
@@ -1187,10 +1263,16 @@ declare global {
|
|
|
1187
1263
|
}
|
|
1188
1264
|
}
|
|
1189
1265
|
|
|
1190
|
-
|
|
1266
|
+
/**
|
|
1267
|
+
* "continuous"/"discrete" are the legacy tick-mode values; Figma's Type axis
|
|
1268
|
+
* adds "default" (alias of continuous) and "range" (dual-thumb interval).
|
|
1269
|
+
*/
|
|
1270
|
+
type SliderType = "continuous" | "discrete" | "default" | "range";
|
|
1191
1271
|
type TrackStyle = "solid" | "dotted";
|
|
1192
1272
|
declare class RelSlider extends LitElement {
|
|
1193
1273
|
type: SliderType;
|
|
1274
|
+
/** Figma Size axis (S/M/L): scales track, thumb and ticks. */
|
|
1275
|
+
size: "sm" | "md" | "lg";
|
|
1194
1276
|
min: number;
|
|
1195
1277
|
max: number;
|
|
1196
1278
|
step: number;
|
|
@@ -1199,13 +1281,26 @@ declare class RelSlider extends LitElement {
|
|
|
1199
1281
|
showTickLabels: boolean;
|
|
1200
1282
|
showBubble: boolean;
|
|
1201
1283
|
value: number;
|
|
1284
|
+
/** Upper value when type="range" (attribute value-end). */
|
|
1285
|
+
valueEnd: number;
|
|
1202
1286
|
private ticks;
|
|
1203
1287
|
private _onChange;
|
|
1204
1288
|
private _onTouched;
|
|
1205
1289
|
static styles: lit.CSSResult;
|
|
1206
1290
|
connectedCallback(): void;
|
|
1207
1291
|
updated(changedProperties: Map<string, any>): void;
|
|
1292
|
+
private get isRange();
|
|
1208
1293
|
private get percentage();
|
|
1294
|
+
private get percentageEnd();
|
|
1295
|
+
private dragThumb;
|
|
1296
|
+
private valueFromPointer;
|
|
1297
|
+
private onRangePointerDown;
|
|
1298
|
+
private onRangePointerMove;
|
|
1299
|
+
private onRangePointerUp;
|
|
1300
|
+
private applyRangeValue;
|
|
1301
|
+
private emitRangeChange;
|
|
1302
|
+
private onRangeInputStart;
|
|
1303
|
+
private onRangeInputEnd;
|
|
1209
1304
|
private setupTicks;
|
|
1210
1305
|
private getTickLeftPct;
|
|
1211
1306
|
private isTickActive;
|
|
@@ -1250,6 +1345,10 @@ type StepStatus = "done" | "progress" | "disabled";
|
|
|
1250
1345
|
type TextAlign = "right" | "below";
|
|
1251
1346
|
type Orientation = "horizontal" | "vertical";
|
|
1252
1347
|
type StepperSize = "small" | "large";
|
|
1348
|
+
/** Figma "Type": indicator content — default (number, check when done), dot, number, icon. */
|
|
1349
|
+
type StepperType = "default" | "dot" | "number" | "icon";
|
|
1350
|
+
/** Figma "Typel": label placement relative to the indicator. */
|
|
1351
|
+
type LabelPlacement = "top" | "centered" | "inverted";
|
|
1253
1352
|
interface Step {
|
|
1254
1353
|
title: string;
|
|
1255
1354
|
status: StepStatus;
|
|
@@ -1259,6 +1358,15 @@ declare class RelStepper extends LitElement {
|
|
|
1259
1358
|
textAlign: TextAlign;
|
|
1260
1359
|
orientation: Orientation;
|
|
1261
1360
|
size: StepperSize;
|
|
1361
|
+
type: StepperType;
|
|
1362
|
+
/**
|
|
1363
|
+
* Figma Typel axis: top = label top-aligned beside the indicator,
|
|
1364
|
+
* centered = label vertically centered beside it, inverted = indicator above
|
|
1365
|
+
* the label. When unset, the legacy textAlign prop drives the layout
|
|
1366
|
+
* (below ≈ inverted, right ≈ centered). Note Figma marks Top+Horizontal
|
|
1367
|
+
* as an unsupported combination.
|
|
1368
|
+
*/
|
|
1369
|
+
labelPlacement?: LabelPlacement;
|
|
1262
1370
|
static styles: lit.CSSResult;
|
|
1263
1371
|
private isDone;
|
|
1264
1372
|
private isProgress;
|
|
@@ -1307,6 +1415,8 @@ declare class RelTabItem extends LitElement {
|
|
|
1307
1415
|
declare class RelTab extends LitElement {
|
|
1308
1416
|
tabs: TabItem[];
|
|
1309
1417
|
activeIndex: number;
|
|
1418
|
+
/** Tab size — styled via :host([size]) rules. */
|
|
1419
|
+
size: "sm" | "md" | "lg";
|
|
1310
1420
|
private _tabItems;
|
|
1311
1421
|
static styles: lit.CSSResult;
|
|
1312
1422
|
private _onSlotChange;
|
|
@@ -1326,6 +1436,11 @@ declare class RelTextfield extends LitElement {
|
|
|
1326
1436
|
value: string;
|
|
1327
1437
|
leftIcon?: string;
|
|
1328
1438
|
rightIcon?: string;
|
|
1439
|
+
/** Makes the trailing icon interactive (pointer + focusable) and emits
|
|
1440
|
+
* `rel-right-icon-click` — e.g. a password show/hide toggle or clear button. */
|
|
1441
|
+
clickableRightIcon: boolean;
|
|
1442
|
+
/** Accessible label for the trailing icon when it is clickable. */
|
|
1443
|
+
rightIconAriaLabel?: string;
|
|
1329
1444
|
supportingText?: string;
|
|
1330
1445
|
state: TextFieldState;
|
|
1331
1446
|
size: TextFieldSize;
|
|
@@ -1355,6 +1470,8 @@ declare class RelTextfield extends LitElement {
|
|
|
1355
1470
|
connectedCallback(): void;
|
|
1356
1471
|
private handleFocus;
|
|
1357
1472
|
private handleBlur;
|
|
1473
|
+
private handleRightIconClick;
|
|
1474
|
+
private handleRightIconKeydown;
|
|
1358
1475
|
private handleInput;
|
|
1359
1476
|
render(): lit_html.TemplateResult<1>;
|
|
1360
1477
|
}
|
|
@@ -1377,11 +1494,14 @@ declare class RelToast extends LitElement {
|
|
|
1377
1494
|
render(): lit_html.TemplateResult<1>;
|
|
1378
1495
|
}
|
|
1379
1496
|
|
|
1380
|
-
type TooltipPosition = "above" | "below";
|
|
1497
|
+
type TooltipPosition = "above" | "below" | "left" | "right";
|
|
1498
|
+
type TooltipType = "single-line" | "multi-line";
|
|
1381
1499
|
declare class RelTooltip extends LitElement {
|
|
1382
1500
|
text: string;
|
|
1383
1501
|
position: TooltipPosition;
|
|
1384
1502
|
showTail: boolean;
|
|
1503
|
+
/** Figma "Type": single-line stays on one line; multi-line wraps at a max width. */
|
|
1504
|
+
type: TooltipType;
|
|
1385
1505
|
private uniqueId;
|
|
1386
1506
|
static styles: lit.CSSResult;
|
|
1387
1507
|
firstUpdated(): void;
|
|
@@ -1389,4 +1509,4 @@ declare class RelTooltip extends LitElement {
|
|
|
1389
1509
|
render(): lit_html.TemplateResult<1>;
|
|
1390
1510
|
}
|
|
1391
1511
|
|
|
1392
|
-
export { type BreadcrumbItem, type ChipBorder, type ChipSize, type ChipTone, type ChipVariant, type DrawerCloseReason, type DrawerSide, type MenuItem, type MenuType, type ModalSide, type Orientation, type OtpType, type ProgressMode, type RadioOption, RelAccordion, RelAlert, RelAvatar, RelBadge, RelBreadcrumbs, RelButton, RelCalendar, RelCard, RelCardMedia, RelCarousel, RelCheckbox, RelChip, RelContainer, RelDatePicker, RelDivider, RelDrawer, RelDrawerFooter, RelKbd, RelLayout, RelMenu, RelMenuItem, RelMenubar, RelMenubarMenu, RelModal, RelNavbar, RelOtp, RelPagination, RelPopover, RelPopoverContent, RelProgress, RelRadio, RelRangePicker, RelResizableGroup, RelResizableHandle, RelResizablePanel, RelSegmentedButton, RelSelect, RelSkeleton, RelSlider, RelSnackbar, RelStepper, RelSwitch, RelTab, RelTabItem, RelTextfield, RelToast, RelTooltip, RelTopbar, RelTopbarActions, RelTopbarBrand, RelTopbarDropdown, RelTopbarDropdownItem, RelTopbarItem, RelTopbarMobilePanel, RelTopbarProfile, RelTopbarUtilities, type SegmentAlign, type SegmentOption, type SegmentSize, type SelectBorder, type SelectLabelStyle, type SelectOption, type SelectOptionObject, type SelectSize, type SelectState, type SkeletonAnimation, type SkeletonShape, type SliderType, type SnackbarLines, type SnackbarType, type Step, type StepStatus, type StepperSize, type TabItem, type TextAlign, type TextFieldSize, type TextFieldState, type TextFieldVariant, type ToastType, type TooltipPosition, type TopbarForceLayout, type TopbarProfileType, type TopbarRewardTier, type TopbarVariant, type TrackStyle };
|
|
1512
|
+
export { type BreadcrumbItem, type ButtonTone, type ButtonVariant, type ChipBorder, type ChipSize, type ChipTone, type ChipVariant, type DrawerCloseReason, type DrawerSide, type LabelPlacement, type MenuItem, type MenuType, type ModalSide, type Orientation, type OtpType, type ProgressMode, type RadioOption, RelAccordion, RelAlert, RelAvatar, RelBadge, RelBreadcrumbs, RelButton, RelCalendar, RelCard, RelCardMedia, RelCarousel, RelCheckbox, RelChip, RelContainer, RelDatePicker, RelDivider, RelDrawer, RelDrawerFooter, RelKbd, RelKbdGroup, RelLayout, RelMenu, RelMenuItem, RelMenubar, RelMenubarMenu, RelModal, RelNavbar, RelOtp, RelPagination, RelPopover, RelPopoverContent, RelProgress, RelRadio, RelRangePicker, RelResizableGroup, RelResizableHandle, RelResizablePanel, RelSegmentedButton, RelSelect, RelSkeleton, RelSlider, RelSnackbar, RelStepper, RelSwitch, RelTab, RelTabItem, RelTextfield, RelToast, RelTooltip, RelTopbar, RelTopbarActions, RelTopbarBrand, RelTopbarDropdown, RelTopbarDropdownItem, RelTopbarItem, RelTopbarMobilePanel, RelTopbarProfile, RelTopbarUtilities, type SegmentAlign, type SegmentOption, type SegmentSize, type SelectBorder, type SelectLabelStyle, type SelectOption, type SelectOptionObject, type SelectSize, type SelectState, type SkeletonAnimation, type SkeletonShape, type SliderType, type SnackbarLines, type SnackbarType, type Step, type StepStatus, type StepperSize, type StepperType, type TabItem, type TextAlign, type TextFieldSize, type TextFieldState, type TextFieldVariant, type ToastType, type TooltipPosition, type TooltipType, type TopbarForceLayout, type TopbarProfileType, type TopbarRewardTier, type TopbarVariant, type TrackStyle };
|