@reliability-design/web 1.0.2

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 (60) hide show
  1. package/dist/components/rel-accordion/rel-accordion.stories.ts +313 -0
  2. package/dist/components/rel-accordion/rel-accordion.ts +114 -0
  3. package/dist/components/rel-alert/rel-alert.stories.ts +412 -0
  4. package/dist/components/rel-alert/rel-alert.ts +194 -0
  5. package/dist/components/rel-avatar/rel-avatar.stories.ts +327 -0
  6. package/dist/components/rel-avatar/rel-avatar.ts +100 -0
  7. package/dist/components/rel-badge/rel-badge.stories.ts +350 -0
  8. package/dist/components/rel-badge/rel-badge.ts +70 -0
  9. package/dist/components/rel-breadcrumb/rel-breadcrumb.stories.ts +306 -0
  10. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +97 -0
  11. package/dist/components/rel-button/rel-button.stories.ts +356 -0
  12. package/dist/components/rel-button/rel-button.ts +204 -0
  13. package/dist/components/rel-card/rel-card.stories.ts +299 -0
  14. package/dist/components/rel-card/rel-card.ts +33 -0
  15. package/dist/components/rel-cardmedia/rel-cardmedia.stories.ts +368 -0
  16. package/dist/components/rel-cardmedia/rel-cardmedia.ts +80 -0
  17. package/dist/components/rel-checkbox/rel-checkbox.stories.ts +414 -0
  18. package/dist/components/rel-checkbox/rel-checkbox.ts +164 -0
  19. package/dist/components/rel-chip/rel-chip.stories.ts +552 -0
  20. package/dist/components/rel-chip/rel-chip.ts +261 -0
  21. package/dist/components/rel-container/rel-container.stories.ts +239 -0
  22. package/dist/components/rel-container/rel-container.ts +74 -0
  23. package/dist/components/rel-divider/rel-divider.stories.ts +229 -0
  24. package/dist/components/rel-divider/rel-divider.ts +44 -0
  25. package/dist/components/rel-layout/rel-layout.stories.ts +713 -0
  26. package/dist/components/rel-layout/rel-layout.ts +60 -0
  27. package/dist/components/rel-menu/rel-menu.stories.ts +910 -0
  28. package/dist/components/rel-menu/rel-menu.ts +319 -0
  29. package/dist/components/rel-progress/rel-progress.stories.ts +817 -0
  30. package/dist/components/rel-progress/rel-progress.ts +182 -0
  31. package/dist/components/rel-radio/rel-radio.stories.ts +1048 -0
  32. package/dist/components/rel-radio/rel-radio.ts +187 -0
  33. package/dist/components/rel-segmented-button/rel-segmented-button.stories.ts +1079 -0
  34. package/dist/components/rel-segmented-button/rel-segmented-button.ts +150 -0
  35. package/dist/components/rel-select/rel-select.stories.ts +1201 -0
  36. package/dist/components/rel-select/rel-select.ts +261 -0
  37. package/dist/components/rel-slider/rel-slider.stories.ts +730 -0
  38. package/dist/components/rel-slider/rel-slider.ts +440 -0
  39. package/dist/components/rel-snackbar/rel-snackbar.stories.ts +808 -0
  40. package/dist/components/rel-snackbar/rel-snackbar.ts +212 -0
  41. package/dist/components/rel-stepper/rel-stepper.stories.ts +752 -0
  42. package/dist/components/rel-stepper/rel-stepper.ts +425 -0
  43. package/dist/components/rel-switch/rel-switch.stories.ts +441 -0
  44. package/dist/components/rel-switch/rel-switch.ts +161 -0
  45. package/dist/components/rel-tab/rel-tab.stories.ts +492 -0
  46. package/dist/components/rel-tab/rel-tab.ts +145 -0
  47. package/dist/components/rel-textfield/rel-textfield.stories.ts +710 -0
  48. package/dist/components/rel-textfield/rel-textfield.ts +224 -0
  49. package/dist/components/rel-toast/rel-toast.stories.ts +394 -0
  50. package/dist/components/rel-toast/rel-toast.ts +154 -0
  51. package/dist/components/rel-tooltip/rel-tooltip.stories.ts +364 -0
  52. package/dist/components/rel-tooltip/rel-tooltip.ts +80 -0
  53. package/dist/index.d.mts +372 -0
  54. package/dist/index.d.ts +372 -0
  55. package/dist/index.js +4593 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/index.mjs +4544 -0
  58. package/dist/index.mjs.map +1 -0
  59. package/dist/styles/vars.css +184 -0
  60. package/package.json +32 -0
