@reliability-design/web 1.1.1 → 1.2.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 (64) hide show
  1. package/dist/components/rel-accordion/rel-accordion.ts +17 -32
  2. package/dist/components/rel-alert/rel-alert.ts +34 -34
  3. package/dist/components/rel-avatar/rel-avatar.ts +5 -3
  4. package/dist/components/rel-badge/rel-badge.ts +2 -1
  5. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +6 -6
  6. package/dist/components/rel-button/rel-button.ts +67 -21
  7. package/dist/components/rel-calendar/rel-calendar.ts +15 -8
  8. package/dist/components/rel-card/rel-card.ts +9 -17
  9. package/dist/components/rel-cardmedia/rel-cardmedia.ts +20 -23
  10. package/dist/components/rel-carousel/rel-carousel.ts +596 -468
  11. package/dist/components/rel-checkbox/rel-checkbox.ts +68 -16
  12. package/dist/components/rel-chip/rel-chip.ts +291 -244
  13. package/dist/components/rel-container/rel-container.ts +2 -2
  14. package/dist/components/rel-date-picker/rel-date-picker.ts +23 -19
  15. package/dist/components/rel-divider/rel-divider.ts +3 -3
  16. package/dist/components/rel-drawer/rel-drawer-footer.ts +0 -2
  17. package/dist/components/rel-drawer/rel-drawer.ts +41 -88
  18. package/dist/components/rel-kbd/rel-kbd.ts +94 -118
  19. package/dist/components/rel-layout/rel-layout.ts +49 -58
  20. package/dist/components/rel-menu/rel-menu.ts +359 -359
  21. package/dist/components/rel-menubar/rel-menubar-menu.css +3 -0
  22. package/dist/components/rel-menubar/rel-menubar-menu.ts +2 -1
  23. package/dist/components/rel-menubar/rel-menubar.ts +602 -605
  24. package/dist/components/rel-otp/rel-otp.ts +22 -25
  25. package/dist/components/rel-pagination/rel-pagination.ts +101 -57
  26. package/dist/components/rel-popover/rel-popover-content.ts +6 -5
  27. package/dist/components/rel-popover/rel-popover.ts +26 -7
  28. package/dist/components/rel-progress/rel-progress.ts +10 -9
  29. package/dist/components/rel-radio/rel-radio.ts +228 -172
  30. package/dist/components/rel-range-picker/rel-range-picker.css +349 -0
  31. package/dist/components/rel-range-picker/rel-range-picker.ts +1079 -0
  32. package/dist/components/rel-resizable/rel-resizable-handle.ts +8 -7
  33. package/dist/components/rel-segmented-button/rel-segmented-button.ts +41 -20
  34. package/dist/components/rel-select/rel-select.ts +103 -32
  35. package/dist/components/rel-sheet/rel-sheet.ts +362 -684
  36. package/dist/components/rel-slider/rel-slider.ts +49 -27
  37. package/dist/components/rel-snackbar/rel-snackbar.ts +28 -28
  38. package/dist/components/rel-stepper/rel-stepper.ts +11 -10
  39. package/dist/components/rel-switch/rel-switch.ts +7 -6
  40. package/dist/components/rel-tab/rel-tab.ts +15 -29
  41. package/dist/components/rel-textfield/rel-textfield.ts +144 -35
  42. package/dist/components/rel-toast/rel-toast.ts +25 -12
  43. package/dist/components/rel-tooltip/rel-tooltip.ts +123 -123
  44. package/dist/components/rel-topbar/rel-topbar-actions.ts +1 -0
  45. package/dist/components/rel-topbar/rel-topbar-brand.ts +1 -0
  46. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +32 -2
  47. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +1 -1
  48. package/dist/components/rel-topbar/rel-topbar-item.ts +15 -10
  49. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +1 -0
  50. package/dist/components/rel-topbar/rel-topbar-profile.ts +30 -56
  51. package/dist/components/rel-topbar/rel-topbar-utilities.ts +1 -0
  52. package/dist/components/rel-topbar/rel-topbar.ts +137 -28
  53. package/dist/index.d.mts +153 -178
  54. package/dist/index.d.ts +153 -178
  55. package/dist/index.js +4711 -3875
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.mjs +4047 -3202
  58. package/dist/index.mjs.map +1 -1
  59. package/dist/rel-menubar-menu-BEEQDAXW.css +3 -0
  60. package/dist/styles/vars-v2.css +525 -0
  61. package/dist/styles/vars.css +346 -346
  62. package/dist/{vars-TBB4BMSD.css → vars-I2PC74XD.css} +346 -346
  63. package/dist/vars-v2-VMGWTFJZ.css +525 -0
  64. package/package.json +2 -1
