@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.
Files changed (124) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/components/rel-accordion/README.md +13 -13
  3. package/dist/components/rel-accordion/rel-accordion.ts +80 -45
  4. package/dist/components/rel-alert/README.md +15 -15
  5. package/dist/components/rel-alert/rel-alert.ts +149 -158
  6. package/dist/components/rel-avatar/README.md +15 -15
  7. package/dist/components/rel-avatar/rel-avatar.ts +42 -38
  8. package/dist/components/rel-badge/README.md +5 -5
  9. package/dist/components/rel-badge/rel-badge.ts +46 -11
  10. package/dist/components/rel-breadcrumb/README.md +7 -7
  11. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +16 -13
  12. package/dist/components/rel-button/README.md +20 -20
  13. package/dist/components/rel-button/rel-button.ts +292 -105
  14. package/dist/components/rel-calendar/README.md +5 -5
  15. package/dist/components/rel-calendar/rel-calendar.ts +68 -45
  16. package/dist/components/rel-card/README.md +6 -6
  17. package/dist/components/rel-card/rel-card.ts +88 -35
  18. package/dist/components/rel-cardmedia/README.md +9 -9
  19. package/dist/components/rel-cardmedia/rel-cardmedia.ts +27 -20
  20. package/dist/components/rel-carousel/README.md +3 -3
  21. package/dist/components/rel-carousel/rel-carousel.ts +174 -90
  22. package/dist/components/rel-chart/README.md +8 -8
  23. package/dist/components/rel-chart/rel-chart.ts +59 -41
  24. package/dist/components/rel-checkbox/README.md +7 -7
  25. package/dist/components/rel-checkbox/rel-checkbox.ts +61 -61
  26. package/dist/components/rel-chip/README.md +16 -16
  27. package/dist/components/rel-chip/rel-chip.ts +143 -111
  28. package/dist/components/rel-container/README.md +11 -11
  29. package/dist/components/rel-container/rel-container.ts +35 -9
  30. package/dist/components/rel-date-picker/README.md +43 -7
  31. package/dist/components/rel-date-picker/date-format.test.ts +43 -0
  32. package/dist/components/rel-date-picker/date-format.ts +47 -0
  33. package/dist/components/rel-date-picker/rel-date-picker.ts +154 -82
  34. package/dist/components/rel-divider/README.md +9 -9
  35. package/dist/components/rel-divider/rel-divider.ts +10 -9
  36. package/dist/components/rel-drawer/README.md +1 -1
  37. package/dist/components/rel-drawer/rel-drawer-footer.ts +1 -1
  38. package/dist/components/rel-drawer/rel-drawer.ts +88 -25
  39. package/dist/components/rel-kbd/README.md +20 -20
  40. package/dist/components/rel-kbd/rel-kbd.ts +119 -25
  41. package/dist/components/rel-layout/README.md +1 -1
  42. package/dist/components/rel-layout/rel-layout.ts +2 -2
  43. package/dist/components/rel-menu/README.md +15 -15
  44. package/dist/components/rel-menu/rel-menu.ts +155 -88
  45. package/dist/components/rel-menubar/README.md +20 -20
  46. package/dist/components/rel-menubar/rel-menubar.ts +47 -31
  47. package/dist/components/rel-nav-menu/README.md +21 -21
  48. package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +17 -14
  49. package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +33 -14
  50. package/dist/components/rel-nav-menu/rel-nav-menu.ts +14 -7
  51. package/dist/components/rel-navbar/README.md +7 -7
  52. package/dist/components/rel-navbar/rel-navbar.ts +12 -11
  53. package/dist/components/rel-otp/README.md +3 -3
  54. package/dist/components/rel-otp/rel-otp.ts +46 -30
  55. package/dist/components/rel-pagination/README.md +18 -18
  56. package/dist/components/rel-pagination/rel-pagination.ts +141 -90
  57. package/dist/components/rel-popover/README.md +13 -13
  58. package/dist/components/rel-popover/rel-popover-content.ts +39 -14
  59. package/dist/components/rel-popover/rel-popover.ts +18 -7
  60. package/dist/components/rel-progress/README.md +5 -5
  61. package/dist/components/rel-progress/rel-progress.ts +16 -12
  62. package/dist/components/rel-radio/README.md +9 -9
  63. package/dist/components/rel-radio/rel-radio.ts +64 -50
  64. package/dist/components/rel-range-picker/rel-range-picker.ts +120 -117
  65. package/dist/components/rel-resizable/README.md +4 -4
  66. package/dist/components/rel-resizable/rel-resizable-group.ts +15 -4
  67. package/dist/components/rel-resizable/rel-resizable-handle.ts +13 -9
  68. package/dist/components/rel-resizable/rel-resizable-panel.ts +11 -0
  69. package/dist/components/rel-segmented-button/README.md +10 -10
  70. package/dist/components/rel-segmented-button/rel-segmented-button.ts +39 -40
  71. package/dist/components/rel-select/README.md +14 -14
  72. package/dist/components/rel-select/rel-select.ts +120 -188
  73. package/dist/components/rel-sheet/README.md +10 -10
  74. package/dist/components/rel-sheet/rel-sheet.ts +82 -23
  75. package/dist/components/rel-sidebar/README.md +5 -5
  76. package/dist/components/rel-sidebar/rel-sidebar.ts +75 -60
  77. package/dist/components/rel-skeleton/rel-skeleton.ts +8 -13
  78. package/dist/components/rel-slider/README.md +10 -10
  79. package/dist/components/rel-slider/rel-slider.ts +230 -57
  80. package/dist/components/rel-snackbar/README.md +9 -9
  81. package/dist/components/rel-snackbar/rel-snackbar.ts +44 -32
  82. package/dist/components/rel-stepper/README.md +10 -10
  83. package/dist/components/rel-stepper/rel-stepper.ts +110 -46
  84. package/dist/components/rel-switch/README.md +5 -5
  85. package/dist/components/rel-switch/rel-switch.ts +23 -12
  86. package/dist/components/rel-tab/README.md +13 -13
  87. package/dist/components/rel-tab/rel-tab.ts +63 -19
  88. package/dist/components/rel-table/README.md +7 -7
  89. package/dist/components/rel-table/rel-table-body.ts +2 -1
  90. package/dist/components/rel-table/rel-table-caption.ts +10 -7
  91. package/dist/components/rel-table/rel-table-cell.ts +7 -6
  92. package/dist/components/rel-table/rel-table-footer.ts +4 -3
  93. package/dist/components/rel-table/rel-table-head.ts +11 -9
  94. package/dist/components/rel-table/rel-table-header.ts +2 -1
  95. package/dist/components/rel-table/rel-table-row.ts +5 -4
  96. package/dist/components/rel-table/rel-table.ts +16 -7
  97. package/dist/components/rel-textfield/README.md +11 -11
  98. package/dist/components/rel-textfield/rel-textfield.ts +218 -92
  99. package/dist/components/rel-toast/README.md +11 -11
  100. package/dist/components/rel-toast/rel-toast.ts +33 -30
  101. package/dist/components/rel-tooltip/README.md +7 -7
  102. package/dist/components/rel-tooltip/rel-tooltip.ts +160 -123
  103. package/dist/components/rel-topbar/rel-topbar-actions.ts +1 -2
  104. package/dist/components/rel-topbar/rel-topbar-brand.ts +8 -5
  105. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +10 -8
  106. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +4 -5
  107. package/dist/components/rel-topbar/rel-topbar-item.ts +23 -22
  108. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +0 -1
  109. package/dist/components/rel-topbar/rel-topbar-profile.ts +68 -50
  110. package/dist/components/rel-topbar/rel-topbar-utilities.ts +1 -2
  111. package/dist/components/rel-topbar/rel-topbar.ts +31 -29
  112. package/dist/index.d.mts +159 -39
  113. package/dist/index.d.ts +159 -39
  114. package/dist/index.js +3600 -2269
  115. package/dist/index.js.map +1 -1
  116. package/dist/index.mjs +3930 -2600
  117. package/dist/index.mjs.map +1 -1
  118. package/dist/styles/vars.css +866 -363
  119. package/dist/vars-BYCEEKWJ.css +866 -0
  120. package/package.json +5 -3
  121. package/dist/components/rel-range-picker/rel-range-picker.css +0 -349
  122. package/dist/styles/vars-v2.css +0 -525
  123. package/dist/vars-F54UGCHM.css +0 -363
  124. 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-color-bg-primary);
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-fontFamilies-primary);
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-borders-radius-border-radius-200)
94
- var(--rel-borders-radius-border-radius-200)
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-color-border-divider);
150
- border-radius: var(--rel-borders-radius-border-radius-500);
151
- margin: var(--rel-spacing-space-xs) auto var(--rel-spacing-space-2xs);
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-space-2xs);
169
- padding: var(--rel-spacing-space-md) var(--rel-spacing-space-lg);
170
- border-bottom: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);
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
- font-size: var(--rel-fontSizes-lg);
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
- font-size: var(--rel-fontSizes-sm);
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-space-2xs);
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-borders-radius-border-radius-100);
208
- color: var(--rel-color-text-primary);
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-secondary, #fafafa);
254
+ background: var(--rel-bg-surface-elevated);
214
255
  }
