@reliability-design/web 1.0.6 → 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 (78) hide show
  1. package/dist/components/rel-accordion/rel-accordion.ts +20 -31
  2. package/dist/components/rel-alert/rel-alert.ts +81 -11
  3. package/dist/components/rel-avatar/rel-avatar.ts +6 -3
  4. package/dist/components/rel-badge/rel-badge.ts +8 -3
  5. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +6 -6
  6. package/dist/components/rel-button/rel-button.ts +118 -16
  7. package/dist/components/rel-calendar/rel-calendar.ts +16 -9
  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 -469
  11. package/dist/components/rel-checkbox/rel-checkbox.ts +98 -15
  12. package/dist/components/rel-chip/rel-chip.ts +291 -186
  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 +12 -3
  16. package/dist/components/rel-drawer/rel-drawer-footer.ts +27 -0
  17. package/dist/components/rel-drawer/rel-drawer.ts +57 -113
  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 -327
  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 -576
  24. package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +240 -143
  25. package/dist/components/rel-nav-menu/rel-nav-menu.ts +227 -331
  26. package/dist/components/rel-navbar/rel-navbar.ts +13 -0
  27. package/dist/components/rel-otp/rel-otp.ts +22 -25
  28. package/dist/components/rel-pagination/rel-pagination.ts +112 -63
  29. package/dist/components/rel-popover/rel-popover-content.ts +6 -5
  30. package/dist/components/rel-popover/rel-popover.ts +42 -20
  31. package/dist/components/rel-progress/rel-progress.ts +10 -9
  32. package/dist/components/rel-radio/rel-radio.ts +228 -155
  33. package/dist/components/rel-range-picker/rel-range-picker.css +349 -0
  34. package/dist/components/rel-range-picker/rel-range-picker.ts +1079 -0
  35. package/dist/components/rel-resizable/rel-resizable-handle.ts +12 -15
  36. package/dist/components/rel-segmented-button/rel-segmented-button.ts +41 -20
  37. package/dist/components/rel-select/rel-select.ts +112 -27
  38. package/dist/components/rel-sheet/rel-sheet.ts +362 -683
  39. package/dist/components/rel-sidebar/rel-sidebar.ts +13 -5
  40. package/dist/components/rel-slider/rel-slider.ts +74 -29
  41. package/dist/components/rel-snackbar/rel-snackbar.ts +67 -37
  42. package/dist/components/rel-stepper/rel-stepper.ts +43 -31
  43. package/dist/components/rel-switch/rel-switch.ts +26 -12
  44. package/dist/components/rel-tab/rel-tab.ts +57 -37
  45. package/dist/components/rel-table/rel-table-body.ts +5 -0
  46. package/dist/components/rel-table/rel-table-caption.ts +6 -1
  47. package/dist/components/rel-table/rel-table-cell.ts +42 -49
  48. package/dist/components/rel-table/rel-table-footer.ts +5 -0
  49. package/dist/components/rel-table/rel-table-head.ts +13 -1
  50. package/dist/components/rel-table/rel-table-header.ts +5 -0
  51. package/dist/components/rel-table/rel-table-row.ts +7 -3
  52. package/dist/components/rel-table/rel-table.ts +8 -2
  53. package/dist/components/rel-textfield/rel-textfield.ts +153 -44
  54. package/dist/components/rel-toast/rel-toast.ts +56 -22
  55. package/dist/components/rel-tooltip/rel-tooltip.ts +52 -9
  56. package/dist/components/rel-topbar/rel-topbar-actions.ts +24 -0
  57. package/dist/components/rel-topbar/rel-topbar-brand.ts +47 -0
  58. package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +63 -0
  59. package/dist/components/rel-topbar/rel-topbar-dropdown.ts +28 -0
  60. package/dist/components/rel-topbar/rel-topbar-item.ts +320 -0
  61. package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +24 -0
  62. package/dist/components/rel-topbar/rel-topbar-profile.ts +222 -0
  63. package/dist/components/rel-topbar/rel-topbar-utilities.ts +24 -0
  64. package/dist/components/rel-topbar/rel-topbar.ts +438 -0
  65. package/dist/index.d.mts +375 -411
  66. package/dist/index.d.ts +375 -411
  67. package/dist/index.js +7587 -7980
  68. package/dist/index.js.map +1 -1
  69. package/dist/index.mjs +7647 -8023
  70. package/dist/index.mjs.map +1 -1
  71. package/dist/rel-menubar-menu-BEEQDAXW.css +3 -0
  72. package/dist/styles/vars-v2.css +525 -0
  73. package/dist/styles/vars.css +79 -27
  74. package/dist/{vars-ITL2K3KO.css → vars-I2PC74XD.css} +79 -27
  75. package/dist/vars-v2-VMGWTFJZ.css +525 -0
  76. package/package.json +3 -1
  77. package/dist/components/rel-quote-page/README.md +0 -166
  78. package/dist/components/rel-quote-page/rel-quote-page.ts +0 -816
@@ -1,5 +1,6 @@
1
1
  import { LitElement, html, css } from "lit";
2
2
  import { customElement, property } from "lit/decorators.js";
3
+ import "../../styles/vars-v2.css";
3
4
 
4
5
  export type ProgressMode =
5
6
  | "linear-determinate"
