@reliability-design/web 1.4.5 → 1.4.7

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 (142) hide show
  1. package/CHANGELOG.md +211 -49
  2. package/dist/components/rel-accordion/README.md +132 -132
  3. package/dist/components/rel-alert/README.md +145 -141
  4. package/dist/components/rel-autocomplete/README.md +156 -61
  5. package/dist/components/rel-avatar/README.md +116 -130
  6. package/dist/components/rel-badge/README.md +98 -93
  7. package/dist/components/rel-breadcrumb/README.md +96 -102
  8. package/dist/components/rel-button/README.md +160 -130
  9. package/dist/components/rel-calendar/README.md +109 -109
  10. package/dist/components/rel-card/README.md +75 -94
  11. package/dist/components/rel-cardmedia/README.md +100 -127
  12. package/dist/components/rel-carousel/README.md +184 -166
  13. package/dist/components/rel-checkbox/README.md +93 -75
  14. package/dist/components/rel-chip/README.md +132 -121
  15. package/dist/components/rel-container/README.md +107 -99
  16. package/dist/components/rel-date-picker/README.md +200 -289
  17. package/dist/components/rel-divider/README.md +78 -100
  18. package/dist/components/rel-drawer/README.md +187 -200
  19. package/dist/components/rel-kbd/README.md +141 -151
  20. package/dist/components/rel-menu/README.md +178 -151
  21. package/dist/components/rel-menubar/README.md +218 -329
  22. package/dist/components/rel-otp/README.md +170 -440
  23. package/dist/components/rel-pagination/README.md +100 -424
  24. package/dist/components/rel-popover/README.md +203 -568
  25. package/dist/components/rel-progress/README.md +88 -110
  26. package/dist/components/rel-radio/README.md +131 -135
  27. package/dist/components/rel-range-picker/README.md +162 -0
  28. package/dist/components/rel-resizable/README.md +199 -140
  29. package/dist/components/rel-segmented-button/README.md +155 -141
  30. package/dist/components/rel-select/README.md +154 -93
  31. package/dist/components/rel-sheet/README.md +168 -224
  32. package/dist/components/rel-skeleton/README.md +103 -0
  33. package/dist/components/rel-slider/README.md +130 -135
  34. package/dist/components/rel-snackbar/README.md +162 -134
  35. package/dist/components/rel-stepper/README.md +158 -160
  36. package/dist/components/rel-switch/README.md +108 -102
  37. package/dist/components/rel-tab/README.md +171 -163
  38. package/dist/components/rel-textfield/README.md +159 -69
  39. package/dist/components/rel-time-picker/README.md +122 -157
  40. package/dist/components/rel-toast/README.md +157 -148
  41. package/dist/components/rel-tooltip/README.md +108 -103
  42. package/dist/components/rel-upload/README.md +220 -0
  43. package/dist/index.d.mts +1387 -350
  44. package/dist/index.d.ts +1387 -350
  45. package/dist/index.js +5863 -3600
  46. package/dist/index.js.map +1 -1
  47. package/dist/index.mjs +5864 -3592
  48. package/dist/index.mjs.map +1 -1
  49. package/dist/styles/vars.css +877 -866
  50. package/dist/{vars-XNMTSRVN.css → vars-JHTUGNRG.css} +877 -866
  51. package/package.json +4 -3
  52. package/dist/components/rel-accordion/rel-accordion.ts +0 -336
  53. package/dist/components/rel-alert/rel-alert.ts +0 -305
  54. package/dist/components/rel-autocomplete/rel-autocomplete.ts +0 -689
  55. package/dist/components/rel-avatar/rel-avatar.ts +0 -142
  56. package/dist/components/rel-badge/rel-badge.ts +0 -170
  57. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +0 -106
  58. package/dist/components/rel-button/rel-button.ts +0 -560
  59. package/dist/components/rel-calendar/index.ts +0 -1
  60. package/dist/components/rel-calendar/rel-calendar.ts +0 -519
  61. package/dist/components/rel-card/rel-card.ts +0 -88
  62. package/dist/components/rel-cardmedia/rel-cardmedia.ts +0 -88
  63. package/dist/components/rel-carousel/index.ts +0 -1
  64. package/dist/components/rel-carousel/rel-carousel.ts +0 -700
  65. package/dist/components/rel-chart/README.md +0 -286
  66. package/dist/components/rel-chart/index.ts +0 -1
  67. package/dist/components/rel-chart/rel-chart.ts +0 -754
  68. package/dist/components/rel-checkbox/rel-checkbox.ts +0 -382
  69. package/dist/components/rel-chip/rel-chip.ts +0 -472
  70. package/dist/components/rel-container/rel-container.ts +0 -95
  71. package/dist/components/rel-date-picker/date-format.test.ts +0 -43
  72. package/dist/components/rel-date-picker/date-format.ts +0 -47
  73. package/dist/components/rel-date-picker/index.ts +0 -1
  74. package/dist/components/rel-date-picker/rel-date-picker.ts +0 -1237
  75. package/dist/components/rel-divider/rel-divider.ts +0 -54
  76. package/dist/components/rel-drawer/index.ts +0 -1
  77. package/dist/components/rel-drawer/rel-drawer-footer.ts +0 -27
  78. package/dist/components/rel-drawer/rel-drawer.ts +0 -604
  79. package/dist/components/rel-kbd/rel-kbd.ts +0 -188
  80. package/dist/components/rel-layout/rel-layout.ts +0 -49
  81. package/dist/components/rel-menu/rel-menu.ts +0 -535
  82. package/dist/components/rel-menubar/index.ts +0 -2
  83. package/dist/components/rel-menubar/rel-menubar-menu.css +0 -3
  84. package/dist/components/rel-menubar/rel-menubar-menu.ts +0 -17
  85. package/dist/components/rel-menubar/rel-menubar.ts +0 -777
  86. package/dist/components/rel-nav-menu/README.md +0 -289
  87. package/dist/components/rel-nav-menu/index.ts +0 -3
  88. package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +0 -243
  89. package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +0 -72
  90. package/dist/components/rel-nav-menu/rel-nav-menu.ts +0 -270
  91. package/dist/components/rel-navbar/README.md +0 -126
  92. package/dist/components/rel-navbar/rel-navbar.ts +0 -105
  93. package/dist/components/rel-otp/index.ts +0 -1
  94. package/dist/components/rel-otp/rel-otp.ts +0 -517
  95. package/dist/components/rel-pagination/index.ts +0 -1
  96. package/dist/components/rel-pagination/rel-pagination.ts +0 -509
  97. package/dist/components/rel-popover/index.ts +0 -2
  98. package/dist/components/rel-popover/rel-popover-content.ts +0 -81
  99. package/dist/components/rel-popover/rel-popover.ts +0 -444
  100. package/dist/components/rel-progress/rel-progress.ts +0 -225
  101. package/dist/components/rel-radio/rel-radio.ts +0 -305
  102. package/dist/components/rel-range-picker/rel-range-picker.ts +0 -1331
  103. package/dist/components/rel-resizable/index.ts +0 -3
  104. package/dist/components/rel-resizable/rel-resizable-group.ts +0 -405
  105. package/dist/components/rel-resizable/rel-resizable-handle.ts +0 -150
  106. package/dist/components/rel-resizable/rel-resizable-panel.ts +0 -58
  107. package/dist/components/rel-segmented-button/rel-segmented-button.ts +0 -213
  108. package/dist/components/rel-select/rel-select.ts +0 -1385
  109. package/dist/components/rel-sheet/rel-sheet.ts +0 -465
  110. package/dist/components/rel-sidebar/README.md +0 -209
  111. package/dist/components/rel-sidebar/rel-sidebar.ts +0 -1185
  112. package/dist/components/rel-skeleton/rel-skeleton.ts +0 -134
  113. package/dist/components/rel-slider/rel-slider.ts +0 -670
  114. package/dist/components/rel-snackbar/rel-snackbar.ts +0 -325
  115. package/dist/components/rel-stepper/rel-stepper.ts +0 -565
  116. package/dist/components/rel-switch/rel-switch.ts +0 -197
  117. package/dist/components/rel-tab/rel-tab.ts +0 -264
  118. package/dist/components/rel-table/README.md +0 -178
  119. package/dist/components/rel-table/rel-table-body.ts +0 -22
  120. package/dist/components/rel-table/rel-table-caption.ts +0 -30
  121. package/dist/components/rel-table/rel-table-cell.ts +0 -43
  122. package/dist/components/rel-table/rel-table-footer.ts +0 -24
  123. package/dist/components/rel-table/rel-table-head.ts +0 -47
  124. package/dist/components/rel-table/rel-table-header.ts +0 -22
  125. package/dist/components/rel-table/rel-table-row.ts +0 -37
  126. package/dist/components/rel-table/rel-table.ts +0 -62
  127. package/dist/components/rel-textfield/rel-textfield.ts +0 -866
  128. package/dist/components/rel-time-picker/rel-time-picker.ts +0 -1126
  129. package/dist/components/rel-toast/rel-toast.ts +0 -204
  130. package/dist/components/rel-tooltip/rel-tooltip.ts +0 -190
  131. package/dist/components/rel-topbar/rel-topbar-actions.ts +0 -27
  132. package/dist/components/rel-topbar/rel-topbar-brand.ts +0 -54
  133. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +0 -69
  134. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +0 -31
  135. package/dist/components/rel-topbar/rel-topbar-item.ts +0 -324
  136. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +0 -27
  137. package/dist/components/rel-topbar/rel-topbar-profile.ts +0 -243
  138. package/dist/components/rel-topbar/rel-topbar-utilities.ts +0 -27
  139. package/dist/components/rel-topbar/rel-topbar.ts +0 -446
  140. package/dist/components/rel-upload/UPLOAD-DESIGN-CHANGES.md +0 -134
  141. package/dist/components/rel-upload/rel-upload-actions.ts +0 -163
  142. package/dist/components/rel-upload/rel-upload.ts +0 -943
