@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
|
@@ -24,6 +24,10 @@ export class RelDrawer extends LitElement {
|
|
|
24
24
|
|
|
25
25
|
@state() private isDragging = false;
|
|
26
26
|
@state() private dragOffset = 0;
|
|
27
|
+
// Once a left/right drawer finishes sliding in, we drop its transform so that
|
|
28
|
+
// `position: fixed` descendants (select dropdowns, popovers, tooltips) are no
|
|
29
|
+
// longer trapped by the transformed panel's containing block.
|
|
30
|
+
@state() private settled = false;
|
|
27
31
|
|
|
28
32
|
@query(".panel") private panelElement!: HTMLElement;
|
|
29
33
|
@query(".overlay") private overlayElement!: HTMLElement;
|
|
@@ -36,6 +40,7 @@ export class RelDrawer extends LitElement {
|
|
|
36
40
|
|
|
37
41
|
static styles = css`
|
|
38
42
|
:host {
|
|
43
|
+
color: var(--rel-text-default);
|
|
39
44
|
--drawer-transition-duration: 0.3s;
|
|
40
45
|
--drawer-transition-timing: cubic-bezier(0.32, 0.72, 0, 1);
|
|
41
46
|
}
|
|
@@ -73,13 +78,13 @@ export class RelDrawer extends LitElement {
|
|
|
73
78
|
/* Panel base */
|
|
74
79
|
.panel {
|
|
75
80
|
position: absolute;
|
|
76
|
-
background: var(--rel-
|
|
81
|
+
background: var(--rel-bg-surface);
|
|
77
82
|
box-shadow: var(--rel-shadows-shadow-500);
|
|
78
83
|
display: flex;
|
|
79
84
|
flex-direction: column;
|
|
80
85
|
overflow: hidden;
|
|
81
86
|
outline: none;
|
|
82
|
-
font-family: var(--rel-
|
|
87
|
+
font-family: var(--rel-fonts-font-family);
|
|
83
88
|
transition: transform var(--drawer-transition-duration) var(--drawer-transition-timing);
|
|
84
89
|
}
|
|
85
90
|
|
|
@@ -90,8 +95,8 @@ export class RelDrawer extends LitElement {
|
|
|
90
95
|
right: auto;
|
|
91
96
|
width: var(--drawer-width, clamp(640px, 66vw, 952px));
|
|
92
97
|
height: var(--drawer-height, clamp(360px, 49vh, 600px));
|
|
93
|
-
border-radius: var(--rel-
|
|
94
|
-
var(--rel-
|
|
98
|
+
border-radius: var(--rel-border-radius-sm)
|
|
99
|
+
var(--rel-border-radius-sm)
|
|
95
100
|
0
|
|
96
101
|
0;
|
|
97
102
|
transform: translateX(-50%) translateY(100%);
|
|
@@ -129,6 +134,15 @@ export class RelDrawer extends LitElement {
|
|
|
129
134
|
transform: translateX(0);
|
|
130
135
|
}
|
|
131
136
|
|
|
137
|
+
/* Once settled open, drop the (now identity) transform on left/right panels
|
|
138
|
+
so their fixed-position descendants (select dropdowns, popovers, tooltips)
|
|
139
|
+
escape the transformed containing block instead of being clipped by the
|
|
140
|
+
panel. Bottom keeps its transform (used for centering). */
|
|
141
|
+
.drawer-container.open .panel[data-side="left"].settled,
|
|
142
|
+
.drawer-container.open .panel[data-side="right"].settled {
|
|
143
|
+
transform: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
132
146
|
/* Dragging state */
|
|
133
147
|
.panel.dragging {
|
|
134
148
|
transition: none;
|
|
@@ -146,15 +160,16 @@ export class RelDrawer extends LitElement {
|
|
|
146
160
|
.handle {
|
|
147
161
|
width: 48px;
|
|
148
162
|
height: 4px;
|
|
149
|
-
background: var(--rel-
|
|
150
|
-
border-radius: var(--rel-
|
|
151
|
-
margin: var(--rel-spacing-
|
|
163
|
+
background: var(--rel-bg-neutral-elevated-2);
|
|
164
|
+
border-radius: var(--rel-border-radius-full-rounded);
|
|
165
|
+
margin: var(--rel-spacing-xs) auto var(--rel-spacing-2xs);
|
|
152
166
|
cursor: grab;
|
|
153
167
|
touch-action: none;
|
|
154
168
|
}
|
|
155
169
|
|
|
156
170
|
.handle:active {
|
|
157
171
|
cursor: grabbing;
|
|
172
|
+
background: var(--rel-border-accent);
|
|
158
173
|
}
|
|
159
174
|
|
|
160
175
|
.handle.hidden {
|
|
@@ -165,9 +180,9 @@ export class RelDrawer extends LitElement {
|
|
|
165
180
|
.header {
|
|
166
181
|
display: flex;
|
|
167
182
|
flex-direction: column;
|
|
168
|
-
gap: var(--rel-spacing-
|
|
169
|
-
padding: var(--rel-spacing-
|
|
170
|
-
border-bottom: var(--rel-
|
|
183
|
+
gap: var(--rel-spacing-2xs);
|
|
184
|
+
padding: var(--rel-spacing-md) var(--rel-spacing-lg);
|
|
185
|
+
border-bottom: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
171
186
|
}
|
|
172
187
|
|
|
173
188
|
.header.empty {
|
|
@@ -178,47 +193,73 @@ export class RelDrawer extends LitElement {
|
|
|
178
193
|
display: flex;
|
|
179
194
|
align-items: flex-start;
|
|
180
195
|
justify-content: space-between;
|
|
196
|
+
gap: var(--rel-spacing-sm);
|
|
181
197
|
}
|
|
182
198
|
|
|
183
199
|
.title {
|
|
184
|
-
|
|
185
|
-
font-weight: var(--rel-fontWeights-semibold);
|
|
186
|
-
color: var(--rel-text-heading);
|
|
200
|
+
color: var(--rel-text-label);
|
|
187
201
|
margin: 0;
|
|
202
|
+
|
|
203
|
+
font-family: var(--rel-headings-lg-font-family);
|
|
204
|
+
|
|
205
|
+
font-weight: var(--rel-headings-lg-font-weight);
|
|
206
|
+
|
|
207
|
+
font-size: var(--rel-headings-lg-font-size);
|
|
208
|
+
|
|
209
|
+
line-height: var(--rel-headings-lg-line-height);
|
|
210
|
+
|
|
211
|
+
letter-spacing: var(--rel-headings-lg-letter-spacing);
|
|
212
|
+
|
|
188
213
|
}
|
|
189
214
|
|
|
190
215
|
.description {
|
|
191
|
-
|
|
192
|
-
color: var(--rel-text-primary);
|
|
216
|
+
color: var(--rel-text-body);
|
|
193
217
|
margin: 0;
|
|
194
218
|
opacity: 0.8;
|
|
219
|
+
|
|
220
|
+
font-family: var(--rel-body-lg-regular-font-family);
|
|
221
|
+
|
|
222
|
+
font-weight: var(--rel-body-lg-regular-font-weight);
|
|
223
|
+
|
|
224
|
+
font-size: var(--rel-body-lg-regular-font-size);
|
|
225
|
+
|
|
226
|
+
line-height: var(--rel-body-lg-regular-line-height);
|
|
227
|
+
|
|
228
|
+
letter-spacing: var(--rel-body-lg-regular-letter-spacing);
|
|
229
|
+
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* Emphasised inline text in slotted content (Figma body-lg-medium) */
|
|
233
|
+
.content ::slotted(strong),
|
|
234
|
+
.content ::slotted(b) {
|
|
235
|
+
font-weight: var(--rel-body-lg-medium-font-weight);
|
|
195
236
|
}
|
|
196
237
|
|
|
197
238
|
.close-button {
|
|
198
239
|
background: transparent;
|
|
199
240
|
border: none;
|
|
200
241
|
cursor: pointer;
|
|
201
|
-
padding: var(--rel-spacing-
|
|
242
|
+
padding: var(--rel-spacing-2xs);
|
|
202
243
|
display: flex;
|
|
203
244
|
align-items: center;
|
|
204
245
|
justify-content: center;
|
|
205
246
|
align-self: flex-start;
|
|
206
247
|
flex-shrink: 0;
|
|
207
|
-
border-radius: var(--rel-
|
|
208
|
-
color: var(--rel-
|
|
248
|
+
border-radius: var(--rel-border-radius-xs);
|
|
249
|
+
color: var(--rel-text-default);
|
|
209
250
|
transition: background 0.15s ease;
|
|
210
251
|
}
|
|
211
252
|
|
|
212
253
|
.close-button:hover {
|
|
213
|
-
background: var(--rel-surface-
|
|
254
|
+
background: var(--rel-bg-surface-elevated);
|
|
214
255
|
}
|
|
215
256
|
|
|
216
257
|
.close-button:active {
|
|
217
|
-
background: var(--rel-
|
|
258
|
+
background: var(--rel-border-default);
|
|
218
259
|
}
|
|
219
260
|
|
|
220
261
|
.close-button:focus-visible {
|
|
221
|
-
outline: 2px solid var(--rel-
|
|
262
|
+
outline: 2px solid var(--rel-border-focus);
|
|
222
263
|
outline-offset: 2px;
|
|
223
264
|
}
|
|
224
265
|
|
|
@@ -226,14 +267,14 @@ export class RelDrawer extends LitElement {
|
|
|
226
267
|
.content {
|
|
227
268
|
flex: 1;
|
|
228
269
|
overflow-y: auto;
|
|
229
|
-
padding: var(--rel-spacing-
|
|
270
|
+
padding: var(--rel-spacing-xl);
|
|
230
271
|
}
|
|
231
272
|
|
|
232
273
|
/* Footer */
|
|
233
274
|
.footer {
|
|
234
275
|
flex-shrink: 0;
|
|
235
|
-
padding: var(--rel-spacing-
|
|
236
|
-
border-top: var(--rel-
|
|
276
|
+
padding: var(--rel-spacing-md) var(--rel-spacing-lg);
|
|
277
|
+
border-top: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
237
278
|
}
|
|
238
279
|
|
|
239
280
|
/* Reduced motion */
|
|
@@ -292,6 +333,27 @@ export class RelDrawer extends LitElement {
|
|
|
292
333
|
|
|
293
334
|
document.addEventListener("keydown", this.handleKeydown);
|
|
294
335
|
|
|
336
|
+
// After the slide-in transition completes, mark the panel settled so its
|
|
337
|
+
// transform is dropped (frees fixed-position dropdowns/popovers). A timeout
|
|
338
|
+
// backstops the case where transitionend doesn't fire.
|
|
339
|
+
this.settled = false;
|
|
340
|
+
this.updateComplete.then(() => {
|
|
341
|
+
const panel = this.panelElement;
|
|
342
|
+
if (!panel) return;
|
|
343
|
+
let done = false;
|
|
344
|
+
const settle = () => {
|
|
345
|
+
if (done) return;
|
|
346
|
+
done = true;
|
|
347
|
+
this.settled = true;
|
|
348
|
+
panel.removeEventListener("transitionend", onEnd);
|
|
349
|
+
};
|
|
350
|
+
const onEnd = (e: TransitionEvent) => {
|
|
351
|
+
if (e.propertyName === "transform") settle();
|
|
352
|
+
};
|
|
353
|
+
panel.addEventListener("transitionend", onEnd);
|
|
354
|
+
setTimeout(settle, 500);
|
|
355
|
+
});
|
|
356
|
+
|
|
295
357
|
this.dispatchEvent(
|
|
296
358
|
new CustomEvent("rel-open-change", {
|
|
297
359
|
detail: { open: true },
|
|
@@ -302,6 +364,7 @@ export class RelDrawer extends LitElement {
|
|
|
302
364
|
}
|
|
303
365
|
|
|
304
366
|
private handleClose() {
|
|
367
|
+
this.settled = false;
|
|
305
368
|
this.unlockScroll();
|
|
306
369
|
document.removeEventListener("keydown", this.handleKeydown);
|
|
307
370
|
|
|
@@ -509,7 +572,7 @@ export class RelDrawer extends LitElement {
|
|
|
509
572
|
|
|
510
573
|
<div
|
|
511
574
|
part="panel"
|
|
512
|
-
class="panel ${this.isDragging ? "dragging" : ""}"
|
|
575
|
+
class="panel ${this.isDragging ? "dragging" : ""} ${this.settled ? "settled" : ""}"
|
|
513
576
|
data-side="${this.side}"
|
|
514
577
|
style="${this.width ? `--drawer-width: ${this.width};` : ''}${this.maxHeight ? `--drawer-max-height: ${this.maxHeight};` : ''}${this.getPanelStyle()}"
|
|
515
578
|
role="${this.modal ? "dialog" : "region"}"
|
|
@@ -49,32 +49,32 @@ A keyboard key/shortcut pill component for displaying keyboard shortcuts and key
|
|
|
49
49
|
The component uses design tokens from the Reliability Design System:
|
|
50
50
|
|
|
51
51
|
#### Colors
|
|
52
|
-
- `--rel-
|
|
53
|
-
- `--rel-
|
|
54
|
-
- `--rel-
|
|
55
|
-
- `--rel-
|
|
56
|
-
- `--rel-
|
|
57
|
-
- `--rel-
|
|
52
|
+
- `--rel-bg-surface-elevated` - Default background
|
|
53
|
+
- `--rel-bg-neutral-elevated-1` - Muted and inset backgrounds
|
|
54
|
+
- `--rel-text-label` - Default text color
|
|
55
|
+
- `--rel-text-placeholder` - Muted text color
|
|
56
|
+
- `--rel-border-default` - Default border
|
|
57
|
+
- `--rel-border-default` - Muted border
|
|
58
58
|
|
|
59
59
|
#### Typography
|
|
60
|
-
- `--rel-
|
|
61
|
-
- `--rel-
|
|
62
|
-
- `--rel-
|
|
63
|
-
- `--rel-
|
|
64
|
-
- `--rel-
|
|
60
|
+
- `--rel-fonts-font-family` - Font family (Poppins)
|
|
61
|
+
- `--rel-fonts-weight-body-medium` - Font weight (500)
|
|
62
|
+
- `--rel-body-xs-regular-font-size` - Small size font
|
|
63
|
+
- `--rel-body-sm-regular-font-size` - Medium size font
|
|
64
|
+
- `--rel-body-md-regular-font-size` - Large size font
|
|
65
65
|
|
|
66
66
|
#### Spacing
|
|
67
|
-
- `--rel-spacing-
|
|
68
|
-
- `--rel-spacing-
|
|
69
|
-
- `--rel-spacing-
|
|
70
|
-
- `--rel-spacing-
|
|
71
|
-
- `--rel-spacing-
|
|
67
|
+
- `--rel-spacing-3xs` (2px)
|
|
68
|
+
- `--rel-spacing-2xs` (4px)
|
|
69
|
+
- `--rel-spacing-xs` (8px)
|
|
70
|
+
- `--rel-spacing-sm` (12px)
|
|
71
|
+
- `--rel-spacing-md` (16px)
|
|
72
72
|
|
|
73
73
|
#### Borders
|
|
74
|
-
- `--rel-
|
|
75
|
-
- `--rel-
|
|
76
|
-
- `--rel-
|
|
77
|
-
- `--rel-
|
|
74
|
+
- `--rel-stroke-sm` (1px)
|
|
75
|
+
- `--rel-border-radius-xs` (2px)
|
|
76
|
+
- `--rel-border-radius-sm` (8px)
|
|
77
|
+
- `--rel-border-radius-full-rounded` (1000px - pill shape)
|
|
78
78
|
|
|
79
79
|
## Examples
|
|
80
80
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { LitElement, html, css } from "lit";
|
|
1
|
+
import { LitElement, html, css, nothing } from "lit";
|
|
2
2
|
import { customElement, property } from "lit/decorators.js";
|
|
3
|
-
import "../../styles/vars-v2.css";
|
|
4
3
|
|
|
5
4
|
@customElement("rel-kbd")
|
|
6
5
|
export class RelKbd extends LitElement {
|
|
@@ -18,58 +17,101 @@ export class RelKbd extends LitElement {
|
|
|
18
17
|
|
|
19
18
|
static styles = css`
|
|
20
19
|
:host {
|
|
20
|
+
color: var(--rel-text-default);
|
|
21
21
|
display: inline-flex;
|
|
22
22
|
align-items: center;
|
|
23
23
|
justify-content: center;
|
|
24
|
-
font-family: var(--rel-
|
|
25
|
-
font-weight: var(--rel-
|
|
24
|
+
font-family: var(--rel-label-md-font-family);
|
|
25
|
+
font-weight: var(--rel-label-md-font-weight);
|
|
26
|
+
font-size: var(--rel-label-md-font-size);
|
|
27
|
+
line-height: var(--rel-label-md-line-height);
|
|
28
|
+
letter-spacing: var(--rel-label-md-letter-spacing);
|
|
26
29
|
white-space: nowrap;
|
|
27
30
|
user-select: none;
|
|
28
31
|
transition: box-shadow 0.15s ease, background 0.15s ease, border-color 0.15s ease;
|
|
29
|
-
line-height: 1;
|
|
30
32
|
vertical-align: middle;
|
|
31
33
|
}
|
|
32
34
|
|
|
35
|
+
/* Slotted hint text (Figma body-sm-regular) */
|
|
36
|
+
::slotted(span) {
|
|
37
|
+
font-family: var(--rel-body-sm-regular-font-family);
|
|
38
|
+
font-weight: var(--rel-body-sm-regular-font-weight);
|
|
39
|
+
font-size: var(--rel-body-sm-regular-font-size);
|
|
40
|
+
line-height: var(--rel-body-sm-regular-line-height);
|
|
41
|
+
letter-spacing: var(--rel-body-sm-regular-letter-spacing);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
33
45
|
:host([size="sm"]) {
|
|
34
|
-
|
|
35
|
-
padding: var(--rel-spacing-space-3xs) var(--rel-spacing-space-xs);
|
|
46
|
+
padding: var(--rel-spacing-3xs) var(--rel-spacing-xs);
|
|
36
47
|
min-width: 20px;
|
|
37
48
|
height: 20px;
|
|
38
|
-
border-radius: var(--rel-
|
|
49
|
+
border-radius: var(--rel-border-radius-xs);
|
|
50
|
+
|
|
51
|
+
font-family: var(--rel-label-xs-font-family);
|
|
52
|
+
|
|
53
|
+
font-weight: var(--rel-label-xs-font-weight);
|
|
54
|
+
|
|
55
|
+
font-size: var(--rel-label-xs-font-size);
|
|
56
|
+
|
|
57
|
+
line-height: var(--rel-label-xs-line-height);
|
|
58
|
+
|
|
59
|
+
letter-spacing: var(--rel-label-xs-letter-spacing);
|
|
60
|
+
|
|
39
61
|
}
|
|
40
62
|
|
|
41
63
|
:host([size="md"]) {
|
|
42
|
-
|
|
43
|
-
padding: var(--rel-spacing-space-2xs) var(--rel-spacing-space-sm);
|
|
64
|
+
padding: var(--rel-spacing-2xs) var(--rel-spacing-sm);
|
|
44
65
|
min-width: 24px;
|
|
45
66
|
height: 24px;
|
|
46
|
-
border-radius: var(--rel-
|
|
67
|
+
border-radius: var(--rel-border-radius-xs);
|
|
68
|
+
|
|
69
|
+
font-family: var(--rel-label-sm-font-family);
|
|
70
|
+
|
|
71
|
+
font-weight: var(--rel-label-sm-font-weight);
|
|
72
|
+
|
|
73
|
+
font-size: var(--rel-label-sm-font-size);
|
|
74
|
+
|
|
75
|
+
line-height: var(--rel-label-sm-line-height);
|
|
76
|
+
|
|
77
|
+
letter-spacing: var(--rel-label-sm-letter-spacing);
|
|
78
|
+
|
|
47
79
|
}
|
|
48
80
|
|
|
49
81
|
:host([size="lg"]) {
|
|
50
|
-
|
|
51
|
-
padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-md);
|
|
82
|
+
padding: var(--rel-spacing-xs) var(--rel-spacing-md);
|
|
52
83
|
min-width: 32px;
|
|
53
84
|
height: 32px;
|
|
54
|
-
border-radius: var(--rel-
|
|
85
|
+
border-radius: var(--rel-border-radius-sm);
|
|
86
|
+
|
|
87
|
+
font-family: var(--rel-label-lg-font-family);
|
|
88
|
+
|
|
89
|
+
font-weight: var(--rel-label-lg-font-weight);
|
|
90
|
+
|
|
91
|
+
font-size: var(--rel-label-lg-font-size);
|
|
92
|
+
|
|
93
|
+
line-height: var(--rel-label-lg-line-height);
|
|
94
|
+
|
|
95
|
+
letter-spacing: var(--rel-label-lg-letter-spacing);
|
|
96
|
+
|
|
55
97
|
}
|
|
56
98
|
|
|
57
99
|
:host([variant="default"]) {
|
|
58
|
-
background: var(--rel-
|
|
59
|
-
color: var(--rel-
|
|
60
|
-
border: var(--rel-
|
|
100
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
101
|
+
color: var(--rel-text-label);
|
|
102
|
+
border: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
61
103
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 1px 0 0 rgba(255, 255, 255, 0.5) inset;
|
|
62
104
|
}
|
|
63
105
|
|
|
64
106
|
:host([variant="muted"]) {
|
|
65
|
-
background: var(--rel-
|
|
66
|
-
color: var(--rel-
|
|
67
|
-
border: var(--rel-
|
|
107
|
+
background: var(--rel-bg-neutral-elevated-2);
|
|
108
|
+
color: var(--rel-text-placeholder);
|
|
109
|
+
border: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
68
110
|
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.03);
|
|
69
111
|
}
|
|
70
112
|
|
|
71
113
|
:host([pill]) {
|
|
72
|
-
border-radius: var(--rel-
|
|
114
|
+
border-radius: var(--rel-border-radius-full-rounded);
|
|
73
115
|
}
|
|
74
116
|
|
|
75
117
|
:host([inset]) {
|
|
@@ -78,13 +120,13 @@ export class RelKbd extends LitElement {
|
|
|
78
120
|
}
|
|
79
121
|
|
|
80
122
|
:host([inset][variant="default"]) {
|
|
81
|
-
background: var(--rel-
|
|
82
|
-
border-color: var(--rel-
|
|
123
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
124
|
+
border-color: var(--rel-border-default);
|
|
83
125
|
}
|
|
84
126
|
|
|
85
127
|
:host([inset][variant="muted"]) {
|
|
86
|
-
background: var(--rel-
|
|
87
|
-
border-color: var(--rel-
|
|
128
|
+
background: var(--rel-border-default);
|
|
129
|
+
border-color: var(--rel-border-default);
|
|
88
130
|
}
|
|
89
131
|
`;
|
|
90
132
|
|
|
@@ -92,3 +134,55 @@ export class RelKbd extends LitElement {
|
|
|
92
134
|
return html`<slot></slot>`;
|
|
93
135
|
}
|
|
94
136
|
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Multi-key shortcut (Figma Kbd Items=1/2/3/4): renders one <rel-kbd> per
|
|
140
|
+
* entry in `items` with "+" separators between them. Slotted <rel-kbd>
|
|
141
|
+
* children may be used instead of the items array.
|
|
142
|
+
*
|
|
143
|
+
* <rel-kbd-group .items=${["Ctrl", "Shift", "P"]} size="md"></rel-kbd-group>
|
|
144
|
+
*/
|
|
145
|
+
@customElement("rel-kbd-group")
|
|
146
|
+
export class RelKbdGroup extends LitElement {
|
|
147
|
+
@property({ type: Array }) items: string[] = [];
|
|
148
|
+
|
|
149
|
+
@property({ type: String, reflect: true })
|
|
150
|
+
size: "sm" | "md" | "lg" = "md";
|
|
151
|
+
|
|
152
|
+
@property({ type: String, reflect: true })
|
|
153
|
+
variant: "default" | "muted" = "default";
|
|
154
|
+
|
|
155
|
+
static styles = css`
|
|
156
|
+
:host {
|
|
157
|
+
display: inline-flex;
|
|
158
|
+
align-items: center;
|
|
159
|
+
gap: var(--rel-spacing-2xs);
|
|
160
|
+
white-space: nowrap;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* "+" between keys (Figma body-sm-regular, caption tone) */
|
|
164
|
+
.separator {
|
|
165
|
+
font-family: var(--rel-body-sm-regular-font-family);
|
|
166
|
+
font-weight: var(--rel-body-sm-regular-font-weight);
|
|
167
|
+
font-size: var(--rel-body-sm-regular-font-size);
|
|
168
|
+
line-height: var(--rel-body-sm-regular-line-height);
|
|
169
|
+
letter-spacing: var(--rel-body-sm-regular-letter-spacing);
|
|
170
|
+
color: var(--rel-text-caption);
|
|
171
|
+
user-select: none;
|
|
172
|
+
}
|
|
173
|
+
`;
|
|
174
|
+
|
|
175
|
+
render() {
|
|
176
|
+
return html`
|
|
177
|
+
${this.items.map(
|
|
178
|
+
(key, i) => html`
|
|
179
|
+
${i > 0
|
|
180
|
+
? html`<span part="label" class="separator" aria-hidden="true">+</span>`
|
|
181
|
+
: nothing}
|
|
182
|
+
<rel-kbd part="item" size=${this.size} variant=${this.variant}>${key}</rel-kbd>
|
|
183
|
+
`
|
|
184
|
+
)}
|
|
185
|
+
<slot></slot>
|
|
186
|
+
`;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { LitElement, html, css } from "lit";
|
|
2
2
|
import { customElement, property } from "lit/decorators.js";
|
|
3
|
-
import "../../styles/vars-v2.css";
|
|
4
3
|
|
|
5
4
|
@customElement("rel-layout")
|
|
6
5
|
export class RelLayout extends LitElement {
|
|
@@ -12,9 +11,10 @@ export class RelLayout extends LitElement {
|
|
|
12
11
|
|
|
13
12
|
static styles = css`
|
|
14
13
|
:host {
|
|
14
|
+
color: var(--rel-text-default);
|
|
15
15
|
display: grid;
|
|
16
16
|
width: 100%;
|
|
17
|
-
font-family: var(--rel-
|
|
17
|
+
font-family: var(--rel-fonts-font-family);
|
|
18
18
|
gap: var(--_gap, 1rem);
|
|
19
19
|
grid-template-columns: repeat(var(--_columns, 4), 1fr);
|
|
20
20
|
}
|
|
@@ -92,31 +92,31 @@ None exposed.
|
|
|
92
92
|
## Tokens / CSS Variables
|
|
93
93
|
|
|
94
94
|
### Semantic Tokens
|
|
95
|
-
- `--rel-
|
|
96
|
-
- `--rel-
|
|
97
|
-
- `--rel-
|
|
98
|
-
- `--rel-
|
|
99
|
-
- `--rel-
|
|
95
|
+
- `--rel-fonts-font-family` - Font family
|
|
96
|
+
- `--rel-body-sm-regular-font-size` - Font size
|
|
97
|
+
- `--rel-body-xl-regular-font-size` - Chevron font size
|
|
98
|
+
- `--rel-fonts-weight-body-medium` - Active item font weight
|
|
99
|
+
- `--rel-body-sm-regular-line-height` - Line height
|
|
100
100
|
|
|
101
101
|
### Spacing Tokens
|
|
102
|
-
- `--rel-spacing-
|
|
103
|
-
- `--rel-spacing-
|
|
104
|
-
- `--rel-spacing-
|
|
105
|
-
- `--rel-spacing-
|
|
102
|
+
- `--rel-spacing-3xs` - Menu vertical padding
|
|
103
|
+
- `--rel-spacing-xs` - Item padding, gaps
|
|
104
|
+
- `--rel-spacing-sm` - Item horizontal padding
|
|
105
|
+
- `--rel-spacing-2xs` - Checkbox gap, submenu offset
|
|
106
106
|
|
|
107
107
|
### Color Tokens
|
|
108
|
-
- `--rel-
|
|
109
|
-
- `--rel-text-
|
|
108
|
+
- `--rel-bg-surface` - Menu and submenu background
|
|
109
|
+
- `--rel-text-default` - Default text color
|
|
110
110
|
- `--rel-text-disabled` - Disabled item text
|
|
111
|
-
- `--rel-surface-
|
|
112
|
-
- `--rel-
|
|
113
|
-
- `--rel-
|
|
111
|
+
- `--rel-bg-surface-elevated` - Hover and active background
|
|
112
|
+
- `--rel-border-default` - Active press background
|
|
113
|
+
- `--rel-bg-info` - Focus outline
|
|
114
114
|
|
|
115
115
|
### Shadow Tokens
|
|
116
116
|
- `--rel-shadows-shadow-300` - Menu and submenu drop shadow
|
|
117
117
|
|
|
118
118
|
### Border Tokens
|
|
119
|
-
- `--rel-
|
|
119
|
+
- `--rel-border-radius-md` - Border radius
|
|
120
120
|
|
|
121
121
|
## Accessibility
|
|
122
122
|
- Uses `role="menu"` on container and `role="menuitem"` on items
|