@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, nothing } from "lit";
2
2
  import { customElement, property, state } from "lit/decorators.js";
3
- import "../../styles/vars-v2.css";
4
3
  import "@reliability-design/icons/rel-icon";
5
4
 
6
5
  export type TextFieldState = "default" | "error" | "disabled";
@@ -63,27 +62,37 @@ export class RelTextfield extends LitElement {
63
62
 
64
63
  static styles = css`
65
64
  :host {
65
+ color: var(--rel-text-default);
66
66
  display: block;
67
- font-family: var(--rel-fontFamilies-primary);
67
+ font-family: var(--rel-fonts-font-family);
68
68
  }
69
69
 
70
70
  /* Wrapper */
71
71
  .textfield-wrapper {
72
72
  display: flex;
73
73
  flex-direction: column;
74
- gap: var(--rel-spacing-space-2xs);
74
+ gap: var(--rel-spacing-2xs);
75
75
  width: 100%;
76
76
  }
77
77
 
78
78
  /* Label */
79
79
  .textfield-label {
80
- font-size: var(--rel-fontSizes-sm);
81
- font-weight: var(--rel-fontWeights-medium);
82
- color: var(--rel-color-text-heading);
80
+ color: var(--rel-text-label);
81
+
82
+ font-family: var(--rel-body-sm-medium-font-family);
83
+
84
+ font-weight: var(--rel-body-sm-medium-font-weight);
85
+
86
+ font-size: var(--rel-body-sm-medium-font-size);
87
+
88
+ line-height: var(--rel-body-sm-medium-line-height);
89
+
90
+ letter-spacing: var(--rel-body-sm-medium-letter-spacing);
91
+
83
92
  }
84
93
 
85
94
  .required-mark {
86
- color: var(--rel-error-surface-default, #CC0000);
95
+ color: var(--rel-text-danger);
87
96
  margin-left: 2px;
88
97
  }
89
98
 
@@ -100,24 +109,26 @@ export class RelTextfield extends LitElement {
100
109
 
101
110
  :host([floatinglabel]) .textfield-label {
102
111
  position: absolute;
103
- left: var(--rel-spacing-space-sm);
112
+ left: var(--rel-spacing-sm);
104
113
  top: 50%;
105
114
  transform: translateY(-50%);
106
- font-size: var(--rel-fontSizes-md);
107
- font-weight: var(--rel-fontWeights-regular);
108
- color: var(--rel-color-text-placeholder);
115
+ color: var(--rel-text-placeholder);
109
116
  pointer-events: none;
110
117
  transition: top 0.15s ease, font-size 0.15s ease, color 0.15s ease, transform 0.15s ease;
111
- background: var(--rel-color-bg-primary);
118
+ background: var(--rel-bg-neutral);
112
119
  padding: 0 2px;
113
120
  z-index: 1;
114
- line-height: 1;
115
121
  white-space: nowrap;
122
+ font-family: var(--rel-body-md-regular-font-family);
123
+ font-weight: var(--rel-body-md-regular-font-weight);
124
+ font-size: var(--rel-body-md-regular-font-size);
125
+ line-height: var(--rel-body-md-regular-line-height);
126
+ letter-spacing: var(--rel-body-md-regular-letter-spacing);
116
127
  }
117
128
 
118
129
  /* Floating label in multiline mode anchors to top instead of vertical center */
119
130
  :host([floatinglabel][multiline]) .textfield-label {
120
- top: var(--rel-spacing-space-sm);
131
+ top: var(--rel-spacing-sm);
121
132
  transform: none;
122
133
  }
123
134
 
@@ -125,46 +136,54 @@ export class RelTextfield extends LitElement {
125
136
  :host([floatinglabel]) .textfield-wrapper.has-value .textfield-label {
126
137
  top: 0;
127
138
  transform: translateY(-50%);
128
- font-size: var(--rel-fontSizes-xs);
129
- color: var(--rel-color-text-primary);
139
+ color: var(--rel-text-default);
140
+ font-family: var(--rel-body-xs-regular-font-family);
141
+ font-weight: var(--rel-body-xs-regular-font-weight);
142
+ font-size: var(--rel-body-xs-regular-font-size);
143
+ line-height: var(--rel-body-xs-regular-line-height);
144
+ letter-spacing: var(--rel-body-xs-regular-letter-spacing);
130
145
  }
131
146
 
132
147
  :host([floatinglabel]) .textfield-wrapper.error .textfield-label {
133
- color: var(--rel-error-text);
148
+ color: var(--rel-text-danger);
134
149
  }
135
150
 
136
151
  :host([floatinglabel]) .textfield-wrapper.focused:not(.error) .textfield-label {
137
- color: var(--rel-color-text-primary);
152
+ color: var(--rel-text-default);
138
153
  }
139
154
 
140
155
  :host([floatinglabel]) .textfield-wrapper.focused.error .textfield-label,
141
156
  :host([floatinglabel]) .textfield-wrapper.has-value.error .textfield-label {
142
157
  top: 0;
143
158
  transform: translateY(-50%);
144
- font-size: var(--rel-fontSizes-xs);
145
- color: var(--rel-error-text);
159
+ color: var(--rel-text-danger);
160
+ font-family: var(--rel-body-xs-regular-font-family);
161
+ font-weight: var(--rel-body-xs-regular-font-weight);
162
+ font-size: var(--rel-body-xs-regular-font-size);
163
+ line-height: var(--rel-body-xs-regular-line-height);
164
+ letter-spacing: var(--rel-body-xs-regular-letter-spacing);
146
165
  }
147
166
 
148
167
  :host([floatinglabel]) .textfield-input {
149
- padding-top: var(--rel-spacing-space-sm);
150
- padding-bottom: var(--rel-spacing-space-sm);
168
+ padding-top: var(--rel-spacing-sm);
169
+ padding-bottom: var(--rel-spacing-sm);
151
170
  }
152
171
 
153
172
  :host([floatinglabel]) .textfield-input.has-left-icon {
154
- padding-left: var(--rel-spacing-space-2xl);
173
+ padding-left: var(--rel-spacing-2xl);
155
174
  }
156
175
 
157
176
  :host([floatinglabel]) .textfield-label.has-left-icon {
158
- left: var(--rel-spacing-space-2xl);
177
+ left: var(--rel-spacing-2xl);
159
178
  }
160
179
 
161
180
  :host([floatinglabel]) .textfield-wrapper.focused .textfield-label.has-left-icon,
162
181
  :host([floatinglabel]) .textfield-wrapper.has-value .textfield-label.has-left-icon {
163
- left: var(--rel-spacing-space-sm);
182
+ left: var(--rel-spacing-sm);
164
183
  }
165
184
 
166
185
  :host([floatinglabel]) .textfield-wrapper.disabled .textfield-label {
167
- background: var(--rel-color-bg-tertiary);
186
+ background: var(--rel-bg-neutral-elevated-1);
168
187
  }
169
188
 
170
189
  /* Container */
@@ -172,15 +191,15 @@ export class RelTextfield extends LitElement {
172
191
  display: flex;
173
192
  align-items: center;
174
193
  position: relative;
175
- border: 1px solid var(--rel-color-border-default);
176
- border-radius: var(--rel-borders-radius-border-radius-100);
177
- background: var(--rel-color-bg-primary);
194
+ border: 1px solid var(--rel-border-default);
195
+ border-radius: var(--rel-border-radius-xs);
196
+ background: var(--rel-bg-neutral);
178
197
  overflow: hidden;
179
198
  transition: border 0.2s;
180
199
  }
181
200
 
182
201
  .textfield-container.disabled {
183
- background: var(--rel-color-bg-tertiary);
202
+ background: var(--rel-bg-neutral-elevated-1);
184
203
  cursor: not-allowed;
185
204
  }
186
205
 
@@ -194,16 +213,19 @@ export class RelTextfield extends LitElement {
194
213
  flex: 1;
195
214
  border: none;
196
215
  outline: none;
197
- font-size: var(--rel-fontSizes-md);
198
- padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-sm);
216
+ padding: var(--rel-spacing-xs) var(--rel-spacing-sm);
199
217
  background: transparent;
200
- font-family: var(--rel-fontFamilies-primary);
201
- color: var(--rel-color-text-primary);
218
+ color: var(--rel-text-body);
219
+ font-family: var(--rel-body-md-regular-font-family);
220
+ font-weight: var(--rel-body-md-regular-font-weight);
221
+ font-size: var(--rel-body-md-regular-font-size);
222
+ line-height: var(--rel-body-md-regular-line-height);
223
+ letter-spacing: var(--rel-body-md-regular-letter-spacing);
202
224
  }
203
225
 
204
226
  .textfield-input:disabled {
205
227
  cursor: not-allowed;
206
- color: var(--rel-color-text-disabled);
228
+ color: var(--rel-text-disabled);
207
229
  }
208
230
 
209
231
  /* Textarea */
@@ -221,7 +243,7 @@ export class RelTextfield extends LitElement {
221
243
  background: transparent;
222
244
  }
223
245
  textarea.textfield-input::-webkit-scrollbar-thumb {
224
- background: var(--rel-color-text-placeholder);
246
+ background: var(--rel-text-placeholder);
225
247
  border-radius: 2px;
226
248
  }
227
249
 
@@ -229,7 +251,7 @@ export class RelTextfield extends LitElement {
229
251
  position: absolute;
230
252
  display: flex;
231
253
  pointer-events: none;
232
- color: var(--rel-color-text-placeholder);
254
+ color: var(--rel-text-placeholder);
233
255
  }
234
256
 
235
257
  .icon.left {
@@ -240,33 +262,54 @@ export class RelTextfield extends LitElement {
240
262
  right: 8px;
241
263
  }
242
264
 
265
+ .textfield-wrapper.small .textfield-support {
266
+ font-weight: var(--rel-body-xs-medium-font-weight);
267
+ }
268
+
243
269
  .textfield-wrapper.small .textfield-input {
244
- padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-sm);
245
- font-size: var(--rel-fontSizes-sm);
270
+ padding: var(--rel-spacing-xs) var(--rel-spacing-sm);
271
+ font-family: var(--rel-body-sm-regular-font-family);
272
+ font-weight: var(--rel-body-sm-regular-font-weight);
273
+ font-size: var(--rel-body-sm-regular-font-size);
274
+ line-height: var(--rel-body-sm-regular-line-height);
275
+ letter-spacing: var(--rel-body-sm-regular-letter-spacing);
246
276
  }
247
277
 
248
278
  .textfield-wrapper.medium .textfield-input {
249
- padding: var(--rel-spacing-space-sm) var(--rel-spacing-space-md);
250
- font-size: var(--rel-fontSizes-md);
279
+ padding: var(--rel-spacing-sm) var(--rel-spacing-md);
280
+ font-family: var(--rel-body-md-regular-font-family);
281
+ font-weight: var(--rel-body-md-regular-font-weight);
282
+ font-size: var(--rel-body-md-regular-font-size);
283
+ line-height: var(--rel-body-md-regular-line-height);
284
+ letter-spacing: var(--rel-body-md-regular-letter-spacing);
251
285
  }
252
286
 
253
287
  .textfield-wrapper.large .textfield-input {
254
- padding: var(--rel-spacing-space-md) var(--rel-spacing-space-md);
255
- font-size: var(--rel-fontSizes-lg);
288
+ padding: var(--rel-spacing-md) var(--rel-spacing-md);
289
+ font-family: var(--rel-body-lg-regular-font-family);
290
+ font-weight: var(--rel-body-lg-regular-font-weight);
291
+ font-size: var(--rel-body-lg-regular-font-size);
292
+ line-height: var(--rel-body-lg-regular-line-height);
293
+ letter-spacing: var(--rel-body-lg-regular-letter-spacing);
256
294
  }
257
295
 
258
296
  /* Adjust padding when icons are present */
259
297
  .textfield-wrapper .textfield-input.has-left-icon {
260
- padding-left: var(--rel-spacing-space-2xl);
298
+ padding-left: var(--rel-spacing-2xl);
261
299
  }
262
300
 
263
301
  .textfield-wrapper .textfield-input.has-right-icon {
264
- padding-right: var(--rel-spacing-space-2xl);
302
+ padding-right: var(--rel-spacing-2xl);
265
303
  }
266
304
 
267
305
  /* States */
306
+ /* Hover (Figma State=Hover): border-strong at 1px — no focus ring */
307
+ .textfield-wrapper:not(.focused):not(.error):not(.disabled) .textfield-container:hover {
308
+ border-color: var(--rel-border-strong);
309
+ }
310
+
268
311
  .textfield-wrapper.focused .textfield-container {
269
- border-color: var(--rel-color-text-primary);
312
+ border-color: var(--rel-text-default);
270
313
  }
271
314
 
272
315
  .textfield-input:focus-visible {
@@ -275,37 +318,47 @@ export class RelTextfield extends LitElement {
275
318
 
276
319
  .textfield-wrapper.focused .textfield-container,
277
320
  .textfield-container:focus-within {
278
- border-color: var(--rel-color-text-primary);
279
- box-shadow: 0 0 0 1px var(--rel-color-text-primary);
321
+ border-color: var(--rel-border-strong);
322
+ box-shadow: 0 0 0 1px var(--rel-border-strong);
280
323
  }
281
324
 
282
325
  .textfield-wrapper.error .textfield-container,
283
326
  .textfield-wrapper.error .textfield-container:focus-within {
284
- border-color: var(--rel-error-surface-default);
327
+ border-color: var(--rel-border-danger);
285
328
  box-shadow: none;
286
329
  }
287
330
 
288
331
  .textfield-wrapper.disabled .textfield-container {
289
- border-color: var(--rel-color-border-default);
332
+ border-color: var(--rel-border-default);
290
333
  }
291
334
 
292
335
  .textfield-wrapper.disabled .textfield-label {
293
- color: var(--rel-color-text-disabled);
336
+ color: var(--rel-text-disabled);
294
337
  }
295
338
 
296
339
  /* Supporting text */
297
340
  .textfield-support {
298
- font-size: var(--rel-fontSizes-xs);
299
- color: var(--rel-color-text-placeholder);
341
+ color: var(--rel-text-caption);
342
+
343
+ font-family: var(--rel-body-xs-regular-font-family);
344
+
345
+ font-weight: var(--rel-body-xs-regular-font-weight);
346
+
347
+ font-size: var(--rel-body-xs-regular-font-size);
348
+
349
+ line-height: var(--rel-body-xs-regular-line-height);
350
+
351
+ letter-spacing: var(--rel-body-xs-regular-letter-spacing);
352
+
300
353
  }
301
354
 
302
355
  .textfield-support.error {
303
- color: var(--rel-error-surface-default, #CC0000);
356
+ color: var(--rel-text-danger);
304
357
  }
305
358
 
306
359
  /* Placeholder */
307
360
  .textfield-input::placeholder {
308
- color: var(--rel-color-text-placeholder);
361
+ color: var(--rel-text-placeholder);
309
362
  }
310
363
 
311
364
  :host([floatinglabel]) .textfield-input::placeholder {
@@ -320,34 +373,38 @@ export class RelTextfield extends LitElement {
320
373
  .textfield-input:-webkit-autofill,
321
374
  .textfield-input:-webkit-autofill:hover,
322
375
  .textfield-input:-webkit-autofill:focus {
323
- -webkit-box-shadow: 0 0 0px 1000px var(--rel-color-bg-primary) inset;
324
- -webkit-text-fill-color: var(--rel-color-text-primary);
376
+ -webkit-box-shadow: 0 0 0px 1000px var(--rel-bg-surface) inset;
377
+ -webkit-text-fill-color: var(--rel-text-default);
325
378
  }
326
379
 
327
380
  /* ── Underline variant ── */
328
381
  :host([variant="underline"]) .textfield-container {
329
382
  border: none;
330
- border-bottom: 2px solid var(--rel-color-border-default);
383
+ border-bottom: 2px solid var(--rel-border-default);
331
384
  border-radius: 0;
332
- background: var(--rel-color-bg-tertiary, #f5f5f5);
385
+ background: var(--rel-bg-neutral-elevated-1);
333
386
  box-shadow: none;
334
387
  overflow: visible;
335
388
  }
336
389
 
390
+ :host([variant="underline"]) .textfield-wrapper:not(.focused):not(.error):not(.disabled) .textfield-container:hover {
391
+ border-bottom-color: var(--rel-border-strong);
392
+ }
393
+
337
394
  :host([variant="underline"]) .textfield-wrapper.focused .textfield-container,
338
395
  :host([variant="underline"]) .textfield-container:focus-within {
339
- border-bottom: 2px solid var(--rel-color-text-primary);
396
+ border-bottom: 2px solid var(--rel-text-default);
340
397
  box-shadow: none;
341
398
  }
342
399
 
343
400
  :host([variant="underline"]) .textfield-wrapper.error .textfield-container {
344
- border-bottom: 2px solid var(--rel-error-surface-default, #CC0000);
401
+ border-bottom: 2px solid var(--rel-border-danger);
345
402
  box-shadow: none;
346
403
  }
347
404
 
348
405
  :host([variant="underline"]) .textfield-wrapper.disabled .textfield-container {
349
- border-bottom: 2px solid var(--rel-color-border-default);
350
- background: var(--rel-color-bg-tertiary);
406
+ border-bottom: 2px solid var(--rel-border-default);
407
+ background: var(--rel-bg-neutral-elevated-1);
351
408
  }
352
409
 
353
410
  /* Remove border radius on input for underline variant */
@@ -358,8 +415,8 @@ export class RelTextfield extends LitElement {
358
415
  /* Dark mode — underline variant uses same border colors as default */
359
416
  :host-context([data-theme="dark"]) :host([variant="underline"]) .textfield-container,
360
417
  :host-context(.dark) :host([variant="underline"]) .textfield-container {
361
- background: var(--rel-color-bg-tertiary);
362
- border-bottom-color: var(--rel-color-border-default);
418
+ background: var(--rel-bg-neutral-elevated-1);
419
+ border-bottom-color: var(--rel-border-default);
363
420
  }
364
421
 
365
422
  /* ── Full-width control (fullWidth defaults true → block, fills parent) ── */
@@ -379,19 +436,21 @@ export class RelTextfield extends LitElement {
379
436
  margin: 0;
380
437
  min-inline-size: 0;
381
438
  padding: 0;
382
- border: 1px solid var(--rel-color-border-default);
383
- border-radius: var(--rel-borders-radius-border-radius-100);
384
- background: var(--rel-color-bg-primary);
439
+ border: 1px solid var(--rel-border-default);
440
+ border-radius: var(--rel-border-radius-xs);
441
+ background: var(--rel-bg-neutral);
385
442
  transition: border-color 0.2s;
386
443
  }
387
444
 
388
445
  :host([variant="legend"]) .field-legend {
389
- margin-left: var(--rel-spacing-space-sm);
390
- padding: 0 var(--rel-spacing-space-2xs);
391
- font-size: var(--rel-fontSizes-sm);
392
- font-weight: var(--rel-fontWeights-medium);
393
- line-height: 1;
394
- color: var(--rel-color-text-heading);
446
+ margin-left: var(--rel-spacing-sm);
447
+ padding: 0 var(--rel-spacing-2xs);
448
+ color: var(--rel-text-label);
449
+ font-family: var(--rel-body-sm-medium-font-family);
450
+ font-weight: var(--rel-body-sm-medium-font-weight);
451
+ font-size: var(--rel-body-sm-medium-font-size);
452
+ line-height: var(--rel-body-sm-medium-line-height);
453
+ letter-spacing: var(--rel-body-sm-medium-letter-spacing);
395
454
  }
396
455
 
397
456
  :host([variant="legend"]) .textfield-input {
@@ -402,17 +461,18 @@ export class RelTextfield extends LitElement {
402
461
  /* Prefix icon (legend): vertically centered; input inset via has-left-icon */
403
462
  :host([variant="legend"]) .icon.left {
404
463
  top: 50%;
405
- left: var(--rel-spacing-space-sm);
464
+ left: var(--rel-spacing-sm);
406
465
  transform: translateY(-50%);
407
466
  }
408
467
  :host([variant="legend"]) .field-fieldset.multiline .icon.left {
409
- top: var(--rel-spacing-space-sm);
468
+ top: var(--rel-spacing-sm);
410
469
  transform: none;
411
470
  }
412
471
 
413
472
  /* Hover */
414
473
  :host([variant="legend"]) .field-fieldset:hover {
415
- border-color: var(--rel-color-text-placeholder);
474
+ border-color: var(--rel-border-accent);
475
+ border-color: var(--rel-text-placeholder);
416
476
  }
417
477
 
418
478
  /* Focus — border-color only. A box-shadow/outline ring hugs the full
@@ -420,31 +480,31 @@ export class RelTextfield extends LitElement {
420
480
  strike through the legend. The legend also recolors on focus (below). */
421
481
  :host([variant="legend"]) .textfield-wrapper.focused .field-fieldset,
422
482
  :host([variant="legend"]) .field-fieldset:focus-within {
423
- border-color: var(--rel-color-border-focus);
483
+ border-color: var(--rel-border-focus);
424
484
  box-shadow: none;
425
485
  }
426
486
  :host([variant="legend"]) .textfield-wrapper.focused .field-legend,
427
487
  :host([variant="legend"]) .field-fieldset:focus-within .field-legend {
428
- color: var(--rel-color-border-focus);
488
+ color: var(--rel-border-focus);
429
489
  }
430
490
 
431
491
  /* Error */
432
492
  :host([variant="legend"]) .textfield-wrapper.error .field-fieldset {
433
- border-color: var(--rel-error-surface-default);
493
+ border-color: var(--rel-border-danger);
434
494
  box-shadow: none;
435
495
  }
436
496
  :host([variant="legend"]) .textfield-wrapper.error .field-legend {
437
- color: var(--rel-error-surface-default);
497
+ color: var(--rel-text-danger);
438
498
  }
439
499
 
440
500
  /* Disabled */
441
501
  :host([variant="legend"]) .textfield-wrapper.disabled .field-fieldset {
442
- background: var(--rel-color-bg-tertiary);
443
- border-color: var(--rel-color-border-default);
502
+ background: var(--rel-bg-neutral-elevated-1);
503
+ border-color: var(--rel-border-default);
444
504
  cursor: not-allowed;
445
505
  }
446
506
  :host([variant="legend"]) .textfield-wrapper.disabled .field-legend {
447
- color: var(--rel-color-text-disabled);
507
+ color: var(--rel-text-disabled);
448
508
  }
449
509
 
450
510
  /* Readonly */
@@ -454,10 +514,30 @@ export class RelTextfield extends LitElement {
454
514
 
455
515
  /* Legend font tracks size */
456
516
  :host([variant="legend"]) .textfield-wrapper.small .field-legend {
457
- font-size: var(--rel-fontSizes-xs);
517
+
518
+ font-family: var(--rel-body-xs-regular-font-family);
519
+
520
+ font-weight: var(--rel-body-xs-regular-font-weight);
521
+
522
+ font-size: var(--rel-body-xs-regular-font-size);
523
+
524
+ line-height: var(--rel-body-xs-regular-line-height);
525
+
526
+ letter-spacing: var(--rel-body-xs-regular-letter-spacing);
527
+
458
528
  }
459
529
  :host([variant="legend"]) .textfield-wrapper.large .field-legend {
460
- font-size: var(--rel-fontSizes-md);
530
+
531
+ font-family: var(--rel-body-md-regular-font-family);
532
+
533
+ font-weight: var(--rel-body-md-regular-font-weight);
534
+
535
+ font-size: var(--rel-body-md-regular-font-size);
536
+
537
+ line-height: var(--rel-body-md-regular-line-height);
538
+
539
+ letter-spacing: var(--rel-body-md-regular-letter-spacing);
540
+
461
541
  }
462
542
  `;
463
543
 
@@ -532,6 +612,7 @@ export class RelTextfield extends LitElement {
532
612
  const labelTemplate = (extraClass = "") => {
533
613
  if (!this.label) return "";
534
614
  return html`<label
615
+ part="label"
535
616
  class="textfield-label${extraClass}"
536
617
  for="${inputId}"
537
618
  >${this.label}${this.required ? html`<span class="required-mark" aria-hidden="true">*</span>` : ""}</label>`;
@@ -540,7 +621,7 @@ export class RelTextfield extends LitElement {
540
621
  const ariaLabelledby = this.variant === "legend" && this.label ? legendId : undefined;
541
622
 
542
623
  const inputTemplate = this.multiline
543
- ? html`<textarea
624
+ ? html`<textarea part="input"
544
625
  id="${inputId}"
545
626
  class="${inputClasses}"
546
627
  placeholder="${this.placeholder}"
@@ -559,7 +640,7 @@ export class RelTextfield extends LitElement {
559
640
  @blur="${this.handleBlur}"
560
641
  @input="${this.handleInput}"
561
642
  ></textarea>`
562
- : html`<input
643
+ : html`<input part="input"
563
644
  type="${this.type}"
564
645
  id="${inputId}"
565
646
  class="${inputClasses}"
@@ -591,7 +672,7 @@ export class RelTextfield extends LitElement {
591
672
  : "";
592
673
 
593
674
  const belowTemplate = belowText
594
- ? html`<div class="textfield-support ${isError ? "error" : ""}" id="${describedById}">
675
+ ? html`<div part="helper" class="textfield-support ${isError ? "error" : ""}" id="${describedById}">
595
676
  ${belowText}
596
677
  </div>`
597
678
  : "";
@@ -604,7 +685,7 @@ export class RelTextfield extends LitElement {
604
685
  // is always present (only its content is dynamic).
605
686
  return html`
606
687
  <div class="${wrapperClasses}">
607
- <fieldset class="${fieldsetClass}"><legend class="field-legend" id="${legendId}">${this.label ?? ""}${this.required ? html`<span class="required-mark" aria-hidden="true">*</span>` : ""}</legend>
688
+ <fieldset part="control" class="${fieldsetClass}"><legend class="field-legend" id="${legendId}">${this.label ?? ""}${this.required ? html`<span class="required-mark" aria-hidden="true">*</span>` : ""}</legend>
608
689
  ${!this.multiline ? leadingIconTemplate : ""}
609
690
  ${inputTemplate}
610
691
  </fieldset>
@@ -617,7 +698,7 @@ export class RelTextfield extends LitElement {
617
698
  <div class="${wrapperClasses}">
618
699
  ${!this.floatingLabel ? labelTemplate() : ""}
619
700
 
620
- <div class="${["textfield-container", this.isDisabled ? "disabled" : "", this.multiline ? "multiline" : ""].filter(Boolean).join(" ")}">
701
+ <div part="control" class="${["textfield-container", this.isDisabled ? "disabled" : "", this.multiline ? "multiline" : ""].filter(Boolean).join(" ")}">
621
702
  ${this.floatingLabel
622
703
  ? labelTemplate(leadingIcon && !this.multiline ? " has-left-icon" : "")
623
704
  : ""}
@@ -98,25 +98,25 @@ None exposed.
98
98
  ## Tokens / CSS Variables
99
99
 
100
100
  ### Semantic Tokens
101
- - `--rel-fontFamilies-primary` - Font family
102
- - `--rel-fontSizes-md` - Font size
101
+ - `--rel-fonts-font-family` - Font family
102
+ - `--rel-body-md-regular-font-size` - Font size
103
103
 
104
104
  ### Spacing Tokens
105
- - `--rel-spacing-space-sm` - Gap between elements
106
- - `--rel-spacing-space-md` - Padding
107
- - `--rel-spacing-space-2xs` - Close button padding and margin
105
+ - `--rel-spacing-sm` - Gap between elements
106
+ - `--rel-spacing-md` - Padding
107
+ - `--rel-spacing-2xs` - Close button padding and margin
108
108
 
109
109
  ### Color Tokens
110
- - `--rel-surface-toast` - Default background color (dark gray)
111
- - `--rel-colors-red-secondary` - Error background color
112
- - `--rel-colors-white` - Text and focus outline color
113
- - `--rel-colors-green-primary` - Action button text color
110
+ - `--rel-bg-neutral-inverse-1` - Default background color (dark gray)
111
+ - `--rel-text-danger` - Error background color
112
+ - `--rel-bg-surface` - Text and focus outline color
113
+ - `--rel-bg-brand` - Action button text color
114
114
 
115
115
  ### Shadow Tokens
116
116
  - `--rel-shadows-shadow-300` - Drop shadow
117
117
 
118
118
  ### Border Tokens
119
- - `--rel-borders-radius-border-radius-200` - Border radius
119
+ - `--rel-border-radius-sm` - Border radius
120
120
 
121
121
  ## Accessibility
122
122
  - Uses `role="status"` and `aria-live="polite"` for screen reader announcements
@@ -144,5 +144,5 @@ None exposed.
144
144
  - The component includes a `fadeInUp` animation (20px translateY → 0, opacity 0 → 1) on appearance
145
145
  - Animation disabled when `prefers-reduced-motion: reduce` is set
146
146
  - When `visible` is false, `hidden` class applies `display: none`
147
- - **Type variants**: `default` uses `--rel-surface-toast`, `error` uses `--rel-colors-red-secondary`
147
+ - **Type variants**: `default` uses `--rel-bg-neutral-inverse-1`, `error` uses `--rel-text-danger`
148
148
  - The toast appears inline-flex, so it sizes to content width