@@ -21,7 +22,7 @@ export class RelProgress extends LitElement {
21
22
  static styles = css`
22
23
  :host {
23
24
  display: block;
24
- font-family: var(--rel-fontFamilies-primary, sans-serif);
25
+ font-family: var(--rel-fontFamilies-primary);
25
26
  }
26
27
 
27
28
  :host([mode*="circular"]) {
@@ -30,15 +31,15 @@ export class RelProgress extends LitElement {
30
31
 
31
32
  /* Linear */
32
33
  .linear-track {
33
- background: var(--rel-colors-gray-border, #ddd);
34
- border-radius: var(--rel-borders-radius-border-radius-200, 8px);
34
+ background: var(--rel-color-border-default);
35
+ border-radius: var(--rel-borders-radius-border-radius-0);
35
36
  height: 6px;
36
37
  overflow: hidden;
37
38
  width: 100%;
38
39
  }
39
40
 
40
41
  .linear-bar {
41
- background: var(--rel-colors-black);
42
+ background: var(--rel-color-text-primary);
42
43
  height: 100%;
43
44
  transition: width 0.3s ease;
44
45
  }
@@ -75,15 +76,15 @@ export class RelProgress extends LitElement {
75
76
 
76
77
  .circular-bg {
77
78
  fill: none;
78
- stroke: var(--rel-colors-gray-border);
79
+ stroke: var(--rel-color-border-default);
79
80
  stroke-width: 3;
80
81
  }
81
82
 
82
83
  .circular-progress {
83
84
  fill: none;
84
- stroke: var(--rel-colors-black);
85
+ stroke: var(--rel-color-text-primary);
85
86
  stroke-width: 3;
86
- stroke-linecap: round;
87
+ stroke-linecap: butt;
87
88
  transition: stroke-dashoffset 0.35s;
88
89
  }
89
90
 
@@ -93,8 +94,8 @@ export class RelProgress extends LitElement {
93
94
  }
94
95
 
95
96
  .spinner-path {
96
- stroke: var(--rel-colors-black);
97
- stroke-linecap: round;
97
+ stroke: var(--rel-color-text-primary);
98
+ stroke-linecap: butt;
98
99
  animation: dash 1.5s ease-in-out infinite;
99
100
  }
100
101
 
@@ -1,155 +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
- static styles = css`
25
- :host {
26
- display: block;
27
- font-family: var(--rel-fontFamilies-primary);
28
- }
29
-
30
- .rel-radio-group {
31
- display: flex;
32
- flex-direction: column;
33
- gap: var(--rel-spacing-space-xs);
34
- }
35
-
36
- .rel-radio-option {
37
- display: flex;
38
- flex-direction: column;
39
- gap: var(--rel-spacing-space-3xs);
40
- cursor: pointer;
41
- }
42
-
43
- .rel-radio-option.disabled {
44
- opacity: 0.6;
45
- cursor: not-allowed !important;
46
- }
47
-
48
- .radio-main {
49
- display: flex;
50
- align-items: center;
51
- gap: var(--rel-spacing-space-2xs);
52
- }
53
-
54
- input {
55
- position: absolute;
56
- opacity: 0;
57
- pointer-events: none;
58
- }
59
-
60
- .radio-custom {
61
- width: 20px;
62
- height: 20px;
63
- border: 2px solid var(--rel-text-heading, #2b2b2b);
64
- border-radius: 50%;
65
- position: relative;
66
- flex-shrink: 0;
67
- }
68
-
69
- input:focus-visible + .radio-custom {
70
- outline: 2px solid var(--rel-border-info, #0091ea);
71
- outline-offset: 2px;
72
- }
73
-
74
- input:checked + .radio-custom::after {
75
- content: "";
76
- position: absolute;
77
- inset: 4px;
78
- background: var(--rel-text-heading, #2b2b2b);
79
- border-radius: 50%;
80
- }
81
-
82
- .radio-label {
83
- font-size: var(--rel-fontSizes-sm, 12px);
84
- font-weight: var(--rel-fontWeights-medium, 500);
85
- color: var(--rel-text-primary, #333);
86
- }
87
-
88
- .radio-supporting {
89
- font-size: var(--rel-fontSizes-xs, 10px);
90
- margin-left: 28px;
91
- color: var(--rel-text-placeholder, #a9a9a9);
92
- }
93
-
94
- .error .radio-custom {
95
- border-color: var(--rel-colors-red-secondary);
96
- }
97
-
98
- .error input:checked + .radio-custom::after {
99
- background: var(--rel-colors-red-secondary);
100
- }
101
- `;
102
-
103
- private onChange(value: string) {
104
- if (this.disabled) return;
105
-
106
- this.selectedValue = value;
107
- this.dispatchEvent(
108
- new CustomEvent("changed", {
109
- bubbles: true,
110
- composed: true,
111
- })
112
- );
113
- }
114
-
115
- private renderOption(option: RadioOption) {
116
- const isChecked = this.selectedValue === option.value;
117
- const isDisabled = this.disabled || option.disabled;
118
-
119
- const classes = [
120
- "rel-radio-option",
121
- isDisabled ? "disabled" : "",
122
- option.error ? "error" : "",
123
- ]
124
- .filter(Boolean)
125
- .join(" ");
126
-
127
- return html`
128
- <label class="${classes}">
129
- <div class="radio-main">
130
- <input
131
- type="radio"
132
- name="${this.name}"
133
- .checked="${isChecked}"
134
- ?disabled="${isDisabled}"
135
- @change="${() => this.onChange(option.value)}"
136
- />
137
- <span class="radio-custom"></span>
138
- <span class="radio-label">${option.label}</span>
139
- </div>
140
-
141
- ${option.supportingText
142
- ? html`<div class="radio-supporting">${option.supportingText}</div>`
143
- : ""}
144
- </label>
145
- `;
146
- }
147
-
148
- render() {
149
- return html`
150
- <div class="rel-radio-group">
151
- ${this.options.map((o) => this.renderOption(o))}
152
- </div>
153
- `;
154
- }
155
- }
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
+ }