215
256
 
216
257
  .close-button:active {
217
- background: var(--rel-color-border-divider);
258
+ background: var(--rel-border-default);
218
259
  }
219
260
 
220
261
  .close-button:focus-visible {
221
- outline: 2px solid var(--rel-color-border-focus);
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-space-lg);
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-space-md) var(--rel-spacing-space-lg);
236
- border-top: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);
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-colors-gray-light` - Default background
53
- - `--rel-colors-gray-background` - Muted and inset backgrounds
54
- - `--rel-colors-gray-heading` - Default text color
55
- - `--rel-colors-gray-placeholder` - Muted text color
56
- - `--rel-colors-gray-border` - Default border
57
- - `--rel-colors-gray-divider` - Muted border
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-fontFamilies-primary` - Font family (Poppins)
61
- - `--rel-fontWeights-medium` - Font weight (500)
62
- - `--rel-fontSizes-xs` - Small size font
63
- - `--rel-fontSizes-sm` - Medium size font
64
- - `--rel-fontSizes-md` - Large size font
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-space-3xs` (2px)
68
- - `--rel-spacing-space-2xs` (4px)
69
- - `--rel-spacing-space-xs` (8px)
70
- - `--rel-spacing-space-sm` (12px)
71
- - `--rel-spacing-space-md` (16px)
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-borders-width-stroke-100` (1px)
75
- - `--rel-borders-radius-border-radius-100` (2px)
76
- - `--rel-borders-radius-border-radius-200` (8px)
77
- - `--rel-borders-radius-border-radius-500` (1000px - pill shape)
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-fontFamilies-primary);
25
- font-weight: var(--rel-fontWeights-medium);
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
- font-size: var(--rel-fontSizes-xs);
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-borders-radius-border-radius-100);
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
- font-size: var(--rel-fontSizes-sm);
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-borders-radius-border-radius-100);
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
- font-size: var(--rel-fontSizes-md);
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-borders-radius-border-radius-200);
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-color-bg-secondary);
59
- color: var(--rel-color-text-heading);
60
- border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);
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-color-bg-secondary);
66
- color: var(--rel-color-text-placeholder);
67
- border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-divider);
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-borders-radius-border-radius-500);
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-color-bg-secondary);
82
- border-color: var(--rel-color-border-divider);
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-color-border-divider);
87
- border-color: var(--rel-color-border-default);
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
+ }
@@ -62,7 +62,7 @@ None exposed.
62
62
  ## Tokens / CSS Variables
