@reliability-design/web 1.3.0 → 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 +161 -159
  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 +69 -17
  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 +327 -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 +257 -83
  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 +73 -23
  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 +718 -397
  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 +5 -2
  103. package/dist/components/rel-topbar/rel-topbar-brand.ts +12 -5
  104. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +14 -8
  105. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +8 -5
  106. package/dist/components/rel-topbar/rel-topbar-item.ts +27 -22
  107. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +4 -1
  108. package/dist/components/rel-topbar/rel-topbar-profile.ts +71 -50
  109. package/dist/components/rel-topbar/rel-topbar-utilities.ts +5 -2
  110. package/dist/components/rel-topbar/rel-topbar.ts +37 -29
  111. package/dist/index.d.mts +227 -40
  112. package/dist/index.d.ts +227 -40
  113. package/dist/index.js +3930 -2247
  114. package/dist/index.js.map +1 -1
  115. package/dist/index.mjs +4311 -2629
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/styles/vars.css +653 -346
  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-I2PC74XD.css +0 -346
  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
 
5
4
  interface CalendarDay {
6
5
  date: Date;
@@ -9,6 +8,7 @@ interface CalendarDay {
9
8
  isToday: boolean;
10
9
  isSelected: boolean;
11
10
  isDisabled: boolean;
11
+ isWeekend: boolean;
12
12
  }
13
13
 
14
14
  @customElement("rel-calendar")
@@ -30,13 +30,13 @@ export class RelCalendar extends LitElement {
30
30
  static styles = css`
31
31
  :host {
32
32
  display: block;
33
- font-family: var(--rel-fontFamilies-primary, sans-serif);
34
- background: var(--rel-colors-white, #fff);
35
- border: 1px solid var(--rel-border-default, #ddd);
36
- border-radius: var(--rel-borders-radius-border-radius-200, 8px);
37
- padding: var(--rel-spacing-space-md, 16px);
33
+ font-family: var(--rel-fonts-font-family, sans-serif);
34
+ background: var(--rel-bg-neutral);
35
+ border: 1px solid var(--rel-border-default);
36
+ border-radius: var(--rel-border-radius-sm, 8px);
37
+ padding: var(--rel-spacing-md, 16px);
38
38
  max-width: 320px;
39
- color: var(--rel-text-primary, #333);
39
+ color: var(--rel-text-default);
40
40
  }
41
41
 
42
42
  :host([disabled]) {
@@ -48,16 +48,19 @@ export class RelCalendar extends LitElement {
48
48
  display: flex;
49
49
  align-items: center;
50
50
  justify-content: space-between;
51
- margin-bottom: var(--rel-spacing-space-md);
51
+ margin-bottom: var(--rel-spacing-sm);
52
52
  }
53
53
 
54
54
  .header-center {
55
55
  display: flex;
56
56
  align-items: center;
57
- gap: var(--rel-spacing-space-xs);
58
- font-size: var(--rel-fontSizes-md);
59
- font-weight: var(--rel-fontWeights-semibold);
60
- color: var(--rel-text-heading);
57
+ gap: var(--rel-spacing-xs);
58
+ color: var(--rel-text-label);
59
+ font-family: var(--rel-body-lg-semibold-font-family);
60
+ font-weight: var(--rel-body-lg-semibold-font-weight);
61
+ font-size: var(--rel-body-lg-regular-font-size);
62
+ line-height: var(--rel-body-lg-regular-line-height);
63
+ letter-spacing: var(--rel-body-lg-regular-letter-spacing);
61
64
  }
62
65
 
63
66
  .nav-button {
@@ -65,75 +68,85 @@ export class RelCalendar extends LitElement {
65
68
  border: none;
66
69
  width: 32px;
67
70
  height: 32px;
68
- border-radius: var(--rel-borders-radius-border-radius-200);
71
+ border-radius: var(--rel-border-radius-sm);
69
72
  display: flex;
70
73
  align-items: center;
71
74
  justify-content: center;
72
75
  cursor: pointer;
73
- color: var(--rel-color-text-primary);
76
+ color: var(--rel-action-neutral-label-icons-ghost);
74
77
  transition: background-color 0.15s ease;
75
78
  }
76
79
 
77
80
  .nav-button:hover {
78
- background: var(--rel-color-bg-secondary);
81
+ background: var(--rel-bg-neutral-elevated-2);
79
82
  }
80
83
 
81
84
  .nav-button:focus-visible {
82
- outline: 2px solid var(--rel-color-border-focus);
85
+ outline: 2px solid var(--rel-border-focus);
83
86
  outline-offset: 2px;
84
87
  }
85
88
 
86
89
  .calendar-grid {
87
90
  display: grid;
88
91
  grid-template-columns: repeat(7, 1fr);
89
- gap: var(--rel-spacing-space-3xs);
92
+ gap: var(--rel-spacing-2xs);
90
93
  }
91
94
 
92
95
  .weekday {
93
96
  text-align: center;
94
- font-size: var(--rel-fontSizes-xs);
95
- font-weight: var(--rel-fontWeights-semibold);
96
- color: var(--rel-gray-text-placeholder);
97
- padding: var(--rel-spacing-space-xs);
97
+ color: var(--rel-text-placeholder);
98
+ padding: var(--rel-spacing-xs);
98
99
  text-transform: uppercase;
100
+ font-family: var(--rel-body-sm-regular-font-family);
101
+ font-weight: var(--rel-body-xs-medium-font-weight);
102
+ font-size: var(--rel-body-sm-medium-font-size);
103
+ line-height: var(--rel-body-sm-medium-line-height);
104
+ letter-spacing: var(--rel-body-sm-medium-letter-spacing);
99
105
  }
100
106
 
101
107
  .day-button {
102
108
  aspect-ratio: 1;
103
109
  border: none;
104
110
  background: transparent;
105
- border-radius: var(--rel-borders-radius-border-radius-200);
106
- font-size: var(--rel-fontSizes-sm);
107
- font-weight: var(--rel-fontWeights-medium);
108
- color: var(--rel-text-primary);
111
+ border-radius: var(--rel-border-radius-sm);
112
+ color: var(--rel-text-default);
109
113
  cursor: pointer;
110
114
  position: relative;
111
115
  transition: all 0.15s ease;
112
- font-family: var(--rel-fontFamilies-primary);
116
+ font-family: var(--rel-body-md-regular-font-family);
117
+ font-weight: var(--rel-body-md-regular-font-weight);
118
+ font-size: var(--rel-body-md-regular-font-size);
119
+ line-height: var(--rel-body-md-regular-line-height);
120
+ letter-spacing: var(--rel-body-md-regular-letter-spacing);
113
121
  }
114
122
 
115
123
  .day-button:hover:not(:disabled):not(.selected) {
116
- background: var(--rel-surface-secondary);
124
+ background: var(--rel-bg-neutral-elevated-1);
125
+ }
126
+
127
+ /* Weekend (Figma Day of a week=Weekend): same color at 70% — full opacity when selected */
128
+ .day-button.weekend:not(.selected) {
129
+ opacity: 0.7;
117
130
  }
118
131
 
119
132
  .day-button:focus-visible {
120
- outline: 2px solid var(--rel-color-border-focus);
133
+ outline: 2px solid var(--rel-border-focus);
121
134
  outline-offset: -2px;
122
135
  z-index: 1;
123
136
  }
124
137
 
125
138
  .day-button.today:not(.selected) {
126
- border: 2px solid var(--rel-color-brand);
139
+ border: 2px solid var(--rel-border-brand);
127
140
  }
128
141
 
129
142
  .day-button.selected {
130
- background: var(--rel-color-brand);
131
- color: #000000;
132
- font-weight: var(--rel-fontWeights-semibold);
143
+ background: var(--rel-bg-neutral-inverse-2);
144
+ color: var(--rel-text-inverse);
145
+ font-weight: var(--rel-body-md-semibold-font-weight);
133
146
  }
134
147
 
135
148
  .day-button.other-month {
136
- color: var(--rel-gray-text-placeholder);
149
+ color: var(--rel-text-placeholder);
137
150
  opacity: 0.5;
138
151
  }
139
152
 
@@ -149,8 +162,8 @@ export class RelCalendar extends LitElement {
149
162
 
150
163
  :host-context([data-theme="dark"]) :host,
151
164
  :host-context(.dark) :host {
152
- background: var(--rel-color-bg-primary);
153
- border-color: var(--rel-color-border-default);
165
+ background: var(--rel-bg-neutral);
166
+ border-color: var(--rel-border-default);
154
167
  }
155
168
  `;
156
169
 
@@ -239,6 +252,7 @@ export class RelCalendar extends LitElement {
239
252
  isToday: this.isSameDay(date, today),
240
253
  isSelected: selectedDate ? this.isSameDay(date, selectedDate) : false,
241
254
  isDisabled: this.isDateDisabledInternal(date),
255
+ isWeekend: date.getDay() === 0 || date.getDay() === 6,
242
256
  });
243
257
  }
