@reliability-design/web 1.0.2 → 1.0.3

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 (54) hide show
  1. package/dist/components/rel-accordion/rel-accordion.ts +27 -22
  2. package/dist/components/rel-alert/rel-alert.ts +98 -66
  3. package/dist/components/rel-avatar/rel-avatar.ts +8 -15
  4. package/dist/components/rel-badge/rel-badge.ts +23 -16
  5. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +12 -12
  6. package/dist/components/rel-button/rel-button.ts +39 -59
  7. package/dist/components/rel-card/rel-card.ts +11 -10
  8. package/dist/components/rel-cardmedia/rel-cardmedia.ts +11 -17
  9. package/dist/components/rel-checkbox/rel-checkbox.ts +18 -35
  10. package/dist/components/rel-chip/rel-chip.ts +37 -128
  11. package/dist/components/rel-container/rel-container.ts +1 -6
  12. package/dist/components/rel-divider/rel-divider.ts +37 -37
  13. package/dist/components/rel-layout/rel-layout.ts +12 -14
  14. package/dist/components/rel-progress/rel-progress.ts +26 -15
  15. package/dist/components/rel-radio/rel-radio.ts +32 -72
  16. package/dist/components/rel-snackbar/rel-snackbar.ts +6 -0
  17. package/dist/components/rel-stepper/rel-stepper.ts +23 -2
  18. package/dist/components/rel-switch/rel-switch.ts +7 -5
  19. package/dist/components/rel-tab/rel-tab.ts +10 -8
  20. package/dist/components/rel-textfield/rel-textfield.ts +2 -2
  21. package/dist/index.d.mts +11 -7
  22. package/dist/index.d.ts +11 -7
  23. package/dist/index.js +367 -475
  24. package/dist/index.js.map +1 -1
  25. package/dist/index.mjs +383 -489
  26. package/dist/index.mjs.map +1 -1
  27. package/dist/vars-6ZIUPIU4.css +184 -0
  28. package/package.json +2 -2
  29. package/dist/components/rel-accordion/rel-accordion.stories.ts +0 -313
  30. package/dist/components/rel-alert/rel-alert.stories.ts +0 -412
  31. package/dist/components/rel-avatar/rel-avatar.stories.ts +0 -327
  32. package/dist/components/rel-badge/rel-badge.stories.ts +0 -350
  33. package/dist/components/rel-breadcrumb/rel-breadcrumb.stories.ts +0 -306
  34. package/dist/components/rel-button/rel-button.stories.ts +0 -356
  35. package/dist/components/rel-card/rel-card.stories.ts +0 -299
  36. package/dist/components/rel-cardmedia/rel-cardmedia.stories.ts +0 -368
  37. package/dist/components/rel-checkbox/rel-checkbox.stories.ts +0 -414
  38. package/dist/components/rel-chip/rel-chip.stories.ts +0 -552
  39. package/dist/components/rel-container/rel-container.stories.ts +0 -239
  40. package/dist/components/rel-divider/rel-divider.stories.ts +0 -229
  41. package/dist/components/rel-layout/rel-layout.stories.ts +0 -713
  42. package/dist/components/rel-menu/rel-menu.stories.ts +0 -910
  43. package/dist/components/rel-progress/rel-progress.stories.ts +0 -817
  44. package/dist/components/rel-radio/rel-radio.stories.ts +0 -1048
  45. package/dist/components/rel-segmented-button/rel-segmented-button.stories.ts +0 -1079
  46. package/dist/components/rel-select/rel-select.stories.ts +0 -1201
  47. package/dist/components/rel-slider/rel-slider.stories.ts +0 -730
  48. package/dist/components/rel-snackbar/rel-snackbar.stories.ts +0 -808
  49. package/dist/components/rel-stepper/rel-stepper.stories.ts +0 -752
  50. package/dist/components/rel-switch/rel-switch.stories.ts +0 -441
  51. package/dist/components/rel-tab/rel-tab.stories.ts +0 -492
  52. package/dist/components/rel-textfield/rel-textfield.stories.ts +0 -710
  53. package/dist/components/rel-toast/rel-toast.stories.ts +0 -394
  54. package/dist/components/rel-tooltip/rel-tooltip.stories.ts +0 -364
package/dist/index.js CHANGED
@@ -56,6 +56,7 @@ __export(index_exports, {
56
56
  RelTooltip: () => RelTooltip
57
57
  });
58
58
  module.exports = __toCommonJS(index_exports);
59
+ var import_vars = require("./vars-6ZIUPIU4.css");
59
60
 
60
61
  // src/components/rel-accordion/rel-accordion.ts
61
62
  var import_lit = require("lit");
@@ -68,6 +69,13 @@ var RelAccordion = class extends import_lit.LitElement {
68
69
  }
69
70
  toggle() {
70
71
  this.open = !this.open;
72
+ this.dispatchEvent(
73
+ new CustomEvent("open-change", {
74
+ detail: this.open,
75
+ bubbles: true,
76
+ composed: true
77
+ })
78
+ );
71
79
  }
72
80
  chevron() {
73
81
  return import_lit.html`
@@ -87,7 +95,10 @@ var RelAccordion = class extends import_lit.LitElement {
87
95
  </div>
88
96
  </div>
89
97
 
90
- ${this.open ? import_lit.html`<div class="body"><slot></slot></div>` : ""}
98
+ <!-- IMPORTANT: slot is ALWAYS rendered -->
99
+ <div class="body ${this.open ? "open" : ""}">
100
+ <slot></slot>
101
+ </div>
91
102
  </div>
92
103
  `;
93
104
  }
@@ -102,9 +113,8 @@ RelAccordion.styles = import_lit.css`
102
113
  .accordion {
103
114
  background: var(--rel-colors-white);
104
115
  border: 1px solid var(--rel-border-default);
105
- border-radius: var(--rel-borders-radius-border-radius-200); /* 8px */
116
+ border-radius: var(--rel-borders-radius-border-radius-200);
106
117
  box-shadow: var(--rel-shadows-shadow-100);
107
- transition: all 0.2s ease;
108
118
  overflow: hidden;
109
119
  }
110
120
 
@@ -113,13 +123,13 @@ RelAccordion.styles = import_lit.css`
113
123
  display: flex;
114
124
  justify-content: space-between;
115
125
  align-items: center;
116
- padding: var(--rel-spacing-space-md); /* 16px */
126
+ padding: var(--rel-spacing-space-md);
117
127
  cursor: pointer;
118
128
  user-select: none;
119
129
  }
120
130
 
121
131
  .title {
122
- font-size: var(--rel-fontSizes-lg); /* 20px */
132
+ font-size: var(--rel-fontSizes-lg);
123
133
  font-weight: var(--rel-fontWeights-medium);
124
134
  color: var(--rel-colors-black);
125
135
  }
@@ -144,36 +154,31 @@ RelAccordion.styles = import_lit.css`
144
154
  stroke-linejoin: round;
145
155
  }
146
156
 
147
- .rotated {
157
+ .icon.rotated {
148
158
  transform: rotate(180deg);
149
159
  }
150
160
 
151
161
  /* BODY ------------------------------------------------------ */
152
162
  .body {
153
- padding: var(--rel-spacing-space-xl) var(--rel-spacing-space-md)
154
- var(--rel-spacing-space-lg);
155
- /* 24px 16px 20px */
156
- font-size: var(--rel-fontSizes-lg); /* 20px */
163
+ overflow: hidden;
164
+ max-height: 0;
165
+ padding: 0 var(--rel-spacing-space-md);
166
+ font-size: var(--rel-fontSizes-lg);
157
167
  color: var(--rel-colors-gray-primary);
158
- animation: fadeIn 0.2s ease;
168
+ transition: max-height 0.25s ease, padding 0.2s ease;
159
169
  }
160
170
 
161
- @keyframes fadeIn {
162
- from {
163
- opacity: 0;
164
- transform: translateY(-4px);
165
- }
166
- to {
167
- opacity: 1;
168
- transform: translateY(0);
169
- }
171
+ .body.open {
172
+ max-height: 1000px; /* sufficiently large */
173
+ padding: var(--rel-spacing-space-xl) var(--rel-spacing-space-md)
174
+ var(--rel-spacing-space-lg);
170
175
  }
171
176
  `;
172
177
  __decorateClass([
173
178
  (0, import_decorators.property)({ type: String })
174
179
  ], RelAccordion.prototype, "title", 2);
175
180
  __decorateClass([
176
- (0, import_decorators.property)({ type: Boolean })
181
+ (0, import_decorators.property)({ type: Boolean, reflect: true })
177
182
  ], RelAccordion.prototype, "open", 2);
