@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.
Files changed (123) hide show
  1. package/dist/components/rel-accordion/README.md +13 -13
  2. package/dist/components/rel-accordion/rel-accordion.ts +80 -45
  3. package/dist/components/rel-alert/README.md +15 -15
  4. package/dist/components/rel-alert/rel-alert.ts +153 -158
  5. package/dist/components/rel-avatar/README.md +15 -15
  6. package/dist/components/rel-avatar/rel-avatar.ts +42 -38
  7. package/dist/components/rel-badge/README.md +5 -5
  8. package/dist/components/rel-badge/rel-badge.ts +46 -11
  9. package/dist/components/rel-breadcrumb/README.md +7 -7
  10. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +16 -13
  11. package/dist/components/rel-button/README.md +20 -20
  12. package/dist/components/rel-button/rel-button.ts +292 -105
  13. package/dist/components/rel-calendar/README.md +5 -5
  14. package/dist/components/rel-calendar/rel-calendar.ts +61 -45
  15. package/dist/components/rel-card/README.md +6 -6
  16. package/dist/components/rel-card/rel-card.ts +88 -35
  17. package/dist/components/rel-cardmedia/README.md +9 -9
  18. package/dist/components/rel-cardmedia/rel-cardmedia.ts +27 -20
  19. package/dist/components/rel-carousel/README.md +3 -3
  20. package/dist/components/rel-carousel/rel-carousel.ts +174 -90
  21. package/dist/components/rel-chart/README.md +8 -8
  22. package/dist/components/rel-chart/rel-chart.ts +59 -41
  23. package/dist/components/rel-checkbox/README.md +7 -7
  24. package/dist/components/rel-checkbox/rel-checkbox.ts +61 -61
  25. package/dist/components/rel-chip/README.md +16 -16
  26. package/dist/components/rel-chip/rel-chip.ts +143 -111
  27. package/dist/components/rel-container/README.md +11 -11
  28. package/dist/components/rel-container/rel-container.ts +35 -9
  29. package/dist/components/rel-date-picker/README.md +43 -7
  30. package/dist/components/rel-date-picker/date-format.test.ts +43 -0
  31. package/dist/components/rel-date-picker/date-format.ts +47 -0
  32. package/dist/components/rel-date-picker/rel-date-picker.ts +154 -82
  33. package/dist/components/rel-divider/README.md +9 -9
  34. package/dist/components/rel-divider/rel-divider.ts +10 -9
  35. package/dist/components/rel-drawer/README.md +1 -1
  36. package/dist/components/rel-drawer/rel-drawer-footer.ts +1 -1
  37. package/dist/components/rel-drawer/rel-drawer.ts +56 -28
  38. package/dist/components/rel-kbd/README.md +20 -20
  39. package/dist/components/rel-kbd/rel-kbd.ts +119 -25
  40. package/dist/components/rel-layout/README.md +1 -1
  41. package/dist/components/rel-layout/rel-layout.ts +2 -2
  42. package/dist/components/rel-menu/README.md +15 -15
  43. package/dist/components/rel-menu/rel-menu.ts +155 -88
  44. package/dist/components/rel-menubar/README.md +20 -20
  45. package/dist/components/rel-menubar/rel-menubar.ts +47 -31
  46. package/dist/components/rel-nav-menu/README.md +21 -21
  47. package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +17 -14
  48. package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +33 -14
  49. package/dist/components/rel-nav-menu/rel-nav-menu.ts +14 -7
  50. package/dist/components/rel-navbar/README.md +7 -7
  51. package/dist/components/rel-navbar/rel-navbar.ts +12 -11
  52. package/dist/components/rel-otp/README.md +3 -3
  53. package/dist/components/rel-otp/rel-otp.ts +46 -30
  54. package/dist/components/rel-pagination/README.md +18 -18
  55. package/dist/components/rel-pagination/rel-pagination.ts +141 -90
  56. package/dist/components/rel-popover/README.md +13 -13
  57. package/dist/components/rel-popover/rel-popover-content.ts +39 -14
  58. package/dist/components/rel-popover/rel-popover.ts +18 -7
  59. package/dist/components/rel-progress/README.md +5 -5
  60. package/dist/components/rel-progress/rel-progress.ts +16 -12
  61. package/dist/components/rel-radio/README.md +9 -9
  62. package/dist/components/rel-radio/rel-radio.ts +64 -50
  63. package/dist/components/rel-range-picker/rel-range-picker.ts +120 -117
  64. package/dist/components/rel-resizable/README.md +4 -4
  65. package/dist/components/rel-resizable/rel-resizable-group.ts +15 -4
  66. package/dist/components/rel-resizable/rel-resizable-handle.ts +13 -9
  67. package/dist/components/rel-resizable/rel-resizable-panel.ts +11 -0
  68. package/dist/components/rel-segmented-button/README.md +10 -10
  69. package/dist/components/rel-segmented-button/rel-segmented-button.ts +39 -40
  70. package/dist/components/rel-select/README.md +14 -14
  71. package/dist/components/rel-select/rel-select.ts +120 -188
  72. package/dist/components/rel-sheet/README.md +10 -10
  73. package/dist/components/rel-sheet/rel-sheet.ts +82 -23
  74. package/dist/components/rel-sidebar/README.md +5 -5
  75. package/dist/components/rel-sidebar/rel-sidebar.ts +75 -60
  76. package/dist/components/rel-skeleton/rel-skeleton.ts +8 -13
  77. package/dist/components/rel-slider/README.md +10 -10
  78. package/dist/components/rel-slider/rel-slider.ts +230 -57
  79. package/dist/components/rel-snackbar/README.md +9 -9
  80. package/dist/components/rel-snackbar/rel-snackbar.ts +44 -32
  81. package/dist/components/rel-stepper/README.md +10 -10
  82. package/dist/components/rel-stepper/rel-stepper.ts +110 -46
  83. package/dist/components/rel-switch/README.md +5 -5
  84. package/dist/components/rel-switch/rel-switch.ts +23 -12
  85. package/dist/components/rel-tab/README.md +13 -13
  86. package/dist/components/rel-tab/rel-tab.ts +63 -19
  87. package/dist/components/rel-table/README.md +7 -7
  88. package/dist/components/rel-table/rel-table-body.ts +2 -1
  89. package/dist/components/rel-table/rel-table-caption.ts +10 -7
  90. package/dist/components/rel-table/rel-table-cell.ts +7 -6
  91. package/dist/components/rel-table/rel-table-footer.ts +4 -3
  92. package/dist/components/rel-table/rel-table-head.ts +11 -9
  93. package/dist/components/rel-table/rel-table-header.ts +2 -1
  94. package/dist/components/rel-table/rel-table-row.ts +5 -4
  95. package/dist/components/rel-table/rel-table.ts +16 -7
  96. package/dist/components/rel-textfield/README.md +11 -11
  97. package/dist/components/rel-textfield/rel-textfield.ts +172 -91
  98. package/dist/components/rel-toast/README.md +11 -11
  99. package/dist/components/rel-toast/rel-toast.ts +33 -30
  100. package/dist/components/rel-tooltip/README.md +7 -7
  101. package/dist/components/rel-tooltip/rel-tooltip.ts +160 -123
  102. package/dist/components/rel-topbar/rel-topbar-actions.ts +1 -2
  103. package/dist/components/rel-topbar/rel-topbar-brand.ts +8 -5
  104. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +10 -8
  105. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +4 -5
  106. package/dist/components/rel-topbar/rel-topbar-item.ts +23 -22
  107. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +0 -1
  108. package/dist/components/rel-topbar/rel-topbar-profile.ts +68 -50
  109. package/dist/components/rel-topbar/rel-topbar-utilities.ts +1 -2
  110. package/dist/components/rel-topbar/rel-topbar.ts +31 -29
  111. package/dist/index.d.mts +151 -39
  112. package/dist/index.d.ts +151 -39
  113. package/dist/index.js +3544 -2289
  114. package/dist/index.js.map +1 -1
  115. package/dist/index.mjs +3876 -2622
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/styles/vars.css +653 -363
  118. package/dist/vars-WY2XCF5G.css +653 -0
  119. package/package.json +3 -2
  120. package/dist/components/rel-range-picker/rel-range-picker.css +0 -349
  121. package/dist/styles/vars-v2.css +0 -525
  122. package/dist/vars-F54UGCHM.css +0 -363
  123. 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