244
258
 
@@ -252,6 +266,7 @@ export class RelCalendar extends LitElement {
252
266
  isToday: this.isSameDay(date, today),
253
267
  isSelected: selectedDate ? this.isSameDay(date, selectedDate) : false,
254
268
  isDisabled: this.isDateDisabledInternal(date),
269
+ isWeekend: date.getDay() === 0 || date.getDay() === 6,
255
270
  });
256
271
  }
257
272
 
@@ -266,6 +281,7 @@ export class RelCalendar extends LitElement {
266
281
  isToday: this.isSameDay(date, today),
267
282
  isSelected: selectedDate ? this.isSameDay(date, selectedDate) : false,
268
283
  isDisabled: this.isDateDisabledInternal(date),
284
+ isWeekend: date.getDay() === 0 || date.getDay() === 6,
269
285
  });
270
286
  }
271
287
 
@@ -409,9 +425,9 @@ export class RelCalendar extends LitElement {
409
425
 
410
426
  return html`
411
427
  <div role="grid" aria-label="Calendar">
412
- <div class="header">
428
+ <div part="header" class="header">
413
429
  <button
414
- class="nav-button"
430
+ part="action" class="nav-button"
415
431
  @click=${this.previousMonth}
416
432
  aria-label="Previous month"
417
433
  ?disabled=${this.disabled}
@@ -421,13 +437,13 @@ export class RelCalendar extends LitElement {
421
437
  </svg>
422
438
  </button>
423
439
 
424
- <div class="header-center">
440
+ <div part="label" class="header-center">
425
441
  <span>${this.getMonthName()}</span>
426
442
  <span>${this.viewYear}</span>
427
443
  </div>
428
444
 
429
445
  <button
430
- class="nav-button"
446
+ part="action" class="nav-button"
431
447
  @click=${this.nextMonth}
432
448
  aria-label="Next month"
433
449
  ?disabled=${this.disabled}
@@ -438,27 +454,27 @@ export class RelCalendar extends LitElement {
438
454
  </button>
439
455
  </div>
440
456
 
441
- <div class="calendar-grid" role="row">
457
+ <div part="list" class="calendar-grid" role="row">
442
458
  ${weekdayLabels.map(
443
459
  (label) => html`
444
- <div class="weekday" role="columnheader" aria-label="${label}">
460
+ <div part="label" class="weekday" role="columnheader" aria-label="${label}">
445
461
  ${label}
446
462
  </div>
447
463
  `
448
464
  )}
449
465
  </div>
450
466
 
451
- <div class="calendar-grid">
467
+ <div part="list" class="calendar-grid">
452
468
  ${days.map(
453
469
  (day, index) => html`
454
470
  <button
455
- class="day-button ${day.isSelected ? "selected" : ""} ${day.isToday
471
+ part="item" class="day-button ${day.isSelected ? "selected" : ""} ${day.isToday
456
472
  ? "today"
457
- : ""} ${!day.isCurrentMonth ? "other-month" : ""}"
473
+ : ""} ${!day.isCurrentMonth ? "other-month" : ""} ${day.isWeekend ? "weekend" : ""}"
458
474
  role="gridcell"
