@reliability-design/web 1.3.1 → 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 +153 -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 +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 +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 +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 +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 +172 -91
- 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 +151 -39
- package/dist/index.d.ts +151 -39
- package/dist/index.js +3544 -2289
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3876 -2622
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +653 -363
- 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-F54UGCHM.css +0 -363
- 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, state } from "lit/decorators.js";
|
|
3
|
-
import "../../styles/vars-v2.css";
|
|
4
3
|
|
|
5
4
|
@customElement("rel-pagination")
|
|
6
5
|
export class RelPagination extends LitElement {
|
|
@@ -28,8 +27,15 @@ export class RelPagination extends LitElement {
|
|
|
28
27
|
|
|
29
28
|
static styles = css`
|
|
30
29
|
:host {
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
/* container-type: inline-size applies INLINE-SIZE CONTAINMENT — the width
|
|
31
|
+
must resolve without consulting the contents. Combined with a
|
|
32
|
+
shrink-to-fit box (inline-block) that is contradictory and the host
|
|
33
|
+
collapses to width:0, which made the whole component invisible.
|
|
34
|
+
A size container must be block-level (or have a definite width). */
|
|
35
|
+
container-type: inline-size;
|
|
36
|
+
color: var(--rel-text-default);
|
|
37
|
+
display: block;
|
|
38
|
+
font-family: var(--rel-fonts-font-family, 'Poppins', sans-serif);
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
:host([type="count-text"]) {
|
|
@@ -52,20 +58,20 @@ export class RelPagination extends LitElement {
|
|
|
52
58
|
display: flex;
|
|
53
59
|
flex-direction: column;
|
|
54
60
|
align-items: center;
|
|
55
|
-
gap:
|
|
61
|
+
gap: var(--rel-spacing-md);
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
.pag-stack {
|
|
59
65
|
display: inline-flex;
|
|
60
66
|
align-items: center;
|
|
61
|
-
gap:
|
|
67
|
+
gap: var(--rel-spacing-sm);
|
|
62
68
|
}
|
|
63
69
|
|
|
64
70
|
.pag-count {
|
|
65
71
|
display: flex;
|
|
66
72
|
align-items: center;
|
|
67
73
|
justify-content: space-between;
|
|
68
|
-
gap:
|
|
74
|
+
gap: var(--rel-spacing-xl);
|
|
69
75
|
width: 100%;
|
|
70
76
|
}
|
|
71
77
|
|
|
@@ -80,7 +86,7 @@ export class RelPagination extends LitElement {
|
|
|
80
86
|
.pag-numbers {
|
|
81
87
|
display: inline-flex;
|
|
82
88
|
align-items: center;
|
|
83
|
-
gap:
|
|
89
|
+
gap: var(--rel-spacing-2xs);
|
|
84
90
|
}
|
|
85
91
|
|
|
86
92
|
/* ── Prev / Next — circular buttons ──────────────────────── */
|
|
@@ -92,22 +98,22 @@ export class RelPagination extends LitElement {
|
|
|
92
98
|
width: 40px;
|
|
93
99
|
height: 40px;
|
|
94
100
|
padding: 0;
|
|
95
|
-
border-radius:
|
|
96
|
-
border: 1px solid
|
|
97
|
-
background:
|
|
101
|
+
border-radius: var(--rel-border-radius-full-rounded);
|
|
102
|
+
border: 1px solid var(--rel-border-default);
|
|
103
|
+
background: var(--rel-bg-neutral);
|
|
98
104
|
cursor: pointer;
|
|
99
|
-
color:
|
|
105
|
+
color: var(--rel-action-neutral-label-icons-ghost);
|
|
100
106
|
box-sizing: border-box;
|
|
101
107
|
transition: background 0.15s ease;
|
|
102
108
|
flex-shrink: 0;
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
.pag-nav-btn:hover:not(:disabled) {
|
|
106
|
-
background:
|
|
112
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
107
113
|
}
|
|
108
114
|
|
|
109
115
|
.pag-nav-btn:focus-visible {
|
|
110
|
-
outline: 2px solid var(--rel-
|
|
116
|
+
outline: 2px solid var(--rel-border-focus);
|
|
111
117
|
outline-offset: 2px;
|
|
112
118
|
}
|
|
113
119
|
|
|
@@ -129,33 +135,35 @@ export class RelPagination extends LitElement {
|
|
|
129
135
|
justify-content: center;
|
|
130
136
|
width: 40px;
|
|
131
137
|
height: 40px;
|
|
132
|
-
padding:
|
|
133
|
-
border-radius:
|
|
134
|
-
border: 1px solid
|
|
135
|
-
background:
|
|
138
|
+
padding: var(--rel-spacing-xs);
|
|
139
|
+
border-radius: var(--rel-border-radius-sm);
|
|
140
|
+
border: 1px solid var(--rel-border-default);
|
|
141
|
+
background: var(--rel-bg-neutral);
|
|
136
142
|
cursor: pointer;
|
|
137
|
-
|
|
138
|
-
font-size: 14px;
|
|
139
|
-
font-weight: 500;
|
|
140
|
-
letter-spacing: -0.3px;
|
|
141
|
-
color: #0b0b0b;
|
|
142
|
-
line-height: 22px;
|
|
143
|
+
color: var(--rel-text-default);
|
|
143
144
|
box-sizing: border-box;
|
|
144
145
|
transition: background 0.15s ease, border-color 0.15s ease;
|
|
146
|
+
font-family: var(--rel-body-md-medium-font-family);
|
|
147
|
+
font-weight: var(--rel-body-md-medium-font-weight);
|
|
148
|
+
font-size: var(--rel-body-md-medium-font-size);
|
|
149
|
+
line-height: var(--rel-body-md-medium-line-height);
|
|
150
|
+
letter-spacing: var(--rel-body-md-medium-letter-spacing);
|
|
145
151
|
}
|
|
146
152
|
|
|
147
153
|
.pag-page-btn:hover {
|
|
148
|
-
background:
|
|
154
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
149
155
|
}
|
|
150
156
|
|
|
151
157
|
.pag-page-btn:focus-visible {
|
|
152
|
-
outline: 2px solid var(--rel-
|
|
158
|
+
outline: 2px solid var(--rel-border-focus);
|
|
153
159
|
outline-offset: 2px;
|
|
154
160
|
}
|
|
155
161
|
|
|
162
|
+
/* Figma: current page is an inverse chip */
|
|
156
163
|
.pag-page-btn[aria-current="page"] {
|
|
157
|
-
background:
|
|
158
|
-
border-color:
|
|
164
|
+
background: var(--rel-bg-neutral-inverse-2);
|
|
165
|
+
border-color: var(--rel-bg-neutral-inverse-2);
|
|
166
|
+
color: var(--rel-text-inverse);
|
|
159
167
|
}
|
|
160
168
|
|
|
161
169
|
/* ── Ellipsis ─────────────────────────────────────────────── */
|
|
@@ -166,33 +174,49 @@ export class RelPagination extends LitElement {
|
|
|
166
174
|
justify-content: center;
|
|
167
175
|
width: 40px;
|
|
168
176
|
height: 40px;
|
|
169
|
-
|
|
170
|
-
font-weight: 500;
|
|
171
|
-
letter-spacing: -0.3px;
|
|
172
|
-
color: #0b0b0b;
|
|
177
|
+
color: var(--rel-text-default);
|
|
173
178
|
user-select: none;
|
|
179
|
+
font-family: var(--rel-body-md-medium-font-family);
|
|
180
|
+
font-weight: var(--rel-body-md-medium-font-weight);
|
|
181
|
+
font-size: var(--rel-body-md-medium-font-size);
|
|
182
|
+
line-height: var(--rel-body-md-medium-line-height);
|
|
183
|
+
letter-spacing: var(--rel-body-md-medium-letter-spacing);
|
|
174
184
|
}
|
|
175
185
|
|
|
176
186
|
/* ── Compact: "Page X of Y" ───────────────────────────────── */
|
|
177
187
|
|
|
178
188
|
.pag-page-text {
|
|
179
|
-
|
|
180
|
-
font-weight: 500;
|
|
181
|
-
letter-spacing: -0.3px;
|
|
182
|
-
color: #0b0b0b;
|
|
183
|
-
line-height: 22px;
|
|
189
|
+
color: var(--rel-text-default);
|
|
184
190
|
white-space: nowrap;
|
|
191
|
+
|
|
192
|
+
font-family: var(--rel-body-md-medium-font-family);
|
|
193
|
+
|
|
194
|
+
font-weight: var(--rel-body-md-medium-font-weight);
|
|
195
|
+
|
|
196
|
+
font-size: var(--rel-body-md-medium-font-size);
|
|
197
|
+
|
|
198
|
+
line-height: var(--rel-body-md-medium-line-height);
|
|
199
|
+
|
|
200
|
+
letter-spacing: var(--rel-body-md-medium-letter-spacing);
|
|
201
|
+
|
|
185
202
|
}
|
|
186
203
|
|
|
187
204
|
/* ── Count-text: "1-5 of 50" ─────────────────────────────── */
|
|
188
205
|
|
|
189
206
|
.pag-count-text {
|
|
190
|
-
|
|
191
|
-
font-weight: 500;
|
|
192
|
-
letter-spacing: -0.3px;
|
|
193
|
-
color: #0b0b0b;
|
|
194
|
-
line-height: 22px;
|
|
207
|
+
color: var(--rel-text-default);
|
|
195
208
|
white-space: nowrap;
|
|
209
|
+
|
|
210
|
+
font-family: var(--rel-body-md-medium-font-family);
|
|
211
|
+
|
|
212
|
+
font-weight: var(--rel-body-md-medium-font-weight);
|
|
213
|
+
|
|
214
|
+
font-size: var(--rel-body-md-medium-font-size);
|
|
215
|
+
|
|
216
|
+
line-height: var(--rel-body-md-medium-line-height);
|
|
217
|
+
|
|
218
|
+
letter-spacing: var(--rel-body-md-medium-letter-spacing);
|
|
219
|
+
|
|
196
220
|
}
|
|
197
221
|
|
|
198
222
|
/* ── Count-text: inline current page number ───────────────── */
|
|
@@ -203,70 +227,92 @@ export class RelPagination extends LitElement {
|
|
|
203
227
|
justify-content: center;
|
|
204
228
|
width: 24px;
|
|
205
229
|
height: 40px;
|
|
206
|
-
|
|
207
|
-
font-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
line-height:
|
|
230
|
+
color: var(--rel-text-default);
|
|
231
|
+
font-family: var(--rel-body-md-medium-font-family);
|
|
232
|
+
font-weight: var(--rel-body-md-medium-font-weight);
|
|
233
|
+
font-size: var(--rel-body-md-medium-font-size);
|
|
234
|
+
line-height: var(--rel-body-md-medium-line-height);
|
|
235
|
+
letter-spacing: var(--rel-body-md-medium-letter-spacing);
|
|
211
236
|
}
|
|
212
237
|
|
|
213
238
|
/* ── Extended sub-label ───────────────────────────────────── */
|
|
214
239
|
|
|
215
240
|
.pag-label {
|
|
216
|
-
|
|
217
|
-
font-weight: 400;
|
|
218
|
-
letter-spacing: -0.3px;
|
|
219
|
-
color: #7d7d7d;
|
|
220
|
-
line-height: 22px;
|
|
241
|
+
color: var(--rel-text-caption);
|
|
221
242
|
text-align: center;
|
|
222
|
-
}
|
|
223
243
|
|
|
224
|
-
|
|
244
|
+
font-family: var(--rel-body-md-regular-font-family);
|
|
225
245
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
246
|
+
font-weight: var(--rel-body-md-regular-font-weight);
|
|
247
|
+
|
|
248
|
+
font-size: var(--rel-body-md-regular-font-size);
|
|
249
|
+
|
|
250
|
+
line-height: var(--rel-body-md-regular-line-height);
|
|
251
|
+
|
|
252
|
+
letter-spacing: var(--rel-body-md-regular-letter-spacing);
|
|
232
253
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
254
|
+
}
|
|
255
|
+
/* ── Task 4: responsive behaviour (conventions §4) ───────────────── */
|
|
256
|
+
.auto-compact {
|
|
257
|
+
display: none;
|
|
236
258
|
}
|
|
237
259
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
border-color: #333333;
|
|
242
|
-
color: #f5f5f5;
|
|
260
|
+
.pag-numbers {
|
|
261
|
+
flex-wrap: wrap;
|
|
262
|
+
justify-content: center;
|
|
243
263
|
}
|
|
244
264
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
265
|
+
@container (max-width: 768px) {
|
|
266
|
+
.pag-page-btn {
|
|
267
|
+
width: auto;
|
|
268
|
+
min-width: 36px;
|
|
269
|
+
}
|
|
248
270
|
}
|
|
249
271
|
|
|
250
|
-
:
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
272
|
+
/* 480–768px: shrink the number window to current ±1 plus first/last */
|
|
273
|
+
@container (min-width: 480px) and (max-width: 768px) {
|
|
274
|
+
.pag-page-btn:not(.near):not(.edge):not([aria-current="page"]),
|
|
275
|
+
.pag-ellipsis {
|
|
276
|
+
display: none;
|
|
277
|
+
}
|
|
254
278
|
}
|
|
255
279
|
|
|
256
|
-
:
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
280
|
+
/* <480px: swap to the compact layout automatically */
|
|
281
|
+
@container (max-width: 479px) {
|
|
282
|
+
.auto-extended {
|
|
283
|
+
display: none;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.auto-compact {
|
|
287
|
+
display: block;
|
|
288
|
+
}
|
|
265
289
|
}
|
|
266
290
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
291
|
+
/* Fallback for browsers without container queries */
|
|
292
|
+
@supports not (container-type: inline-size) {
|
|
293
|
+
@media (max-width: 768px) {
|
|
294
|
+
.pag-page-btn {
|
|
295
|
+
width: auto;
|
|
296
|
+
min-width: 36px;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
@media (min-width: 480px) and (max-width: 768px) {
|
|
301
|
+
.pag-page-btn:not(.near):not(.edge):not([aria-current="page"]),
|
|
302
|
+
.pag-ellipsis {
|
|
303
|
+
display: none;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
@media (max-width: 479px) {
|
|
308
|
+
.auto-extended {
|
|
309
|
+
display: none;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.auto-compact {
|
|
313
|
+
display: block;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
270
316
|
}
|
|
271
317
|
`;
|
|
272
318
|
|
|
@@ -377,7 +423,7 @@ export class RelPagination extends LitElement {
|
|
|
377
423
|
const total = this.computedTotalPages;
|
|
378
424
|
|
|
379
425
|
return html`
|
|
380
|
-
<div class="pag-root" role="navigation" aria-label="${this.ariaLabel}">
|
|
426
|
+
<div part="base" class="pag-root" role="navigation" aria-label="${this.ariaLabel}">
|
|
381
427
|
<div class="pag-stack">
|
|
382
428
|
${this.renderNavBtn("prev")}
|
|
383
429
|
<div class="pag-numbers">
|
|
@@ -386,7 +432,7 @@ export class RelPagination extends LitElement {
|
|
|
386
432
|
? html`<span class="pag-ellipsis">...</span>`
|
|
387
433
|
: html`<button
|
|
388
434
|
type="button"
|
|
389
|
-
class="pag-page-btn"
|
|
435
|
+
class="pag-page-btn ${Math.abs(p - current) <= 1 ? "near" : ""} ${p === 1 || p === total ? "edge" : ""}"
|
|
390
436
|
aria-label="Page ${p}"
|
|
391
437
|
aria-current="${p === current ? "page" : "false"}"
|
|
392
438
|
@click="${() => this.handlePageChange(p)}"
|
|
@@ -423,7 +469,7 @@ export class RelPagination extends LitElement {
|
|
|
423
469
|
const end = Math.min(current * this.perPage, effectiveTotalItems);
|
|
424
470
|
|
|
425
471
|
return html`
|
|
426
|
-
<div class="pag-count" role="navigation" aria-label="${this.ariaLabel}">
|
|
472
|
+
<div part="label" class="pag-count" role="navigation" aria-label="${this.ariaLabel}">
|
|
427
473
|
<span class="pag-count-text">${start}–${end} of ${effectiveTotalItems}</span>
|
|
428
474
|
<div class="pag-count-nav">
|
|
429
475
|
${this.renderNavBtn("prev")}
|
|
@@ -437,6 +483,11 @@ export class RelPagination extends LitElement {
|
|
|
437
483
|
render() {
|
|
438
484
|
if (this.type === "compact") return this.renderCompact();
|
|
439
485
|
if (this.type === "count-text") return this.renderCountText();
|
|
440
|
-
|
|
486
|
+
/* Task 4: extended auto-switches to the compact layout under 480px
|
|
487
|
+
(container query, media-query fallback) — same markup, CSS-toggled. */
|
|
488
|
+
return html`
|
|
489
|
+
<div class="auto-extended">${this.renderExtended()}</div>
|
|
490
|
+
<div class="auto-compact">${this.renderCompact()}</div>
|
|
491
|
+
`;
|
|
441
492
|
}
|
|
442
493
|
}
|
|
@@ -372,25 +372,25 @@ The component implements WCAG accessibility guidelines:
|
|
|
372
372
|
The component uses design tokens from the Reliability Design System:
|
|
373
373
|
|
|
374
374
|
### Colors (rel-popover-content)
|
|
375
|
-
- `--rel-
|
|
376
|
-
- `--rel-
|
|
377
|
-
- `--rel-
|
|
378
|
-
- `--rel-
|
|
375
|
+
- `--rel-bg-surface` - Content background
|
|
376
|
+
- `--rel-border-default` - Border color
|
|
377
|
+
- `--rel-text-label` - Text color
|
|
378
|
+
- `--rel-text-placeholder` - Paragraph text color
|
|
379
379
|
|
|
380
380
|
### Typography
|
|
381
|
-
- `--rel-
|
|
382
|
-
- `--rel-
|
|
383
|
-
- `--rel-
|
|
384
|
-
- `--rel-
|
|
381
|
+
- `--rel-fonts-font-family` - Font family (Poppins)
|
|
382
|
+
- `--rel-fonts-weight-body-semibold` - Heading weight
|
|
383
|
+
- `--rel-body-sm-regular-font-size` - Base text size
|
|
384
|
+
- `--rel-body-md-regular-line-height` - Paragraph line height
|
|
385
385
|
|
|
386
386
|
### Spacing
|
|
387
|
-
- `--rel-spacing-
|
|
388
|
-
- `--rel-spacing-
|
|
389
|
-
- `--rel-spacing-
|
|
387
|
+
- `--rel-spacing-md` (16px) - Content padding
|
|
388
|
+
- `--rel-spacing-xs` (8px) - Heading bottom margin
|
|
389
|
+
- `--rel-spacing-sm` (12px) - Paragraph bottom margin
|
|
390
390
|
|
|
391
391
|
### Borders & Effects
|
|
392
|
-
- `--rel-
|
|
393
|
-
- `--rel-
|
|
392
|
+
- `--rel-stroke-sm` (1px) - Border width
|
|
393
|
+
- `--rel-border-radius-sm` (8px) - Border radius
|
|
394
394
|
- `--rel-shadows-shadow-300` - Drop shadow
|
|
395
395
|
|
|
396
396
|
### Z-Index
|
|
@@ -1,27 +1,47 @@
|
|
|
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-popover-content")
|
|
6
5
|
export class RelPopoverContent extends LitElement {
|
|
7
6
|
@property({ type: String, attribute: "aria-label" }) ariaLabel = "";
|
|
8
7
|
|
|
8
|
+
/** Figma Size axis (S/M/L): panel padding 12/16/20px. */
|
|
9
|
+
@property({ type: String, reflect: true }) size: "sm" | "md" | "lg" = "md";
|
|
10
|
+
|
|
9
11
|
static styles = css`
|
|
10
12
|
:host {
|
|
13
|
+
gap: var(--rel-spacing-md);
|
|
14
|
+
color: var(--rel-text-body);
|
|
11
15
|
display: block;
|
|
12
16
|
width: 100%;
|
|
13
17
|
max-width: 400px;
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
.popover-content {
|
|
17
|
-
background: var(--rel-
|
|
18
|
-
border: var(--rel-
|
|
19
|
-
border-radius: var(--rel-
|
|
21
|
+
background: var(--rel-bg-neutral);
|
|
22
|
+
border: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
23
|
+
border-radius: var(--rel-border-radius-sm);
|
|
20
24
|
box-shadow: var(--rel-shadows-shadow-300);
|
|
21
|
-
padding: var(--rel-spacing-
|
|
22
|
-
|
|
23
|
-
font-
|
|
24
|
-
|
|
25
|
+
padding: var(--rel-spacing-lg);
|
|
26
|
+
color: var(--rel-text-label);
|
|
27
|
+
font-family: var(--rel-body-md-regular-font-family);
|
|
28
|
+
font-weight: var(--rel-body-md-regular-font-weight);
|
|
29
|
+
font-size: var(--rel-body-md-regular-font-size);
|
|
30
|
+
line-height: var(--rel-body-md-regular-line-height);
|
|
31
|
+
letter-spacing: var(--rel-body-md-regular-letter-spacing);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Figma Size axis: S = 12px padding, M = 16px, L = 20px */
|
|
35
|
+
:host([size="sm"]) .popover-content {
|
|
36
|
+
padding: var(--rel-spacing-sm);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:host([size="md"]) .popover-content {
|
|
40
|
+
padding: var(--rel-spacing-md);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
:host([size="lg"]) .popover-content {
|
|
44
|
+
padding: var(--rel-spacing-lg);
|
|
25
45
|
}
|
|
26
46
|
|
|
27
47
|
.popover-content ::slotted(h1),
|
|
@@ -30,15 +50,20 @@ export class RelPopoverContent extends LitElement {
|
|
|
30
50
|
.popover-content ::slotted(h4),
|
|
31
51
|
.popover-content ::slotted(h5),
|
|
32
52
|
.popover-content ::slotted(h6) {
|
|
33
|
-
margin: 0 0 var(--rel-spacing-
|
|
34
|
-
font-
|
|
35
|
-
|
|
53
|
+
margin: 0 0 var(--rel-spacing-xs);
|
|
54
|
+
font-family: var(--rel-headings-sm-font-family);
|
|
55
|
+
font-weight: var(--rel-headings-sm-font-weight);
|
|
56
|
+
font-size: var(--rel-headings-sm-font-size);
|
|
57
|
+
line-height: var(--rel-headings-sm-line-height);
|
|
58
|
+
letter-spacing: var(--rel-headings-sm-letter-spacing);
|
|
59
|
+
color: var(--rel-text-label);
|
|
60
|
+
margin-bottom: var(--rel-spacing-2xs);
|
|
36
61
|
}
|
|
37
62
|
|
|
38
63
|
.popover-content ::slotted(p) {
|
|
39
|
-
margin: 0 0 var(--rel-spacing-
|
|
40
|
-
color: var(--rel-
|
|
41
|
-
line-height: var(--rel-
|
|
64
|
+
margin: 0 0 var(--rel-spacing-sm);
|
|
65
|
+
color: var(--rel-text-placeholder);
|
|
66
|
+
line-height: var(--rel-body-md-regular-line-height);
|
|
42
67
|
}
|
|
43
68
|
|
|
44
69
|
.popover-content ::slotted(p:last-child) {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { LitElement, html, css } from "lit";
|
|
2
2
|
import { customElement, property, state, query } from "lit/decorators.js";
|
|
3
|
-
import "../../styles/vars-v2.css";
|
|
4
3
|
|
|
5
4
|
type SideType = "top" | "right" | "bottom" | "left";
|
|
6
5
|
type AlignType = "start" | "center" | "end";
|
|
@@ -15,8 +14,8 @@ export class RelPopover extends LitElement {
|
|
|
15
14
|
@property({ type: Boolean, attribute: "defaultopen" }) defaultOpen = false;
|
|
16
15
|
@property({ type: Boolean, reflect: true }) disabled = false;
|
|
17
16
|
|
|
18
|
-
@property({ type: String }) side: SideType = "bottom";
|
|
19
|
-
@property({ type: String }) align: AlignType = "center";
|
|
17
|
+
@property({ type: String, reflect: true }) side: SideType = "bottom";
|
|
18
|
+
@property({ type: String, reflect: true }) align: AlignType = "center";
|
|
20
19
|
@property({ type: Number, attribute: "sideoffset" }) sideOffset = 8;
|
|
21
20
|
@property({ type: Number, attribute: "alignoffset" }) alignOffset = 0;
|
|
22
21
|
|
|
@@ -44,6 +43,7 @@ export class RelPopover extends LitElement {
|
|
|
44
43
|
|
|
45
44
|
static styles = css`
|
|
46
45
|
:host {
|
|
46
|
+
color: var(--rel-text-default);
|
|
47
47
|
display: inline-block;
|
|
48
48
|
position: relative;
|
|
49
49
|
}
|
|
@@ -281,20 +281,31 @@ export class RelPopover extends LitElement {
|
|
|
281
281
|
let top = 0;
|
|
282
282
|
let left = 0;
|
|
283
283
|
|
|
284
|
+
// Alignment along the cross axis. Previously every branch hardcoded the
|
|
285
|
+
// centre calculation, so `align` and `alignOffset` were dead code —
|
|
286
|
+
// "center" worked by accident and "start"/"end" did nothing.
|
|
287
|
+
const alignAxis = (start: number, size: number, contentSize: number) => {
|
|
288
|
+
switch (this.align) {
|
|
289
|
+
case "start": return start;
|
|
290
|
+
case "end": return start + size - contentSize;
|
|
291
|
+
default: return start + size / 2 - contentSize / 2; // center
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
|
|
284
295
|
if (this.side === "top") {
|
|
285
296
|
top = t.top - c.height - this.sideOffset;
|
|
286
|
-
left = t.left
|
|
297
|
+
left = alignAxis(t.left, t.width, c.width) + this.alignOffset;
|
|
287
298
|
}
|
|
288
299
|
if (this.side === "bottom") {
|
|
289
300
|
top = t.bottom + this.sideOffset;
|
|
290
|
-
left = t.left
|
|
301
|
+
left = alignAxis(t.left, t.width, c.width) + this.alignOffset;
|
|
291
302
|
}
|
|
292
303
|
if (this.side === "left") {
|
|
293
|
-
top = t.top
|
|
304
|
+
top = alignAxis(t.top, t.height, c.height) + this.alignOffset;
|
|
294
305
|
left = t.left - c.width - this.sideOffset;
|
|
295
306
|
}
|
|
296
307
|
if (this.side === "right") {
|
|
297
|
-
top = t.top
|
|
308
|
+
top = alignAxis(t.top, t.height, c.height) + this.alignOffset;
|
|
298
309
|
left = t.right + this.sideOffset;
|
|
299
310
|
}
|
|
300
311
|
|
|
@@ -51,14 +51,14 @@ None exposed.
|
|
|
51
51
|
## Tokens / CSS Variables
|
|
52
52
|
|
|
53
53
|
### Semantic Tokens
|
|
54
|
-
- `--rel-
|
|
54
|
+
- `--rel-fonts-font-family` - Font family
|
|
55
55
|
|
|
56
56
|
### Color Tokens
|
|
57
|
-
- `--rel-
|
|
58
|
-
- `--rel-
|
|
57
|
+
- `--rel-border-default` - Track/background color
|
|
58
|
+
- `--rel-text-default` - Active progress bar color
|
|
59
59
|
|
|
60
60
|
### Border Tokens
|
|
61
|
-
- `--rel-
|
|
61
|
+
- `--rel-border-radius-sm` - Linear track border radius
|
|
62
62
|
|
|
63
63
|
## Accessibility
|
|
64
64
|
- Determinate modes use `role="progressbar"` with `aria-valuenow`, `aria-valuemin="0"`, `aria-valuemax="100"`
|
|
@@ -76,7 +76,7 @@ None exposed.
|
|
|
76
76
|
- Height: `6px`
|
|
77
77
|
- Track uses gray border color
|
|
78
78
|
- Bar uses black color
|
|
79
|
-
- Border radius: `--rel-
|
|
79
|
+
- Border radius: `--rel-border-radius-sm`
|
|
80
80
|
- **Determinate**: bar width transitions smoothly (0.3s ease)
|
|
81
81
|
- **Indeterminate**: 30% width bar slides left-to-right (1.5s infinite loop)
|
|
82
82
|
|
|
@@ -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
|
export type ProgressMode =
|
|
6
5
|
| "linear-determinate"
|
|
@@ -21,8 +20,9 @@ export class RelProgress extends LitElement {
|
|
|
21
20
|
|
|
22
21
|
static styles = css`
|
|
23
22
|
:host {
|
|
23
|
+
color: var(--rel-text-default);
|
|
24
24
|
display: block;
|
|
25
|
-
font-family: var(--rel-
|
|
25
|
+
font-family: var(--rel-fonts-font-family);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
:host([mode*="circular"]) {
|
|
@@ -31,16 +31,20 @@ export class RelProgress extends LitElement {
|
|
|
31
31
|
|
|
32
32
|
/* Linear */
|
|
33
33
|
.linear-track {
|
|
34
|
-
background: var(--rel-
|
|
35
|
-
border-radius: var(--rel-
|
|
34
|
+
background: var(--rel-bg-neutral-elevated-2);
|
|
35
|
+
border-radius: var(--rel-border-radius-square);
|
|
36
36
|
height: 6px;
|
|
37
37
|
overflow: hidden;
|
|
38
38
|
width: 100%;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.linear-bar {
|
|
42
|
-
background: var(--rel-
|
|
42
|
+
background: var(--rel-bg-neutral-inverse-1);
|
|
43
43
|
height: 100%;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Width animates only when value-driven (Figma Type=Determinate) */
|
|
47
|
+
.linear-bar.determinate {
|
|
44
48
|
transition: width 0.3s ease;
|
|
45
49
|
}
|
|
46
50
|
|
|
@@ -76,13 +80,13 @@ export class RelProgress extends LitElement {
|
|
|
76
80
|
|
|
77
81
|
.circular-bg {
|
|
78
82
|
fill: none;
|
|
79
|
-
stroke: var(--rel-
|
|
83
|
+
stroke: var(--rel-border-default);
|
|
80
84
|
stroke-width: 3;
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
.circular-progress {
|
|
84
88
|
fill: none;
|
|
85
|
-
stroke: var(--rel-
|
|
89
|
+
stroke: var(--rel-text-default);
|
|
86
90
|
stroke-width: 3;
|
|
87
91
|
stroke-linecap: butt;
|
|
88
92
|
transition: stroke-dashoffset 0.35s;
|
|
@@ -94,7 +98,7 @@ export class RelProgress extends LitElement {
|
|
|
94
98
|
}
|
|
95
99
|
|
|
96
100
|
.spinner-path {
|
|
97
|
-
stroke: var(--rel-
|
|
101
|
+
stroke: var(--rel-text-default);
|
|
98
102
|
stroke-linecap: butt;
|
|
99
103
|
animation: dash 1.5s ease-in-out infinite;
|
|
100
104
|
}
|
|
@@ -153,17 +157,17 @@ export class RelProgress extends LitElement {
|
|
|
153
157
|
|
|
154
158
|
private renderLinearDeterminate() {
|
|
155
159
|
return html`
|
|
156
|
-
<div class="linear-track" role="progressbar"
|
|
160
|
+
<div part="track" class="linear-track" role="progressbar"
|
|
157
161
|
aria-valuenow="${this.safeValue}" aria-valuemin="0" aria-valuemax="100">
|
|
158
|
-
<div class="linear-bar" style="width: ${this.safeValue}%"></div>
|
|
162
|
+
<div part="indicator" class="linear-bar determinate" style="width: ${this.safeValue}%"></div>
|
|
159
163
|
</div>
|
|
160
164
|
`;
|
|
161
165
|
}
|
|
162
166
|
|
|
163
167
|
private renderLinearIndeterminate() {
|
|
164
168
|
return html`
|
|
165
|
-
<div class="linear-track" role="progressbar">
|
|
166
|
-
<div class="linear-bar indeterminate"></div>
|
|
169
|
+
<div part="track" class="linear-track" role="progressbar">
|
|
170
|
+
<div part="indicator" class="linear-bar indeterminate"></div>
|
|
167
171
|
</div>
|
|
168
172
|
`;
|
|
169
173
|
}
|