@@ -1,172 +1,228 @@
1
- import { LitElement, html, css } from "lit";
2
- import { customElement, property } from "lit/decorators.js";
3
-
4
- export interface RadioOption {
5
- value: string;
6
- label: string;
7
- supportingText?: string;
8
- disabled?: boolean;
9
- error?: boolean;
10
- }
11
-
12
- @customElement("rel-radio")
13
- export class RelRadio extends LitElement {
14
- @property({ type: Array }) options: RadioOption[] = [];
15
-
16
- @property({ type: String }) name = "radio-group";
17
-
18
- @property({ type: String, reflect: true })
19
- selectedValue: string | null = null;
20
-
21
- @property({ type: Boolean })
22
- disabled = false;
23
-
24
- @property({ type: String }) value = "";
25
-
26
- checked = false;
27
-
28
- private _onChange: (value: string) => void = () => {};
29
- private _onTouched: () => void = () => {};
30
-
31
- static styles = css`
32
- :host {
33
- display: block;
34
- font-family: var(--rel-fontFamilies-primary);
35
- }
36
-
37
- .rel-radio-group {
38
- display: flex;
39
- flex-direction: column;
40
- gap: var(--rel-spacing-space-xs);
41
- }
42
-
43
- .rel-radio-option {
44
- display: flex;
45
- flex-direction: column;
46
- gap: var(--rel-spacing-space-3xs);
47
- cursor: pointer;
48
- }
49
-
50
- .rel-radio-option.disabled {
51
- opacity: 0.6;
52
- cursor: not-allowed !important;
53
- }
54
-
55
- .radio-main {
56
- display: flex;
57
- align-items: center;
58
- gap: var(--rel-spacing-space-2xs);
59
- }
60
-
61
- input {
62
- position: absolute;
63
- opacity: 0;
64
- pointer-events: none;
65
- }
66
-
67
- .radio-custom {
68
- width: 20px;
69
- height: 20px;
70
- border: 2px solid var(--rel-text-heading, #2b2b2b);
71
- border-radius: 50%;
72
- position: relative;
73
- flex-shrink: 0;
74
- }
75
-
76
- input:focus-visible + .radio-custom {
77
- outline: 2px solid var(--rel-border-info, #0091ea);
78
- outline-offset: 2px;
79
- }
80
-
81
- input:checked + .radio-custom::after {
82
- content: "";
83
- position: absolute;
84
- inset: 4px;
85
- background: var(--rel-text-heading, #2b2b2b);
86
- border-radius: 50%;
87
- }
88
-
89
- .radio-label {
90
- font-size: var(--rel-fontSizes-sm, 12px);
91
- font-weight: var(--rel-fontWeights-medium, 500);
92
- color: var(--rel-text-primary, #333);
93
- }
94
-
95
- .radio-supporting {
96
- font-size: var(--rel-fontSizes-xs, 10px);
97
- margin-left: 28px;
98
- color: var(--rel-text-placeholder, #a9a9a9);
99
- }
100
-
101
- .error .radio-custom {
102
- border-color: var(--rel-colors-red-secondary);
103
- }
104
-
105
- .error input:checked + .radio-custom::after {
106
- background: var(--rel-colors-red-secondary);
107
- }
108
- `;
109
-
110
- private onChange(value: string) {
111
- if (this.disabled) return;
112
-
113
- this.selectedValue = value;
114
- this.dispatchEvent(
115
- new CustomEvent("rel-change", {
116
- detail: {
117
- checked: this.selectedValue === value,
118
- value,
119
- },
120
- bubbles: true,
121
- composed: true,
122
- })
123
- );
124
- this._onChange(this.value);
125
- }
126
-
127
- registerOnChange(fn: (value: string) => void): void { this._onChange = fn; }
128
- registerOnTouched(fn: () => void): void { this._onTouched = fn; }
129
- writeValue(value: string): void { this.checked = value === this.value; }
130
-
131
- private renderOption(option: RadioOption) {
132
- const isChecked = this.selectedValue === option.value;
133
- const isDisabled = this.disabled || option.disabled;
134
-
135
- const classes = [
136
- "rel-radio-option",
137
- isDisabled ? "disabled" : "",
138
- option.error ? "error" : "",
139
- ]
140
- .filter(Boolean)
141
- .join(" ");
142
-
143
- return html`
144
- <label class="${classes}">
145
- <div class="radio-main">
146
- <input
147
- type="radio"
148
- name="${this.name}"
149
- .checked="${isChecked}"
150
- ?disabled="${isDisabled}"
151
- @change="${() => this.onChange(option.value)}"
152
- @blur="${() => this._onTouched()}"
153
- />
154
- <span class="radio-custom"></span>
155
- <span class="radio-label">${option.label}</span>
156
- </div>
157
-
158
- ${option.supportingText
159
- ? html`<div class="radio-supporting">${option.supportingText}</div>`
160
- : ""}
161
- </label>
162
- `;
163
- }
164
-
165
- render() {
166
- return html`
167
- <div class="rel-radio-group">
168
- ${this.options.map((o) => this.renderOption(o))}
169
- </div>
170
- `;
171
- }
172
- }
1
+ import { LitElement, html, css } from "lit";
2
+ import { customElement, property } from "lit/decorators.js";
3
+ import "../../styles/vars-v2.css";
4
+
5
+ export interface RadioOption {
6
+ value: string;
7
+ label: string;
8
+ supportingText?: string;
9
+ disabled?: boolean;
10
+ }
11
+
12
+ @customElement("rel-radio")
13
+ export class RelRadio extends LitElement {
14
+ @property({ type: Array }) options: RadioOption[] = [];
15
+
16
+ @property({ type: String }) name = "radio-group";
17
+
18
+ @property({ type: String, reflect: true })
19
+ selectedValue: string | null = null;
20
+
21
+ @property({ type: Boolean })
22
+ disabled = false;
23
+
24
+ @property({ type: Boolean }) error = false;
25
+
26
+ @property({ type: String }) errorMessage = "";
27
+
28
+ @property({ type: String }) value = "";
29
+
30
+ checked = false;
31
+
32
+ private _onChange: (value: string) => void = () => {};
33
+ private _onTouched: () => void = () => {};
34
+
35
+ static styles = css`
36
+ :host {
37
+ display: block;
38
+ font-family: var(--rel-fontFamilies-primary);
39
+ }
40
+
41
+ .rel-radio-group {
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: var(--rel-spacing-space-xs);
45
+ }
46
+
47
+ .rel-radio-option {
48
+ display: flex;
49
+ flex-direction: column;
50
+ gap: var(--rel-spacing-space-3xs);
51
+ cursor: pointer;
52
+ padding: 4px 6px;
53
+ margin: -4px -6px;
54
+ }
55
+
56
+ .rel-radio-option.disabled {
57
+ opacity: 0.6;
58
+ cursor: not-allowed !important;
59
+ }
60
+
61
+ .rel-radio-option:not(.disabled):hover {
62
+ background: var(--rel-color-bg-hover, #f5f5f5);
63
+ }
64
+
65
+ .rel-radio-option:not(.disabled):hover .radio-custom {
66
+ border-color: #525252;
67
+ }
68
+
69
+ .rel-radio-option:not(.disabled):hover .radio-label {
70
+ color: #525252;
71
+ }
72
+
73
+ .rel-radio-option:not(.disabled):hover .radio-supporting {
74
+ color: #7D7D7D;
75
+ }
76
+
77
+ .rel-radio-option:focus-within:has(input:focus-visible) {
78
+ outline: 1px solid #000000;
79
+ outline-offset: 0;
80
+ }
81
+
82
+ .radio-main {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: var(--rel-spacing-space-2xs);
86
+ }
87
+
88
+ input {
89
+ position: absolute;
90
+ opacity: 0;
91
+ pointer-events: none;
92
+ }
93
+
94
+ .radio-custom {
95
+ width: 20px;
96
+ height: 20px;
97
+ border: 2px solid var(--rel-color-text-heading);
98
+ border-radius: 50%;
99
+ position: relative;
100
+ flex-shrink: 0;
101
+ }
102
+
103
+ input:checked + .radio-custom::after {
104
+ content: "";
105
+ position: absolute;
106
+ inset: 4px;
107
+ background: var(--rel-color-text-heading);
108
+ border-radius: 50%;
109
+ }
110
+
111
+ .radio-label {
112
+ font-size: var(--rel-fontSizes-sm);
113
+ font-weight: var(--rel-fontWeights-medium);
114
+ color: var(--rel-color-text-primary);
115
+ }
116
+
117
+ .radio-supporting {
118
+ font-size: var(--rel-fontSizes-xs);
119
+ margin-left: 28px;
120
+ color: var(--rel-color-text-placeholder);
121
+ }
122
+
123
+ /* Error state — unchecked only */
124
+ .rel-radio-option.error-unchecked .radio-custom {
125
+ border-color: #CE3131;
126
+ }
127
+
128
+ .rel-radio-option.error-unchecked .radio-label {
129
+ color: #CE3131;
130
+ }
131
+
132
+ .rel-radio-option.error-unchecked .radio-supporting {
133
+ color: #CE3131;
134
+ }
135
+
136
+ /* Error message below group */
137
+ .error-message {
138
+ font-size: var(--rel-fontSizes-xs, 10px);
139
+ color: #CE3131;
140
+ margin-top: var(--rel-spacing-space-2xs, 4px);
141
+ }
142
+
143
+ /* Dark mode hover overrides */
144
+ :host-context([data-theme="dark"]) .rel-radio-option:not(.disabled):hover .radio-custom,
145
+ :host-context(.dark) .rel-radio-option:not(.disabled):hover .radio-custom {
146
+ border-color: var(--rel-color-text-secondary, #D4D4D4);
147
+ }
148
+
149
+ :host-context([data-theme="dark"]) .rel-radio-option:not(.disabled):hover .radio-label,
150
+ :host-context(.dark) .rel-radio-option:not(.disabled):hover .radio-label {
151
+ color: var(--rel-color-text-secondary, #D4D4D4);
152
+ }
153
+
154
+ :host-context([data-theme="dark"]) .rel-radio-option:not(.disabled):hover .radio-supporting,
155
+ :host-context(.dark) .rel-radio-option:not(.disabled):hover .radio-supporting {
156
+ color: var(--rel-color-text-placeholder, #A3A3A3);
157
+ }
158
+
159
+ :host-context([data-theme="dark"]) .rel-radio-option:focus-within:has(input:focus-visible),
160
+ :host-context(.dark) .rel-radio-option:focus-within:has(input:focus-visible) {
161
+ outline-color: var(--rel-color-text-primary, #F5F5F5);
162
+ }
163
+ `;
164
+
165
+ private onChange(value: string) {
166
+ if (this.disabled) return;
167
+
168
+ this.selectedValue = value;
169
+ this.dispatchEvent(
170
+ new CustomEvent("rel-change", {
171
+ detail: { value, checked: true },
172
+ bubbles: true,
173
+ composed: true,
174
+ })
175
+ );
176
+ this._onChange(this.value);
177
+ }
178
+
179
+ registerOnChange(fn: (value: string) => void): void { this._onChange = fn; }
180
+ registerOnTouched(fn: () => void): void { this._onTouched = fn; }
181
+ writeValue(value: string): void { this.checked = value === this.value; }
182
+
183
+ private renderOption(option: RadioOption) {
184
+ const isChecked = this.selectedValue === option.value;
185
+ const isDisabled = this.disabled || option.disabled;
186
+ const isErrorActive = this.error && !isChecked;
187
+
188
+ const classes = [
189
+ "rel-radio-option",
190
+ isDisabled ? "disabled" : "",
191
+ isErrorActive ? "error-unchecked" : "",
192
+ ]
193
+ .filter(Boolean)
194
+ .join(" ");
195
+
196
+ return html`
197
+ <label class="${classes}">
198
+ <div class="radio-main">
199
+ <input
200
+ type="radio"
201
+ name="${this.name}"
202
+ .checked="${isChecked}"
203
+ ?disabled="${isDisabled}"
204
+ @change="${() => this.onChange(option.value)}"
205
+ @blur="${() => this._onTouched()}"
206
+ />
207
+ <span class="radio-custom"></span>
208
+ <span class="radio-label">${option.label}</span>
209
+ </div>
210
+
211
+ ${option.supportingText
212
+ ? html`<div class="radio-supporting">${option.supportingText}</div>`
213
+ : ""}
214
+ </label>
215
+ `;
216
+ }
217
+
218
+ render() {
219
+ return html`
220
+ <div class="rel-radio-group">
221
+ ${this.options.map((o) => this.renderOption(o))}
222
+ </div>
223
+ ${this.error && this.errorMessage
224
+ ? html`<div class="error-message">${this.errorMessage}</div>`
225
+ : ""}
226
+ `;
227
+ }
228
+ }