459
475
  aria-label="${this.formatISODate(day.date)}"
460
476
  aria-selected="${day.isSelected}"
461
- ?disabled=${day.isDisabled || (!day.isCurrentMonth && day.isDisabled)}
477
+ ?disabled=${day.isDisabled}
462
478
  @click=${() => this.selectDay(day)}
463
479
  @keydown=${(e: KeyboardEvent) => this.handleKeyDown(e, day, index)}
464
480
  tabindex="${day.isSelected || (index === 0 && !this.focusedDate) ? 0 : -1}"
@@ -55,21 +55,21 @@ None exposed.
55
55
  ## Tokens / CSS Variables
56
56
 
57
57
  ### Semantic Tokens
58
- - `--rel-fontFamilies-primary` - Font family
58
+ - `--rel-fonts-font-family` - Font family
59
59
 
60
60
  ### Color Tokens
61
- - `--rel-colors-white` - Card background color
62
- - `--rel-text-primary` - Text color
61
+ - `--rel-bg-surface` - Card background color
62
+ - `--rel-text-default` - Text color
63
63
 
64
64
  ### Shadow Tokens
65
65
  - `--rel-shadows-shadow-200` - Default elevation shadow
66
66
  - `--rel-shadows-shadow-300` - Hover elevation shadow (larger)