63
63
 
64
64
  ### Semantic Tokens
65
- - `--rel-fontFamilies-primary` - Font family
65
+ - `--rel-fonts-font-family` - Font family
66
66
 
67
67
  ## Accessibility
68
68
  - Uses standard CSS Grid, which is accessible by default
@@ -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-fontFamilies-primary);
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-fontFamilies-primary` - Font family
96
- - `--rel-fontSizes-sm` - Font size
97
- - `--rel-fontSizes-lg` - Chevron font size
98
- - `--rel-fontWeights-medium` - Active item font weight
99
- - `--rel-lineHeights-sm` - Line height
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-space-3xs` - Menu vertical padding
103
- - `--rel-spacing-space-xs` - Item padding, gaps
104
- - `--rel-spacing-space-sm` - Item horizontal padding
105
- - `--rel-spacing-space-2xs` - Checkbox gap, submenu offset
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-colors-white` - Menu and submenu background
109
- - `--rel-text-primary` - Default text color
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-secondary` - Hover and active background
112
- - `--rel-colors-gray-divider` - Active press background
113
- - `--rel-colors-blue-primary` - Focus outline
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-borders-radius-border-radius-300` - Border radius
119
+ - `--rel-border-radius-md` - Border radius
120
120
 
121
121
  ## Accessibility
122
122
  - Uses `role="menu"` on container and `role="menuitem"` on items