178
183
  RelAccordion = __decorateClass([
179
184
  (0, import_decorators.customElement)("rel-accordion")
@@ -190,45 +195,95 @@ var RelAlert = class extends import_lit2.LitElement {
190
195
  this.dismissible = true;
191
196
  this.dismissed = false;
192
197
  }
198
+ dismissAlert() {
199
+ this.dismissed = true;
200
+ this.dispatchEvent(
201
+ new CustomEvent("dismiss", {
202
+ bubbles: true,
203
+ composed: true
204
+ })
205
+ );
206
+ }
193
207
  get iconSvg() {
194
208
  switch (this.type) {
195
209
  case "info":
196
- return import_lit2.html`<svg viewBox="0 0 18 18" fill="none">
197
- <path
198
- d="M9 4.75c-.24 0-.44.08-.61.25-.16.16-.24.36-.24.6 0 .24.08.44.24.61.17.17.37.25.61.25.24 0 .44-.08.61-.25.17-.16.24-.36.24-.61 0-.24-.08-.44-.24-.6-.17-.17-.37-.25-.61-.25Zm.85 3.4h-1.7v5.1h1.7V8.15ZM9 .5c1.18 0 2.29.22 3.32.67 1.03.45 1.93 1.05 2.69 1.81.75.76 1.35 1.66 1.8 2.69.46 1.03.68 2.14.68 3.33 0 1.18-.22 2.29-.68 3.32-.45 1.04-1.05 1.93-1.8 2.69-.76.75-1.66 1.35-2.69 1.8-1.04.46-2.15.68-3.32.68-1.18 0-2.29-.22-3.32-.68-1.04-.45-1.93-1.05-2.69-1.8-.75-.76-1.35-1.66-1.8-2.69C1.92 11.28 1.7 10.17 1.7 9c0-1.18.22-2.29.68-3.32.45-1.04 1.05-1.93 1.8-2.69.76-.75 1.66-1.35 2.69-1.8C6.71.73 7.82.5 9 .5Z"
199
- fill="#4A90E2"
200
- />
201
- </svg>`;
210
+ return import_lit2.html`
211
+ <svg
212
+ xmlns="http://www.w3.org/2000/svg"
213
+ width="18"
214
+ height="18"
215
+ viewBox="0 0 18 18"
216
+ fill="none"
217
+ >
218
+ <path
219
+ d="M9 4.75C8.75917 4.75 8.55715 4.8316 8.39395 4.9948C8.23132 5.15743 8.15 5.35917 8.15 5.6C8.15 5.84083 8.23132 6.04285 8.39395 6.20605C8.55715 6.36868 8.75917 6.45 9 6.45C9.24083 6.45 9.44257 6.36868 9.6052 6.20605C9.7684 6.04285 9.85 5.84083 9.85 5.6C9.85 5.35917 9.7684 5.15743 9.6052 4.9948C9.44257 4.8316 9.24083 4.75 9 4.75ZM9.85 8.15L8.15 8.15L8.15 13.25L9.85 13.25L9.85 8.15ZM9 0.499999C10.1758 0.499999 11.2808 0.723266 12.315 1.1698C13.3492 1.61633 14.2488 2.22182 15.0138 2.98625C15.7788 3.75068 16.3842 4.65027 16.8302 5.685C17.2762 6.71973 17.4994 7.82473 17.5 9C17.5006 10.1753 17.2773 11.2803 16.8302 12.315C16.3842 13.3492 15.7787 14.2487 15.0137 15.0137C14.2487 15.7787 13.3492 16.3845 12.315 16.831C11.2808 17.2776 10.1758 17.5006 9 17.5C7.82417 17.4994 6.71917 17.2764 5.685 16.831C4.65083 16.3845 3.75125 15.7787 2.98625 15.0137C2.22125 14.2487 1.61577 13.3492 1.1698 12.315C0.723834 11.2808 0.500567 10.1758 0.500001 9C0.499434 7.82417 0.722701 6.71917 1.1698 5.685C1.61577 4.65083 2.22125 3.75125 2.98625 2.98625C3.75125 2.22125 4.65084 1.61577 5.685 1.1698C6.71917 0.723832 7.82417 0.500566 9 0.499999ZM9 2.2C7.10167 2.2 5.49375 2.85875 4.17625 4.17625C2.85875 5.49375 2.2 7.10167 2.2 9C2.2 10.8983 2.85875 12.5062 4.17625 13.8237C5.49375 15.1412 7.10167 15.8 9 15.8C10.8983 15.8 12.5062 15.1412 13.8237 13.8237C15.1412 12.5062 15.8 10.8983 15.8 9C15.8 7.10167 15.1413 5.49375 13.8238 4.17625C12.5063 2.85875 10.8983 2.2 9 2.2Z"
220
+ fill="#4A90E2"
221
+ />
222
+ </svg>
223
+ `;
202
224
  case "success":
203
- return import_lit2.html`<svg viewBox="0 0 18 18" fill="none">
204
- <path
205
- d="M7.81 12.91 13.8 6.92l-1.19-1.19L7.81 10.53 5.39 8.11 4.2 9.3l3.61 3.61ZM9 17.5a8.49 8.49 0 1 1 0-17 8.49 8.49 0 0 1 0 17Z"
206
- fill="#4CAA47"
207
- />
208
- </svg>`;
225
+ return import_lit2.html`
226
+ <svg
227
+ xmlns="http://www.w3.org/2000/svg"
228
+ width="18"
229
+ height="18"
230
+ viewBox="0 0 18 18"
231
+ fill="none"
232
+ >
233
+ <path
234
+ d="M7.81 12.91L13.8025 6.9175L12.6125 5.7275L7.81 10.53L5.3875 8.1075L4.1975 9.2975L7.81 12.91ZM9 17.5C7.82417 17.5 6.71917 17.2767 5.685 16.8302C4.65083 16.3837 3.75125 15.7782 2.98625 15.0138C2.22125 14.2493 1.61577 13.3497 1.1698 12.315C0.723834 11.2803 0.500568 10.1753 0.500001 9C0.499434 7.82473 0.722701 6.71973 1.1698 5.685C1.61577 4.65083 2.22125 3.75125 2.98625 2.98625C3.75125 2.22125 4.65083 1.61548 5.685 1.16895C6.71917 0.722418 7.82417 0.499434 9 0.500001C10.1758 0.500568 11.2808 0.723551 12.315 1.16895C13.3492 1.61548 14.2488 2.22125 15.0138 2.98625C15.7788 3.75125 16.3842 4.65083 16.8302 5.685C17.2762 6.71917 17.4994 7.82417 17.5 9C17.5006 10.1758 17.2773 11.2808 16.8302 12.315C16.3842 13.3492 15.7788 14.2488 15.0138 15.0138C14.2488 15.7788 13.3492 16.3842 12.315 16.8302C11.2808 17.2762 10.1758 17.4994 9 17.5ZM9 15.8C10.8983 15.8 12.5062 15.1412 13.8237 13.8237C15.1412 12.5062 15.8 10.8983 15.8 9C15.8 7.10167 15.1412 5.49375 13.8237 4.17625C12.5062 2.85875 10.8983 2.2 9 2.2C7.10167 2.2 5.49375 2.85875 4.17625 4.17625C2.85875 5.49375 2.2 7.10167 2.2 9C2.2 10.8983 2.85875 12.5062 4.17625 13.8237C5.49375 15.1412 7.10167 15.8 9 15.8Z"
235
+ fill="#4CAA47"
236
+ />
237
+ </svg>
238
+ `;
209
239
  case "warning":
210
- return import_lit2.html`<svg viewBox="0 0 16 14" fill="none">
211
- <path
212
- d="M0 14 8 0l8 14H0Zm2.51-1.47h10.98L8 2.95 2.51 12.53ZM8 11.79c.21 0 .38-.07.52-.21.14-.14.21-.31.21-.52 0-.21-.07-.38-.21-.52A.7.7 0 0 0 8 10.32a.7.7 0 0 0-.52.21c-.14.14-.21.31-.21.52 0 .21.07.38.21.52.14.14.31.21.52.21Zm-.73-2.21h1.46V5.89H7.27v3.69Z"
213
- fill="#FF6D00"
214
- />
215
- </svg>`;
240
+ return import_lit2.html`
241
+ <svg
242
+ xmlns="http://www.w3.org/2000/svg"
243
+ width="16"
244
+ height="14"
245
+ viewBox="0 0 16 14"
246
+ fill="none"
247
+ >
248
+ <path
249
+ d="M0 14L8 0L16 14H0ZM2.50909 12.5263H13.4909L8 2.94737L2.50909 12.5263ZM8 11.7895C8.20606 11.7895 8.37891 11.7187 8.51855 11.5773C8.6577 11.4363 8.72727 11.2614 8.72727 11.0526C8.72727 10.8439 8.6577 10.669 8.51855 10.528C8.37891 10.3865 8.20606 10.3158 8 10.3158C7.79394 10.3158 7.62133 10.3865 7.48218 10.528C7.34255 10.669 7.27273 10.8439 7.27273 11.0526C7.27273 11.2614 7.34255 11.4363 7.48218 11.5773C7.62133 11.7187 7.79394 11.7895 8 11.7895ZM7.27273 9.57895H8.72727V5.89474H7.27273V9.57895Z"
250
+ fill="#FF6D00"
251
+ />
252
+ </svg>
253
+ `;
216
254
  case "error":
217
- return import_lit2.html`<svg viewBox="0 0 18 18" fill="none">
218
- <path
219
- d="M9 13.25c.24 0 .44-.08.61-.24.17-.17.24-.38.24-.61 0-.24-.08-.44-.24-.61-.17-.16-.37-.24-.61-.24-.24 0-.44.08-.61.24-.17.17-.24.37-.24.61 0 .24.08.44.24.61.17.16.37.24.61.24Zm-.85-3.4h1.7V4.75h-1.7v5.1ZM9 17.5c-1.18 0-2.29-.23-3.32-.68C4.64 16.37 3.74 15.77 2.99 15.02c-.75-.75-1.35-1.65-1.8-2.69C.73 11.29.5 10.18.5 9c0-1.18.23-2.29.68-3.32.45-1.03 1.05-1.93 1.8-2.69C5.03 1.23 5.94.63 6.97.18 8 .72 9.12.5 10.3.5c1.17 0 2.28.23 3.32.68 1.03.45 1.93 1.05 2.68 1.8.75.76 1.35 1.66 1.8 2.69.46 1.03.68 2.14.68 3.33 0 1.18-.22 2.29-.68 3.32-.45 1.04-1.05 1.93-1.8 2.69-.76.75-1.66 1.35-2.69 1.8-1.04.46-2.15.68-3.32.68Z"
220
- fill="#C62828"
221
- />
222
- </svg>`;
255
+ return import_lit2.html`
256
+ <svg
257
+ xmlns="http://www.w3.org/2000/svg"
258
+ width="18"
259
+ height="18"
260
+ viewBox="0 0 18 18"
261
+ fill="none"
262
+ >
263
+ <path
264
+ d="M9 13.25C9.24083 13.25 9.44285 13.1684 9.60605 13.0052C9.76868 12.8426 9.85 12.6408 9.85 12.4C9.85 12.1592 9.76868 11.9571 9.60605 11.7939C9.44285 11.6313 9.24083 11.55 9 11.55C8.75917 11.55 8.55743 11.6313 8.3948 11.7939C8.2316 11.9571 8.15 12.1592 8.15 12.4C8.15 12.6408 8.2316 12.8426 8.3948 13.0052C8.55743 13.1684 8.75917 13.25 9 13.25ZM8.15 9.85H9.85V4.75H8.15V9.85ZM9 17.5C7.82417 17.5 6.71917 17.2767 5.685 16.8302C4.65083 16.3837 3.75125 15.7782 2.98625 15.0138C2.22125 14.2493 1.61577 13.3497 1.1698 12.315C0.723834 11.2803 0.500568 10.1753 0.500001 9C0.499434 7.82473 0.722701 6.71973 1.1698 5.685C1.61577 4.65083 2.22125 3.75125 2.98625 2.98625C3.75125 2.22125 4.65083 1.61548 5.685 1.16895C6.71917 0.722418 7.82417 0.499434 9 0.500001C10.1758 0.500568 11.2808 0.723551 12.315 1.16895C13.3492 1.61548 14.2488 2.22125 15.0138 2.98625C15.7788 3.75125 16.3842 4.65083 16.8302 5.685C17.2762 6.71917 17.4994 7.82417 17.5 9C17.5006 10.1758 17.2773 11.2808 16.8302 12.315C16.3842 13.3492 15.7788 14.2488 15.0138 15.0138C14.2488 15.7788 13.3492 16.3842 12.315 16.8302C11.2808 17.2762 10.1758 17.4994 9 17.5ZM9 15.8C10.8983 15.8 12.5062 15.1412 13.8237 13.8237C15.1412 12.5062 15.8 10.8983 15.8 9C15.8 7.10167 15.1412 5.49375 13.8237 4.17625C12.5062 2.85875 10.8983 2.2 9 2.2C7.10167 2.2 5.49375 2.85875 4.17625 4.17625C2.85875 5.49375 2.2 7.10167 2.2 9C2.2 10.8983 2.85875 12.5062 4.17625 13.8237C5.49375 15.1412 7.10167 15.8 9 15.8Z"
265
+ fill="#C62828"
266
+ />
267
+ </svg>
268
+ `;
223
269
  default:
224
- return import_lit2.html``;
270
+ return import_lit2.html`
271
+ <svg
272
+ xmlns="http://www.w3.org/2000/svg"
273
+ width="18"
274
+ height="18"
275
+ viewBox="0 0 18 18"
276
+ fill="none"
277
+ >
278
+ <path
279
+ d="M9 4.75C8.75917 4.75 8.55715 4.8316 8.39395 4.9948C8.23132 5.15743 8.15 5.35917 8.15 5.6C8.15 5.84083 8.23132 6.04285 8.39395 6.20605C8.55715 6.36868 8.75917 6.45 9 6.45C9.24083 6.45 9.44257 6.36868 9.6052 6.20605C9.7684 6.04285 9.85 5.84083 9.85 5.6C9.85 5.35917 9.7684 5.15743 9.6052 4.9948C9.44257 4.8316 9.24083 4.75 9 4.75ZM9.85 8.15L8.15 8.15L8.15 13.25L9.85 13.25L9.85 8.15ZM9 0.499999C10.1758 0.499999 11.2808 0.723266 12.315 1.1698C13.3492 1.61633 14.2488 2.22182 15.0138 2.98625C15.7788 3.75068 16.3842 4.65027 16.8302 5.685C17.2762 6.71973 17.4994 7.82473 17.5 9C17.5006 10.1753 17.2773 11.2803 16.8302 12.315C16.3842 13.3492 15.7787 14.2487 15.0137 15.0137C14.2487 15.7787 13.3492 16.3845 12.315 16.831C11.2808 17.2776 10.1758 17.5006 9 17.5C7.82417 17.4994 6.71917 17.2764 5.685 16.831C4.65083 16.3845 3.75125 15.7787 2.98625 15.0137C2.22125 14.2487 1.61577 13.3492 1.1698 12.315C0.723834 11.2808 0.500567 10.1758 0.500001 9C0.499434 7.82417 0.722701 6.71917 1.1698 5.685C1.61577 4.65083 2.22125 3.75125 2.98625 2.98625C3.75125 2.22125 4.65084 1.61577 5.685 1.1698C6.71917 0.723832 7.82417 0.500566 9 0.499999ZM9 2.2C7.10167 2.2 5.49375 2.85875 4.17625 4.17625C2.85875 5.49375 2.2 7.10167 2.2 9C2.2 10.8983 2.85875 12.5062 4.17625 13.8237C5.49375 15.1412 7.10167 15.8 9 15.8C10.8983 15.8 12.5062 15.1412 13.8237 13.8237C15.1412 12.5062 15.8 10.8983 15.8 9C15.8 7.10167 15.1413 5.49375 13.8238 4.17625C12.5063 2.85875 10.8983 2.2 9 2.2Z"
280
+ fill="black"
281
+ />
282
+ </svg>
283
+ `;
225
284
  }
226
285
  }
227
- dismissAlert() {
228
- this.dismissed = true;
229
- }
230
286
  render() {
231
- if (this.dismissed) return null;
232
287
  return import_lit2.html`
233
288
  <div class="rel-alert alert-${this.type}">
234
289
  <div class="rel-icon">${this.iconSvg}</div>
@@ -236,15 +291,15 @@ var RelAlert = class extends import_lit2.LitElement {
236
291
  <div class="rel-content">
237
292
  <p class="rel-message1">${this.message1}</p>
238
293
 
239
- ${this.message2 ? import_lit2.html`<p class="rel-message2">${this.message2}</p>` : ""}
240
- ${this.urlText && this.urlHref ? import_lit2.html`<a class="rel-link" href="${this.urlHref}"
241
- >${this.urlText}</a
242
- >` : ""}
294
+ ${this.message2 ? import_lit2.html`<p class="rel-message2">${this.message2}</p>` : null}
295
+ ${this.urlText && this.urlHref ? import_lit2.html`<a class="rel-link" href=${this.urlHref}>
296
+ ${this.urlText}
297
+ </a>` : null}
243
298
  </div>
244
299
 
245
300
  ${this.dismissible ? import_lit2.html`<button class="rel-close" @click=${this.dismissAlert}>
246
301
  ✕
247
- </button>` : ""}
302
+ </button>` : null}
248
303
  </div>
249
304
  `;
250
305
  }
@@ -255,14 +310,16 @@ RelAlert.styles = import_lit2.css`
255
310
  font-family: var(--rel-fontFamilies-primary);
256
311
  }
257
312
 
313
+ :host([dismissed]) {
314
+ display: none;
315
+ }
316
+
258
317
  .rel-alert {
259
318
  display: flex;
260
319
  align-items: center;
261
- gap: var(--rel-spacing-space-xs); /* 8px */
320
+ gap: var(--rel-spacing-space-xs);
262
321
  padding: var(--rel-spacing-space-sm) var(--rel-spacing-space-md);
263
- /* 12px vertical, 16px horizontal */
264
- border-radius: var(--rel-borders-radius-border-radius-200); /* 8px */
265
- width: fit-content;
322
+ border-radius: var(--rel-borders-radius-border-radius-200);
266
323
  min-width: 360px;
267
324
  box-sizing: border-box;
268
325
  }
@@ -274,8 +331,6 @@ RelAlert.styles = import_lit2.css`
274
331
  }
275
332
 
276
333
  .rel-message1 {
277
- display: flex;
278
- align-items: center;
279
334
  margin: 0;
280
335
  font-size: var(--rel-fontSizes-md);
281
336
  font-weight: var(--rel-fontWeights-medium);
@@ -284,16 +339,9 @@ RelAlert.styles = import_lit2.css`
284
339
  .rel-message2 {
285
340
  margin: 0;
286
341
  font-size: var(--rel-fontSizes-sm);
287
- font-weight: var(--rel-fontWeights-regular);
288
342
  opacity: 0.9;
289
343
  }
290
344
 
291
- .rel-icon {
292
- display: flex;
293
- align-items: center;
294
- justify-content: center;
295
- }
296
-
297
345
  .rel-icon svg {
298
346
  width: 16px;
299
347
  height: 16px;
@@ -303,8 +351,8 @@ RelAlert.styles = import_lit2.css`
303
351
  font-size: var(--rel-fontSizes-sm);
304
352
  font-weight: var(--rel-fontWeights-medium);
305
353
  text-decoration: underline;
306
- margin-top: 2px;
307
354
  color: inherit;
355
+ margin-top: 2px;
308
356
  }
309
357
 
310
358
  .rel-close {
@@ -312,21 +360,14 @@ RelAlert.styles = import_lit2.css`
312
360
  background: none;
313
361
  border: none;
314
362
  cursor: pointer;
315
- width: 16px;
316
- height: 16px;
317
363
  opacity: 0.6;
318
- padding: 0;
319
- display: flex;
320
- align-items: center;
321
- justify-content: center;
322
364
  }
323
365
 
324
366
  .rel-close:hover {
325
367
  opacity: 1;
326
368
  }
327
369
 
328
- /* COLORS — using token system */
329
-
370
+ /* COLORS */
330
371
  .alert-info {
331
372
  background: var(--rel-background-info);
332
373
  color: var(--rel-text-info);
@@ -372,7 +413,7 @@ __decorateClass([
372
413
  (0, import_decorators2.property)({ type: Boolean })
373
414
  ], RelAlert.prototype, "dismissible", 2);
374
415
  __decorateClass([
375
- (0, import_decorators2.property)({ type: Boolean })
416
+ (0, import_decorators2.property)({ type: Boolean, reflect: true })
376
417
  ], RelAlert.prototype, "dismissed", 2);
377
418
  RelAlert = __decorateClass([
378
419
  (0, import_decorators2.customElement)("rel-alert")
@@ -393,7 +434,7 @@ var RelAvatar = class extends import_lit3.LitElement {
393
434
  render() {
394
435
  return import_lit3.html`
395
436
  <div class="avatar avatar-${this.size}">
396
- ${this.type === "image" ? import_lit3.html`<img src=${this.src} alt=${this.alt} />` : this.type === "text" ? import_lit3.html`<span>${this.text}</span>` : import_lit3.html`<span class="icon-slot"><slot></slot></span>`}
437
+ ${this.type === "image" && this.src ? import_lit3.html`<img src=${this.src} alt=${this.alt} />` : this.type === "text" ? import_lit3.html`<span>${this.text}</span>` : import_lit3.html`<span class="icon-slot"><slot></slot></span>`}
397
438
  </div>
398
439
  `;
399
440
  }
@@ -419,35 +460,29 @@ RelAvatar.styles = import_lit3.css`
419
460
  text-transform: uppercase;
420
461
  }
421
462
 
422
- /* -------------------------
423
- CORRECTED SIZE CLASSES
424
- ------------------------- */
463
+ /* Sizes */
425
464
  .avatar-lg {
426
465
  width: 40px;
427
466
  height: 40px;
428
467
  font-size: var(--rel-fontSizes-xl);
429
- line-height: 38px;
430
468
  }
431
469
 
432
470
  .avatar-md {
433
471
  width: 32px;
434
472
  height: 32px;
435
473
  font-size: var(--rel-fontSizes-lg);
436
- line-height: 32px;
437
474
  }
438
475
 
439
476
  .avatar-sm {
440
477
  width: 24px;
441
478
  height: 24px;
442
479
  font-size: var(--rel-fontSizes-md);
443
- line-height: 24px;
444
480
  }
445
481
 
446
482
  .avatar-xs {
447
483
  width: 18px;
448
484
  height: 18px;
449
485
  font-size: var(--rel-fontSizes-xs);
450
- line-height: 18px;
451
486
  }
452
487
 
453
488
  img {
@@ -464,20 +499,16 @@ RelAvatar.styles = import_lit3.css`
464
499
  justify-content: center;
465
500
  }
466
501
 
467
- .icon-slot ::slotted(*) {
468
- font-size: var(--rel-fontSizes-md);
469
- }
470
-
471
502
  .icon-slot ::slotted(svg) {
472
503
  width: 50%;
473
504
  height: 50%;
474
505
  }
475
506
  `;
476
507
  __decorateClass([
477
- (0, import_decorators3.property)({ type: String })
508
+ (0, import_decorators3.property)({ type: String, reflect: true })
478
509
  ], RelAvatar.prototype, "size", 2);
479
510
  __decorateClass([
480
- (0, import_decorators3.property)({ type: String })
511
+ (0, import_decorators3.property)({ type: String, reflect: true })
481
512
  ], RelAvatar.prototype, "type", 2);
482
513
  __decorateClass([
483
514
  (0, import_decorators3.property)({ type: String })
@@ -506,9 +537,10 @@ var RelBadge = class extends import_lit4.LitElement {
506
537
  return ["badge", `badge-${this.size}`, `badge-${this.variant}`].join(" ");
507
538
  }
508
539
  render() {
509
- const isDot = this.variant === "dot";
510
540
  return import_lit4.html`
511
- <span class="${this.classes}">${isDot ? "" : this.number}</span>
541
+ <span class="${this.classes}">
542
+ ${this.variant === "number" ? this.number : null}
543
+ </span>
512
544
  `;
513
545
  }
514
546
  };
@@ -521,14 +553,14 @@ RelBadge.styles = import_lit4.css`
521
553
  display: inline-flex;
522
554
  align-items: center;
523
555
  justify-content: center;
524
- font-family: "Poppins", sans-serif;
556
+ font-family: var(--rel-fontFamilies-primary);
525
557
  font-weight: 600;
526
558
  background-color: var(--rel-colors-red-primary);
527
559
  color: var(--rel-colors-white);
528
560
  border-radius: 50%;
529
561
  }
530
562
 
531
- /* PERFECT CIRCLES — FIXED SIZES */
563
+ /* NUMBER BADGES */
532
564
  .badge-sm {
533
565
  width: 20px;
534
566
  height: 20px;
@@ -547,27 +579,30 @@ RelBadge.styles = import_lit4.css`
547
579
  font-size: 20px;
548
580
  }
549
581
 
550
- /* DOT — smaller circle */
551
- .badge-dot {
552
- width: 10px !important;
553
- height: 10px !important;
554
- padding: 0 !important;
582
+ /* DOT BADGES */
583
+ .badge-dot.badge-sm {
584
+ width: 8px;
585
+ height: 8px;
555
586
  }
556
587
 
557
- .badge-number {
558
- display: flex;
559
- align-items: center;
560
- justify-content: center;
588
+ .badge-dot.badge-md {
589
+ width: 10px;
590
+ height: 10px;
591
+ }
592
+
593
+ .badge-dot.badge-lg {
594
+ width: 12px;
595
+ height: 12px;
561
596
  }
562
597
  `;
563
598
  __decorateClass([
564
599
  (0, import_decorators4.property)({ type: String })
565
600
  ], RelBadge.prototype, "number", 2);
566
601
  __decorateClass([
567
- (0, import_decorators4.property)({ type: String })
602
+ (0, import_decorators4.property)({ type: String, reflect: true })
568
603
  ], RelBadge.prototype, "size", 2);
569
604
  __decorateClass([
570
- (0, import_decorators4.property)({ type: String })
605
+ (0, import_decorators4.property)({ type: String, reflect: true })
571
606
  ], RelBadge.prototype, "variant", 2);
572
607
  RelBadge = __decorateClass([
573
608
  (0, import_decorators4.customElement)("rel-badge")
@@ -586,22 +621,21 @@ var RelBreadcrumbs = class extends import_lit5.LitElement {
586
621
  <nav aria-label="Breadcrumb">
587
622
  <ol>
588
623
  ${this.items.map((item, index) => {
589
- const last = index === this.items.length - 1;
624
+ const isLast = index === this.items.length - 1;
590
625
  return import_lit5.html`
591
626
  <li>
592
- ${item.url && !last ? import_lit5.html`<a href="${item.url}">${item.label}</a>` : import_lit5.html`<span class="current">${item.label}</span>`}
593
- ${!last ? import_lit5.html`
594
- <svg viewBox="0 0 24 24">
627
+ ${item.url && !isLast ? import_lit5.html`<a href=${item.url}>${item.label}</a>` : import_lit5.html`<span class="current">${item.label}</span>`}
628
+ ${!isLast ? import_lit5.html`
629
+ <svg viewBox="0 0 24 24" aria-hidden="true">
595
630
  <polyline
596
631
  points="9 18 15 12 9 6"
597
632
  fill="none"
598
- stroke="currentColor"
599
633
  stroke-width="2"
600
634
  stroke-linecap="round"
601
635
  stroke-linejoin="round"
602
- ></polyline>
636
+ />
603
637
  </svg>
604
- ` : ""}
638
+ ` : null}
605
639
  </li>
606
640
  `;
607
641
  })}
@@ -619,7 +653,6 @@ RelBreadcrumbs.styles = import_lit5.css`
619
653
  }
620
654
 
621
655
  nav {
622
- display: block;
623
656
  width: 100%;
624
657
  }
625
658
 
@@ -655,7 +688,7 @@ RelBreadcrumbs.styles = import_lit5.css`
655
688
  }
656
689
 
657
690
  svg {
658
- stroke: var(--rel-colors-gray-text);
691
+ stroke: currentColor;
659
692
  width: 16px;
660
693
  height: 16px;
661
694
  margin: 0 10px;
@@ -685,13 +718,30 @@ var RelButton = class extends import_lit6.LitElement {
685
718
  `btn-${this.variant}`,
686
719
  `tone-${this.tone}`,
687
720
  `size-${this.size}`,
688
- `border-${this.border}`,
689
- this.disabled ? "btn-disabled" : ""
721
+ `border-${this.border}`
690
722
  ].join(" ");
691
723
  }
724
+ handleClick(e) {
725
+ if (this.disabled) {
726
+ e.preventDefault();
727
+ e.stopImmediatePropagation();
728
+ return;
729
+ }
730
+ this.dispatchEvent(
731
+ new MouseEvent("click", {
732
+ bubbles: true,
733
+ composed: true
734
+ })
735
+ );
736
+ }
692
737
  render() {
693
738
  return import_lit6.html`
694
- <button class="${this.classes}" ?disabled=${this.disabled}>
739
+ <button
740
+ class="${this.classes}"
741
+ ?disabled=${this.disabled}
742
+ @click=${this.handleClick}
743
+ aria-disabled=${this.disabled}
744
+ >
695
745
  <slot></slot>
696
746
  </button>
697
747
  `;
@@ -715,9 +765,7 @@ RelButton.styles = import_lit6.css`
715
765
  outline: none;
716
766
  }
717
767
 
718
- /* -------------------------
719
- SIZES (Figma)
720
- -------------------------- */
768
+ /* Sizes */
721
769
  .size-small {
722
770
  height: 32px;
723
771
  padding: 0 var(--rel-spacing-space-md);
@@ -736,9 +784,7 @@ RelButton.styles = import_lit6.css`
736
784
  font-size: var(--rel-fontSizes-lg);
737
785
  }
738
786
 
739
- /* -------------------------
740
- BORDER RADII (Tokens)
741
- -------------------------- */
787
+ /* Borders */
742
788
  .border-corner-radius {
743
789
  border-radius: var(--rel-borders-radius-border-radius-500);
744
790
  }
@@ -751,24 +797,15 @@ RelButton.styles = import_lit6.css`
751
797
  border-radius: var(--rel-borders-radius-border-radius-0);
752
798
  }
753
799
 
754
- /* -------------------------
755
- DISABLED STATE
756
- -------------------------- */
757
- :host([disabled]) button,
758
- button:disabled {
800
+ /* Disabled */
801
+ :host([disabled]) button {
759
802
  cursor: not-allowed;
760
803
  background-color: var(--rel-colors-gray-border) !important;
761
804
  color: var(--rel-colors-gray-disabled-text) !important;
762
- border-color: var(--rel-colors-gray-border) !important;
763
- opacity: 1;
764
805
  pointer-events: none;
765
806
  }
766
807
 
767
- /* -------------------------
768
- VARIANTS & TONES
769
- -------------------------- */
770
-
771
- /* DEFAULT */
808
+ /* Variants & tones (unchanged) */
772
809
  .btn-default.tone-default {
773
810
  background: var(--rel-colors-gray-primary);
774
811
  color: var(--rel-colors-white);
@@ -782,7 +819,6 @@ RelButton.styles = import_lit6.css`
782
819
  color: var(--rel-colors-white);
783
820
  }
784
821
 
785
- /* PRIMARY */
786
822
  .btn-primary.tone-default {
787
823
  background: var(--rel-colors-green-primary);
788
824
  color: var(--rel-colors-black);
@@ -796,27 +832,23 @@ RelButton.styles = import_lit6.css`
796
832
  color: var(--rel-colors-white);
797
833
  }
798
834
 
799
- /* SECONDARY */
800
835
  .btn-secondary {
801
836
  background: var(--rel-colors-white);
802
837
  border: 1px solid var(--rel-colors-black);
803
838
  color: var(--rel-colors-black);
804
839
  }
805
840
 
806
- /* TEXT */
807
841
  .btn-text {
808
842
  background: transparent;
809
843
  color: var(--rel-colors-black);
810
844
  }
811
845
 
812
- /* LINK */
813
846
  .btn-link {
814
847
  background: transparent;
815
848
  color: var(--rel-colors-blue-primary);
816
849
  text-decoration: underline;
817
850
  }
818
851
 
819
- /* ICON */
820
852
  .btn-icon {
821
853
  width: 40px;
822
854
  height: 40px;
@@ -826,32 +858,14 @@ RelButton.styles = import_lit6.css`
826
858
  color: var(--rel-colors-black);
827
859
  }
828
860
 
829
- /* -------------------------
830
- STATES: Hover / Active
831
- -------------------------- */
832
- button:hover:not(.btn-disabled) {
861
+ button:hover:not(:disabled) {
833
862
  filter: brightness(0.92);
834
863
  }
835
864
 
836
- button:active:not(.btn-disabled) {
865
+ button:active:not(:disabled) {
837
866
  transform: scale(0.97);
838
867
  }
839
868
 
840
- /* TEXT BUTTON — hover border */
841
- .btn-text:not(.btn-disabled):hover {
842
- border: 1px solid var(--rel-colors-black);
843
- text-decoration: none;
844
- }
845
-
846
- /* LINK BUTTON — hover border */
847
- .btn-link:not(.btn-disabled):hover {
848
- border: 1px solid var(--rel-colors-blue-primary);
849
- text-decoration: underline;
850
- }
851
-
852
- /* -------------------------
853
- FOCUS RING
854
- -------------------------- */
855
869
  button:focus-visible {
856
870
  outline: 2px solid var(--rel-colors-blue-primary);
857
871
  outline-offset: 2px;
@@ -881,30 +895,31 @@ var import_lit7 = require("lit");
881
895
  var import_decorators7 = require("lit/decorators.js");
882
896
  var RelCard = class extends import_lit7.LitElement {
883
897
  render() {
884
- return import_lit7.html` <div class="card"><slot></slot></div> `;
898
+ return import_lit7.html`
899
+ <div class="card">
900
+ <slot></slot>
901
+ </div>
902
+ `;
885
903
  }
886
904
  };
887
905
  RelCard.styles = import_lit7.css`
888
906
  :host {
889
907
  display: block;
908
+ font-family: var(--rel-fontFamilies-primary);
890
909
  }
891
910
 
892
911
  .card {
893
- background-color: var(--rel-colors-white, #ffffff);
894
- border-radius: var(--rel-borderRadius-lg, 12px);
895
- padding: var(--rel-spacing-space-md, 16px);
896
-
897
- box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.3),
898
- 0px 6px 10px 4px rgba(0, 0, 0, 0.15);
912
+ background-color: var(--rel-colors-white);
913
+ border-radius: var(--rel-borders-radius-border-radius-300);
914
+ padding: var(--rel-spacing-space-md);
899
915
 
900
- font-family: var(--rel-fontFamilies-primary);
916
+ box-shadow: var(--rel-shadows-shadow-200);
901
917
  transition: transform 0.2s ease, box-shadow 0.2s ease;
902
918
  }
903
919
 
904
920
  .card:hover {
905
921
  transform: translateY(-3px);
906
- box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.35),
907
- 0px 8px 14px 4px rgba(0, 0, 0, 0.2);
922
+ box-shadow: var(--rel-shadows-shadow-300);
908
923
  }
909
924
  `;
910
925
  RelCard = __decorateClass([
@@ -927,15 +942,13 @@ var RelCardMedia = class extends import_lit8.LitElement {
927
942
  <div class="card-media">
928
943
  ${this.imageSrc ? import_lit8.html`
929
944
  <div class="card-image">
930
- <img src="${this.imageSrc}" alt="${this.imageAlt}" />
945
+ <img src=${this.imageSrc} alt=${this.imageAlt} />
931
946
  </div>
932
947
  ` : null}
933
948
 
934
949
  <div class="card-content">
935
950
  ${this.title ? import_lit8.html`<h3>${this.title}</h3>` : null}
936
951
  ${this.subtitle ? import_lit8.html`<p>${this.subtitle}</p>` : null}
937
-
938
- <!-- Slot for extra content such as buttons, descriptions, etc -->
939
952
  <slot></slot>
940
953
  </div>
941
954
  </div>
@@ -949,20 +962,16 @@ RelCardMedia.styles = import_lit8.css`
949
962
  }
950
963
 
951
964
  .card-media {
952
- background-color: var(--rel-colors-white, #ffffff);
953
- border-radius: var(--rel-borderRadius-lg, 12px);
965
+ background-color: var(--rel-colors-white);
966
+ border-radius: var(--rel-borders-radius-border-radius-300);
954
967
  overflow: hidden;
955
-
956
- box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.3),
957
- 0px 8px 12px 6px rgba(0, 0, 0, 0.15);
958
-
968
+ box-shadow: var(--rel-shadows-shadow-200);
959
969
  transition: transform 0.2s ease, box-shadow 0.2s ease;
960
970
  }
961
971
 
962
972
  .card-media:hover {
963
973
  transform: translateY(-4px);
964
- box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.35),
965
- 0px 10px 16px 6px rgba(0, 0, 0, 0.2);
974
+ box-shadow: var(--rel-shadows-shadow-300);
966
975
  }
967
976
 
968
977
  .card-image img {
@@ -973,20 +982,20 @@ RelCardMedia.styles = import_lit8.css`
973
982
  }
974
983
 
975
984
  .card-content {
976
- padding: var(--rel-spacing-space-md, 16px);
985
+ padding: var(--rel-spacing-space-md);
977
986
  }
978
987
 
979
988
  .card-content h3 {
980
989
  margin: 0 0 4px 0;
981
- font-size: var(--rel-fontSizes-md, 16px);
982
- font-weight: var(--rel-fontWeights-semibold, 600);
983
- color: var(--rel-colors-gray-heading, #2b2b2b);
990
+ font-size: var(--rel-fontSizes-md);
991
+ font-weight: var(--rel-fontWeights-semibold);
992
+ color: var(--rel-colors-gray-heading);
984
993
  }
985
994
 
986
995
  .card-content p {
987
996
  margin: 0 0 8px 0;
988
- font-size: var(--rel-fontSizes-sm, 14px);
989
- color: var(--rel-colors-gray-text, #555);
997
+ font-size: var(--rel-fontSizes-sm);
998
+ color: var(--rel-colors-gray-text);
990
999
  }
991
1000
  `;
992
1001
  __decorateClass([
@@ -1021,32 +1030,34 @@ var RelCheckbox = class extends import_lit9.LitElement {
1021
1030
  if (this.status === "unchecked") this.status = "checked";
1022
1031
  else if (this.status === "checked") this.status = "indeterminate";
1023
1032
  else this.status = "unchecked";
1024
- this.dispatchEvent(new CustomEvent("changed", { detail: this.status }));
1033
+ this.dispatchEvent(
1034
+ new CustomEvent("change", {
1035
+ detail: {
1036
+ checked: this.status === "checked",
1037
+ indeterminate: this.status === "indeterminate"
1038
+ },
1039
+ bubbles: true,
1040
+ composed: true
1041
+ })
1042
+ );
1025
1043
  }
1026
1044
  render() {
1027
- const className = `
1028
- wrapper
1029
- ${this.state}
1030
- ${this.status}
1031
- `;
1032
1045
  return import_lit9.html`
1033
- <div class="${className}">
1046
+ <div class="wrapper ${this.state} ${this.status}">
1034
1047
  <label class="row">
1035
1048
  <input
1036
1049
  type="checkbox"
1037
- @change=${this.toggle}
1050
+ @click=${this.toggle}
1038
1051
  ?disabled=${this.state === "disabled"}
1039
1052
  />
1040
1053
 
1041
1054
  <span class="box">
1042
- <!-- CHECK ICON -->
1043
1055
  <svg class="check-icon" viewBox="0 0 18 14" fill="white">
1044
1056
  <path
1045
- d="M6.44479 14L0.5 7.36383L1.9862 5.70478L6.44479 10.6819L16.0138 0L17.5 1.65904L6.44479 14Z"
1057
+ d="M6.44 14L0.5 7.36l1.49-1.66L6.44 10.68 16.01 0 17.5 1.66z"
1046
1058
  />
1047
1059
  </svg>
1048
1060
 
1049
- <!-- INDETERMINATE ICON -->
1050
1061
  <svg class="indeterminate-icon" viewBox="0 0 16 2" fill="white">
1051
1062
  <rect width="16" height="2" />
1052
1063
  </svg>
@@ -1097,55 +1108,43 @@ RelCheckbox.styles = import_lit9.css`
1097
1108
  transition: all 0.2s;
1098
1109
  }
1099
1110
 
1100
- /* ICONS FIXED SIZE */
1101
1111
  svg {
1102
1112
  width: 12px;
1103
1113
  height: 12px;
1104
1114
  display: none;
1105
- pointer-events: none;
1106
1115
  }
1107
1116
 
1108
- /* CHECKED */
1109
- .checked .box {
1117
+ .checked .box,
1118
+ .indeterminate .box {
1110
1119
  background: var(--rel-colors-gray-heading);
1111
1120
  border-color: var(--rel-colors-gray-heading);
1112
1121
  }
1122
+
1113
1123
  .checked .check-icon {
1114
1124
  display: block;
1115
1125
  }
1116
1126
 
1117
- /* INDETERMINATE */
1118
- .indeterminate .box {
1119
- background: var(--rel-colors-gray-heading);
1120
- border-color: var(--rel-colors-gray-heading);
1121
- }
1122
1127
  .indeterminate .indeterminate-icon {
1123
1128
  display: block;
1124
1129
  }
1125
1130
 
1126
- /* ERROR */
1127
1131
  .error .box {
1128
1132
  border-color: var(--rel-colors-red-primary);
1129
1133
  }
1134
+
1130
1135
  .error.checked .box,
1131
1136
  .error.indeterminate .box {
1132
1137
  background: var(--rel-colors-red-primary);
1133
1138
  border-color: var(--rel-colors-red-primary);
1134
1139
  }
1135
- .error .label,
1136
- .error .text {
1137
- color: var(--rel-colors-red-primary);
1138
- }
1139
1140
 
1140
- /* DISABLED */
1141
1141
  .disabled {
1142
1142
  opacity: 0.55;
1143
- cursor: not-allowed !important;
1143
+ cursor: not-allowed;
1144
1144
  }
1145
1145
 
1146
1146
  .label {
1147
1147
  font-size: var(--rel-fontSizes-md);
1148
- color: var(--rel-colors-gray-heading);
1149
1148
  font-weight: var(--rel-fontWeights-medium);
1150
1149
  }
1151
1150
 
@@ -1153,12 +1152,6 @@ RelCheckbox.styles = import_lit9.css`
1153
1152
  font-size: var(--rel-fontSizes-sm);
1154
1153
  color: var(--rel-colors-gray-text);
1155
1154
  }
1156
-
1157
- /* Focus ring */
1158
- input:focus-visible + .box {
1159
- outline: 2px solid var(--rel-colors-blue-primary);
1160
- outline-offset: 2px;
1161
- }
1162
1155
  `;
1163
1156
  __decorateClass([
1164
1157
  (0, import_decorators9.property)({ type: String })
@@ -1205,49 +1198,39 @@ var RelChip = class extends import_lit10.LitElement {
1205
1198
  })
1206
1199
  );
1207
1200
  }
1208
- handleKeyDown(event) {
1209
- if (!this.removable) return;
1210
- if (event.key === "Backspace" || event.key === "Delete") {
1211
- event.preventDefault();
1212
- this.handleRemove(event);
1213
- }
1214
- }
1215
1201
  render() {
1216
- if (this.removed) {
1217
- return null;
1218
- }
1219
1202
  return import_lit10.html`
1220
- <button
1203
+ <span
1221
1204
  class="${this.classes}"
1222
- type="button"
1223
1205
  role="button"
1224
- aria-label="${this.label}"
1225
- @keydown=${this.handleKeyDown}
1226
1206
  tabindex="0"
1207
+ aria-label="${this.label}"
1227
1208
  >
1228
- ${this.avatar ? import_lit10.html`<img src="${this.avatar}" alt="avatar" class="chip-avatar" />` : ""}
1229
- ${this.leadingIcon ? import_lit10.html`<span class="chip-icon leading">
1230
- <slot name="leading-icon">${this.renderIcon(this.leadingIcon)}</slot>
1231
- </span>` : ""}
1209
+ ${this.avatar ? import_lit10.html`<img src=${this.avatar} alt="" class="chip-avatar" />` : null}
1210
+ ${this.leadingIcon ? import_lit10.html`<span class="chip-icon">
1211
+ ${this.renderIcon(this.leadingIcon)}
1212
+ </span>` : null}
1213
+
1232
1214
  <span class="chip-label">${this.label}</span>
1233
- ${this.trailingIcon ? import_lit10.html`<span class="chip-icon trailing">
1234
- <slot name="trailing-icon">${this.renderIcon(this.trailingIcon)}</slot>
1235
- </span>` : ""}
1236
- ${this.removable ? import_lit10.html`<button
1237
- type="button"
1215
+
1216
+ ${this.trailingIcon ? import_lit10.html`<span class="chip-icon">
1217
+ ${this.renderIcon(this.trailingIcon)}
1218
+ </span>` : null}
1219
+ ${this.removable ? import_lit10.html`<span
1238
1220
  class="chip-remove"
1239
- @click=${this.handleRemove}
1221
+ role="button"
1240
1222
  aria-label="Remove chip"
1223
+ @click=${this.handleRemove}
1241
1224
  >
1242
- 
1243
- </button>` : ""}
1244
- </button>
1225
+ ✕
1226
+ </span>` : null}
1227
+ </span>
1245
1228
  `;
1246
1229
  }
1247
1230
  renderIcon(iconString) {
1248
1231
  const template = document.createElement("template");
1249
1232
  template.innerHTML = iconString.trim();
1250
- return import_lit10.html`${template.content.cloneNode(true)}`;
1233
+ return template.content.cloneNode(true);
1251
1234
  }
1252
1235
  };
1253
1236
  RelChip.styles = import_lit10.css`
@@ -1269,123 +1252,55 @@ RelChip.styles = import_lit10.css`
1269
1252
  padding: var(--rel-spacing-space-2xs) var(--rel-spacing-space-sm);
1270
1253
  gap: var(--rel-spacing-space-2xs);
1271
1254
  cursor: pointer;
1272
- transition: all 0.2s ease-in-out;
1273
1255
  border: var(--rel-borders-width-stroke-100) solid transparent;
1274
1256
  user-select: none;
1275
1257
  white-space: nowrap;
1258
+ background: transparent;
1276
1259
  }
1277
1260
 
1278
1261
  .chip:hover {
1279
1262
  filter: brightness(0.92);
1280
- transform: translateY(-1px);
1281
1263
  box-shadow: var(--rel-shadows-shadow-100);
1282
1264
  }
1283
1265
 
1284
- .chip:focus:not(:focus-visible) {
1285
- outline: none;
1286
- }
1287
-
1288
- .chip:active {
1289
- transform: scale(0.97) translateY(0);
1290
- box-shadow: none;
1291
- filter: brightness(0.88);
1292
- }
1293
-
1294
- /* Tone Variants - Filled */
1266
+ /* TONES */
1295
1267
  .chip-default {
1296
1268
  background: var(--rel-colors-gray-border);
1297
1269
  color: var(--rel-colors-black);
1298
1270
  }
1299
1271
 
1300
- .chip-default:focus {
1301
- outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-gray-primary);
1302
- outline-offset: var(--rel-spacing-space-3xs);
1303
- }
1304
-
1305
1272
  .chip-blue {
1306
1273
  background: var(--rel-colors-blue-tertiary);
1307
1274
  color: var(--rel-colors-white);
1308
1275
  }
1309
1276
 
1310
- .chip-blue:focus {
1311
- outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-blue-tertiary);
1312
- outline-offset: var(--rel-spacing-space-3xs);
1313
- }
1314
-
1315
1277
  .chip-yellow {
1316
1278
  background: var(--rel-colors-yellow-pending);
1317
1279
  color: var(--rel-colors-black);
1318
1280
  }
1319
1281
 
1320
- .chip-yellow:focus {
1321
- outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-yellow-pending);
1322
- outline-offset: var(--rel-spacing-space-3xs);
1323
- }
1324
-
1325
1282
  .chip-red {
1326
1283
  background: var(--rel-colors-red-secondary);
1327
1284
  color: var(--rel-colors-white);
1328
1285
  }
1329
1286
 
1330
- .chip-red:focus {
1331
- outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-red-secondary);
1332
- outline-offset: var(--rel-spacing-space-3xs);
1333
- }
1334
-
1335
1287
  .chip-green {
1336
1288
  background: var(--rel-colors-green-success);
1337
1289
  color: var(--rel-colors-white);
1338
1290
  }
1339
1291
 
1340
- .chip-green:focus {
1341
- outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-green-success);
1342
- outline-offset: var(--rel-spacing-space-3xs);
1343
- }
1344
-
1345
- /* Outline Variants */
1346
- .chip-outline.chip-default {
1347
- background: transparent;
1348
- border-color: var(--rel-colors-gray-border);
1349
- color: var(--rel-colors-black);
1350
- }
1351
-
1352
- .chip-outline.chip-blue {
1353
- background: transparent;
1354
- border-color: var(--rel-colors-blue-tertiary);
1355
- color: var(--rel-colors-blue-tertiary);
1356
- }
1357
-
1358
- .chip-outline.chip-yellow {
1359
- background: transparent;
1360
- border-color: var(--rel-colors-yellow-pending);
1361
- color: var(--rel-colors-yellow-pending);
1362
- }
1363
-
1364
- .chip-outline.chip-red {
1365
- background: transparent;
1366
- border-color: var(--rel-colors-red-secondary);
1367
- color: var(--rel-colors-red-secondary);
1368
- }
1369
-
1370
- .chip-outline.chip-green {
1292
+ /* OUTLINE */
1293
+ .chip-outline {
1371
1294
  background: transparent;
1372
- border-color: var(--rel-colors-green-success);
1373
- color: var(--rel-colors-green-success);
1374
1295
  }
1375
1296
 
1376
1297
  .chip-avatar {
1377
1298
  width: 20px;
1378
1299
  height: 20px;
1379
- border-radius: var(--rel-borders-radius-border-radius-500);
1300
+ border-radius: 50%;
1380
1301
  object-fit: cover;
1381
1302
  }
1382
1303
 
1383
- .chip-icon {
1384
- display: flex;
1385
- align-items: center;
1386
- line-height: 0;
1387
- }
1388
-
1389
1304
  .chip-icon ::slotted(svg),
1390
1305
  .chip-icon svg {
1391
1306
  width: 16px;
@@ -1393,24 +1308,14 @@ RelChip.styles = import_lit10.css`
1393
1308
  fill: currentColor;
1394
1309
  }
1395
1310
 
1396
- .chip-label {
1397
- line-height: var(--rel-lineHeights-md);
1398
- }
1399
-
1400
1311
  .chip-remove {
1401
- background: transparent;
1402
- border: none;
1403
- color: inherit;
1404
- font-size: var(--rel-fontSizes-md);
1405
- cursor: pointer;
1406
- display: flex;
1407
- align-items: center;
1408
- padding: 0;
1409
1312
  margin-left: var(--rel-spacing-space-3xs);
1313
+ cursor: pointer;
1314
+ opacity: 0.7;
1410
1315
  }
1411
1316
 
1412
1317
  .chip-remove:hover {
1413
- opacity: 0.6;
1318
+ opacity: 1;
1414
1319
  }
1415
1320
  `;
1416
1321
  __decorateClass([
@@ -1435,7 +1340,7 @@ __decorateClass([
1435
1340
  (0, import_decorators10.property)({ type: Boolean })
1436
1341
  ], RelChip.prototype, "outline", 2);
1437
1342
  __decorateClass([
1438
- (0, import_decorators10.state)()
1343
+ (0, import_decorators10.property)({ type: Boolean, reflect: true })
1439
1344
  ], RelChip.prototype, "removed", 2);
1440
1345
  RelChip = __decorateClass([
1441
1346
  (0, import_decorators10.customElement)("rel-chip")
@@ -1481,7 +1386,6 @@ RelContainer.styles = import_lit11.css`
1481
1386
  box-sizing: border-box;
1482
1387
  }
1483
1388
 
1484
- /* Background Variants */
1485
1389
  .bg-white {
1486
1390
  background-color: var(--rel-colors-white);
1487
1391
  }
@@ -1494,7 +1398,6 @@ RelContainer.styles = import_lit11.css`
1494
1398
  background: transparent;
1495
1399
  }
1496
1400
 
1497
- /* Padding Variants */
1498
1401
  .padding-sm {
1499
1402
  padding: var(--rel-spacing-space-xs);
1500
1403
  }
@@ -1507,7 +1410,6 @@ RelContainer.styles = import_lit11.css`
1507
1410
  padding: var(--rel-spacing-space-2xl);
1508
1411
  }
1509
1412
 
1510
- /* Shadow */
1511
1413
  .shadow {
1512
1414
  box-shadow: var(--rel-shadows-shadow-300);
1513
1415
  }
@@ -1535,40 +1437,40 @@ var RelDivider = class extends import_lit12.LitElement {
1535
1437
  }
1536
1438
  render() {
1537
1439
  return import_lit12.html`
1538
- <div class="rel-divider ${this.orientation}" role="separator"></div>
1539
- `;
1440
+ <div class="rel-divider ${this.orientation}" role="separator"></div>
1441
+ `;
1540
1442
  }
1541
1443
  };
1542
1444
  RelDivider.styles = import_lit12.css`
1543
- :host {
1544
- display: block;
1545
- }
1445
+ :host {
1446
+ display: block;
1447
+ }
1546
1448
 
1547
- .rel-divider {
1548
- position: relative;
1549
- display: flex;
1550
- background: transparent;
1551
- font-family: var(--rel-fontFamilies-primary);
1552
- color: var(--rel-colors-gray-primary);
1553
- }
1449
+ .rel-divider {
1450
+ position: relative;
1451
+ display: flex;
1452
+ background: transparent;
1453
+ font-family: var(--rel-fontFamilies-primary);
1454
+ color: var(--rel-colors-gray-primary);
1455
+ }
1554
1456
 
1555
- /* Horizontal */
1556
- .rel-divider.horizontal {
1557
- width: 100%;
1558
- height: var(--rel-borders-width-stroke-100);
1559
- background-color: var(--rel-colors-gray-border);
1560
- margin: var(--rel-spacing-space-md) 0;
1561
- }
1457
+ /* Horizontal */
1458
+ .rel-divider.horizontal {
1459
+ width: 100%;
1460
+ height: var(--rel-borders-width-stroke-100);
1461
+ background-color: var(--rel-colors-gray-border);
1462
+ margin: var(--rel-spacing-space-md) 0;
1463
+ }
1562
1464
 
1563
- /* Vertical */
1564
- .rel-divider.vertical {
1565
- width: var(--rel-borders-width-stroke-100);
1566
- background-color: var(--rel-colors-gray-border);
1567
- margin: 0 var(--rel-spacing-space-md);
1568
- align-self: stretch;
1569
- height: 100%;
1570
- }
1571
- `;
1465
+ /* Vertical */
1466
+ .rel-divider.vertical {
1467
+ width: var(--rel-borders-width-stroke-100);
1468
+ background-color: var(--rel-colors-gray-border);
1469
+ margin: 0 var(--rel-spacing-space-md);
1470
+ align-self: stretch;
1471
+ height: 100%;
1472
+ }
1473
+ `;
1572
1474
  __decorateClass([
1573
1475
  (0, import_decorators12.property)({ type: String })
1574
1476
  ], RelDivider.prototype, "orientation", 2);
@@ -1587,12 +1489,14 @@ var RelLayout = class extends import_lit13.LitElement {
1587
1489
  this.responsive = true;
1588
1490
  }
1589
1491
  render() {
1590
- const gridStyle = `
1591
- gap: ${this.gap};
1592
- grid-template-columns: repeat(${this.columns}, 1fr);
1593
- `;
1594
1492
  return import_lit13.html`
1595
- <div class="layout-grid" style="${gridStyle}">
1493
+ <div
1494
+ class="layout-grid"
1495
+ style="
1496
+ gap: ${this.gap};
1497
+ grid-template-columns: repeat(${this.columns}, 1fr);
1498
+ "
1499
+ >
1596
1500
  <slot></slot>
1597
1501
  </div>
1598
1502
  `;
@@ -1610,11 +1514,7 @@ RelLayout.styles = import_lit13.css`
1610
1514
  font-family: var(--rel-fontFamilies-primary);
1611
1515
  }
1612
1516
 
1613
- /* Responsive breakpoints - only applied when responsive is true */
1614
- :host([responsive]) .layout-grid {
1615
- /* Default: use columns property */
1616
- }
1617
-
1517
+ /* Responsive breakpoints — only when attribute exists */
1618
1518
  @media (max-width: 1024px) {
1619
1519
  :host([responsive]) .layout-grid {
1620
1520
  grid-template-columns: repeat(3, 1fr) !important;
@@ -1640,7 +1540,7 @@ __decorateClass([
1640
1540
  (0, import_decorators13.property)({ type: Number })
1641
1541
  ], RelLayout.prototype, "columns", 2);
1642
1542
  __decorateClass([
1643
- (0, import_decorators13.property)({ type: Boolean })
1543
+ (0, import_decorators13.property)({ type: Boolean, reflect: true })
1644
1544
  ], RelLayout.prototype, "responsive", 2);
1645
1545
  RelLayout = __decorateClass([
1646
1546
  (0, import_decorators13.customElement)("rel-layout")
@@ -1952,10 +1852,13 @@ var RelProgress = class extends import_lit15.LitElement {
1952
1852
  this.radius = 15.9155;
1953
1853
  this.circumference = 2 * Math.PI * this.radius;
1954
1854
  }
1855
+ get safeValue() {
1856
+ return Math.min(100, Math.max(0, this.value));
1857
+ }
1955
1858
  renderLinearDeterminate() {
1956
1859
  return import_lit15.html`
1957
1860
  <div class="linear-track">
1958
- <div class="linear-bar" style="width: ${this.value}%"></div>
1861
+ <div class="linear-bar" style="width: ${this.safeValue}%"></div>
1959
1862
  </div>
1960
1863
  `;
1961
1864
  }
@@ -1967,18 +1870,19 @@ var RelProgress = class extends import_lit15.LitElement {
1967
1870
  `;
1968
1871
  }
1969
1872
  renderCircularDeterminate() {
1970
- const offset = this.circumference - this.value / 100 * this.circumference;
1873
+ const offset = this.circumference - this.safeValue / 100 * this.circumference;
1971
1874
  return import_lit15.html`
1972
1875
  <div class="circular">
1973
1876
  <svg viewBox="0 0 36 36" class="circular-svg">
1974
- <circle class="circular-bg" cx="18" cy="18" r="15.9155" />
1877
+ <circle class="circular-bg" cx="18" cy="18" r="${this.radius}" />
1975
1878
  <circle
1976
1879
  class="circular-progress"
1977
1880
  cx="18"
1978
1881
  cy="18"
1979
- r="15.9155"
1882
+ r="${this.radius}"
1980
1883
  stroke-dasharray="${this.circumference}"
1981
- stroke-dashoffset="${offset}" />
1884
+ stroke-dashoffset="${offset}"
1885
+ />
1982
1886
  </svg>
1983
1887
  </div>
1984
1888
  `;
@@ -1987,15 +1891,20 @@ var RelProgress = class extends import_lit15.LitElement {
1987
1891
  return import_lit15.html`
1988
1892
  <div class="circular">
1989
1893
  <svg viewBox="0 0 50 50" class="spinner">
1990
- <circle class="spinner-path" cx="25" cy="25" r="20" fill="none" stroke-width="4" />
1894
+ <circle
1895
+ class="spinner-path"
1896
+ cx="25"
1897
+ cy="25"
1898
+ r="20"
1899
+ fill="none"
1900
+ stroke-width="4"
1901
+ />
1991
1902
  </svg>
1992
1903
  </div>
1993
1904
  `;
1994
1905
  }
1995
1906
  render() {
1996
1907
  switch (this.mode) {
1997
- case "linear-determinate":
1998
- return this.renderLinearDeterminate();
1999
1908
  case "linear-indeterminate":
2000
1909
  return this.renderLinearIndeterminate();
2001
1910
  case "circular-determinate":
@@ -2017,7 +1926,7 @@ RelProgress.styles = import_lit15.css`
2017
1926
  display: inline-block;
2018
1927
  }
2019
1928
 
2020
- /* Linear Progress */
1929
+ /* Linear */
2021
1930
  .linear-track {
2022
1931
  background: var(--rel-colors-gray-border);
2023
1932
  border-radius: var(--rel-borders-radius-border-radius-200);
@@ -2049,7 +1958,7 @@ RelProgress.styles = import_lit15.css`
2049
1958
  }
2050
1959
  }
2051
1960
 
2052
- /* Circular Progress */
1961
+ /* Circular */
2053
1962
  .circular {
2054
1963
  display: inline-block;
2055
1964
  width: 48px;
@@ -2074,11 +1983,9 @@ RelProgress.styles = import_lit15.css`
2074
1983
  stroke-width: 3;
2075
1984
  stroke-linecap: round;
2076
1985
  transition: stroke-dashoffset 0.35s;
2077
- transform: rotate(0deg);
2078
- transform-origin: center;
2079
1986
  }
2080
1987
 
2081
- /* Circular Indeterminate Spinner */
1988
+ /* Spinner */
2082
1989
  .spinner {
2083
1990
  animation: rotate 2s linear infinite;
2084
1991
  }
@@ -2111,7 +2018,7 @@ RelProgress.styles = import_lit15.css`
2111
2018
  }
2112
2019
  `;
2113
2020
  __decorateClass([
2114
- (0, import_decorators15.property)({ type: String })
2021
+ (0, import_decorators15.property)({ type: String, reflect: true })
2115
2022
  ], RelProgress.prototype, "mode", 2);
2116
2023
  __decorateClass([
2117
2024
  (0, import_decorators15.property)({ type: Number })
@@ -2129,25 +2036,24 @@ var RelRadio = class extends import_lit16.LitElement {
2129
2036
  this.options = [];
2130
2037
  this.name = "radio-group";
2131
2038
  this.selectedValue = null;
2039
+ this.disabled = false;
2132
2040
  }
2133
2041
  onChange(value) {
2042
+ if (this.disabled) return;
2134
2043
  this.selectedValue = value;
2135
2044
  this.dispatchEvent(
2136
2045
  new CustomEvent("changed", {
2137
- detail: { value },
2138
2046
  bubbles: true,
2139
2047
  composed: true
2140
2048
  })
2141
2049
  );
2142
2050
  }
2143
- isChecked(value) {
2144
- return this.selectedValue === value;
2145
- }
2146
2051
  renderOption(option) {
2147
- const isChecked = this.isChecked(option.value);
2052
+ const isChecked = this.selectedValue === option.value;
2053
+ const isDisabled = this.disabled || option.disabled;
2148
2054
  const classes = [
2149
2055
  "rel-radio-option",
2150
- option.disabled ? "disabled" : "",
2056
+ isDisabled ? "disabled" : "",
2151
2057
  option.error ? "error" : ""
2152
2058
  ].filter(Boolean).join(" ");
2153
2059
  return import_lit16.html`
@@ -2156,26 +2062,22 @@ var RelRadio = class extends import_lit16.LitElement {
2156
2062
  <input
2157
2063
  type="radio"
2158
2064
  name="${this.name}"
2159
- .value="${option.value}"
2160
2065
  .checked="${isChecked}"
2161
- ?disabled="${option.disabled}"
2162
- @change="${() => !option.disabled && this.onChange(option.value)}" />
2066
+ ?disabled="${isDisabled}"
2067
+ @change="${() => this.onChange(option.value)}"
2068
+ />
2163
2069
  <span class="radio-custom"></span>
2164
2070
  <span class="radio-label">${option.label}</span>
2165
2071
  </div>
2166
2072
 
2167
- ${option.supportingText ? import_lit16.html`
2168
- <div class="radio-supporting ${option.error ? "error-text" : ""}">
2169
- ${option.supportingText}
2170
- </div>
2171
- ` : ""}
2073
+ ${option.supportingText ? import_lit16.html`<div class="radio-supporting">${option.supportingText}</div>` : ""}
2172
2074
  </label>
2173
2075
  `;
2174
2076
  }
2175
2077
  render() {
2176
2078
  return import_lit16.html`
2177
2079
  <div class="rel-radio-group">
2178
- ${this.options.map((option) => this.renderOption(option))}
2080
+ ${this.options.map((o) => this.renderOption(o))}
2179
2081
  </div>
2180
2082
  `;
2181
2083
  }
@@ -2195,10 +2097,13 @@ RelRadio.styles = import_lit16.css`
2195
2097
  .rel-radio-option {
2196
2098
  display: flex;
2197
2099
  flex-direction: column;
2198
- align-items: flex-start;
2199
2100
  gap: var(--rel-spacing-space-3xs);
2200
2101
  cursor: pointer;
2201
- position: relative;
2102
+ }
2103
+
2104
+ .rel-radio-option.disabled {
2105
+ opacity: 0.6;
2106
+ cursor: not-allowed !important;
2202
2107
  }
2203
2108
 
2204
2109
  .radio-main {
@@ -2207,7 +2112,7 @@ RelRadio.styles = import_lit16.css`
2207
2112
  gap: var(--rel-spacing-space-2xs);
2208
2113
  }
2209
2114
 
2210
- .rel-radio-option input {
2115
+ input {
2211
2116
  position: absolute;
2212
2117
  opacity: 0;
2213
2118
  pointer-events: none;
@@ -2218,75 +2123,33 @@ RelRadio.styles = import_lit16.css`
2218
2123
  height: 20px;
2219
2124
  border: 2px solid var(--rel-colors-black);
2220
2125
  border-radius: 50%;
2221
- display: inline-block;
2222
2126
  position: relative;
2223
- flex-shrink: 0;
2224
- transition: all 0.2s ease-in-out;
2225
2127
  }
2226
2128
 
2227
- .rel-radio-option input:focus + .radio-custom {
2228
- outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-black);
2229
- outline-offset: var(--rel-spacing-space-3xs);
2230
- }
2231
-
2232
- .rel-radio-option input:checked + .radio-custom::after {
2129
+ input:checked + .radio-custom::after {
2233
2130
  content: "";
2234
2131
  position: absolute;
2235
- top: 50%;
2236
- left: 50%;
2237
- width: 10px;
2238
- height: 10px;
2239
- background-color: var(--rel-colors-black);
2132
+ inset: 4px;
2133
+ background: var(--rel-colors-black);
2240
2134
  border-radius: 50%;
2241
- transform: translate(-50%, -50%);
2242
- }
2243
-
2244
- /* Error state */
2245
- .rel-radio-option.error .radio-custom {
2246
- border-color: var(--rel-colors-red-secondary);
2247
- }
2248
-
2249
- .rel-radio-option.error input:checked + .radio-custom::after {
2250
- background-color: var(--rel-colors-red-secondary);
2251
- }
2252
-
2253
- .rel-radio-option.error .radio-label,
2254
- .rel-radio-option.error .radio-supporting {
2255
- color: var(--rel-colors-red-secondary);
2256
- }
2257
-
2258
- .rel-radio-option.error input:focus + .radio-custom {
2259
- outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-red-secondary);
2260
- }
2261
-
2262
- /* Disabled state */
2263
- .rel-radio-option.disabled {
2264
- opacity: 0.6;
2265
- cursor: not-allowed !important;
2266
- }
2267
-
2268
- .rel-radio-option.disabled .radio-label,
2269
- .rel-radio-option.disabled .radio-supporting {
2270
- cursor: not-allowed !important;
2271
2135
  }
2272
2136
 
2273
- /* Text styles */
2274
2137
  .radio-label {
2275
2138
  font-size: var(--rel-fontSizes-sm);
2276
2139
  font-weight: var(--rel-fontWeights-medium);
2277
- color: var(--rel-colors-gray-heading);
2278
- line-height: var(--rel-lineHeights-sm);
2279
2140
  }
2280
2141
 
2281
2142
  .radio-supporting {
2282
2143
  font-size: var(--rel-fontSizes-xs);
2283
- color: var(--rel-colors-gray-placeholder);
2284
2144
  margin-left: 28px;
2285
- line-height: var(--rel-lineHeights-xs);
2286
2145
  }
2287
2146
 
2288
- .radio-supporting.error-text {
2289
- color: var(--rel-colors-red-secondary);
2147
+ .error .radio-custom {
2148
+ border-color: var(--rel-colors-red-secondary);
2149
+ }
2150
+
2151
+ .error input:checked + .radio-custom::after {
2152
+ background: var(--rel-colors-red-secondary);
2290
2153
  }
2291
2154
  `;
2292
2155
  __decorateClass([
@@ -2296,8 +2159,11 @@ __decorateClass([
2296
2159
  (0, import_decorators16.property)({ type: String })
2297
2160
  ], RelRadio.prototype, "name", 2);
2298
2161
  __decorateClass([
2299
- (0, import_decorators16.property)({ type: String })
2162
+ (0, import_decorators16.property)({ type: String, reflect: true })
2300
2163
  ], RelRadio.prototype, "selectedValue", 2);
2164
+ __decorateClass([
2165
+ (0, import_decorators16.property)({ type: Boolean })
2166
+ ], RelRadio.prototype, "disabled", 2);
2301
2167
  RelRadio = __decorateClass([
2302
2168
  (0, import_decorators16.customElement)("rel-radio")
2303
2169
  ], RelRadio);
@@ -3163,6 +3029,11 @@ var RelSnackbar = class extends import_lit20.LitElement {
3163
3029
  super.connectedCallback();
3164
3030
  this.setAutoDismiss();
3165
3031
  }
3032
+ updated(changed) {
3033
+ if (changed.has("duration") || changed.has("longerAction")) {
3034
+ this.setAutoDismiss();
3035
+ }
3036
+ }
3166
3037
  disconnectedCallback() {
3167
3038
  super.disconnectedCallback();
3168
3039
  this.clearTimeout();
@@ -3386,6 +3257,19 @@ var RelStepper = class extends import_lit21.LitElement {
3386
3257
  if (this.isDisabled(step)) classes.push("disabled");
3387
3258
  return classes.join(" ");
3388
3259
  }
3260
+ onStepClick(step, index) {
3261
+ if (step.status === "disabled") return;
3262
+ this.dispatchEvent(
3263
+ new CustomEvent("step-change", {
3264
+ detail: {
3265
+ index,
3266
+ step
3267
+ },
3268
+ bubbles: true,
3269
+ composed: true
3270
+ })
3271
+ );
3272
+ }
3389
3273
  renderIndicator(step, index) {
3390
3274
  if (step.status === "done") {
3391
3275
  return import_lit21.html`
@@ -3419,7 +3303,10 @@ var RelStepper = class extends import_lit21.LitElement {
3419
3303
  <div class="${stepperClasses}">
3420
3304
  ${this.steps.map(
3421
3305
  (step, idx) => import_lit21.html`
3422
- <div class="${this.getStepClasses(step)}">
3306
+ <div
3307
+ class="${this.getStepClasses(step)}"
3308
+ @click="${() => this.onStepClick(step, idx)}"
3309
+ >
3423
3310
  ${isVertical && isTextRight ? import_lit21.html`
3424
3311
  <!-- Indicator with connector below -->
3425
3312
  <div class="indicator-wrapper">
@@ -3668,7 +3555,10 @@ RelStepper.styles = import_lit21.css`
3668
3555
  display: none;
3669
3556
  }
3670
3557
 
3671
- .rel-stepper.vertical.text-right .rel-step:last-child .indicator-wrapper .connector {
3558
+ .rel-stepper.vertical.text-right
3559
+ .rel-step:last-child
3560
+ .indicator-wrapper
3561
+ .connector {
3672
3562
  display: none;
3673
3563
  }
3674
3564
 
@@ -3779,10 +3669,10 @@ var RelSwitch = class extends import_lit22.LitElement {
3779
3669
  this.isFocused = false;
3780
3670
  this.isPressed = false;
3781
3671
  }
3782
- toggle() {
3672
+ toggle(ev) {
3783
3673
  if (this.disabled) return;
3784
- this.checked = !this.checked;
3785
- this.requestUpdate();
3674
+ const input = ev.target;
3675
+ this.checked = input.checked;
3786
3676
  this.dispatchEvent(
3787
3677
  new CustomEvent("changed", {
3788
3678
  detail: this.checked,
@@ -3817,7 +3707,7 @@ var RelSwitch = class extends import_lit22.LitElement {
3817
3707
  type="checkbox"
3818
3708
  ?disabled=${this.disabled}
3819
3709
  .checked=${this.checked}
3820
- @change=${this.toggle}
3710
+ @change=${(e) => this.toggle(e)}
3821
3711
  @focus=${this.handleFocus}
3822
3712
  @blur=${this.handleBlur}
3823
3713
  @mousedown=${this.handleMouseDown}
@@ -3950,7 +3840,7 @@ var RelTab = class extends import_lit23.LitElement {
3950
3840
  this.activeIndex = index;
3951
3841
  this.dispatchEvent(
3952
3842
  new CustomEvent("tab-change", {
3953
- detail: { index },
3843
+ detail: index,
3954
3844
  bubbles: true,
3955
3845
  composed: true
3956
3846
  })
@@ -3965,13 +3855,15 @@ var RelTab = class extends import_lit23.LitElement {
3965
3855
  }
3966
3856
  render() {
3967
3857
  return import_lit23.html`
3968
- <div class="tabs-wrapper">
3858
+ <div class="tabs-wrapper" role="tablist">
3969
3859
  ${this.tabs.map(
3970
3860
  (tab, i) => import_lit23.html`
3971
3861
  <div
3972
3862
  class="tab ${i === this.activeIndex ? "active" : ""} ${tab.disabled ? "disabled" : ""}"
3973
3863
  role="tab"
3974
- tabindex="${tab.disabled ? -1 : 0}"
3864
+ aria-selected="${i === this.activeIndex}"
3865
+ aria-disabled="${tab.disabled ?? false}"
3866
+ tabindex="${tab.disabled ? -1 : i === this.activeIndex ? 0 : -1}"
3975
3867
  @click="${() => this.selectTab(i)}"
3976
3868
  @keydown="${(e) => this.onKeyDown(e, i)}"
3977
3869
  >
@@ -4073,7 +3965,7 @@ __decorateClass([
4073
3965
  (0, import_decorators23.property)({ type: Array })
4074
3966
  ], RelTab.prototype, "tabs", 2);
4075
3967
  __decorateClass([
4076
- (0, import_decorators23.property)({ type: Number })
3968
+ (0, import_decorators23.property)({ type: Number, reflect: true })
4077
3969
  ], RelTab.prototype, "activeIndex", 2);
4078
3970
  RelTab = __decorateClass([
4079
3971
  (0, import_decorators23.customElement)("rel-tab")
@@ -4110,7 +4002,7 @@ var RelTextfield = class extends import_lit24.LitElement {
4110
4002
  this.value = input.value;
4111
4003
  this.dispatchEvent(
4112
4004
  new CustomEvent("input-change", {
4113
- detail: { value: this.value },
4005
+ detail: this.value,
4114
4006
  bubbles: true,
4115
4007
  composed: true
4116
4008
  })