@@ -1,324 +0,0 @@
1
- import { LitElement, html, css } from "lit";
2
- import { customElement, property, state } from "lit/decorators.js";
3
- import "./rel-topbar-dropdown";
4
- import "./rel-topbar-dropdown-item";
5
- import "@reliability-design/icons/rel-icon";
6
-
7
- /**
8
- * `rel-topbar-item` — A navigation item within rel-topbar.
9
- *
10
- * @deprecated Part of the deprecated rel-topbar family. Use the "Navbar" recipe at /docs/recipes/navbar, which composes nav links and
11
- * `rel-menu`/`rel-popover` dropdowns directly instead of a dedicated item component.
12
- *
13
- * Renders as an `<a>` when `href` is supplied, otherwise a `<button>`.
14
- *
15
- * Slots:
16
- * (default) — Label text / icon (overrides `label` property)
17
- * prefix — Icon/content before the label
18
- * suffix — Icon/content after the label (e.g. badge)
19
- * dropdown — Expandable panel content shown below the item
20
- *
21
- * Events:
22
- * rel-select — fired when a non-disabled, non-expandable item is activated
23
- * rel-toggle — fired when an expandable item is opened/closed { open: boolean }
24
- */
25
- @customElement("rel-topbar-item")
26
- export class RelTopbarItem extends LitElement {
27
- /** Accessible label — also shown as text when no default slot content */
28
- @property({ type: String }) label?: string;
29
-
30
- /** Navigation href — renders an anchor element when set */
31
- @property({ type: String }) href?: string;
32
-
33
- /** Marks this item as the current/active page */
34
- @property({ type: Boolean, reflect: true }) active = false;
35
-
36
- /** Prevents interaction */
37
- @property({ type: Boolean, reflect: true }) disabled = false;
38
-
39
- /** Shows a chevron and enables dropdown panel */
40
- @property({ type: Boolean, reflect: true }) expandable = false;
41
-
42
- /** Controlled open state of the dropdown panel */
43
- @property({ type: Boolean, reflect: true }) open = false;
44
-
45
- /** Optional string value forwarded in rel-select / rel-toggle events */
46
- @property({ type: String }) value?: string;
47
-
48
- /** @internal tracks whether dropdown slot has content */
49
- @state() private _hasDropdown = false;
50
-
51
- static styles = css`
52
- /* ─── Component tokens ──────────────────────────────────────────── */
53
- :host {
54
- color: var(--rel-text-default);
55
- --_item-color: var(--rel-topbar-item-color, var(--rel-text-default));
56
- --_item-active-color: var(--rel-topbar-item-active-color, var(--rel-text-success));
57
- --_item-active-indicator: var(--rel-topbar-item-active-indicator, var(--rel-bg-brand));
58
- --_item-hover-bg: var(--rel-topbar-item-hover-bg, var(--rel-bg-surface-elevated));
59
-
60
- display: inline-block;
61
- position: relative;
62
- font-family: var(--rel-fonts-font-family, Poppins, sans-serif);
63
- }
64
-
65
- :host([hidden]) {
66
- display: none !important;
67
- }
68
-
69
- /* ─── Trigger (shared for <a> and <button>) ─────────────────────── */
70
- .trigger {
71
- display: inline-flex;
72
- align-items: center;
73
- gap: var(--rel-spacing-2xs, 4px);
74
- padding: var(--rel-spacing-xs, 8px) var(--rel-spacing-sm, 12px);
75
- border: none;
76
- background: transparent;
77
- border-radius: var(--rel-border-radius-sm, 8px);
78
- cursor: pointer;
79
- color: var(--_item-color);
80
- text-decoration: none;
81
- white-space: nowrap;
82
- position: relative;
83
- transition: background 0.15s ease, color 0.15s ease;
84
- box-sizing: border-box;
85
- font-family: var(--rel-body-md-medium-font-family);
86
- font-weight: var(--rel-body-md-medium-font-weight);
87
- font-size: var(--rel-body-md-medium-font-size);
88
- line-height: var(--rel-body-md-medium-line-height);
89
- letter-spacing: var(--rel-body-md-medium-letter-spacing);
90
- }
91
-
92
- .trigger::after {
93
- content: "";
94
- position: absolute;
95
- bottom: -2px;
96
- left: var(--rel-spacing-sm, 12px);
97
- right: var(--rel-spacing-sm, 12px);
98
- height: 2px;
99
- border-radius: 1px;
100
- background: transparent;
101
- transition: background 0.15s ease;
102
- }
103
-
104
- /* Active state */
105
- :host([active]) .trigger {
106
- color: var(--_item-active-color);
107
- font-weight: var(--rel-fonts-weight-body-semibold, 600);
108
- }
109
-
110
- :host([active]) .trigger::after {
111
- background: var(--_item-active-indicator);
112
- }
113
-
114
- /* Hover */
115
- .trigger:hover:not(:disabled) {
116
- background: var(--_item-hover-bg);
117
- }
118
-
119
- /* Focus */
120
- .trigger:focus-visible {
121
- outline: 2px solid var(--_item-active-indicator);
122
- outline-offset: 2px;
123
- }
124
-
125
- /* Disabled */
126
- :host([disabled]) {
127
- cursor: not-allowed;
128
- }
129
-
130
- :host([disabled]) .trigger {
131
- opacity: 0.45;
132
- cursor: not-allowed;
133
- pointer-events: none;
134
- }
135
-
136
- /* Open state (expandable) */
137
- :host([open]) .trigger {
138
- background: var(--_item-hover-bg);
139
- }
140
-
141
- /* ─── Prefix / suffix slots ─────────────────────────────────────── */
142
- .prefix,
143
- .suffix {
144
- display: contents;
145
- }
146
-
147
- /* ─── Chevron icon ──────────────────────────────────────────────── */
148
- .chevron {
149
- display: inline-flex;
150
- align-items: center;
151
- flex-shrink: 0;
152
- transition: transform 0.2s ease;
153
- color: inherit;
154
- }
155
-
156
- :host([open]) .chevron {
157
- transform: rotate(180deg);
158
- }
159
-
160
- /* ─── Dropdown panel ────────────────────────────────────────────── */
161
- .dropdown {
162
- position: absolute;
163
- top: calc(100% + 6px);
164
- left: 0;
165
- min-width: 200px;
166
- background: var(--rel-bg-surface);
167
- border: var(--rel-stroke-sm, 1px) solid var(--rel-border-default);
168
- border-radius: var(--rel-border-radius-sm, 8px);
169
- box-shadow: var(--rel-shadows-shadow-300);
170
- padding: var(--rel-spacing-2xs, 4px);
171
- z-index: 200;
172
- display: none;
173
- }
174
-
175
- :host([open]) .dropdown {
176
- display: block;
177
- }
178
- `;
179
-
180
- connectedCallback() {
181
- super.connectedCallback();
182
- document.addEventListener("click", this._handleOutsideClick);
183
- document.addEventListener("keydown", this._handleDocKeydown);
184
- }
185
-
186
- disconnectedCallback() {
187
- super.disconnectedCallback();
188
- document.removeEventListener("click", this._handleOutsideClick);
189
- document.removeEventListener("keydown", this._handleDocKeydown);
190
- }
191
-
192
- private _handleOutsideClick = (e: MouseEvent) => {
193
- if (!this.open) return;
194
- const path = e.composedPath() as Node[];
195
- if (!path.includes(this)) {
196
- this._setOpen(false);
197
- }
198
- };
199
-
200
- private _handleDocKeydown = (e: KeyboardEvent) => {
201
- if (e.key === "Escape" && this.open) {
202
- this._setOpen(false);
203
- (this.shadowRoot?.querySelector(".trigger") as HTMLElement)?.focus();
204
- }
205
- };
206
-
207
- private _setOpen(value: boolean) {
208
- this.open = value;
209
- this.dispatchEvent(
210
- new CustomEvent("rel-toggle", {
211
- detail: { open: this.open, value: this.value },
212
- bubbles: true,
213
- composed: true,
214
- })
215
- );
216
- }
217
-
218
- private _handleTriggerClick(e: MouseEvent) {
219
- if (this.disabled) {
220
- e.preventDefault();
221
- return;
222
- }
223
-
224
- if (this.expandable || this._hasDropdown) {
225
- e.preventDefault();
226
- this._setOpen(!this.open);
227
- return;
228
- }
229
-
230
- if (!this.href) {
231
- e.preventDefault();
232
- }
233
-
234
- this.dispatchEvent(
235
- new CustomEvent("rel-select", {
236
- detail: { value: this.value, label: this.label },
237
- bubbles: true,
238
- composed: true,
239
- })
240
- );
241
-
242
- // Bubble up to topbar
243
- this.dispatchEvent(
244
- new CustomEvent("rel-nav-select", {
245
- detail: { value: this.value, label: this.label },
246
- bubbles: true,
247
- composed: true,
248
- })
249
- );
250
- }
251
-
252
- private _routeSlots(e: Event) {
253
- const slot = e.target as HTMLSlotElement;
254
- for (const el of slot.assignedElements({ flatten: true })) {
255
- const targetSlot = (el as HTMLElement).tagName.toLowerCase() === "rel-topbar-dropdown" ? "dropdown" : "";
256
- if ((el as HTMLElement).slot !== targetSlot) {
257
- (el as HTMLElement).slot = targetSlot;
258
- }
259
- }
260
- }
261
-
262
- private _handleDropdownSlotChange(e: Event) {
263
- const slot = e.target as HTMLSlotElement;
264
- const nodes = slot.assignedElements();
265
- this._hasDropdown = nodes.length > 0;
266
- }
267
-
268
- render() {
269
- const isLink = !!this.href && !this.disabled;
270
- const showChevron = this.expandable || this._hasDropdown;
271
- const ariaCurrent = this.active ? "page" : undefined;
272
- const ariaExpanded = showChevron ? (this.open ? "true" : "false") : undefined;
273
- const ariaHasPopup = showChevron ? "true" : undefined;
274
-
275
- const triggerContent = html`
276
- <span class="prefix"><slot name="prefix"></slot></span>
277
- <slot>${this.label ?? ""}</slot>
278
- <span class="suffix"><slot name="suffix"></slot></span>
279
- ${showChevron
280
- ? html`<span class="chevron" aria-hidden="true">
281
- <rel-icon name="chevron-down" size="sm"></rel-icon>
282
- </span>`
283
- : null}
284
- `;
285
-
286
- const trigger = isLink
287
- ? html`
288
- <a
289
- class="trigger"
290
- href=${this.href!}
291
- aria-current=${ariaCurrent as string}
292
- aria-expanded=${ariaExpanded as string}
293
- aria-haspopup=${ariaHasPopup as string}
294
- @click=${this._handleTriggerClick}
295
- >
296
- ${triggerContent}
297
- </a>
298
- `
299
- : html`
300
- <button
301
- class="trigger"
302
- type="button"
303
- ?disabled=${this.disabled}
304
- aria-current=${ariaCurrent as string}
305
- aria-expanded=${ariaExpanded as string}
306
- aria-haspopup=${ariaHasPopup as string}
307
- @click=${this._handleTriggerClick}
308
- >
309
- ${triggerContent}
310
- </button>
311
- `;
312
-
313
- return html`
314
- <!-- router: auto-assigns slot="dropdown" for rel-topbar-dropdown children -->
315
- <slot style="display:none" @slotchange=${this._routeSlots}></slot>
316
-
317
- ${trigger}
318
- <div class="dropdown" role="region">
319
- <slot name="dropdown" @slotchange=${this._handleDropdownSlotChange}></slot>
320
- </div>
321
- `;
322
- }
323
- }
324
-
@@ -1,27 +0,0 @@
1
- import { LitElement, html, css } from "lit";
2
- import { customElement } from "lit/decorators.js";
3
-
4
- /**
5
- * @deprecated Part of the deprecated rel-topbar family. Use `rel-drawer`
6
- * for the mobile nav panel in the "Navbar" recipe at /docs/recipes/navbar.
7
- */
8
- @customElement("rel-topbar-mobile-panel")
9
- export class RelTopbarMobilePanel extends LitElement {
10
- static styles = css`
11
- .mobile-panel {
12
- display: flex;
13
- flex-direction: column;
14
- width: 100%;
15
- }
16
- `;
17
-
18
- render() {
19
- return html`<div class="mobile-panel"><slot></slot></div>`;
20
- }
21
- }
22
-
23
- declare global {
24
- interface HTMLElementTagNameMap {
25
- "rel-topbar-mobile-panel": RelTopbarMobilePanel;
26
- }
27
- }
@@ -1,243 +0,0 @@
1
- import { LitElement, html, css } from "lit";
2
- import { customElement, property } from "lit/decorators.js";
3
- import "../rel-avatar/rel-avatar.js";
4
-
5
- export type TopbarProfileType = "avatar" | "carrier";
6
- export type TopbarRewardTier = "gold" | "silver" | "platinum" | "bronze" | "regular";
7
-
8
- /**
9
- * `rel-topbar-profile` — Profile / user tile for the topbar right region.
10
- *
11
- * @deprecated Part of the deprecated rel-topbar family. Compose `rel-avatar`
12
- * directly inside the "Navbar" recipe at /docs/recipes/navbar.
13
- *
14
- * type="avatar" Customer avatar with initials circle + optional name/subtitle.
15
- * type="carrier" Carrier reward tile with reward-tier badge + name/subtitle.
16
- */
17
- @customElement("rel-topbar-profile")
18
- export class RelTopbarProfile extends LitElement {
19
- /** Visual mode */
20
- @property({ type: String, reflect: true }) type: TopbarProfileType = "avatar";
21
-
22
- /** One or two initials shown in the avatar circle */
23
- @property({ type: String }) initials?: string;
24
-
25
- /** Primary display name */
26
- @property({ type: String }) name?: string;
27
-
28
- /** Secondary line (role, plan, etc.) */
29
- @property({ type: String }) subtitle?: string;
30
-
31
- /** Reward tier — only meaningful when type="carrier" */
32
- @property({ type: String, reflect: true }) reward: TopbarRewardTier = "regular";
33
-
34
- /** Compact mode — avatar only, no text */
35
- @property({ type: Boolean, reflect: true }) compact = false;
36
-
37
- static styles = css`
38
- /* ─── Component tokens (reward tier palette) ────────────────────── */
39
- :host {
40
- color: var(--rel-text-default);
41
- --_profile-radius: var(--rel-border-radius-full-rounded, 1000px);
42
- --_avatar-size: 36px;
43
- --_avatar-size-sm: 28px;
44
- --_avatar-bg: var(--rel-bg-brand);
45
- --_avatar-color: var(--rel-text-default);
46
-
47
- /* Reward tier colours (reference existing token palette) */
48
- --rel-topbar-reward-gold: var(--rel-bg-warning);
49
- --rel-topbar-reward-gold-bg: var(--rel-bg-warning-light);
50
- --rel-topbar-reward-silver: var(--rel-text-caption);
51
- --rel-topbar-reward-silver-bg: var(--rel-bg-neutral-elevated-1);
52
- --rel-topbar-reward-platinum: var(--rel-text-info);
53
- --rel-topbar-reward-platinum-bg: var(--rel-bg-info-light);
54
- --rel-topbar-reward-bronze: var(--rel-text-warning);
55
- --rel-topbar-reward-bronze-bg: var(--rel-bg-warning-light);
56
- --rel-topbar-reward-regular: var(--rel-border-default);
57
- --rel-topbar-reward-regular-bg: var(--rel-bg-surface-elevated);
58
-
59
- display: inline-flex;
60
- align-items: center;
61
- gap: var(--rel-spacing-xs, 8px);
62
- font-family: var(--rel-fonts-font-family, Poppins, sans-serif);
63
- cursor: pointer;
64
- }
65
-
66
- /* ─── Name / subtitle stack ─────────────────────────────────────── */
67
- .text-stack {
68
- display: flex;
69
- flex-direction: column;
70
- gap: 0;
71
- min-width: 0;
72
- }
73
-
74
- :host([compact]) .text-stack {
75
- display: none;
76
- }
77
-
78
- .name {
79
- color: var(--rel-text-default);
80
- white-space: nowrap;
81
- overflow: hidden;
82
- text-overflow: ellipsis;
83
-
84
- font-family: var(--rel-body-md-medium-font-family);
85
-
86
- font-weight: var(--rel-body-md-medium-font-weight);
87
-
88
- font-size: var(--rel-body-md-medium-font-size);
89
-
90
- line-height: var(--rel-body-md-medium-line-height);
91
-
92
- letter-spacing: var(--rel-body-md-medium-letter-spacing);
93
-
94
- }
95
-
96
- .subtitle {
97
- color: var(--rel-text-placeholder);
98
- white-space: nowrap;
99
- overflow: hidden;
100
- text-overflow: ellipsis;
101
-
102
- font-family: var(--rel-body-sm-regular-font-family);
103
-
104
- font-weight: var(--rel-body-sm-regular-font-weight);
105
-
106
- font-size: var(--rel-body-sm-regular-font-size);
107
-
108
- line-height: var(--rel-body-sm-regular-line-height);
109
-
110
- letter-spacing: var(--rel-body-sm-regular-letter-spacing);
111
-
112
- }
113
-
114
- /* ─── Carrier reward badge ──────────────────────────────────────── */
115
- .reward-badge {
116
- display: inline-flex;
117
- align-items: center;
118
- gap: var(--rel-spacing-3xs, 2px);
119
- padding: 2px var(--rel-spacing-2xs, 4px);
120
- border-radius: var(--rel-border-radius-xs, 2px);
121
- text-transform: uppercase;
122
- flex-shrink: 0;
123
- font-family: var(--rel-body-xs-semibold-font-family);
124
- font-weight: var(--rel-body-xs-semibold-font-weight);
125
- font-size: var(--rel-body-xs-semibold-font-size);
126
- line-height: var(--rel-body-xs-semibold-line-height);
127
- letter-spacing: var(--rel-body-xs-semibold-letter-spacing);
128
- }
129
-
130
- /* Gold */
131
- :host([reward="gold"]) .reward-badge {
132
- background: var(--rel-topbar-reward-gold-bg);
133
- color: var(--rel-topbar-reward-gold);
134
- }
135
-
136
- /* Silver */
137
- :host([reward="silver"]) .reward-badge {
138
- background: var(--rel-topbar-reward-silver-bg);
139
- color: var(--rel-text-default);
140
- }
141
-
142
- /* Platinum */
143
- :host([reward="platinum"]) .reward-badge {
144
- background: var(--rel-topbar-reward-platinum-bg);
145
- color: var(--rel-topbar-reward-platinum);
146
- }
147
-
148
- /* Bronze */
149
- :host([reward="bronze"]) .reward-badge {
150
- background: var(--rel-topbar-reward-bronze-bg);
151
- color: var(--rel-topbar-reward-bronze);
152
- }
153
-
154
- /* Regular */
155
- :host([reward="regular"]) .reward-badge {
156
- background: var(--rel-topbar-reward-regular-bg);
157
- color: var(--rel-text-default);
158
- }
159
-
160
- /* ─── Carrier tile shell ────────────────────────────────────────── */
161
- .carrier-tile {
162
- display: flex;
163
- align-items: center;
164
- gap: var(--rel-spacing-xs, 8px);
165
- padding: var(--rel-spacing-2xs, 4px) var(--rel-spacing-xs, 8px);
166
- border-radius: var(--rel-border-radius-sm, 8px);
167
- background: var(--rel-bg-surface-elevated);
168
- border: var(--rel-stroke-sm, 1px) solid var(--rel-border-default);
169
- }
170
-
171
- :host([compact]) .carrier-tile {
172
- padding: var(--rel-spacing-2xs, 4px);
173
- }
174
-
175
- .carrier-meta {
176
- display: flex;
177
- flex-direction: column;
178
- gap: 1px;
179
- min-width: 0;
180
- }
181
-
182
- :host([compact]) .carrier-meta {
183
- display: none;
184
- }
185
- `;
186
-
187
- render() {
188
- if (this.type === "carrier") {
189
- return this._renderCarrier();
190
- }
191
- return this._renderAvatar();
192
- }
193
-
194
- private _renderAvatar() {
195
- return html`
196
- <rel-avatar
197
- type="text"
198
- text=${this.initials ?? ""}
199
- size=${this.compact ? "xs" : "sm"}
200
- bg=${this._avatarBg()}
201
- ></rel-avatar>
202
- ${!this.compact && (this.name || this.subtitle)
203
- ? html`
204
- <div class="text-stack">
205
- ${this.name ? html`<span class="name">${this.name}</span>` : null}
206
- ${this.subtitle ? html`<span class="subtitle">${this.subtitle}</span>` : null}
207
- </div>
208
- `
209
- : null}
210
- `;
211
- }
212
-
213
- private _avatarBg(): string {
214
- const map: Record<string, string> = {
215
- gold: "var(--rel-bg-warning)",
216
- platinum: "var(--rel-text-info)",
217
- silver: "var(--rel-text-caption)",
218
- bronze: "var(--rel-text-warning)",
219
- regular: "var(--rel-bg-brand)",
220
- };
221
- return map[this.reward] ?? "var(--rel-bg-brand)";
222
- }
223
-
224
- private _renderCarrier() {
225
- const rewardLabel = this.reward.charAt(0).toUpperCase() + this.reward.slice(1);
226
-
227
- return html`
228
- <div class="carrier-tile" role="img" aria-label="${this.name ?? "Profile"} – ${rewardLabel} member">
229
- <rel-avatar
230
- type="text"
231
- text=${this.initials ?? ""}
232
- size="sm"
233
- bg=${this._avatarBg()}
234
- ></rel-avatar>
235
- <div class="carrier-meta">
236
- ${this.name ? html`<span class="name">${this.name}</span>` : null}
237
- <span class="reward-badge">${rewardLabel}</span>
238
- ${this.subtitle ? html`<span class="subtitle">${this.subtitle}</span>` : null}
239
- </div>
240
- </div>
241
- `;
242
- }
243
- }
@@ -1,27 +0,0 @@
1
- import { LitElement, html, css } from "lit";
2
- import { customElement } from "lit/decorators.js";
3
-
4
- /**
5
- * @deprecated Part of the deprecated rel-topbar family. Use plain
6
- * `rel-button` (icon variant) elements inside the "Navbar" recipe at /docs/recipes/navbar.
7
- */
8
- @customElement("rel-topbar-utilities")
9
- export class RelTopbarUtilities extends LitElement {
10
- static styles = css`
11
- .utilities {
12
- display: inline-flex;
13
- align-items: center;
14
- gap: var(--rel-spacing-xs, 8px);
15
- }
16
- `;
17
-
18
- render() {
19
- return html`<div class="utilities"><slot></slot></div>`;
20
- }
21
- }
22
-
23
- declare global {
24
- interface HTMLElementTagNameMap {
25
- "rel-topbar-utilities": RelTopbarUtilities;
26
- }
27
- }