@reliability-design/web 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +161 -159
- 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 +69 -17
- 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 +327 -105
- package/dist/components/rel-calendar/README.md +5 -5
- package/dist/components/rel-calendar/rel-calendar.ts +61 -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 +257 -83
- 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 +56 -28
- 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 +73 -23
- 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 +718 -397
- 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 +5 -2
- package/dist/components/rel-topbar/rel-topbar-brand.ts +12 -5
- package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +14 -8
- package/dist/components/rel-topbar/rel-topbar-dropdown.ts +8 -5
- package/dist/components/rel-topbar/rel-topbar-item.ts +27 -22
- package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +4 -1
- package/dist/components/rel-topbar/rel-topbar-profile.ts +71 -50
- package/dist/components/rel-topbar/rel-topbar-utilities.ts +5 -2
- package/dist/components/rel-topbar/rel-topbar.ts +37 -29
- package/dist/index.d.mts +227 -40
- package/dist/index.d.ts +227 -40
- package/dist/index.js +3930 -2247
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4311 -2629
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +653 -346
- package/dist/vars-WY2XCF5G.css +653 -0
- package/package.json +3 -2
- package/dist/components/rel-range-picker/rel-range-picker.css +0 -349
- package/dist/styles/vars-v2.css +0 -525
- package/dist/vars-I2PC74XD.css +0 -346
- package/dist/vars-v2-VMGWTFJZ.css +0 -525
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { LitElement, html, css } from "lit";
|
|
2
2
|
import { customElement, property, query } from "lit/decorators.js";
|
|
3
|
-
import "../../styles/vars-v2.css";
|
|
4
3
|
import "@reliability-design/icons/rel-icon";
|
|
5
4
|
|
|
6
5
|
export type ModalSide = "top" | "bottom" | "center";
|
|
@@ -14,6 +13,13 @@ export class RelModal extends LitElement {
|
|
|
14
13
|
@property({ type: Boolean }) dismissible = true;
|
|
15
14
|
@property({ type: Boolean }) modal = true;
|
|
16
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Figma "Breakpoint" axis. responsive (default) collapses to a full-width
|
|
18
|
+
* bottom sheet below 480px; web keeps the fixed desktop panel at every size.
|
|
19
|
+
*/
|
|
20
|
+
@property({ type: String, reflect: true })
|
|
21
|
+
breakpoint: "responsive" | "web" = "responsive";
|
|
22
|
+
|
|
17
23
|
@query(".overlay") private overlayElement!: HTMLElement;
|
|
18
24
|
|
|
19
25
|
private previousFocus: HTMLElement | null = null;
|
|
@@ -22,6 +28,7 @@ export class RelModal extends LitElement {
|
|
|
22
28
|
|
|
23
29
|
static styles = css`
|
|
24
30
|
:host {
|
|
31
|
+
color: var(--rel-text-default);
|
|
25
32
|
--modal-transition-duration: 0.3s;
|
|
26
33
|
--modal-transition-timing: cubic-bezier(0.32, 0.72, 0, 1);
|
|
27
34
|
}
|
|
@@ -61,13 +68,13 @@ export class RelModal extends LitElement {
|
|
|
61
68
|
|
|
62
69
|
.panel {
|
|
63
70
|
position: absolute;
|
|
64
|
-
background: var(--rel-
|
|
71
|
+
background: var(--rel-bg-surface);
|
|
65
72
|
box-shadow: var(--rel-shadows-shadow-500);
|
|
66
73
|
display: flex;
|
|
67
74
|
flex-direction: column;
|
|
68
75
|
overflow: hidden;
|
|
69
76
|
outline: none;
|
|
70
|
-
font-family: var(--rel-
|
|
77
|
+
font-family: var(--rel-fonts-font-family);
|
|
71
78
|
width: clamp(360px, 49vw, 708px);
|
|
72
79
|
left: 50%;
|
|
73
80
|
transition: transform var(--modal-transition-duration) var(--modal-transition-timing),
|
|
@@ -79,7 +86,7 @@ export class RelModal extends LitElement {
|
|
|
79
86
|
left: 50%;
|
|
80
87
|
width: clamp(360px, 49vw, 708px);
|
|
81
88
|
max-height: calc(100vh - 96px);
|
|
82
|
-
border-radius: var(--rel-
|
|
89
|
+
border-radius: var(--rel-border-radius-sm);
|
|
83
90
|
transform: translateX(-50%) translateY(calc(100% + 48px));
|
|
84
91
|
}
|
|
85
92
|
|
|
@@ -92,7 +99,7 @@ export class RelModal extends LitElement {
|
|
|
92
99
|
left: 50%;
|
|
93
100
|
width: clamp(360px, 49vw, 708px);
|
|
94
101
|
max-height: calc(100vh - 96px);
|
|
95
|
-
border-radius: var(--rel-
|
|
102
|
+
border-radius: var(--rel-border-radius-sm);
|
|
96
103
|
transform: translateX(-50%) translateY(calc(-100% - 48px));
|
|
97
104
|
}
|
|
98
105
|
|
|
@@ -105,7 +112,7 @@ export class RelModal extends LitElement {
|
|
|
105
112
|
left: 50%;
|
|
106
113
|
width: clamp(360px, 49vw, 708px);
|
|
107
114
|
max-height: calc(100vh - 96px);
|
|
108
|
-
border-radius: var(--rel-
|
|
115
|
+
border-radius: var(--rel-border-radius-sm);
|
|
109
116
|
transform: translate(-50%, -50%) scale(0.96);
|
|
110
117
|
opacity: 0;
|
|
111
118
|
}
|
|
@@ -115,12 +122,38 @@ export class RelModal extends LitElement {
|
|
|
115
122
|
opacity: 1;
|
|
116
123
|
}
|
|
117
124
|
|
|
125
|
+
/* Figma Breakpoint=Responsive: below 480px every side collapses to a
|
|
126
|
+
full-width bottom sheet. Breakpoint=Web keeps the desktop panel. */
|
|
127
|
+
@media (max-width: 480px) {
|
|
128
|
+
:host([breakpoint="responsive"]) .panel,
|
|
129
|
+
:host([breakpoint="responsive"]) .panel[data-side="top"],
|
|
130
|
+
:host([breakpoint="responsive"]) .panel[data-side="center"],
|
|
131
|
+
:host([breakpoint="responsive"]) .panel[data-side="bottom"] {
|
|
132
|
+
width: 100%;
|
|
133
|
+
left: 0;
|
|
134
|
+
right: 0;
|
|
135
|
+
top: auto;
|
|
136
|
+
bottom: 0;
|
|
137
|
+
max-height: 90vh;
|
|
138
|
+
border-radius: var(--rel-border-radius-md) var(--rel-border-radius-md) 0 0;
|
|
139
|
+
opacity: 1;
|
|
140
|
+
transform: translateY(100%);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
:host([breakpoint="responsive"]) .modal-container.open .panel,
|
|
144
|
+
:host([breakpoint="responsive"]) .modal-container.open .panel[data-side="top"],
|
|
145
|
+
:host([breakpoint="responsive"]) .modal-container.open .panel[data-side="center"],
|
|
146
|
+
:host([breakpoint="responsive"]) .modal-container.open .panel[data-side="bottom"] {
|
|
147
|
+
transform: translateY(0);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
118
151
|
.header {
|
|
119
152
|
display: flex;
|
|
120
153
|
align-items: flex-start;
|
|
121
154
|
justify-content: space-between;
|
|
122
|
-
padding: var(--rel-spacing-
|
|
123
|
-
border-bottom: var(--rel-
|
|
155
|
+
padding: var(--rel-spacing-md) var(--rel-spacing-lg);
|
|
156
|
+
border-bottom: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
124
157
|
flex-shrink: 0;
|
|
125
158
|
}
|
|
126
159
|
|
|
@@ -129,52 +162,78 @@ export class RelModal extends LitElement {
|
|
|
129
162
|
}
|
|
130
163
|
|
|
131
164
|
.header-text {
|
|
165
|
+
gap: var(--rel-spacing-2xs);
|
|
132
166
|
display: flex;
|
|
133
167
|
flex-direction: column;
|
|
134
|
-
gap: var(--rel-spacing-
|
|
168
|
+
gap: var(--rel-spacing-2xs);
|
|
135
169
|
}
|
|
136
170
|
|
|
137
171
|
.title {
|
|
138
|
-
|
|
139
|
-
font-weight: var(--rel-fontWeights-semibold);
|
|
140
|
-
color: var(--rel-color-text-heading);
|
|
172
|
+
color: var(--rel-text-label);
|
|
141
173
|
margin: 0;
|
|
174
|
+
|
|
175
|
+
font-family: var(--rel-headings-lg-font-family);
|
|
176
|
+
|
|
177
|
+
font-weight: var(--rel-headings-lg-font-weight);
|
|
178
|
+
|
|
179
|
+
font-size: var(--rel-headings-lg-font-size);
|
|
180
|
+
|
|
181
|
+
line-height: var(--rel-headings-lg-line-height);
|
|
182
|
+
|
|
183
|
+
letter-spacing: var(--rel-headings-lg-letter-spacing);
|
|
184
|
+
|
|
142
185
|
}
|
|
143
186
|
|
|
144
187
|
.description {
|
|
145
|
-
|
|
146
|
-
color: var(--rel-color-text-primary);
|
|
188
|
+
color: var(--rel-text-body);
|
|
147
189
|
margin: 0;
|
|
190
|
+
|
|
191
|
+
font-family: var(--rel-body-lg-regular-font-family);
|
|
192
|
+
|
|
193
|
+
font-weight: var(--rel-body-lg-regular-font-weight);
|
|
194
|
+
|
|
195
|
+
font-size: var(--rel-body-lg-regular-font-size);
|
|
196
|
+
|
|
197
|
+
line-height: var(--rel-body-lg-regular-line-height);
|
|
198
|
+
|
|
199
|
+
letter-spacing: var(--rel-body-lg-regular-letter-spacing);
|
|
200
|
+
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* Emphasised inline text in slotted content (Figma body-lg-medium) */
|
|
204
|
+
.content ::slotted(strong),
|
|
205
|
+
.content ::slotted(b) {
|
|
206
|
+
font-weight: var(--rel-body-lg-medium-font-weight);
|
|
148
207
|
}
|
|
149
208
|
|
|
150
209
|
.close-button {
|
|
151
210
|
background: transparent;
|
|
152
211
|
border: none;
|
|
153
212
|
cursor: pointer;
|
|
154
|
-
padding: var(--rel-spacing-
|
|
213
|
+
padding: var(--rel-spacing-2xs);
|
|
155
214
|
display: flex;
|
|
156
215
|
align-items: center;
|
|
157
216
|
justify-content: center;
|
|
158
217
|
align-self: flex-start;
|
|
159
218
|
flex-shrink: 0;
|
|
160
|
-
border-radius: var(--rel-
|
|
161
|
-
color: var(--rel-
|
|
219
|
+
border-radius: var(--rel-border-radius-xs);
|
|
220
|
+
color: var(--rel-text-default);
|
|
162
221
|
transition: background 0.15s ease;
|
|
163
222
|
}
|
|
164
223
|
|
|
165
224
|
.close-button:hover {
|
|
166
|
-
background: var(--rel-
|
|
225
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
167
226
|
}
|
|
168
227
|
|
|
169
228
|
.close-button:focus-visible {
|
|
170
|
-
outline: 2px solid var(--rel-
|
|
229
|
+
outline: 2px solid var(--rel-border-focus);
|
|
171
230
|
outline-offset: 2px;
|
|
172
231
|
}
|
|
173
232
|
|
|
174
233
|
.content {
|
|
175
234
|
flex: 1;
|
|
176
235
|
overflow-y: auto;
|
|
177
|
-
padding: var(--rel-spacing-
|
|
236
|
+
padding: var(--rel-spacing-xl);
|
|
178
237
|
}
|
|
179
238
|
|
|
180
239
|
.footer {
|
|
@@ -184,10 +243,10 @@ export class RelModal extends LitElement {
|
|
|
184
243
|
:host([has-footer]) .footer {
|
|
185
244
|
display: flex;
|
|
186
245
|
flex-shrink: 0;
|
|
187
|
-
padding: var(--rel-spacing-
|
|
188
|
-
border-top: var(--rel-
|
|
246
|
+
padding: var(--rel-spacing-md) var(--rel-spacing-lg);
|
|
247
|
+
border-top: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
189
248
|
justify-content: flex-end;
|
|
190
|
-
gap: var(--rel-spacing-
|
|
249
|
+
gap: var(--rel-spacing-xs);
|
|
191
250
|
}
|
|
192
251
|
|
|
193
252
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -149,8 +149,8 @@ None exposed.
|
|
|
149
149
|
- `--sidebar-transition-timing`: `cubic-bezier(0.4, 0, 0.2, 1)`
|
|
150
150
|
|
|
151
151
|
### Color Tokens
|
|
152
|
-
- `--rel-surface-
|
|
153
|
-
- `--rel-text-
|
|
152
|
+
- `--rel-bg-surface-elevated` - Sidebar background (`#fafafa`)
|
|
153
|
+
- `--rel-text-default` - Text color
|
|
154
154
|
- `--rel-border-default` - Border color
|
|
155
155
|
- `--rel-overlay-scrim` - Overlay background (`rgba(0, 0, 0, 0.5)`)
|
|
156
156
|
|
|
@@ -158,9 +158,9 @@ None exposed.
|
|
|
158
158
|
- `--rel-shadows-shadow-400` - Floating variant shadow
|
|
159
159
|
|
|
160
160
|
### Other Tokens
|
|
161
|
-
- `--rel-
|
|
162
|
-
- `--rel-spacing-
|
|
163
|
-
- `--rel-spacing-
|
|
161
|
+
- `--rel-border-radius-md` - Floating variant border radius
|
|
162
|
+
- `--rel-spacing-md` - Floating variant inset, header/footer padding
|
|
163
|
+
- `--rel-spacing-2xs` - Used in various layouts
|
|
164
164
|
|
|
165
165
|
## Accessibility
|
|
166
166
|
- Sidebar uses `role="navigation"`
|
|
@@ -11,6 +11,12 @@ export type SidebarChangeReason = "trigger" | "rail" | "overlay" | "escape" | "s
|
|
|
11
11
|
// ============================================================================
|
|
12
12
|
// rel-sidebar-provider (Root State Manager)
|
|
13
13
|
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated The rel-sidebar family has no Figma design in RelDS 2.0 and is
|
|
16
|
+
* excluded from the parity contract. Compose sidebars from rel-drawer,
|
|
17
|
+
* rel-menu and rel-resizable instead. It remains exported for compatibility
|
|
18
|
+
* but will be removed in a future major version.
|
|
19
|
+
*/
|
|
14
20
|
@customElement("rel-sidebar-provider")
|
|
15
21
|
export class RelSidebarProvider extends LitElement {
|
|
16
22
|
@property({ type: Boolean, reflect: true }) open?: boolean;
|
|
@@ -40,6 +46,7 @@ export class RelSidebarProvider extends LitElement {
|
|
|
40
46
|
|
|
41
47
|
static styles = css`
|
|
42
48
|
:host {
|
|
49
|
+
color: var(--rel-text-default);
|
|
43
50
|
display: contents;
|
|
44
51
|
}
|
|
45
52
|
`;
|
|
@@ -335,8 +342,8 @@ export class RelSidebar extends LitElement {
|
|
|
335
342
|
top: 0;
|
|
336
343
|
bottom: 0;
|
|
337
344
|
z-index: 1000;
|
|
338
|
-
background: var(--rel-surface-
|
|
339
|
-
color: var(--rel-text-
|
|
345
|
+
background: var(--rel-bg-surface-elevated);
|
|
346
|
+
color: var(--rel-text-default);
|
|
340
347
|
display: flex;
|
|
341
348
|
flex-direction: column;
|
|
342
349
|
transition: transform var(--sidebar-transition-duration)
|
|
@@ -351,7 +358,7 @@ export class RelSidebar extends LitElement {
|
|
|
351
358
|
/* Left side */
|
|
352
359
|
.sidebar-container[data-side="left"] {
|
|
353
360
|
left: 0;
|
|
354
|
-
border-right: 1px solid var(--rel-border-default
|
|
361
|
+
border-right: 1px solid var(--rel-border-default);
|
|
355
362
|
}
|
|
356
363
|
|
|
357
364
|
.sidebar-container[data-side="left"].offcanvas-hidden {
|
|
@@ -361,7 +368,7 @@ export class RelSidebar extends LitElement {
|
|
|
361
368
|
/* Right side */
|
|
362
369
|
.sidebar-container[data-side="right"] {
|
|
363
370
|
right: 0;
|
|
364
|
-
border-left: 1px solid var(--rel-border-default
|
|
371
|
+
border-left: 1px solid var(--rel-border-default);
|
|
365
372
|
}
|
|
366
373
|
|
|
367
374
|
.sidebar-container[data-side="right"].offcanvas-hidden {
|
|
@@ -370,20 +377,20 @@ export class RelSidebar extends LitElement {
|
|
|
370
377
|
|
|
371
378
|
/* Floating variant */
|
|
372
379
|
.sidebar-container.variant-floating {
|
|
373
|
-
top: var(--rel-spacing-
|
|
374
|
-
bottom: var(--rel-spacing-
|
|
375
|
-
background: var(--rel-surface-
|
|
376
|
-
border: 1px solid var(--rel-border-default
|
|
377
|
-
border-radius: var(--rel-
|
|
380
|
+
top: var(--rel-spacing-md, 16px);
|
|
381
|
+
bottom: var(--rel-spacing-md, 16px);
|
|
382
|
+
background: var(--rel-bg-surface-elevated);
|
|
383
|
+
border: 1px solid var(--rel-border-default);
|
|
384
|
+
border-radius: var(--rel-border-radius-md, 16px);
|
|
378
385
|
box-shadow: var(--rel-shadows-shadow-400);
|
|
379
386
|
}
|
|
380
387
|
|
|
381
388
|
.sidebar-container.variant-floating[data-side="left"] {
|
|
382
|
-
left: var(--rel-spacing-
|
|
389
|
+
left: var(--rel-spacing-md, 16px);
|
|
383
390
|
}
|
|
384
391
|
|
|
385
392
|
.sidebar-container.variant-floating[data-side="right"] {
|
|
386
|
-
right: var(--rel-spacing-
|
|
393
|
+
right: var(--rel-spacing-md, 16px);
|
|
387
394
|
}
|
|
388
395
|
|
|
389
396
|
/* Inset variant */
|
|
@@ -395,11 +402,11 @@ export class RelSidebar extends LitElement {
|
|
|
395
402
|
}
|
|
396
403
|
|
|
397
404
|
.sidebar-container.variant-inset[data-side="left"] {
|
|
398
|
-
border-right: 1px solid var(--rel-border-default
|
|
405
|
+
border-right: 1px solid var(--rel-border-default);
|
|
399
406
|
}
|
|
400
407
|
|
|
401
408
|
.sidebar-container.variant-inset[data-side="right"] {
|
|
402
|
-
border-left: 1px solid var(--rel-border-default
|
|
409
|
+
border-left: 1px solid var(--rel-border-default);
|
|
403
410
|
}
|
|
404
411
|
|
|
405
412
|
/* Desktop mode - not offcanvas */
|
|
@@ -687,27 +694,27 @@ export class RelSidebarTrigger extends LitElement {
|
|
|
687
694
|
button {
|
|
688
695
|
background: none;
|
|
689
696
|
border: none;
|
|
690
|
-
padding: var(--rel-spacing-
|
|
697
|
+
padding: var(--rel-spacing-xs, 8px);
|
|
691
698
|
margin: 0;
|
|
692
699
|
cursor: pointer;
|
|
693
700
|
display: flex;
|
|
694
701
|
align-items: center;
|
|
695
702
|
justify-content: center;
|
|
696
|
-
border-radius: var(--rel-
|
|
697
|
-
color: var(--rel-text-
|
|
703
|
+
border-radius: var(--rel-border-radius-sm, 8px);
|
|
704
|
+
color: var(--rel-text-label);
|
|
698
705
|
transition: background 0.15s ease;
|
|
699
706
|
}
|
|
700
707
|
|
|
701
708
|
button:hover {
|
|
702
|
-
background: var(--rel-
|
|
709
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
703
710
|
}
|
|
704
711
|
|
|
705
712
|
button:active {
|
|
706
|
-
background: var(--rel-border-default
|
|
713
|
+
background: var(--rel-border-default);
|
|
707
714
|
}
|
|
708
715
|
|
|
709
716
|
button:focus-visible {
|
|
710
|
-
outline: 2px solid var(--rel-border-info
|
|
717
|
+
outline: 2px solid var(--rel-border-info);
|
|
711
718
|
outline-offset: 2px;
|
|
712
719
|
}
|
|
713
720
|
`;
|
|
@@ -802,10 +809,10 @@ export class RelSidebarHeader extends LitElement {
|
|
|
802
809
|
static styles = css`
|
|
803
810
|
:host {
|
|
804
811
|
display: block;
|
|
805
|
-
padding: var(--rel-spacing-
|
|
806
|
-
border-bottom: 1px solid var(--rel-border-default
|
|
812
|
+
padding: var(--rel-spacing-md, 16px);
|
|
813
|
+
border-bottom: 1px solid var(--rel-border-default);
|
|
807
814
|
flex-shrink: 0;
|
|
808
|
-
color: var(--rel-text-
|
|
815
|
+
color: var(--rel-text-label);
|
|
809
816
|
}
|
|
810
817
|
`;
|
|
811
818
|
|
|
@@ -821,7 +828,7 @@ export class RelSidebarContent extends LitElement {
|
|
|
821
828
|
display: block;
|
|
822
829
|
flex: 1;
|
|
823
830
|
overflow-y: auto;
|
|
824
|
-
padding: var(--rel-spacing-
|
|
831
|
+
padding: var(--rel-spacing-sm, 12px) var(--rel-spacing-xs, 8px);
|
|
825
832
|
}
|
|
826
833
|
|
|
827
834
|
/* Scrollbar styling */
|
|
@@ -832,7 +839,7 @@ export class RelSidebarContent extends LitElement {
|
|
|
832
839
|
background: transparent;
|
|
833
840
|
}
|
|
834
841
|
:host::-webkit-scrollbar-thumb {
|
|
835
|
-
background: var(--rel-border-default
|
|
842
|
+
background: var(--rel-border-default);
|
|
836
843
|
border-radius: 2px;
|
|
837
844
|
}
|
|
838
845
|
`;
|
|
@@ -847,10 +854,10 @@ export class RelSidebarFooter extends LitElement {
|
|
|
847
854
|
static styles = css`
|
|
848
855
|
:host {
|
|
849
856
|
display: block;
|
|
850
|
-
padding: var(--rel-spacing-
|
|
851
|
-
border-top: 1px solid var(--rel-border-default
|
|
857
|
+
padding: var(--rel-spacing-md, 16px);
|
|
858
|
+
border-top: 1px solid var(--rel-border-default);
|
|
852
859
|
flex-shrink: 0;
|
|
853
|
-
color: var(--rel-text-
|
|
860
|
+
color: var(--rel-text-default);
|
|
854
861
|
}
|
|
855
862
|
`;
|
|
856
863
|
|
|
@@ -864,7 +871,7 @@ export class RelSidebarGroup extends LitElement {
|
|
|
864
871
|
static styles = css`
|
|
865
872
|
:host {
|
|
866
873
|
display: block;
|
|
867
|
-
margin-bottom: var(--rel-spacing-
|
|
874
|
+
margin-bottom: var(--rel-spacing-md, 16px);
|
|
868
875
|
}
|
|
869
876
|
|
|
870
877
|
:host(:last-child) {
|
|
@@ -881,20 +888,26 @@ export class RelSidebarGroup extends LitElement {
|
|
|
881
888
|
export class RelSidebarGroupLabel extends LitElement {
|
|
882
889
|
static styles = css`
|
|
883
890
|
:host {
|
|
884
|
-
display: block;
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
891
|
+
display: block;
|
|
892
|
+
color: var(--rel-text-placeholder);
|
|
893
|
+
text-transform: uppercase;
|
|
894
|
+
padding: var(--rel-spacing-xs, 8px) var(--rel-spacing-sm, 12px) var(--rel-spacing-2xs, 4px);
|
|
895
|
+
margin-bottom: var(--rel-spacing-2xs, 4px);
|
|
896
|
+
font-family: var(--rel-body-xs-semibold-font-family);
|
|
897
|
+
font-weight: var(--rel-body-xs-semibold-font-weight);
|
|
898
|
+
font-size: var(--rel-body-xs-semibold-font-size);
|
|
899
|
+
line-height: var(--rel-body-xs-semibold-line-height);
|
|
900
|
+
letter-spacing: var(--rel-body-xs-semibold-letter-spacing);
|
|
892
901
|
}
|
|
893
902
|
|
|
894
903
|
:host(.collapsed) {
|
|
895
|
-
text-align: center;
|
|
896
|
-
|
|
897
|
-
|
|
904
|
+
text-align: center;
|
|
905
|
+
padding: var(--rel-spacing-xs, 8px) var(--rel-spacing-2xs, 4px) var(--rel-spacing-2xs, 4px);
|
|
906
|
+
font-family: var(--rel-body-xs-regular-font-family);
|
|
907
|
+
font-weight: var(--rel-body-xs-regular-font-weight);
|
|
908
|
+
font-size: var(--rel-body-xs-regular-font-size);
|
|
909
|
+
line-height: var(--rel-body-xs-regular-line-height);
|
|
910
|
+
letter-spacing: var(--rel-body-xs-regular-letter-spacing);
|
|
898
911
|
}
|
|
899
912
|
`;
|
|
900
913
|
|
|
@@ -974,8 +987,8 @@ export class RelSidebarMenuItem extends LitElement {
|
|
|
974
987
|
static styles = css`
|
|
975
988
|
:host {
|
|
976
989
|
display: block;
|
|
977
|
-
margin-bottom: var(--rel-spacing-
|
|
978
|
-
padding: 0 var(--rel-spacing-
|
|
990
|
+
margin-bottom: var(--rel-spacing-2xs, 4px);
|
|
991
|
+
padding: 0 var(--rel-spacing-xs, 8px);
|
|
979
992
|
}
|
|
980
993
|
`;
|
|
981
994
|
|
|
@@ -1004,33 +1017,35 @@ export class RelSidebarMenuButton extends LitElement {
|
|
|
1004
1017
|
width: 100%;
|
|
1005
1018
|
display: flex;
|
|
1006
1019
|
align-items: center;
|
|
1007
|
-
gap: var(--rel-spacing-
|
|
1008
|
-
padding: var(--rel-spacing-
|
|
1020
|
+
gap: var(--rel-spacing-sm, 12px);
|
|
1021
|
+
padding: var(--rel-spacing-xs, 8px) var(--rel-spacing-sm, 12px);
|
|
1009
1022
|
min-height: 40px;
|
|
1010
1023
|
background: none;
|
|
1011
1024
|
border: none;
|
|
1012
|
-
border-radius: var(--rel-
|
|
1013
|
-
cursor: pointer;
|
|
1014
|
-
|
|
1015
|
-
font-size: var(--rel-fontSizes-md, 14px);
|
|
1016
|
-
font-weight: var(--rel-fontWeights-medium, 500);
|
|
1017
|
-
color: var(--rel-text-primary, #333);
|
|
1025
|
+
border-radius: var(--rel-border-radius-sm, 8px);
|
|
1026
|
+
cursor: pointer;
|
|
1027
|
+
color: var(--rel-text-default);
|
|
1018
1028
|
transition: background 0.15s ease, color 0.15s ease;
|
|
1019
1029
|
text-align: left;
|
|
1020
|
-
position: relative;
|
|
1030
|
+
position: relative;
|
|
1031
|
+
font-family: var(--rel-body-md-medium-font-family);
|
|
1032
|
+
font-weight: var(--rel-body-md-medium-font-weight);
|
|
1033
|
+
font-size: var(--rel-body-md-medium-font-size);
|
|
1034
|
+
line-height: var(--rel-body-md-medium-line-height);
|
|
1035
|
+
letter-spacing: var(--rel-body-md-medium-letter-spacing);
|
|
1021
1036
|
}
|
|
1022
1037
|
|
|
1023
1038
|
button:hover:not([disabled]) {
|
|
1024
|
-
background: var(--rel-
|
|
1025
|
-
color: var(--rel-text-
|
|
1039
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
1040
|
+
color: var(--rel-text-label);
|
|
1026
1041
|
}
|
|
1027
1042
|
|
|
1028
1043
|
button:active:not([disabled]) {
|
|
1029
|
-
background: var(--rel-border-default
|
|
1044
|
+
background: var(--rel-border-default);
|
|
1030
1045
|
}
|
|
1031
1046
|
|
|
1032
1047
|
button:focus-visible {
|
|
1033
|
-
outline: 2px solid var(--rel-border-info
|
|
1048
|
+
outline: 2px solid var(--rel-border-info);
|
|
1034
1049
|
outline-offset: -2px;
|
|
1035
1050
|
}
|
|
1036
1051
|
|
|
@@ -1040,9 +1055,9 @@ export class RelSidebarMenuButton extends LitElement {
|
|
|
1040
1055
|
}
|
|
1041
1056
|
|
|
1042
1057
|
button.active {
|
|
1043
|
-
background: var(--rel-
|
|
1044
|
-
color: var(--rel-text-
|
|
1045
|
-
font-weight: var(--rel-
|
|
1058
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
1059
|
+
color: var(--rel-text-label);
|
|
1060
|
+
font-weight: var(--rel-fonts-weight-body-semibold, 600);
|
|
1046
1061
|
}
|
|
1047
1062
|
|
|
1048
1063
|
button.active::before {
|
|
@@ -1053,13 +1068,13 @@ export class RelSidebarMenuButton extends LitElement {
|
|
|
1053
1068
|
transform: translateY(-50%);
|
|
1054
1069
|
width: 3px;
|
|
1055
1070
|
height: 20px;
|
|
1056
|
-
background: var(--rel-
|
|
1071
|
+
background: var(--rel-bg-info);
|
|
1057
1072
|
border-radius: 0 2px 2px 0;
|
|
1058
1073
|
}
|
|
1059
1074
|
|
|
1060
1075
|
button.collapsed {
|
|
1061
1076
|
justify-content: center;
|
|
1062
|
-
padding: var(--rel-spacing-
|
|
1077
|
+
padding: var(--rel-spacing-xs, 8px);
|
|
1063
1078
|
min-height: 40px;
|
|
1064
1079
|
}
|
|
1065
1080
|
|
|
@@ -1068,7 +1083,7 @@ export class RelSidebarMenuButton extends LitElement {
|
|
|
1068
1083
|
}
|
|
1069
1084
|
|
|
1070
1085
|
button.collapsed.active {
|
|
1071
|
-
background: var(--rel-
|
|
1086
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
1072
1087
|
}
|
|
1073
1088
|
|
|
1074
1089
|
.icon {
|
|
@@ -20,6 +20,7 @@ export class RelSkeleton extends LitElement {
|
|
|
20
20
|
|
|
21
21
|
static styles = css`
|
|
22
22
|
:host {
|
|
23
|
+
color: var(--rel-text-default);
|
|
23
24
|
display: block;
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -35,8 +36,8 @@ export class RelSkeleton extends LitElement {
|
|
|
35
36
|
/* ── Base skeleton surface ── */
|
|
36
37
|
.skeleton-shape,
|
|
37
38
|
.skeleton-bar {
|
|
38
|
-
background: var(--rel-skeleton-color,
|
|
39
|
-
border-radius:
|
|
39
|
+
background: var(--rel-skeleton-color, var(--rel-bg-neutral-elevated-3));
|
|
40
|
+
border-radius: var(--rel-border-radius-xs);
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
/* ── Lines layout ── */
|
|
@@ -91,20 +92,14 @@ export class RelSkeleton extends LitElement {
|
|
|
91
92
|
:host([animation="shimmer"]) .skeleton-bar {
|
|
92
93
|
background: linear-gradient(
|
|
93
94
|
90deg,
|
|
94
|
-
var(--rel-skeleton-color,
|
|
95
|
-
var(--rel-skeleton-highlight,
|
|
96
|
-
var(--rel-skeleton-color,
|
|
95
|
+
var(--rel-skeleton-color, var(--rel-bg-neutral-elevated-3)) 25%,
|
|
96
|
+
var(--rel-skeleton-highlight, var(--rel-bg-neutral-elevated-2)) 50%,
|
|
97
|
+
var(--rel-skeleton-color, var(--rel-bg-neutral-elevated-3)) 75%
|
|
97
98
|
);
|
|
98
99
|
background-size: 200% 100%;
|
|
99
100
|
animation: rel-skeleton-shimmer 1.5s linear infinite;
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
/* ── Dark mode ── */
|
|
103
|
-
:host-context([data-theme="dark"]) {
|
|
104
|
-
--rel-skeleton-color: #2a2a2a;
|
|
105
|
-
--rel-skeleton-highlight: #3d3d3d;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
103
|
/* ── Respect reduced-motion preference ── */
|
|
109
104
|
@media (prefers-reduced-motion: reduce) {
|
|
110
105
|
.skeleton-shape,
|
|
@@ -122,13 +117,13 @@ export class RelSkeleton extends LitElement {
|
|
|
122
117
|
return html`
|
|
123
118
|
<div class="skeleton-lines">
|
|
124
119
|
${Array.from({ length: count }, (_, i) => html`
|
|
125
|
-
<div class="skeleton-bar ${i === count - 1 && count > 1 ? "is-last" : ""}"></div>
|
|
120
|
+
<div part="base" class="skeleton-bar ${i === count - 1 && count > 1 ? "is-last" : ""}"></div>
|
|
126
121
|
`)}
|
|
127
122
|
</div>
|
|
128
123
|
`;
|
|
129
124
|
}
|
|
130
125
|
|
|
131
|
-
return html`<div class="skeleton-shape"></div>`;
|
|
126
|
+
return html`<div part="base" class="skeleton-shape"></div>`;
|
|
132
127
|
}
|
|
133
128
|
}
|
|
134
129
|
|
|
@@ -86,21 +86,21 @@ The component defines these CSS custom properties on `:host` which can be overri
|
|
|
86
86
|
- `--thumb-halo-color` - Color of thumb halo (default: `--rel-border-default`)
|
|
87
87
|
- `--tick-size` - Diameter of tick marks (default: `4px`)
|
|
88
88
|
- `--shadow` - Thumb drop shadow (default: `0 2px 4px rgba(0,0,0,0.25)`)
|
|
89
|
-
- `--halo` - Additional halo shadow (default: `0 2px 0 var(--rel-
|
|
89
|
+
- `--halo` - Additional halo shadow (default: `0 2px 0 var(--rel-bg-neutral-elevated-1), 0 6px 10px rgba(0,0,0,0.07)`)
|
|
90
90
|
- `--marker-width` - Width of value bubble (default: `24px`)
|
|
91
91
|
- `--marker-height` - Height of value bubble (default: `28px`)
|
|
92
92
|
|
|
93
93
|
### Design Token References
|
|
94
|
-
- `--rel-
|
|
95
|
-
- `--rel-
|
|
96
|
-
- `--rel-
|
|
97
|
-
- `--rel-
|
|
98
|
-
- `--rel-
|
|
99
|
-
- `--rel-
|
|
100
|
-
- `--rel-
|
|
94
|
+
- `--rel-fonts-font-family` - Font family
|
|
95
|
+
- `--rel-border-default` - Inactive track color
|
|
96
|
+
- `--rel-text-default` - Active track and thumb color
|
|
97
|
+
- `--rel-bg-surface` - Used in dotted track and tick marks
|
|
98
|
+
- `--rel-text-default` - Tick mark color (inactive)
|
|
99
|
+
- `--rel-text-label` - Tick label color
|
|
100
|
+
- `--rel-text-placeholder` - Disabled active track and tick colors
|
|
101
101
|
- `--rel-border-default` - Default thumb halo color
|
|
102
|
-
- `--rel-
|
|
103
|
-
- `--rel-
|
|
102
|
+
- `--rel-bg-neutral-elevated-1` - Disabled track background, used in dotted pattern
|
|
103
|
+
- `--rel-body-xs-regular-font-size` - Tick label font size
|
|
104
104
|
|
|
105
105
|
## Accessibility
|
|
106
106
|
- Uses native `<input type="range">` for full keyboard and screen reader support
|