@reliability-design/web 1.0.6 → 1.2.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/rel-accordion.ts +20 -31
- package/dist/components/rel-alert/rel-alert.ts +81 -11
- package/dist/components/rel-avatar/rel-avatar.ts +6 -3
- package/dist/components/rel-badge/rel-badge.ts +8 -3
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +6 -6
- package/dist/components/rel-button/rel-button.ts +118 -16
- package/dist/components/rel-calendar/rel-calendar.ts +16 -9
- package/dist/components/rel-card/rel-card.ts +9 -17
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +20 -23
- package/dist/components/rel-carousel/rel-carousel.ts +596 -469
- package/dist/components/rel-checkbox/rel-checkbox.ts +98 -15
- package/dist/components/rel-chip/rel-chip.ts +291 -186
- package/dist/components/rel-container/rel-container.ts +2 -2
- package/dist/components/rel-date-picker/rel-date-picker.ts +23 -19
- package/dist/components/rel-divider/rel-divider.ts +12 -3
- package/dist/components/rel-drawer/rel-drawer-footer.ts +27 -0
- package/dist/components/rel-drawer/rel-drawer.ts +57 -113
- package/dist/components/rel-kbd/rel-kbd.ts +94 -118
- package/dist/components/rel-layout/rel-layout.ts +49 -58
- package/dist/components/rel-menu/rel-menu.ts +359 -327
- package/dist/components/rel-menubar/rel-menubar-menu.css +3 -0
- package/dist/components/rel-menubar/rel-menubar-menu.ts +2 -1
- package/dist/components/rel-menubar/rel-menubar.ts +602 -576
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +240 -143
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +227 -331
- package/dist/components/rel-navbar/rel-navbar.ts +13 -0
- package/dist/components/rel-otp/rel-otp.ts +22 -25
- package/dist/components/rel-pagination/rel-pagination.ts +112 -63
- package/dist/components/rel-popover/rel-popover-content.ts +6 -5
- package/dist/components/rel-popover/rel-popover.ts +42 -20
- package/dist/components/rel-progress/rel-progress.ts +10 -9
- package/dist/components/rel-radio/rel-radio.ts +228 -155
- package/dist/components/rel-range-picker/rel-range-picker.css +349 -0
- package/dist/components/rel-range-picker/rel-range-picker.ts +1079 -0
- package/dist/components/rel-resizable/rel-resizable-handle.ts +12 -15
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +41 -20
- package/dist/components/rel-select/rel-select.ts +112 -27
- package/dist/components/rel-sheet/rel-sheet.ts +362 -683
- package/dist/components/rel-sidebar/rel-sidebar.ts +13 -5
- package/dist/components/rel-slider/rel-slider.ts +74 -29
- package/dist/components/rel-snackbar/rel-snackbar.ts +67 -37
- package/dist/components/rel-stepper/rel-stepper.ts +43 -31
- package/dist/components/rel-switch/rel-switch.ts +26 -12
- package/dist/components/rel-tab/rel-tab.ts +57 -37
- package/dist/components/rel-table/rel-table-body.ts +5 -0
- package/dist/components/rel-table/rel-table-caption.ts +6 -1
- package/dist/components/rel-table/rel-table-cell.ts +42 -49
- package/dist/components/rel-table/rel-table-footer.ts +5 -0
- package/dist/components/rel-table/rel-table-head.ts +13 -1
- package/dist/components/rel-table/rel-table-header.ts +5 -0
- package/dist/components/rel-table/rel-table-row.ts +7 -3
- package/dist/components/rel-table/rel-table.ts +8 -2
- package/dist/components/rel-textfield/rel-textfield.ts +153 -44
- package/dist/components/rel-toast/rel-toast.ts +56 -22
- package/dist/components/rel-tooltip/rel-tooltip.ts +52 -9
- package/dist/components/rel-topbar/rel-topbar-actions.ts +24 -0
- package/dist/components/rel-topbar/rel-topbar-brand.ts +47 -0
- package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +63 -0
- package/dist/components/rel-topbar/rel-topbar-dropdown.ts +28 -0
- package/dist/components/rel-topbar/rel-topbar-item.ts +320 -0
- package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +24 -0
- package/dist/components/rel-topbar/rel-topbar-profile.ts +222 -0
- package/dist/components/rel-topbar/rel-topbar-utilities.ts +24 -0
- package/dist/components/rel-topbar/rel-topbar.ts +438 -0
- package/dist/index.d.mts +375 -411
- package/dist/index.d.ts +375 -411
- package/dist/index.js +7587 -7980
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7647 -8023
- package/dist/index.mjs.map +1 -1
- package/dist/rel-menubar-menu-BEEQDAXW.css +3 -0
- package/dist/styles/vars-v2.css +525 -0
- package/dist/styles/vars.css +79 -27
- package/dist/{vars-ITL2K3KO.css → vars-I2PC74XD.css} +79 -27
- package/dist/vars-v2-VMGWTFJZ.css +525 -0
- package/package.json +3 -1
- package/dist/components/rel-quote-page/README.md +0 -166
- package/dist/components/rel-quote-page/rel-quote-page.ts +0 -816
|
@@ -9,7 +9,7 @@ interface CalendarDay {
|
|
|
9
9
|
isSelected: boolean;
|
|
10
10
|
isDisabled: boolean;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
@customElement("rel-date-picker")
|
|
14
14
|
export class RelDatePicker extends LitElement {
|
|
15
15
|
@property({ type: String, reflect: true }) value: string | null = null;
|
|
@@ -47,6 +47,10 @@ export class RelDatePicker extends LitElement {
|
|
|
47
47
|
|
|
48
48
|
:host([disabled]) {
|
|
49
49
|
opacity: 0.6;
|
|
50
|
+
cursor: not-allowed;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:host([disabled]) * {
|
|
50
54
|
pointer-events: none;
|
|
51
55
|
}
|
|
52
56
|
|
|
@@ -70,7 +74,7 @@ export class RelDatePicker extends LitElement {
|
|
|
70
74
|
justify-content: space-between;
|
|
71
75
|
gap: var(--rel-spacing-space-xs);
|
|
72
76
|
padding: var(--rel-spacing-space-sm) var(--rel-spacing-space-md);
|
|
73
|
-
background: var(--rel-
|
|
77
|
+
background: var(--rel-color-bg-primary);
|
|
74
78
|
border: 1px solid var(--rel-border-default);
|
|
75
79
|
border-radius: var(--rel-borders-radius-border-radius-200);
|
|
76
80
|
font-family: var(--rel-fontFamilies-primary);
|
|
@@ -82,13 +86,13 @@ export class RelDatePicker extends LitElement {
|
|
|
82
86
|
}
|
|
83
87
|
|
|
84
88
|
.trigger-button:hover:not(:disabled) {
|
|
85
|
-
border-color: var(--rel-
|
|
89
|
+
border-color: var(--rel-color-border-strong);
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
.trigger-button:focus-visible {
|
|
89
|
-
outline: 2px solid var(--rel-
|
|
93
|
+
outline: 2px solid var(--rel-color-border-focus);
|
|
90
94
|
outline-offset: 2px;
|
|
91
|
-
border-color: var(--rel-
|
|
95
|
+
border-color: var(--rel-color-border-focus);
|
|
92
96
|
}
|
|
93
97
|
|
|
94
98
|
.trigger-button:disabled {
|
|
@@ -116,7 +120,7 @@ export class RelDatePicker extends LitElement {
|
|
|
116
120
|
border: none;
|
|
117
121
|
padding: var(--rel-spacing-space-3xs);
|
|
118
122
|
cursor: pointer;
|
|
119
|
-
color: var(--rel-
|
|
123
|
+
color: var(--rel-color-text-placeholder);
|
|
120
124
|
display: flex;
|
|
121
125
|
align-items: center;
|
|
122
126
|
justify-content: center;
|
|
@@ -126,7 +130,7 @@ export class RelDatePicker extends LitElement {
|
|
|
126
130
|
|
|
127
131
|
.icon-button:hover {
|
|
128
132
|
background: var(--rel-surface-secondary);
|
|
129
|
-
color: var(--rel-
|
|
133
|
+
color: var(--rel-color-text-primary);
|
|
130
134
|
}
|
|
131
135
|
|
|
132
136
|
.icon-button svg {
|
|
@@ -139,7 +143,7 @@ export class RelDatePicker extends LitElement {
|
|
|
139
143
|
top: calc(100% + 4px);
|
|
140
144
|
left: 0;
|
|
141
145
|
z-index: 1000;
|
|
142
|
-
background: var(--rel-
|
|
146
|
+
background: var(--rel-color-bg-primary);
|
|
143
147
|
border: 1px solid var(--rel-border-default);
|
|
144
148
|
border-radius: var(--rel-borders-radius-border-radius-200);
|
|
145
149
|
box-shadow: var(--rel-shadows-shadow-300);
|
|
@@ -170,7 +174,7 @@ export class RelDatePicker extends LitElement {
|
|
|
170
174
|
align-items: center;
|
|
171
175
|
justify-content: center;
|
|
172
176
|
cursor: pointer;
|
|
173
|
-
color: var(--rel-
|
|
177
|
+
color: var(--rel-color-text-primary);
|
|
174
178
|
transition: background-color 0.15s ease;
|
|
175
179
|
}
|
|
176
180
|
|
|
@@ -179,7 +183,7 @@ export class RelDatePicker extends LitElement {
|
|
|
179
183
|
}
|
|
180
184
|
|
|
181
185
|
.nav-button:focus-visible {
|
|
182
|
-
outline: 2px solid var(--rel-
|
|
186
|
+
outline: 2px solid var(--rel-color-border-focus);
|
|
183
187
|
outline-offset: 2px;
|
|
184
188
|
}
|
|
185
189
|
|
|
@@ -191,7 +195,7 @@ export class RelDatePicker extends LitElement {
|
|
|
191
195
|
.dropdown-trigger {
|
|
192
196
|
width: 100%;
|
|
193
197
|
padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-sm);
|
|
194
|
-
background: var(--rel-
|
|
198
|
+
background: var(--rel-color-bg-primary);
|
|
195
199
|
border: 1px solid var(--rel-border-default);
|
|
196
200
|
border-radius: var(--rel-borders-radius-border-radius-200);
|
|
197
201
|
font-family: var(--rel-fontFamilies-primary);
|
|
@@ -208,7 +212,7 @@ export class RelDatePicker extends LitElement {
|
|
|
208
212
|
}
|
|
209
213
|
|
|
210
214
|
.dropdown-trigger:focus-visible {
|
|
211
|
-
outline: 2px solid var(--rel-
|
|
215
|
+
outline: 2px solid var(--rel-color-border-focus);
|
|
212
216
|
outline-offset: 2px;
|
|
213
217
|
}
|
|
214
218
|
|
|
@@ -218,7 +222,7 @@ export class RelDatePicker extends LitElement {
|
|
|
218
222
|
left: 0;
|
|
219
223
|
right: 0;
|
|
220
224
|
z-index: 10;
|
|
221
|
-
background: var(--rel-
|
|
225
|
+
background: var(--rel-color-bg-primary);
|
|
222
226
|
border: 1px solid var(--rel-border-default);
|
|
223
227
|
border-radius: var(--rel-borders-radius-border-radius-200);
|
|
224
228
|
box-shadow: var(--rel-shadows-shadow-200);
|
|
@@ -244,8 +248,8 @@ export class RelDatePicker extends LitElement {
|
|
|
244
248
|
}
|
|
245
249
|
|
|
246
250
|
.dropdown-item.selected {
|
|
247
|
-
background: var(--rel-
|
|
248
|
-
color: var(--rel-
|
|
251
|
+
background: var(--rel-background-info);
|
|
252
|
+
color: var(--rel-text-info);
|
|
249
253
|
font-weight: var(--rel-fontWeights-semibold);
|
|
250
254
|
}
|
|
251
255
|
|
|
@@ -260,7 +264,7 @@ export class RelDatePicker extends LitElement {
|
|
|
260
264
|
text-align: center;
|
|
261
265
|
font-size: var(--rel-fontSizes-xs);
|
|
262
266
|
font-weight: var(--rel-fontWeights-semibold);
|
|
263
|
-
color: var(--rel-
|
|
267
|
+
color: var(--rel-color-text-placeholder);
|
|
264
268
|
padding: var(--rel-spacing-space-xs);
|
|
265
269
|
text-transform: uppercase;
|
|
266
270
|
}
|
|
@@ -290,18 +294,18 @@ export class RelDatePicker extends LitElement {
|
|
|
290
294
|
}
|
|
291
295
|
|
|
292
296
|
.day-button:focus-visible {
|
|
293
|
-
outline: 2px solid var(--rel-
|
|
297
|
+
outline: 2px solid var(--rel-color-border-focus);
|
|
294
298
|
outline-offset: -2px;
|
|
295
299
|
z-index: 1;
|
|
296
300
|
}
|
|
297
301
|
|
|
298
302
|
.day-button.today:not(.selected) {
|
|
299
|
-
border: 2px solid var(--rel-colors-
|
|
303
|
+
border: 2px solid var(--rel-colors-green-primary);
|
|
300
304
|
}
|
|
301
305
|
|
|
302
306
|
.day-button.selected {
|
|
303
307
|
background: var(--rel-colors-green-primary);
|
|
304
|
-
color: var(--rel-
|
|
308
|
+
color: var(--rel-color-text-inverse);
|
|
305
309
|
font-weight: var(--rel-fontWeights-semibold);
|
|
306
310
|
}
|
|
307
311
|
|
|
@@ -15,27 +15,36 @@
|
|
|
15
15
|
display: flex;
|
|
16
16
|
background: transparent;
|
|
17
17
|
font-family: var(--rel-fontFamilies-primary);
|
|
18
|
-
color: var(--rel-
|
|
18
|
+
color: var(--rel-color-text-primary);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/* Horizontal */
|
|
22
22
|
.rel-divider.horizontal {
|
|
23
23
|
width: 100%;
|
|
24
24
|
height: var(--rel-borders-width-stroke-100);
|
|
25
|
-
background-color: var(--rel-
|
|
25
|
+
background-color: var(--rel-color-border-divider);
|
|
26
26
|
margin: var(--rel-spacing-space-md) 0;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/* Vertical */
|
|
30
30
|
.rel-divider.vertical {
|
|
31
31
|
width: var(--rel-borders-width-stroke-100);
|
|
32
|
-
background-color: var(--rel-
|
|
32
|
+
background-color: var(--rel-color-border-divider);
|
|
33
33
|
margin: 0 var(--rel-spacing-space-md);
|
|
34
34
|
align-self: stretch;
|
|
35
35
|
height: 100%;
|
|
36
36
|
}
|
|
37
37
|
`;
|
|
38
38
|
|
|
39
|
+
connectedCallback() {
|
|
40
|
+
super.connectedCallback();
|
|
41
|
+
this.setAttribute("role", "separator");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
updated() {
|
|
45
|
+
this.setAttribute("aria-orientation", this.orientation ?? "horizontal");
|
|
46
|
+
}
|
|
47
|
+
|
|
39
48
|
render() {
|
|
40
49
|
return html`
|
|
41
50
|
<div class="rel-divider ${this.orientation}" role="separator"></div>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { LitElement, html, css } from "lit";
|
|
2
|
+
import { customElement } from "lit/decorators.js";
|
|
3
|
+
|
|
4
|
+
@customElement("rel-drawer-footer")
|
|
5
|
+
export class RelDrawerFooter extends LitElement {
|
|
6
|
+
static styles = css`
|
|
7
|
+
.drawer-footer {
|
|
8
|
+
display: flex;
|
|
9
|
+
justify-content: flex-end;
|
|
10
|
+
gap: var(--rel-spacing-space-xs);
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
13
|
+
|
|
14
|
+
render() {
|
|
15
|
+
return html`
|
|
16
|
+
<div class="drawer-footer">
|
|
17
|
+
<slot></slot>
|
|
18
|
+
</div>
|
|
19
|
+
`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
declare global {
|
|
24
|
+
interface HTMLElementTagNameMap {
|
|
25
|
+
"rel-drawer-footer": RelDrawerFooter;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { LitElement, html, css } from "lit";
|
|
2
2
|
import { customElement, property, state, query } from "lit/decorators.js";
|
|
3
|
+
import "@reliability-design/icons/rel-icon";
|
|
4
|
+
import "./rel-drawer-footer";
|
|
3
5
|
|
|
4
|
-
export type DrawerSide = "bottom" | "left" | "right"
|
|
6
|
+
export type DrawerSide = "bottom" | "left" | "right";
|
|
5
7
|
export type DrawerCloseReason = "backdrop" | "escape" | "drag" | "programmatic";
|
|
6
8
|
|
|
7
9
|
@customElement("rel-drawer")
|
|
@@ -16,8 +18,9 @@ export class RelDrawer extends LitElement {
|
|
|
16
18
|
@property({ type: Boolean }) draggable = true;
|
|
17
19
|
@property({ type: Number, attribute: "snap-threshold" }) snapThreshold = 0.25;
|
|
18
20
|
@property({ type: String, attribute: "max-height" }) maxHeight = "80vh";
|
|
19
|
-
@property({ type: String }) width = "
|
|
20
|
-
@property({ type:
|
|
21
|
+
@property({ type: String }) width = "";
|
|
22
|
+
@property({ type: String }) title: string = "";
|
|
23
|
+
@property({ type: String }) description: string = "";
|
|
21
24
|
|
|
22
25
|
@state() private isDragging = false;
|
|
23
26
|
@state() private dragOffset = 0;
|
|
@@ -37,11 +40,6 @@ export class RelDrawer extends LitElement {
|
|
|
37
40
|
--drawer-transition-timing: cubic-bezier(0.32, 0.72, 0, 1);
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
:host([disabled]) {
|
|
41
|
-
pointer-events: none;
|
|
42
|
-
opacity: 0.6;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
43
|
.drawer-container {
|
|
46
44
|
position: fixed;
|
|
47
45
|
top: 0;
|
|
@@ -69,16 +67,17 @@ export class RelDrawer extends LitElement {
|
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
.drawer-container.open .overlay {
|
|
72
|
-
opacity: 1;
|
|
70
|
+
opacity: var(--rel-drawer-scrim-opacity, 1);
|
|
73
71
|
}
|
|
74
72
|
|
|
75
73
|
/* Panel base */
|
|
76
74
|
.panel {
|
|
77
75
|
position: absolute;
|
|
78
|
-
background: var(--rel-
|
|
76
|
+
background: var(--rel-color-bg-primary);
|
|
79
77
|
box-shadow: var(--rel-shadows-shadow-500);
|
|
80
78
|
display: flex;
|
|
81
79
|
flex-direction: column;
|
|
80
|
+
overflow: hidden;
|
|
82
81
|
outline: none;
|
|
83
82
|
font-family: var(--rel-fontFamilies-primary);
|
|
84
83
|
transition: transform var(--drawer-transition-duration) var(--drawer-transition-timing);
|
|
@@ -87,16 +86,19 @@ export class RelDrawer extends LitElement {
|
|
|
87
86
|
/* Bottom drawer */
|
|
88
87
|
.panel[data-side="bottom"] {
|
|
89
88
|
bottom: 0;
|
|
90
|
-
left:
|
|
91
|
-
right:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
border-
|
|
95
|
-
|
|
89
|
+
left: 50%;
|
|
90
|
+
right: auto;
|
|
91
|
+
width: var(--drawer-width, clamp(640px, 66vw, 952px));
|
|
92
|
+
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)
|
|
95
|
+
0
|
|
96
|
+
0;
|
|
97
|
+
transform: translateX(-50%) translateY(100%);
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
.drawer-container.open .panel[data-side="bottom"] {
|
|
99
|
-
transform: translateY(0);
|
|
101
|
+
transform: translateX(-50%) translateY(0);
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
/* Left drawer */
|
|
@@ -104,10 +106,8 @@ export class RelDrawer extends LitElement {
|
|
|
104
106
|
top: 0;
|
|
105
107
|
left: 0;
|
|
106
108
|
bottom: 0;
|
|
107
|
-
width: var(--drawer-width, 420px);
|
|
108
|
-
|
|
109
|
-
border-top-right-radius: var(--rel-borders-radius-border-radius-300);
|
|
110
|
-
border-bottom-right-radius: var(--rel-borders-radius-border-radius-300);
|
|
109
|
+
width: var(--drawer-width, clamp(280px, 24vw, 420px));
|
|
110
|
+
border-radius: 0;
|
|
111
111
|
transform: translateX(-100%);
|
|
112
112
|
}
|
|
113
113
|
|
|
@@ -120,10 +120,8 @@ export class RelDrawer extends LitElement {
|
|
|
120
120
|
top: 0;
|
|
121
121
|
right: 0;
|
|
122
122
|
bottom: 0;
|
|
123
|
-
width: var(--drawer-width, 420px);
|
|
124
|
-
|
|
125
|
-
border-top-left-radius: var(--rel-borders-radius-border-radius-300);
|
|
126
|
-
border-bottom-left-radius: var(--rel-borders-radius-border-radius-300);
|
|
123
|
+
width: var(--drawer-width, clamp(280px, 24vw, 420px));
|
|
124
|
+
border-radius: 0;
|
|
127
125
|
transform: translateX(100%);
|
|
128
126
|
}
|
|
129
127
|
|
|
@@ -131,21 +129,6 @@ export class RelDrawer extends LitElement {
|
|
|
131
129
|
transform: translateX(0);
|
|
132
130
|
}
|
|
133
131
|
|
|
134
|
-
/* Top drawer */
|
|
135
|
-
.panel[data-side="top"] {
|
|
136
|
-
top: 0;
|
|
137
|
-
left: 0;
|
|
138
|
-
right: 0;
|
|
139
|
-
max-height: var(--drawer-max-height, 80vh);
|
|
140
|
-
border-bottom-left-radius: var(--rel-borders-radius-border-radius-300);
|
|
141
|
-
border-bottom-right-radius: var(--rel-borders-radius-border-radius-300);
|
|
142
|
-
transform: translateY(-100%);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.drawer-container.open .panel[data-side="top"] {
|
|
146
|
-
transform: translateY(0);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
132
|
/* Dragging state */
|
|
150
133
|
.panel.dragging {
|
|
151
134
|
transition: none;
|
|
@@ -155,13 +138,17 @@ export class RelDrawer extends LitElement {
|
|
|
155
138
|
transition: none;
|
|
156
139
|
}
|
|
157
140
|
|
|
141
|
+
.overlay.no-modal {
|
|
142
|
+
display: none !important;
|
|
143
|
+
}
|
|
144
|
+
|
|
158
145
|
/* Handle */
|
|
159
146
|
.handle {
|
|
160
147
|
width: 48px;
|
|
161
148
|
height: 4px;
|
|
162
|
-
background: var(--rel-
|
|
149
|
+
background: var(--rel-color-border-divider);
|
|
163
150
|
border-radius: var(--rel-borders-radius-border-radius-500);
|
|
164
|
-
margin: var(--rel-spacing-space-
|
|
151
|
+
margin: var(--rel-spacing-space-xs) auto var(--rel-spacing-space-2xs);
|
|
165
152
|
cursor: grab;
|
|
166
153
|
touch-action: none;
|
|
167
154
|
}
|
|
@@ -180,7 +167,7 @@ export class RelDrawer extends LitElement {
|
|
|
180
167
|
flex-direction: column;
|
|
181
168
|
gap: var(--rel-spacing-space-2xs);
|
|
182
169
|
padding: var(--rel-spacing-space-md) var(--rel-spacing-space-lg);
|
|
183
|
-
border-bottom: var(--rel-borders-width-stroke-100) solid var(--rel-
|
|
170
|
+
border-bottom: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);
|
|
184
171
|
}
|
|
185
172
|
|
|
186
173
|
.header.empty {
|
|
@@ -189,7 +176,7 @@ export class RelDrawer extends LitElement {
|
|
|
189
176
|
|
|
190
177
|
.header-top {
|
|
191
178
|
display: flex;
|
|
192
|
-
align-items:
|
|
179
|
+
align-items: flex-start;
|
|
193
180
|
justify-content: space-between;
|
|
194
181
|
}
|
|
195
182
|
|
|
@@ -215,8 +202,10 @@ export class RelDrawer extends LitElement {
|
|
|
215
202
|
display: flex;
|
|
216
203
|
align-items: center;
|
|
217
204
|
justify-content: center;
|
|
205
|
+
align-self: flex-start;
|
|
206
|
+
flex-shrink: 0;
|
|
218
207
|
border-radius: var(--rel-borders-radius-border-radius-100);
|
|
219
|
-
color: var(--rel-
|
|
208
|
+
color: var(--rel-color-text-primary);
|
|
220
209
|
transition: background 0.15s ease;
|
|
221
210
|
}
|
|
222
211
|
|
|
@@ -225,11 +214,11 @@ export class RelDrawer extends LitElement {
|
|
|
225
214
|
}
|
|
226
215
|
|
|
227
216
|
.close-button:active {
|
|
228
|
-
background: var(--rel-
|
|
217
|
+
background: var(--rel-color-border-divider);
|
|
229
218
|
}
|
|
230
219
|
|
|
231
220
|
.close-button:focus-visible {
|
|
232
|
-
outline: 2px solid var(--rel-
|
|
221
|
+
outline: 2px solid var(--rel-color-border-focus);
|
|
233
222
|
outline-offset: 2px;
|
|
234
223
|
}
|
|
235
224
|
|
|
@@ -242,12 +231,9 @@ export class RelDrawer extends LitElement {
|
|
|
242
231
|
|
|
243
232
|
/* Footer */
|
|
244
233
|
.footer {
|
|
234
|
+
flex-shrink: 0;
|
|
245
235
|
padding: var(--rel-spacing-space-md) var(--rel-spacing-space-lg);
|
|
246
|
-
border-top: var(--rel-borders-width-stroke-100) solid var(--rel-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
.footer.empty {
|
|
250
|
-
display: none;
|
|
236
|
+
border-top: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);
|
|
251
237
|
}
|
|
252
238
|
|
|
253
239
|
/* Reduced motion */
|
|
@@ -295,9 +281,10 @@ export class RelDrawer extends LitElement {
|
|
|
295
281
|
this.lockScroll();
|
|
296
282
|
|
|
297
283
|
if (this.modal) {
|
|
298
|
-
|
|
299
|
-
this.
|
|
300
|
-
|
|
284
|
+
this.updateComplete.then(() => {
|
|
285
|
+
const focusTarget = this.shadowRoot?.querySelector<HTMLElement>("[autofocus], .close-button, .panel");
|
|
286
|
+
focusTarget?.focus();
|
|
287
|
+
});
|
|
301
288
|
}
|
|
302
289
|
|
|
303
290
|
document.addEventListener("keydown", this.handleKeydown);
|
|
@@ -316,10 +303,10 @@ export class RelDrawer extends LitElement {
|
|
|
316
303
|
document.removeEventListener("keydown", this.handleKeydown);
|
|
317
304
|
|
|
318
305
|
if (this.previousFocus && this.previousFocus.focus) {
|
|
319
|
-
|
|
306
|
+
this.updateComplete.then(() => {
|
|
320
307
|
this.previousFocus?.focus();
|
|
321
308
|
this.previousFocus = null;
|
|
322
|
-
}
|
|
309
|
+
});
|
|
323
310
|
}
|
|
324
311
|
|
|
325
312
|
this.dispatchEvent(
|
|
@@ -352,17 +339,6 @@ export class RelDrawer extends LitElement {
|
|
|
352
339
|
document.body.style.paddingRight = this.originalBodyPaddingRight;
|
|
353
340
|
}
|
|
354
341
|
|
|
355
|
-
private focusPanel() {
|
|
356
|
-
if (!this.panelElement) return;
|
|
357
|
-
|
|
358
|
-
const focusable = this.getFocusableElements();
|
|
359
|
-
if (focusable.length > 0) {
|
|
360
|
-
focusable[0].focus();
|
|
361
|
-
} else {
|
|
362
|
-
this.panelElement.focus();
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
342
|
private getFocusableElements(): HTMLElement[] {
|
|
367
343
|
if (!this.panelElement) return [];
|
|
368
344
|
|
|
@@ -439,16 +415,8 @@ export class RelDrawer extends LitElement {
|
|
|
439
415
|
this.close("programmatic");
|
|
440
416
|
}
|
|
441
417
|
|
|
442
|
-
private close(
|
|
418
|
+
private close(_reason: DrawerCloseReason) {
|
|
443
419
|
this.open = false;
|
|
444
|
-
|
|
445
|
-
this.dispatchEvent(
|
|
446
|
-
new CustomEvent("rel-close", {
|
|
447
|
-
detail: { reason },
|
|
448
|
-
bubbles: true,
|
|
449
|
-
composed: true,
|
|
450
|
-
})
|
|
451
|
-
);
|
|
452
420
|
}
|
|
453
421
|
|
|
454
422
|
// Drag-to-close handlers
|
|
@@ -480,7 +448,7 @@ export class RelDrawer extends LitElement {
|
|
|
480
448
|
}
|
|
481
449
|
};
|
|
482
450
|
|
|
483
|
-
private handlePointerUp = (
|
|
451
|
+
private handlePointerUp = (_e: PointerEvent) => {
|
|
484
452
|
if (!this.isDragging) return;
|
|
485
453
|
|
|
486
454
|
this.isDragging = false;
|
|
@@ -504,7 +472,7 @@ export class RelDrawer extends LitElement {
|
|
|
504
472
|
return "";
|
|
505
473
|
}
|
|
506
474
|
|
|
507
|
-
return `transform: translateY(${this.dragOffset}px);`;
|
|
475
|
+
return `transform: translateX(-50%) translateY(${this.dragOffset}px);`;
|
|
508
476
|
}
|
|
509
477
|
|
|
510
478
|
private getOverlayStyle() {
|
|
@@ -519,17 +487,9 @@ export class RelDrawer extends LitElement {
|
|
|
519
487
|
return `opacity: ${opacity};`;
|
|
520
488
|
}
|
|
521
489
|
|
|
522
|
-
private hasSlotContent(slotName?: string): boolean {
|
|
523
|
-
const slot = this.shadowRoot?.querySelector(
|
|
524
|
-
slotName ? `slot[name="${slotName}"]` : "slot:not([name])"
|
|
525
|
-
) as HTMLSlotElement;
|
|
526
|
-
return slot ? slot.assignedElements({ flatten: true }).length > 0 : false;
|
|
527
|
-
}
|
|
528
|
-
|
|
529
490
|
render() {
|
|
530
|
-
const hasTitle = this.
|
|
531
|
-
const hasDescription = this.
|
|
532
|
-
const hasFooter = this.hasSlotContent("footer");
|
|
491
|
+
const hasTitle = !!this.title;
|
|
492
|
+
const hasDescription = !!this.description;
|
|
533
493
|
const showCloseButton = this.dismissible;
|
|
534
494
|
const hasHeader = hasTitle || hasDescription || showCloseButton;
|
|
535
495
|
|
|
@@ -540,7 +500,7 @@ export class RelDrawer extends LitElement {
|
|
|
540
500
|
<div class="drawer-container ${this.open ? "open" : ""}">
|
|
541
501
|
<div
|
|
542
502
|
part="overlay"
|
|
543
|
-
class="overlay ${this.isDragging ?
|
|
503
|
+
class="overlay ${!this.modal ? 'no-modal' : ''} ${this.isDragging ? 'dragging' : ''}"
|
|
544
504
|
style="${this.getOverlayStyle()}"
|
|
545
505
|
@click="${this.handleOverlayClick}"></div>
|
|
546
506
|
|
|
@@ -548,8 +508,7 @@ export class RelDrawer extends LitElement {
|
|
|
548
508
|
part="panel"
|
|
549
509
|
class="panel ${this.isDragging ? "dragging" : ""}"
|
|
550
510
|
data-side="${this.side}"
|
|
551
|
-
style="
|
|
552
|
-
.maxHeight}; ${this.getPanelStyle()}"
|
|
511
|
+
style="${this.width ? `--drawer-width: ${this.width};` : ''}${this.maxHeight ? `--drawer-max-height: ${this.maxHeight};` : ''}${this.getPanelStyle()}"
|
|
553
512
|
role="${this.modal ? "dialog" : "region"}"
|
|
554
513
|
aria-modal="${this.modal}"
|
|
555
514
|
tabindex="-1">
|
|
@@ -566,14 +525,10 @@ export class RelDrawer extends LitElement {
|
|
|
566
525
|
<div class="header-top">
|
|
567
526
|
<div>
|
|
568
527
|
${hasTitle
|
|
569
|
-
? html`<h2 class="title"
|
|
570
|
-
<slot name="title"></slot>
|
|
571
|
-
</h2>`
|
|
528
|
+
? html`<h2 class="title">${this.title}</h2>`
|
|
572
529
|
: ""}
|
|
573
530
|
${hasDescription
|
|
574
|
-
? html`<p class="description"
|
|
575
|
-
<slot name="description"></slot>
|
|
576
|
-
</p>`
|
|
531
|
+
? html`<p class="description">${this.description}</p>`
|
|
577
532
|
: ""}
|
|
578
533
|
</div>
|
|
579
534
|
${showCloseButton
|
|
@@ -582,16 +537,7 @@ export class RelDrawer extends LitElement {
|
|
|
582
537
|
class="close-button"
|
|
583
538
|
@click="${this.handleCloseButtonClick}"
|
|
584
539
|
aria-label="Close">
|
|
585
|
-
<
|
|
586
|
-
width="16"
|
|
587
|
-
height="16"
|
|
588
|
-
viewBox="0 0 16 16"
|
|
589
|
-
fill="none"
|
|
590
|
-
xmlns="http://www.w3.org/2000/svg">
|
|
591
|
-
<path
|
|
592
|
-
d="M12.8 4.27L11.73 3.2L8 6.93L4.27 3.2L3.2 4.27L6.93 8L3.2 11.73L4.27 12.8L8 9.07L11.73 12.8L12.8 11.73L9.07 8L12.8 4.27Z"
|
|
593
|
-
fill="currentColor" />
|
|
594
|
-
</svg>
|
|
540
|
+
<rel-icon name="close" size="sm"></rel-icon>
|
|
595
541
|
</button>`
|
|
596
542
|
: ""}
|
|
597
543
|
</div>
|
|
@@ -603,11 +549,9 @@ export class RelDrawer extends LitElement {
|
|
|
603
549
|
<slot></slot>
|
|
604
550
|
</div>
|
|
605
551
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
</div>`
|
|
610
|
-
: ""}
|
|
552
|
+
<div part="footer" class="footer">
|
|
553
|
+
<rel-drawer-footer><slot name="footer"></slot></rel-drawer-footer>
|
|
554
|
+
</div>
|
|
611
555
|
</div>
|
|
612
556
|
</div>
|
|
613
557
|
`;
|