- display: inline-block;
32
- font-family: var(--rel-fontFamilies-primary, 'Poppins', sans-serif);
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: 16px;
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: 12px;
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: 16px;
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: 4px;
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: 1000px;
96
- border: 1px solid #e5e5e5;
97
- background: #ffffff;
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: #0b0b0b;
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: #f5f5f5;
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-color-border-focus, #0059f4);
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: 8px;
133
- border-radius: 8px;
134
- border: 1px solid #e5e5e5;
135
- background: #ffffff;
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
- font-family: inherit;
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: #f5f5f5;
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-color-border-focus, #0059f4);
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: #e5e5e5;
158
- border-color: #0b0b0b;
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
- font-size: 14px;
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
- font-size: 14px;
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
- font-size: 14px;
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
- font-size: 14px;
207
- font-weight: 500;
208
- letter-spacing: -0.3px;
209
- color: #0b0b0b;
210
- line-height: 22px;
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
- font-size: 14px;
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
- /* ── Dark mode ───────────────────────────────────────────── */
244
+ font-family: var(--rel-body-md-regular-font-family);
225
245
 
226
- :host-context([data-theme="dark"]) .pag-nav-btn,
227
- [data-theme="dark"] .pag-nav-btn {
228
- background: #1a1a1a;
229
- border-color: #333333;
230
- color: #f5f5f5;
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
- :host-context([data-theme="dark"]) .pag-nav-btn:hover:not(:disabled),
234
- [data-theme="dark"] .pag-nav-btn:hover:not(:disabled) {
235
- background: #2b2b2b;
254
+ }
255
+ /* ── Task 4: responsive behaviour (conventions §4) ───────────────── */
256
+ .auto-compact {
257
+ display: none;
236
258
  }
237
259
 
238
- :host-context([data-theme="dark"]) .pag-page-btn,
239
- [data-theme="dark"] .pag-page-btn {
240
- background: #1a1a1a;
241
- border-color: #333333;
242
- color: #f5f5f5;
260
+ .pag-numbers {
261
+ flex-wrap: wrap;
262
+ justify-content: center;
243
263
  }
244
264
 
245
- :host-context([data-theme="dark"]) .pag-page-btn:hover,
246
- [data-theme="dark"] .pag-page-btn:hover {
247
- background: #2b2b2b;
265
+ @container (max-width: 768px) {
266
+ .pag-page-btn {
267
+ width: auto;
268
+ min-width: 36px;
269
+ }
248
270
  }
249
271
 
250
- :host-context([data-theme="dark"]) .pag-page-btn[aria-current="page"],
251
- [data-theme="dark"] .pag-page-btn[aria-current="page"] {
252
- background: #333333;
253
- border-color: #f5f5f5;
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
- :host-context([data-theme="dark"]) .pag-ellipsis,
257
- :host-context([data-theme="dark"]) .pag-page-text,
258
- :host-context([data-theme="dark"]) .pag-count-text,
259
- :host-context([data-theme="dark"]) .pag-current-num,
260
- [data-theme="dark"] .pag-ellipsis,
261
- [data-theme="dark"] .pag-page-text,
262
- [data-theme="dark"] .pag-count-text,
263
- [data-theme="dark"] .pag-current-num {
264
- color: #f5f5f5;
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
- :host-context([data-theme="dark"]) .pag-label,
268
- [data-theme="dark"] .pag-label {
269
- color: #a3a3a3;
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
- return this.renderExtended();
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-colors-white` - Content background
376
- - `--rel-colors-gray-border` - Border color
377
- - `--rel-colors-gray-heading` - Text color
378
- - `--rel-colors-gray-placeholder` - Paragraph text color
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-fontFamilies-primary` - Font family (Poppins)
382
- - `--rel-fontWeights-semibold` - Heading weight
383
- - `--rel-fontSizes-sm` - Base text size
384
- - `--rel-lineHeights-md` - Paragraph line height
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-space-md` (16px) - Content padding
388
- - `--rel-spacing-space-xs` (8px) - Heading bottom margin
389
- - `--rel-spacing-space-sm` (12px) - Paragraph bottom margin
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-borders-width-stroke-100` (1px) - Border width
393
- - `--rel-borders-radius-border-radius-200` (8px) - Border radius
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-color-bg-primary);
18
- border: var(--rel-borders-width-stroke-100) solid var(--rel-color-border-default);
19
- border-radius: var(--rel-borders-radius-border-radius-200);
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-space-md);
22
- font-family: var(--rel-fontFamilies-primary);
23
- font-size: var(--rel-fontSizes-sm);
24
- color: var(--rel-color-text-heading);
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-space-xs);
34
- font-weight: var(--rel-fontWeights-semibold);
35
- color: var(--rel-color-text-heading);
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-space-sm);
40
- color: var(--rel-color-text-placeholder);
41
- line-height: var(--rel-lineHeights-md);
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 + t.width / 2 - c.width / 2;
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 + t.width / 2 - c.width / 2;
301
+ left = alignAxis(t.left, t.width, c.width) + this.alignOffset;
291
302
  }
292
303
  if (this.side === "left") {
293
- top = t.top + t.height / 2 - c.height / 2;
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 + t.height / 2 - c.height / 2;
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-fontFamilies-primary` - Font family
54
+ - `--rel-fonts-font-family` - Font family
55
55
 
56
56
  ### Color Tokens
57
- - `--rel-colors-gray-border` - Track/background color
58
- - `--rel-colors-black` - Active progress bar color
57
+ - `--rel-border-default` - Track/background color
58
+ - `--rel-text-default` - Active progress bar color
59
59
 
60
60
  ### Border Tokens
61
- - `--rel-borders-radius-border-radius-200` - Linear track border radius
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-borders-radius-border-radius-200`
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-fontFamilies-primary);
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-color-border-default);
35
- border-radius: var(--rel-borders-radius-border-radius-0);
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-color-text-primary);
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-color-border-default);
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-color-text-primary);
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-color-text-primary);
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
  }