67
67
 
68
68
  ### Border Tokens
69
- - `--rel-borders-radius-border-radius-300` - Card border radius
69
+ - `--rel-border-radius-md` - Card border radius
70
70
 
71
71
  ### Spacing Tokens
72
- - `--rel-spacing-space-md` - Internal padding
72
+ - `--rel-spacing-md` - Internal padding
73
73
 
74
74
  ## Accessibility
75
75
  - The card itself has no specific ARIA role (it's a generic container)
@@ -88,7 +88,7 @@ None exposed.
88
88
  - **Hover effect**: Translates the card upward by 3px (`translateY(-3px)`) and increases shadow depth
89
89
  - **Animation**: Uses `transition: transform 0.2s ease, box-shadow 0.2s ease`
90
90
  - **Motion preferences**: When `prefers-reduced-motion: reduce`, both hover transform and transitions are disabled
91
- - The card has consistent padding on all sides via `--rel-spacing-space-md`
91
+ - The card has consistent padding on all sides via `--rel-spacing-md`
92
92
  - The internal `.card` wrapper is where all styling is applied
93
93
  - The component provides no default content styling—you control the layout of slotted elements
94
94
  - Works well with CSS Grid or Flexbox for creating card layouts
@@ -1,35 +1,88 @@
1
- import { LitElement, html, css } from "lit";
2
- import { customElement } from "lit/decorators.js";
3
- import "../../styles/vars-v2.css";
4
-
5
- @customElement("rel-card")
6
- export class RelCard extends LitElement {
7
- static styles = css`
8
- :host {
9
- display: block;
10
- font-family: var(--rel-fontFamilies-primary, sans-serif);
11
- }
12
-
13
- .card {
14
- background-color: var(--rel-color-bg-primary);
15
- color: var(--rel-color-text-primary);
16
- border-radius: var(--rel-borders-radius-border-radius-200);
17
- border: 1px solid var(--rel-color-border-default);
18
- padding: var(--rel-spacing-space-md);
19
- }
20
-
21
- :host-context([data-theme="dark"]) .card,
22
- :host-context(.dark) .card {
23
- background-color: var(--rel-color-bg-primary);
24
- border-color: var(--rel-color-border-default);
25
- }
26
- `;
27
-
28
- render() {
29
- return html`
30
- <div class="card">
31
- <slot></slot>
32
- </div>
33
- `;
34
- }
35
- }
1
+ import { LitElement, html, css, nothing } from "lit";
2
+ import { customElement, property } from "lit/decorators.js";
3
+
4
+ @customElement("rel-card")
5
+ export class RelCard extends LitElement {
6
+ /**
7
+ * Figma "Type" axis: custom (default) renders slotted content with card
8
+ * padding; media adds a flush media region (slot name="media") above the
9
+ * content — pair it with <rel-card-media>.
10
+ */
11
+ @property({ type: String, reflect: true })
12
+ type: "custom" | "media" = "custom";
13
+
14
+ static styles = css`
15
+ :host {
16
+ color: var(--rel-text-default);
17
+ display: block;
18
+ font-family: var(--rel-body-lg-regular-font-family);
19
+ }
20
+
21
+ /* Default typography for slotted card content (Figma card roles) */
22
+ ::slotted(h1), ::slotted(h2), ::slotted(h3), ::slotted(h4) {
23
+ font-family: var(--rel-headings-md-font-family);
24
+ font-weight: var(--rel-headings-md-font-weight);
25
+ font-size: var(--rel-headings-md-font-size);
26
+ line-height: var(--rel-headings-md-line-height);
27
+ letter-spacing: var(--rel-headings-md-letter-spacing);
28
+ color: var(--rel-text-default);
29
+ margin: 0 0 var(--rel-spacing-2xs) 0;
30
+ }
31
+
32
+ ::slotted(p) {
33
+ font-family: var(--rel-body-lg-regular-font-family);
34
+ font-weight: var(--rel-body-lg-regular-font-weight);
35
+ font-size: var(--rel-body-lg-regular-font-size);
36
+ line-height: var(--rel-body-lg-regular-line-height);
37
+ letter-spacing: var(--rel-body-lg-regular-letter-spacing);
38
+ color: var(--rel-text-body);
39
+ margin: 0 0 var(--rel-spacing-xs) 0;
40
+ }
41
+
42
+ .card {
43
+ background-color: var(--rel-bg-surface);
44
+ color: var(--rel-text-default);
45
+ border-radius: var(--rel-border-radius-sm);
46
+ border: 1px solid var(--rel-border-default);
47
+ padding: var(--rel-spacing-lg) var(--rel-spacing-md);
48
+ }
49
+
50
+ /* Media type: media sits flush against the card edges, content keeps padding */
51
+ :host([type="media"]) .card {
52
+ padding: 0;
53
+ overflow: hidden;
54
+ }
55
+
56
+ .media {
57
+ display: block;
58
+ }
59
+
60
+ .media ::slotted(*) {
61
+ display: block;
62
+ width: 100%;
63
+ }
64
+
65
+ :host([type="media"]) .content {
66
+ padding: var(--rel-spacing-lg) var(--rel-spacing-md);
67
+ }
68
+
69
+ :host-context([data-theme="dark"]) .card,
70
+ :host-context(.dark) .card {
71
+ background-color: var(--rel-bg-surface);
72
+ border-color: var(--rel-border-default);
73
+ }
74
+ `;
75
+
76
+ render() {
77
+ return html`
78
+ <div part="base" class="card">
79
+ ${this.type === "media"
80
+ ? html`<div part="header" class="media"><slot name="media"></slot></div>`
81
+ : nothing}
82
+ <div part="content" class="content">
83
+ <slot></slot>
84
+ </div>
85
+ </div>
86
+ `;
87
+ }
88
+ }
@@ -79,25 +79,25 @@ None exposed.
79
79
  ## Tokens / CSS Variables
80
80
 
81
81
  ### Semantic Tokens
82
- - `--rel-fontFamilies-primary` - Font family
83
- - `--rel-fontSizes-md` - Title font size
84
- - `--rel-fontSizes-sm` - Subtitle font size
85
- - `--rel-fontWeights-semibold` - Title font weight
82
+ - `--rel-fonts-font-family` - Font family
83
+ - `--rel-body-md-regular-font-size` - Title font size
84
+ - `--rel-body-sm-regular-font-size` - Subtitle font size
85
+ - `--rel-fonts-weight-body-semibold` - Title font weight
86
86
 
87
87
  ### Color Tokens
88
- - `--rel-colors-white` - Card background color
89
- - `--rel-text-primary` - General text color
90
- - `--rel-text-heading` - Title color
88
+ - `--rel-bg-surface` - Card background color
89
+ - `--rel-text-default` - General text color
90
+ - `--rel-text-label` - Title color
91
91
 
92
92
  ### Shadow Tokens
93
93
  - `--rel-shadows-shadow-200` - Default elevation shadow
94
94
  - `--rel-shadows-shadow-300` - Hover elevation shadow (larger)
95
95
 
96
96
  ### Border Tokens
97
- - `--rel-borders-radius-border-radius-300` - Card border radius
97
+ - `--rel-border-radius-md` - Card border radius
98
98
 
99
99
  ### Spacing Tokens
100
- - `--rel-spacing-space-md` - Content area padding
100
+ - `--rel-spacing-md` - Content area padding
101
101
 
102
102
  ## Accessibility
103
103
  - Image has `alt` attribute for screen reader support
@@ -1,6 +1,5 @@
1
1
  import { LitElement, html, css } from "lit";
2
2
  import { customElement, property } from "lit/decorators.js";
3
- import "../../styles/vars-v2.css";
4
3
 
5
4
  @customElement("rel-card-media")
6
5
  export class RelCardMedia extends LitElement {
@@ -11,15 +10,16 @@ export class RelCardMedia extends LitElement {
11
10
 
12
11
  static styles = css`
13
12
  :host {
13
+ color: var(--rel-text-default);
14
14
  display: block;
15
- font-family: var(--rel-fontFamilies-primary, sans-serif);
15
+ font-family: var(--rel-fonts-font-family, sans-serif);
16
16
  }
17
17
 
18
18
  .card-media {
19
- background-color: var(--rel-color-bg-primary);
20
- color: var(--rel-color-text-primary);
21
- border-radius: var(--rel-borders-radius-border-radius-200);
22
- border: 1px solid var(--rel-color-border-default);
19
+ background-color: var(--rel-bg-surface);
20
+ color: var(--rel-text-default);
21
+ border-radius: var(--rel-border-radius-sm);
22
+ border: 1px solid var(--rel-border-default);
23
23
  overflow: hidden;
24
24
  }
25
25
 
@@ -31,46 +31,53 @@ export class RelCardMedia extends LitElement {
31
31
  }
32
32
 
33
33
  .card-content {
34
- padding: var(--rel-spacing-space-md);
34
+ padding: var(--rel-spacing-md);
35
35
  }
36
36
 
37
37
  .card-content h3 {
38
- margin: 0 0 4px 0;
39
- font-size: var(--rel-fontSizes-md);
40
- font-weight: var(--rel-fontWeights-semibold);
41
- color: var(--rel-color-text-heading);
38
+ margin: 0 0 4px 0;
39
+ color: var(--rel-text-label);
40
+ font-family: var(--rel-body-md-semibold-font-family);
41
+ font-weight: var(--rel-body-md-semibold-font-weight);
42
+ font-size: var(--rel-body-md-semibold-font-size);
43
+ line-height: var(--rel-body-md-semibold-line-height);
44
+ letter-spacing: var(--rel-body-md-semibold-letter-spacing);
42
45
  }
43
46
 
44
47
  .card-content p {
45
- margin: 0 0 8px 0;
46
- font-size: var(--rel-fontSizes-sm);
47
- color: var(--rel-color-text-primary);
48
+ margin: 0 0 8px 0;
49
+ color: var(--rel-text-default);
50
+ font-family: var(--rel-body-sm-regular-font-family);
51
+ font-weight: var(--rel-body-sm-regular-font-weight);
52
+ font-size: var(--rel-body-sm-regular-font-size);
53
+ line-height: var(--rel-body-sm-regular-line-height);
54
+ letter-spacing: var(--rel-body-sm-regular-letter-spacing);
48
55
  }
49
56
 
50
57
  :host-context([data-theme="dark"]) .card-media,
51
58
  :host-context(.dark) .card-media {
52
- background-color: var(--rel-color-bg-primary);
53
- border-color: var(--rel-color-border-default);
59
+ background-color: var(--rel-bg-surface);
60
+ border-color: var(--rel-border-default);
54
61
  }
55
62
 
56
63
  :host-context([data-theme="dark"]) .card-content h3,
57
64
  :host-context(.dark) .card-content h3 {
58
- color: var(--rel-color-text-heading);
65
+ color: var(--rel-text-label);
59
66
  }
60
67
  `;
61
68
 
62
69
  render() {
63
70
  return html`
64
- <div class="card-media">
71
+ <div part="base" class="card-media">
65
72
  ${this.imageSrc
66
73
  ? html`
67
- <div class="card-image">
74
+ <div part="icon" class="card-image">
68
75
  <img src=${this.imageSrc} alt=${this.imageAlt} />
69
76
  </div>
70
77
  `
71
78
  : null}
72
79
 
73
- <div class="card-content">
80
+ <div part="content" class="card-content">
74
81
  ${this.title ? html`<h3>${this.title}</h3>` : null}
75
82
  ${this.subtitle ? html`<p>${this.subtitle}</p>` : null}
76
83
  <slot></slot>
@@ -140,12 +140,12 @@ Available parts:
140
140
  The component uses design tokens from the Reliability Design System. All colors, spacing, and typography are inherited from CSS variables.
141
141
 
142
142
  Key tokens used:
143
- - `--rel-colors-*` for colors
143
+ - `--rel-bg-*` / `--rel-text-*` / `--rel-border-*` semantic colors
144
144
  - `--rel-spacing-*` for spacing
145
145
  - `--rel-shadows-*` for shadows
146
146
  - `--rel-border-*` for borders
147
- - Focus outline uses `--rel-colors-blue-primary`
148
- - Active dot uses `--rel-colors-green-primary`
147
+ - Focus outline uses `--rel-bg-info`
148
+ - Active dot uses `--rel-bg-brand`
149
149
 
150
150
  ## Interaction
151
151