@@ -0,0 +1,187 @@
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: string = "radio-group";
17
+
18
+ @property({ type: String }) selectedValue: string | null = null;
19
+
20
+ static styles = css`
21
+ :host {
22
+ display: block;
23
+ font-family: var(--rel-fontFamilies-primary);
24
+ }
25
+
26
+ .rel-radio-group {
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: var(--rel-spacing-space-xs);
30
+ }
31
+
32
+ .rel-radio-option {
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: flex-start;
36
+ gap: var(--rel-spacing-space-3xs);
37
+ cursor: pointer;
38
+ position: relative;
39
+ }
40
+
41
+ .radio-main {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: var(--rel-spacing-space-2xs);
45
+ }
46
+
47
+ .rel-radio-option input {
48
+ position: absolute;
49
+ opacity: 0;
50
+ pointer-events: none;
51
+ }
52
+
53
+ .radio-custom {
54
+ width: 20px;
55
+ height: 20px;
56
+ border: 2px solid var(--rel-colors-black);
57
+ border-radius: 50%;
58
+ display: inline-block;
59
+ position: relative;
60
+ flex-shrink: 0;
61
+ transition: all 0.2s ease-in-out;
62
+ }
63
+
64
+ .rel-radio-option input:focus + .radio-custom {
65
+ outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-black);
66
+ outline-offset: var(--rel-spacing-space-3xs);
67
+ }
68
+
69
+ .rel-radio-option input:checked + .radio-custom::after {
70
+ content: "";
71
+ position: absolute;
72
+ top: 50%;
73
+ left: 50%;
74
+ width: 10px;
75
+ height: 10px;
76
+ background-color: var(--rel-colors-black);
77
+ border-radius: 50%;
78
+ transform: translate(-50%, -50%);
79
+ }
80
+
81
+ /* Error state */
82
+ .rel-radio-option.error .radio-custom {
83
+ border-color: var(--rel-colors-red-secondary);
84
+ }
85
+
86
+ .rel-radio-option.error input:checked + .radio-custom::after {
87
+ background-color: var(--rel-colors-red-secondary);
88
+ }
89
+
90
+ .rel-radio-option.error .radio-label,
91
+ .rel-radio-option.error .radio-supporting {
92
+ color: var(--rel-colors-red-secondary);
93
+ }
94
+
95
+ .rel-radio-option.error input:focus + .radio-custom {
96
+ outline: var(--rel-borders-width-stroke-200) solid var(--rel-colors-red-secondary);
97
+ }
98
+
99
+ /* Disabled state */
100
+ .rel-radio-option.disabled {
101
+ opacity: 0.6;
102
+ cursor: not-allowed !important;
103
+ }
104
+
105
+ .rel-radio-option.disabled .radio-label,
106
+ .rel-radio-option.disabled .radio-supporting {
107
+ cursor: not-allowed !important;
108
+ }
109
+
110
+ /* Text styles */
111
+ .radio-label {
112
+ font-size: var(--rel-fontSizes-sm);
113
+ font-weight: var(--rel-fontWeights-medium);
114
+ color: var(--rel-colors-gray-heading);
115
+ line-height: var(--rel-lineHeights-sm);
116
+ }
117
+
118
+ .radio-supporting {
119
+ font-size: var(--rel-fontSizes-xs);
120
+ color: var(--rel-colors-gray-placeholder);
121
+ margin-left: 28px;
122
+ line-height: var(--rel-lineHeights-xs);
123
+ }
124
+
125
+ .radio-supporting.error-text {
126
+ color: var(--rel-colors-red-secondary);
127
+ }
128
+ `;
129
+
130
+ private onChange(value: string) {
131
+ this.selectedValue = value;
132
+ this.dispatchEvent(
133
+ new CustomEvent("changed", {
134
+ detail: { value },
135
+ bubbles: true,
136
+ composed: true,
137
+ })
138
+ );
139
+ }
140
+
141
+ private isChecked(value: string): boolean {
142
+ return this.selectedValue === value;
143
+ }
144
+
145
+ private renderOption(option: RadioOption) {
146
+ const isChecked = this.isChecked(option.value);
147
+ const classes = [
148
+ "rel-radio-option",
149
+ option.disabled ? "disabled" : "",
150
+ option.error ? "error" : "",
151
+ ]
152
+ .filter(Boolean)
153
+ .join(" ");
154
+
155
+ return html`
156
+ <label class="${classes}">
157
+ <div class="radio-main">
158
+ <input
159
+ type="radio"
160
+ name="${this.name}"
161
+ .value="${option.value}"
162
+ .checked="${isChecked}"
163
+ ?disabled="${option.disabled}"
164
+ @change="${() => !option.disabled && this.onChange(option.value)}" />
165
+ <span class="radio-custom"></span>
166
+ <span class="radio-label">${option.label}</span>
167
+ </div>
168
+
169
+ ${option.supportingText
170
+ ? html`
171
+ <div class="radio-supporting ${option.error ? "error-text" : ""}">
172
+ ${option.supportingText}
173
+ </div>
174
+ `
175
+ : ""}
176
+ </label>
177
+ `;
178
+ }
179
+
180
+ render() {
181
+ return html`
182
+ <div class="rel-radio-group">
183
+ ${this.options.map((option) => this.renderOption(option))}
184
+ </div>
185
+ `;
186
+ }
187
+ }