@reliability-design/web 1.4.3 → 1.4.5

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 (48) hide show
  1. package/dist/components/rel-accordion/rel-accordion.ts +13 -1
  2. package/dist/components/rel-autocomplete/README.md +1 -0
  3. package/dist/components/rel-autocomplete/rel-autocomplete.ts +56 -1
  4. package/dist/components/rel-button/rel-button.ts +18 -2
  5. package/dist/components/rel-calendar/rel-calendar.ts +23 -1
  6. package/dist/components/rel-carousel/rel-carousel.ts +20 -0
  7. package/dist/components/rel-checkbox/README.md +69 -22
  8. package/dist/components/rel-checkbox/rel-checkbox.ts +119 -9
  9. package/dist/components/rel-chip/rel-chip.ts +29 -0
  10. package/dist/components/rel-date-picker/rel-date-picker.ts +156 -13
  11. package/dist/components/rel-drawer/rel-drawer.ts +22 -58
  12. package/dist/components/rel-menu/rel-menu.ts +124 -15
  13. package/dist/components/rel-menubar/rel-menubar.ts +221 -63
  14. package/dist/components/rel-nav-menu/rel-nav-menu.ts +39 -3
  15. package/dist/components/rel-otp/rel-otp.ts +3 -3
  16. package/dist/components/rel-pagination/README.md +14 -0
  17. package/dist/components/rel-pagination/rel-pagination.ts +30 -14
  18. package/dist/components/rel-popover/rel-popover.ts +31 -3
  19. package/dist/components/rel-range-picker/rel-range-picker.ts +251 -3
  20. package/dist/components/rel-resizable/rel-resizable-group.ts +20 -0
  21. package/dist/components/rel-segmented-button/rel-segmented-button.ts +50 -12
  22. package/dist/components/rel-select/README.md +1 -0
  23. package/dist/components/rel-select/rel-select.ts +1385 -1170
  24. package/dist/components/rel-sheet/rel-sheet.ts +22 -1
  25. package/dist/components/rel-sidebar/rel-sidebar.ts +43 -39
  26. package/dist/components/rel-stepper/rel-stepper.ts +44 -1
  27. package/dist/components/rel-tab/rel-tab.ts +32 -7
  28. package/dist/components/rel-time-picker/rel-time-picker.ts +338 -206
  29. package/dist/components/rel-tooltip/rel-tooltip.ts +30 -0
  30. package/dist/components/rel-topbar/rel-topbar-actions.ts +1 -1
  31. package/dist/components/rel-topbar/rel-topbar-brand.ts +1 -1
  32. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +1 -1
  33. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +1 -1
  34. package/dist/components/rel-topbar/rel-topbar-item.ts +318 -319
  35. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +1 -1
  36. package/dist/components/rel-topbar/rel-topbar-profile.ts +224 -224
  37. package/dist/components/rel-topbar/rel-topbar-utilities.ts +1 -1
  38. package/dist/components/rel-topbar/rel-topbar.ts +440 -440
  39. package/dist/components/rel-upload/UPLOAD-DESIGN-CHANGES.md +134 -0
  40. package/dist/components/rel-upload/rel-upload-actions.ts +163 -0
  41. package/dist/components/rel-upload/rel-upload.ts +943 -0
  42. package/dist/index.d.mts +491 -18
  43. package/dist/index.d.ts +491 -18
  44. package/dist/index.js +2748 -410
  45. package/dist/index.js.map +1 -1
  46. package/dist/index.mjs +2953 -627
  47. package/dist/index.mjs.map +1 -1
  48. package/package.json +1 -1
@@ -1,243 +1,243 @@
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 "App Topbar" recipe at /docs/recipes/app-topbar.
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 {
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 {
40
79
  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;
80
+ white-space: nowrap;
81
+ overflow: hidden;
82
82
  text-overflow: ellipsis;
83
-
83
+
84
84
  font-family: var(--rel-body-md-medium-font-family);
85
-
85
+
86
86
  font-weight: var(--rel-body-md-medium-font-weight);
87
-
87
+
88
88
  font-size: var(--rel-body-md-medium-font-size);
89
-
89
+
90
90
  line-height: var(--rel-body-md-medium-line-height);
91
-
91
+
92
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;
93
+
94
+ }
95
+
96
+ .subtitle {
97
+ color: var(--rel-text-placeholder);
98
+ white-space: nowrap;
99
+ overflow: hidden;
100
100
  text-overflow: ellipsis;
101
-
101
+
102
102
  font-family: var(--rel-body-sm-regular-font-family);
103
-
103
+
104
104
  font-weight: var(--rel-body-sm-regular-font-weight);
105
-
105
+
106
106
  font-size: var(--rel-body-sm-regular-font-size);
107
-
107
+
108
108
  line-height: var(--rel-body-sm-regular-line-height);
109
-
109
+
110
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;
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
122
  flex-shrink: 0;
123
123
  font-family: var(--rel-body-xs-semibold-font-family);
124
124
  font-weight: var(--rel-body-xs-semibold-font-weight);
125
125
  font-size: var(--rel-body-xs-semibold-font-size);
126
126
  line-height: var(--rel-body-xs-semibold-line-height);
127
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
- }
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
+ }
@@ -3,7 +3,7 @@ import { customElement } from "lit/decorators.js";
3
3
 
4
4
  /**
5
5
  * @deprecated Part of the deprecated rel-topbar family. Use plain
6
- * `rel-button` (icon variant) elements inside the "App Topbar" recipe at /docs/recipes/app-topbar.
6
+ * `rel-button` (icon variant) elements inside the "Navbar" recipe at /docs/recipes/navbar.
7
7
  */
8
8
  @customElement("rel-topbar-utilities")
9
9
  export class RelTopbarUtilities extends LitElement {