@reliability-design/web 1.3.1 → 1.4.1
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.
- package/CHANGELOG.md +22 -0
- package/dist/components/rel-accordion/README.md +13 -13
- package/dist/components/rel-accordion/rel-accordion.ts +80 -45
- package/dist/components/rel-alert/README.md +15 -15
- package/dist/components/rel-alert/rel-alert.ts +149 -158
- package/dist/components/rel-avatar/README.md +15 -15
- package/dist/components/rel-avatar/rel-avatar.ts +42 -38
- package/dist/components/rel-badge/README.md +5 -5
- package/dist/components/rel-badge/rel-badge.ts +46 -11
- package/dist/components/rel-breadcrumb/README.md +7 -7
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +16 -13
- package/dist/components/rel-button/README.md +20 -20
- package/dist/components/rel-button/rel-button.ts +292 -105
- package/dist/components/rel-calendar/README.md +5 -5
- package/dist/components/rel-calendar/rel-calendar.ts +68 -45
- package/dist/components/rel-card/README.md +6 -6
- package/dist/components/rel-card/rel-card.ts +88 -35
- package/dist/components/rel-cardmedia/README.md +9 -9
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +27 -20
- package/dist/components/rel-carousel/README.md +3 -3
- package/dist/components/rel-carousel/rel-carousel.ts +174 -90
- package/dist/components/rel-chart/README.md +8 -8
- package/dist/components/rel-chart/rel-chart.ts +59 -41
- package/dist/components/rel-checkbox/README.md +7 -7
- package/dist/components/rel-checkbox/rel-checkbox.ts +61 -61
- package/dist/components/rel-chip/README.md +16 -16
- package/dist/components/rel-chip/rel-chip.ts +143 -111
- package/dist/components/rel-container/README.md +11 -11
- package/dist/components/rel-container/rel-container.ts +35 -9
- package/dist/components/rel-date-picker/README.md +43 -7
- package/dist/components/rel-date-picker/date-format.test.ts +43 -0
- package/dist/components/rel-date-picker/date-format.ts +47 -0
- package/dist/components/rel-date-picker/rel-date-picker.ts +154 -82
- package/dist/components/rel-divider/README.md +9 -9
- package/dist/components/rel-divider/rel-divider.ts +10 -9
- package/dist/components/rel-drawer/README.md +1 -1
- package/dist/components/rel-drawer/rel-drawer-footer.ts +1 -1
- package/dist/components/rel-drawer/rel-drawer.ts +88 -25
- package/dist/components/rel-kbd/README.md +20 -20
- package/dist/components/rel-kbd/rel-kbd.ts +119 -25
- package/dist/components/rel-layout/README.md +1 -1
- package/dist/components/rel-layout/rel-layout.ts +2 -2
- package/dist/components/rel-menu/README.md +15 -15
- package/dist/components/rel-menu/rel-menu.ts +155 -88
- package/dist/components/rel-menubar/README.md +20 -20
- package/dist/components/rel-menubar/rel-menubar.ts +47 -31
- package/dist/components/rel-nav-menu/README.md +21 -21
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +17 -14
- package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +33 -14
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +14 -7
- package/dist/components/rel-navbar/README.md +7 -7
- package/dist/components/rel-navbar/rel-navbar.ts +12 -11
- package/dist/components/rel-otp/README.md +3 -3
- package/dist/components/rel-otp/rel-otp.ts +46 -30
- package/dist/components/rel-pagination/README.md +18 -18
- package/dist/components/rel-pagination/rel-pagination.ts +141 -90
- package/dist/components/rel-popover/README.md +13 -13
- package/dist/components/rel-popover/rel-popover-content.ts +39 -14
- package/dist/components/rel-popover/rel-popover.ts +18 -7
- package/dist/components/rel-progress/README.md +5 -5
- package/dist/components/rel-progress/rel-progress.ts +16 -12
- package/dist/components/rel-radio/README.md +9 -9
- package/dist/components/rel-radio/rel-radio.ts +64 -50
- package/dist/components/rel-range-picker/rel-range-picker.ts +120 -117
- package/dist/components/rel-resizable/README.md +4 -4
- package/dist/components/rel-resizable/rel-resizable-group.ts +15 -4
- package/dist/components/rel-resizable/rel-resizable-handle.ts +13 -9
- package/dist/components/rel-resizable/rel-resizable-panel.ts +11 -0
- package/dist/components/rel-segmented-button/README.md +10 -10
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +39 -40
- package/dist/components/rel-select/README.md +14 -14
- package/dist/components/rel-select/rel-select.ts +120 -188
- package/dist/components/rel-sheet/README.md +10 -10
- package/dist/components/rel-sheet/rel-sheet.ts +82 -23
- package/dist/components/rel-sidebar/README.md +5 -5
- package/dist/components/rel-sidebar/rel-sidebar.ts +75 -60
- package/dist/components/rel-skeleton/rel-skeleton.ts +8 -13
- package/dist/components/rel-slider/README.md +10 -10
- package/dist/components/rel-slider/rel-slider.ts +230 -57
- package/dist/components/rel-snackbar/README.md +9 -9
- package/dist/components/rel-snackbar/rel-snackbar.ts +44 -32
- package/dist/components/rel-stepper/README.md +10 -10
- package/dist/components/rel-stepper/rel-stepper.ts +110 -46
- package/dist/components/rel-switch/README.md +5 -5
- package/dist/components/rel-switch/rel-switch.ts +23 -12
- package/dist/components/rel-tab/README.md +13 -13
- package/dist/components/rel-tab/rel-tab.ts +63 -19
- package/dist/components/rel-table/README.md +7 -7
- package/dist/components/rel-table/rel-table-body.ts +2 -1
- package/dist/components/rel-table/rel-table-caption.ts +10 -7
- package/dist/components/rel-table/rel-table-cell.ts +7 -6
- package/dist/components/rel-table/rel-table-footer.ts +4 -3
- package/dist/components/rel-table/rel-table-head.ts +11 -9
- package/dist/components/rel-table/rel-table-header.ts +2 -1
- package/dist/components/rel-table/rel-table-row.ts +5 -4
- package/dist/components/rel-table/rel-table.ts +16 -7
- package/dist/components/rel-textfield/README.md +11 -11
- package/dist/components/rel-textfield/rel-textfield.ts +218 -92
- package/dist/components/rel-toast/README.md +11 -11
- package/dist/components/rel-toast/rel-toast.ts +33 -30
- package/dist/components/rel-tooltip/README.md +7 -7
- package/dist/components/rel-tooltip/rel-tooltip.ts +160 -123
- package/dist/components/rel-topbar/rel-topbar-actions.ts +1 -2
- package/dist/components/rel-topbar/rel-topbar-brand.ts +8 -5
- package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +10 -8
- package/dist/components/rel-topbar/rel-topbar-dropdown.ts +4 -5
- package/dist/components/rel-topbar/rel-topbar-item.ts +23 -22
- package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +0 -1
- package/dist/components/rel-topbar/rel-topbar-profile.ts +68 -50
- package/dist/components/rel-topbar/rel-topbar-utilities.ts +1 -2
- package/dist/components/rel-topbar/rel-topbar.ts +31 -29
- package/dist/index.d.mts +159 -39
- package/dist/index.d.ts +159 -39
- package/dist/index.js +3600 -2269
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3930 -2600
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +866 -363
- package/dist/vars-BYCEEKWJ.css +866 -0
- package/package.json +5 -3
- package/dist/components/rel-range-picker/rel-range-picker.css +0 -349
- package/dist/styles/vars-v2.css +0 -525
- package/dist/vars-F54UGCHM.css +0 -363
- package/dist/vars-v2-VMGWTFJZ.css +0 -525
|
@@ -165,33 +165,33 @@ Full keyboard accessibility support:
|
|
|
165
165
|
The component uses design tokens from the Reliability Design System:
|
|
166
166
|
|
|
167
167
|
### Colors
|
|
168
|
-
- `--rel-
|
|
169
|
-
- `--rel-
|
|
170
|
-
- `--rel-
|
|
171
|
-
- `--rel-
|
|
172
|
-
- `--rel-
|
|
173
|
-
- `--rel-
|
|
174
|
-
- `--rel-
|
|
168
|
+
- `--rel-bg-surface-elevated` - Nav container background
|
|
169
|
+
- `--rel-bg-neutral-elevated-1` - Trigger hover/active state, panel item hover
|
|
170
|
+
- `--rel-border-default` - Borders
|
|
171
|
+
- `--rel-text-label` - Text color
|
|
172
|
+
- `--rel-text-placeholder` - Description text
|
|
173
|
+
- `--rel-bg-surface` - Panel background
|
|
174
|
+
- `--rel-bg-info` - Focus outline
|
|
175
175
|
|
|
176
176
|
### Typography
|
|
177
|
-
- `--rel-
|
|
178
|
-
- `--rel-
|
|
179
|
-
- `--rel-
|
|
180
|
-
- `--rel-
|
|
181
|
-
- `--rel-
|
|
182
|
-
- `--rel-
|
|
177
|
+
- `--rel-fonts-font-family` - Font family (Poppins)
|
|
178
|
+
- `--rel-fonts-weight-body-medium` - Trigger text weight
|
|
179
|
+
- `--rel-fonts-weight-body-semibold` - Panel item title weight
|
|
180
|
+
- `--rel-body-sm-regular-font-size` - Trigger and title text size
|
|
181
|
+
- `--rel-body-xs-regular-font-size` - Description text size
|
|
182
|
+
- `--rel-body-xs-regular-line-height` - Description line height
|
|
183
183
|
|
|
184
184
|
### Spacing
|
|
185
|
-
- `--rel-spacing-
|
|
186
|
-
- `--rel-spacing-
|
|
187
|
-
- `--rel-spacing-
|
|
188
|
-
- `--rel-spacing-
|
|
189
|
-
- `--rel-spacing-
|
|
185
|
+
- `--rel-spacing-3xs` (2px) - Compact spacing
|
|
186
|
+
- `--rel-spacing-2xs` (4px) - Container padding, panel gaps
|
|
187
|
+
- `--rel-spacing-xs` (8px) - Trigger padding, panel padding
|
|
188
|
+
- `--rel-spacing-sm` (12px) - Panel item padding
|
|
189
|
+
- `--rel-spacing-md` (16px) - Trigger horizontal padding
|
|
190
190
|
|
|
191
191
|
### Borders & Effects
|
|
192
|
-
- `--rel-
|
|
193
|
-
- `--rel-
|
|
194
|
-
- `--rel-
|
|
192
|
+
- `--rel-stroke-sm` (1px) - Border width
|
|
193
|
+
- `--rel-border-radius-xs` (2px) - Panel item radius
|
|
194
|
+
- `--rel-border-radius-sm` (8px) - Container and panel radius
|
|
195
195
|
- `--rel-shadows-shadow-300` - Panel drop shadow
|
|
196
196
|
|
|
197
197
|
### Z-Index
|
|
@@ -17,41 +17,44 @@ export class RelNavMenuItem extends LitElement {
|
|
|
17
17
|
|
|
18
18
|
static styles = css`
|
|
19
19
|
:host {
|
|
20
|
+
color: var(--rel-text-default);
|
|
20
21
|
display: inline-block;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
.trigger {
|
|
24
25
|
display: inline-flex;
|
|
25
26
|
align-items: center;
|
|
26
|
-
gap: var(--rel-spacing-
|
|
27
|
-
padding: var(--rel-spacing-
|
|
28
|
-
|
|
29
|
-
font-size: var(--rel-fontSizes-sm);
|
|
30
|
-
font-weight: var(--rel-fontWeights-medium);
|
|
31
|
-
color: var(--rel-colors-gray-heading);
|
|
27
|
+
gap: var(--rel-spacing-2xs);
|
|
28
|
+
padding: var(--rel-spacing-xs) var(--rel-spacing-md);
|
|
29
|
+
color: var(--rel-text-label);
|
|
32
30
|
background: transparent;
|
|
33
31
|
border: none;
|
|
34
|
-
border-radius: var(--rel-
|
|
32
|
+
border-radius: var(--rel-border-radius-sm);
|
|
35
33
|
cursor: pointer;
|
|
36
34
|
transition: all 0.15s ease;
|
|
37
35
|
text-decoration: none;
|
|
38
36
|
outline: none;
|
|
39
37
|
user-select: none;
|
|
38
|
+
font-family: var(--rel-body-sm-medium-font-family);
|
|
39
|
+
font-weight: var(--rel-body-sm-medium-font-weight);
|
|
40
|
+
font-size: var(--rel-body-sm-medium-font-size);
|
|
41
|
+
line-height: var(--rel-body-sm-medium-line-height);
|
|
42
|
+
letter-spacing: var(--rel-body-sm-medium-letter-spacing);
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
.trigger:hover:not(:disabled) {
|
|
43
|
-
background: var(--rel-surface-
|
|
46
|
+
background: var(--rel-bg-surface-elevated);
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
.trigger:focus-visible {
|
|
47
|
-
outline: 2px solid var(--rel-
|
|
50
|
+
outline: 2px solid var(--rel-border-focus);
|
|
48
51
|
outline-offset: 2px;
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
/* Active state driven by :host([open]) — no external class manipulation needed */
|
|
52
55
|
:host([open]) .trigger,
|
|
53
56
|
.trigger.active {
|
|
54
|
-
background: var(--rel-surface-
|
|
57
|
+
background: var(--rel-bg-surface-elevated);
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
.trigger:disabled {
|
|
@@ -69,11 +72,11 @@ export class RelNavMenuItem extends LitElement {
|
|
|
69
72
|
position: fixed;
|
|
70
73
|
min-width: 320px;
|
|
71
74
|
max-width: 600px;
|
|
72
|
-
background: var(--rel-
|
|
73
|
-
border: var(--rel-
|
|
74
|
-
border-radius: var(--rel-
|
|
75
|
+
background: var(--rel-bg-surface);
|
|
76
|
+
border: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
77
|
+
border-radius: var(--rel-border-radius-sm);
|
|
75
78
|
box-shadow: var(--rel-shadows-shadow-300);
|
|
76
|
-
padding: var(--rel-spacing-
|
|
79
|
+
padding: var(--rel-spacing-xs);
|
|
77
80
|
z-index: 1000;
|
|
78
81
|
display: none;
|
|
79
82
|
}
|
|
@@ -5,6 +5,7 @@ import { customElement } from "lit/decorators.js";
|
|
|
5
5
|
export class RelNavMenuPanel extends LitElement {
|
|
6
6
|
static styles = css`
|
|
7
7
|
:host {
|
|
8
|
+
color: var(--rel-text-default);
|
|
8
9
|
display: block;
|
|
9
10
|
width: 100%;
|
|
10
11
|
}
|
|
@@ -12,34 +13,52 @@ export class RelNavMenuPanel extends LitElement {
|
|
|
12
13
|
.panel-content {
|
|
13
14
|
display: flex;
|
|
14
15
|
flex-direction: column;
|
|
15
|
-
gap: var(--rel-spacing-
|
|
16
|
-
padding: var(--rel-spacing-
|
|
16
|
+
gap: var(--rel-spacing-2xs);
|
|
17
|
+
padding: var(--rel-spacing-xs);
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
::slotted(a[data-nav-item]) {
|
|
20
21
|
display: block;
|
|
21
|
-
padding: var(--rel-spacing-
|
|
22
|
-
border-radius: var(--rel-
|
|
22
|
+
padding: var(--rel-spacing-sm);
|
|
23
|
+
border-radius: var(--rel-border-radius-xs);
|
|
23
24
|
transition: background 0.15s ease;
|
|
24
25
|
text-decoration: none;
|
|
25
26
|
color: inherit;
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
::slotted(a[data-nav-item]:hover) {
|
|
29
|
-
background: var(--rel-surface-
|
|
30
|
+
background: var(--rel-bg-surface-elevated);
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
::slotted([data-title]) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
::slotted([data-title]) {
|
|
34
|
+
color: var(--rel-text-label);
|
|
35
|
+
margin-bottom: var(--rel-spacing-3xs);
|
|
36
|
+
|
|
37
|
+
font-family: var(--rel-body-sm-semibold-font-family);
|
|
38
|
+
|
|
39
|
+
font-weight: var(--rel-body-sm-semibold-font-weight);
|
|
40
|
+
|
|
41
|
+
font-size: var(--rel-body-sm-semibold-font-size);
|
|
42
|
+
|
|
43
|
+
line-height: var(--rel-body-sm-semibold-line-height);
|
|
44
|
+
|
|
45
|
+
letter-spacing: var(--rel-body-sm-semibold-letter-spacing);
|
|
46
|
+
|
|
37
47
|
}
|
|
38
48
|
|
|
39
|
-
::slotted([data-desc]) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
::slotted([data-desc]) {
|
|
50
|
+
color: var(--rel-text-placeholder);
|
|
51
|
+
|
|
52
|
+
font-family: var(--rel-body-xs-regular-font-family);
|
|
53
|
+
|
|
54
|
+
font-weight: var(--rel-body-xs-regular-font-weight);
|
|
55
|
+
|
|
56
|
+
font-size: var(--rel-body-xs-regular-font-size);
|
|
57
|
+
|
|
58
|
+
line-height: var(--rel-body-xs-regular-line-height);
|
|
59
|
+
|
|
60
|
+
letter-spacing: var(--rel-body-xs-regular-letter-spacing);
|
|
61
|
+
|
|
43
62
|
}
|
|
44
63
|
`;
|
|
45
64
|
|
|
@@ -4,6 +4,12 @@ import { RelNavMenuItem } from "./rel-nav-menu-item";
|
|
|
4
4
|
|
|
5
5
|
type DensityType = "comfortable" | "compact";
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated rel-nav-menu has no Figma design in RelDS 2.0 and is excluded
|
|
9
|
+
* from the parity contract. Use rel-menu (with the select-option/fixed/fit
|
|
10
|
+
* types) or the App Topbar recipe instead. It remains exported for
|
|
11
|
+
* compatibility but will be removed in a future major version.
|
|
12
|
+
*/
|
|
7
13
|
@customElement("rel-nav-menu")
|
|
8
14
|
export class RelNavMenu extends LitElement {
|
|
9
15
|
@property({ type: String, reflect: true }) open = "";
|
|
@@ -18,22 +24,23 @@ export class RelNavMenu extends LitElement {
|
|
|
18
24
|
|
|
19
25
|
static styles = css`
|
|
20
26
|
:host {
|
|
27
|
+
color: var(--rel-text-default);
|
|
21
28
|
display: block;
|
|
22
|
-
font-family: var(--rel-
|
|
29
|
+
font-family: var(--rel-fonts-font-family);
|
|
23
30
|
}
|
|
24
31
|
|
|
25
32
|
.nav-container {
|
|
26
33
|
display: flex;
|
|
27
34
|
align-items: center;
|
|
28
|
-
gap: var(--rel-spacing-
|
|
29
|
-
padding: var(--rel-spacing-
|
|
30
|
-
background: var(--rel-
|
|
31
|
-
border-radius: var(--rel-
|
|
32
|
-
border: var(--rel-
|
|
35
|
+
gap: var(--rel-spacing-3xs);
|
|
36
|
+
padding: var(--rel-spacing-2xs);
|
|
37
|
+
background: var(--rel-bg-surface-elevated);
|
|
38
|
+
border-radius: var(--rel-border-radius-sm);
|
|
39
|
+
border: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
33
40
|
}
|
|
34
41
|
|
|
35
42
|
.nav-container.compact {
|
|
36
|
-
padding: var(--rel-spacing-
|
|
43
|
+
padding: var(--rel-spacing-3xs);
|
|
37
44
|
gap: 0;
|
|
38
45
|
}
|
|
39
46
|
|
|
@@ -85,20 +85,20 @@ None.
|
|
|
85
85
|
## Tokens / CSS Variables
|
|
86
86
|
|
|
87
87
|
### Semantic Tokens
|
|
88
|
-
- `--rel-
|
|
88
|
+
- `--rel-fonts-font-family` - Font family
|
|
89
89
|
|
|
90
90
|
### Color Tokens
|
|
91
|
-
- `--rel-
|
|
92
|
-
- `--rel-text-
|
|
91
|
+
- `--rel-bg-surface` - Background color
|
|
92
|
+
- `--rel-text-default` - Text color
|
|
93
93
|
- `--rel-border-default` - Bottom border color
|
|
94
94
|
|
|
95
95
|
### Spacing Tokens
|
|
96
|
-
- `--rel-spacing-
|
|
97
|
-
- `--rel-spacing-
|
|
98
|
-
- `--rel-spacing-
|
|
96
|
+
- `--rel-spacing-lg` - Desktop horizontal padding
|
|
97
|
+
- `--rel-spacing-md` - Tablet/mobile horizontal padding, brand-actions gap, content padding
|
|
98
|
+
- `--rel-spacing-sm` - Action items gap, mobile padding
|
|
99
99
|
|
|
100
100
|
### Custom Properties
|
|
101
|
-
- `--rel-spacing-
|
|
101
|
+
- `--rel-spacing-xl` - Content area horizontal padding
|
|
102
102
|
|
|
103
103
|
## Accessibility
|
|
104
104
|
- Uses `role="navigation"` on the main navbar container
|
|
@@ -24,6 +24,7 @@ export class RelNavbar extends LitElement {
|
|
|
24
24
|
|
|
25
25
|
static styles = css`
|
|
26
26
|
:host {
|
|
27
|
+
color: var(--rel-text-default);
|
|
27
28
|
display: block;
|
|
28
29
|
width: 100%;
|
|
29
30
|
}
|
|
@@ -38,47 +39,47 @@ export class RelNavbar extends LitElement {
|
|
|
38
39
|
display: flex;
|
|
39
40
|
align-items: center;
|
|
40
41
|
justify-content: space-between;
|
|
41
|
-
background: var(--rel-
|
|
42
|
-
color: var(--rel-text-
|
|
43
|
-
border-bottom: 1px solid var(--rel-border-default
|
|
42
|
+
background: var(--rel-bg-surface);
|
|
43
|
+
color: var(--rel-text-default);
|
|
44
|
+
border-bottom: 1px solid var(--rel-border-default);
|
|
44
45
|
height: 64px;
|
|
45
|
-
padding: 0 var(--rel-spacing-
|
|
46
|
+
padding: 0 var(--rel-spacing-lg);
|
|
46
47
|
box-sizing: border-box;
|
|
47
|
-
font-family: var(--rel-
|
|
48
|
+
font-family: var(--rel-fonts-font-family, sans-serif);
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
.brand {
|
|
51
52
|
display: flex;
|
|
52
53
|
align-items: center;
|
|
53
|
-
gap: var(--rel-spacing-
|
|
54
|
+
gap: var(--rel-spacing-md);
|
|
54
55
|
flex-shrink: 0;
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
.content {
|
|
58
59
|
display: flex;
|
|
59
60
|
align-items: center;
|
|
60
|
-
gap: var(--rel-spacing-
|
|
61
|
+
gap: var(--rel-spacing-sm);
|
|
61
62
|
flex: 1;
|
|
62
63
|
justify-content: flex-start;
|
|
63
|
-
padding: 0 var(--rel-spacing-
|
|
64
|
+
padding: 0 var(--rel-spacing-xl);
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
.actions {
|
|
67
68
|
display: flex;
|
|
68
69
|
align-items: center;
|
|
69
|
-
gap: var(--rel-spacing-
|
|
70
|
+
gap: var(--rel-spacing-sm);
|
|
70
71
|
flex-shrink: 0;
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
/* Mobile/Tablet variants */
|
|
74
75
|
:host([device="tablet"]) .navbar {
|
|
75
76
|
height: 56px;
|
|
76
|
-
padding: 0 var(--rel-spacing-
|
|
77
|
+
padding: 0 var(--rel-spacing-md);
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
:host([device="mobile"]) .navbar {
|
|
80
81
|
height: 56px;
|
|
81
|
-
padding: 0 var(--rel-spacing-
|
|
82
|
+
padding: 0 var(--rel-spacing-sm);
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
:host([device="mobile"]) .content {
|
|
@@ -251,7 +251,7 @@ The OTP component uses design system tokens for all styling. Customize via CSS p
|
|
|
251
251
|
|
|
252
252
|
```css
|
|
253
253
|
rel-otp::part(cell) {
|
|
254
|
-
border-color: var(--rel-
|
|
254
|
+
border-color: var(--rel-bg-info);
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
rel-otp::part(cell):focus {
|
|
@@ -259,12 +259,12 @@ rel-otp::part(cell):focus {
|
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
rel-otp::part(separator) {
|
|
262
|
-
color: var(--rel-
|
|
262
|
+
color: var(--rel-bg-info-light);
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
/* Custom invalid styling */
|
|
266
266
|
rel-otp[invalid]::part(cell) {
|
|
267
|
-
border-color: var(--rel-
|
|
267
|
+
border-color: var(--rel-text-danger);
|
|
268
268
|
animation: shake 0.3s;
|
|
269
269
|
}
|
|
270
270
|
|
|
@@ -21,7 +21,9 @@ export class RelOtp extends LitElement {
|
|
|
21
21
|
@property({ type: String, attribute: "aria-label" }) ariaLabel: string | null = null;
|
|
22
22
|
@property({ type: Boolean, reflect: true }) invalid = false;
|
|
23
23
|
@property({ type: Boolean, attribute: "show-separator" }) showSeparator = true;
|
|
24
|
-
|
|
24
|
+
// reflect: CSS targets :host([size="sm"|"lg"]) — without reflection,
|
|
25
|
+
// setting `el.size = "lg"` as a property silently applies no styles.
|
|
26
|
+
@property({ type: String, reflect: true }) size: "sm" | "md" | "lg" = "md";
|
|
25
27
|
|
|
26
28
|
@state() private cells: string[] = [];
|
|
27
29
|
@query(".hidden-input") private hiddenInput?: HTMLInputElement;
|
|
@@ -30,8 +32,9 @@ export class RelOtp extends LitElement {
|
|
|
30
32
|
|
|
31
33
|
static styles = css`
|
|
32
34
|
:host {
|
|
35
|
+
color: var(--rel-text-default);
|
|
33
36
|
display: inline-block;
|
|
34
|
-
font-family: var(--rel-
|
|
37
|
+
font-family: var(--rel-fonts-font-family);
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
:host([disabled]) {
|
|
@@ -42,24 +45,27 @@ export class RelOtp extends LitElement {
|
|
|
42
45
|
.otp-root {
|
|
43
46
|
display: inline-flex;
|
|
44
47
|
align-items: center;
|
|
45
|
-
gap: var(--rel-spacing-
|
|
48
|
+
gap: var(--rel-spacing-xs);
|
|
46
49
|
position: relative;
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
.otp-group {
|
|
50
53
|
display: flex;
|
|
51
|
-
gap: var(--rel-spacing-
|
|
54
|
+
gap: var(--rel-spacing-2xs);
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
.otp-separator {
|
|
55
58
|
display: flex;
|
|
56
59
|
align-items: center;
|
|
57
60
|
justify-content: center;
|
|
58
|
-
color: var(--rel-
|
|
59
|
-
font-size: var(--rel-fontSizes-lg);
|
|
60
|
-
font-weight: var(--rel-fontWeights-semibold);
|
|
61
|
+
color: var(--rel-border-default);
|
|
61
62
|
user-select: none;
|
|
62
|
-
padding: 0 var(--rel-spacing-
|
|
63
|
+
padding: 0 var(--rel-spacing-3xs);
|
|
64
|
+
font-family: var(--rel-action-xl-font-family);
|
|
65
|
+
font-weight: var(--rel-action-xl-font-weight);
|
|
66
|
+
font-size: var(--rel-action-xl-font-size);
|
|
67
|
+
line-height: var(--rel-action-xl-line-height);
|
|
68
|
+
letter-spacing: var(--rel-action-xl-letter-spacing);
|
|
63
69
|
}
|
|
64
70
|
|
|
65
71
|
.otp-separator.hidden {
|
|
@@ -69,49 +75,59 @@ export class RelOtp extends LitElement {
|
|
|
69
75
|
.otp-cell {
|
|
70
76
|
width: 40px;
|
|
71
77
|
height: 48px;
|
|
72
|
-
border: var(--rel-
|
|
73
|
-
border-radius: var(--rel-
|
|
74
|
-
background: var(--rel-
|
|
75
|
-
font-family: var(--rel-fontFamilies-primary);
|
|
76
|
-
font-size: var(--rel-fontSizes-lg);
|
|
77
|
-
font-weight: var(--rel-fontWeights-medium);
|
|
78
|
+
border: var(--rel-stroke-sm) solid var(--rel-border-default);
|
|
79
|
+
border-radius: var(--rel-border-radius-sm);
|
|
80
|
+
background: var(--rel-bg-neutral);
|
|
78
81
|
text-align: center;
|
|
79
|
-
color: var(--rel-
|
|
82
|
+
color: var(--rel-text-default);
|
|
80
83
|
outline: none;
|
|
81
84
|
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
82
|
-
caret-color: var(--rel-
|
|
85
|
+
caret-color: var(--rel-text-default);
|
|
86
|
+
font-family: var(--rel-body-lg-regular-font-family);
|
|
87
|
+
font-weight: var(--rel-body-lg-regular-font-weight);
|
|
88
|
+
font-size: var(--rel-body-lg-regular-font-size);
|
|
89
|
+
line-height: var(--rel-body-lg-regular-line-height);
|
|
90
|
+
letter-spacing: var(--rel-body-lg-regular-letter-spacing);
|
|
83
91
|
}
|
|
84
92
|
|
|
85
93
|
/* Size variants */
|
|
86
94
|
:host([size="sm"]) .otp-cell {
|
|
87
95
|
width: 36px;
|
|
88
96
|
height: 40px;
|
|
89
|
-
font-
|
|
97
|
+
font-family: var(--rel-body-md-regular-font-family);
|
|
98
|
+
font-weight: var(--rel-body-md-regular-font-weight);
|
|
99
|
+
font-size: var(--rel-body-md-regular-font-size);
|
|
100
|
+
line-height: var(--rel-body-md-regular-line-height);
|
|
101
|
+
letter-spacing: var(--rel-body-md-regular-letter-spacing);
|
|
90
102
|
}
|
|
91
103
|
|
|
92
104
|
:host([size="lg"]) .otp-cell {
|
|
93
105
|
width: 48px;
|
|
94
106
|
height: 56px;
|
|
95
|
-
font-
|
|
107
|
+
font-family: var(--rel-body-xl-regular-font-family);
|
|
108
|
+
font-weight: var(--rel-body-xl-regular-font-weight);
|
|
109
|
+
font-size: var(--rel-body-xl-regular-font-size);
|
|
110
|
+
line-height: var(--rel-body-xl-regular-line-height);
|
|
111
|
+
letter-spacing: var(--rel-body-xl-regular-letter-spacing);
|
|
96
112
|
}
|
|
97
113
|
|
|
98
114
|
.otp-cell::placeholder {
|
|
99
|
-
color: var(--rel-
|
|
115
|
+
color: var(--rel-text-body);
|
|
100
116
|
opacity: 0.6;
|
|
101
117
|
}
|
|
102
118
|
|
|
103
119
|
.otp-cell:hover:not(:disabled):not(:read-only) {
|
|
104
|
-
border-color: var(--rel-
|
|
120
|
+
border-color: var(--rel-border-strong);
|
|
105
121
|
}
|
|
106
122
|
|
|
107
123
|
.otp-cell:focus-visible {
|
|
108
|
-
border-color: var(--rel-
|
|
109
|
-
box-shadow: 0 0 0 2px var(--rel-
|
|
124
|
+
border-color: var(--rel-border-accent);
|
|
125
|
+
box-shadow: 0 0 0 2px var(--rel-border-default);
|
|
110
126
|
}
|
|
111
127
|
|
|
112
128
|
.otp-cell:disabled {
|
|
113
|
-
background: var(--rel-
|
|
114
|
-
color: var(--rel-
|
|
129
|
+
background: var(--rel-bg-surface-elevated);
|
|
130
|
+
color: var(--rel-text-disabled);
|
|
115
131
|
cursor: not-allowed;
|
|
116
132
|
}
|
|
117
133
|
|
|
@@ -120,18 +136,18 @@ export class RelOtp extends LitElement {
|
|
|
120
136
|
}
|
|
121
137
|
|
|
122
138
|
.otp-cell:read-only {
|
|
123
|
-
background: var(--rel-
|
|
139
|
+
background: var(--rel-bg-neutral-elevated-1);
|
|
124
140
|
cursor: default;
|
|
125
141
|
}
|
|
126
142
|
|
|
127
143
|
/* Invalid state */
|
|
128
144
|
:host([invalid]) .otp-cell {
|
|
129
|
-
border-color: var(--rel-border-
|
|
145
|
+
border-color: var(--rel-border-danger);
|
|
130
146
|
}
|
|
131
147
|
|
|
132
148
|
:host([invalid]) .otp-cell:focus {
|
|
133
|
-
border-color: var(--rel-border-
|
|
134
|
-
box-shadow: 0 0 0 2px var(--rel-
|
|
149
|
+
border-color: var(--rel-border-danger);
|
|
150
|
+
box-shadow: 0 0 0 2px var(--rel-bg-danger-light);
|
|
135
151
|
}
|
|
136
152
|
|
|
137
153
|
.hidden-input {
|
|
@@ -440,7 +456,7 @@ export class RelOtp extends LitElement {
|
|
|
440
456
|
|
|
441
457
|
return html`
|
|
442
458
|
<div
|
|
443
|
-
part="root"
|
|
459
|
+
part="base root"
|
|
444
460
|
class="otp-root"
|
|
445
461
|
role="group"
|
|
446
462
|
aria-label="${this.ariaLabel || "One-time password input"}">
|
|
@@ -450,7 +466,7 @@ export class RelOtp extends LitElement {
|
|
|
450
466
|
${group.map(
|
|
451
467
|
(index) => html`
|
|
452
468
|
<input
|
|
453
|
-
part="cell"
|
|
469
|
+
part="input cell"
|
|
454
470
|
class="otp-cell"
|
|
455
471
|
data-index="${index}"
|
|
456
472
|
type="${this.mask ? "password" : "text"}"
|
|
@@ -226,30 +226,30 @@ The component follows ARIA best practices:
|
|
|
226
226
|
The component uses design tokens from the Reliability Design System:
|
|
227
227
|
|
|
228
228
|
### Colors
|
|
229
|
-
- `--rel-
|
|
230
|
-
- `--rel-
|
|
231
|
-
- `--rel-
|
|
232
|
-
- `--rel-
|
|
233
|
-
- `--rel-
|
|
234
|
-
- `--rel-
|
|
235
|
-
- `--rel-
|
|
229
|
+
- `--rel-bg-surface` - Button/link background
|
|
230
|
+
- `--rel-text-label` - Text color and active page background
|
|
231
|
+
- `--rel-border-default` - Border color
|
|
232
|
+
- `--rel-text-default` - Hover border color
|
|
233
|
+
- `--rel-bg-neutral-elevated-1` - Hover background
|
|
234
|
+
- `--rel-text-placeholder` - Ellipsis color
|
|
235
|
+
- `--rel-bg-info` - Focus outline
|
|
236
236
|
|
|
237
237
|
### Typography
|
|
238
|
-
- `--rel-
|
|
239
|
-
- `--rel-
|
|
240
|
-
- `--rel-
|
|
241
|
-
- `--rel-
|
|
242
|
-
- `--rel-
|
|
238
|
+
- `--rel-fonts-font-family` - Font family (Poppins)
|
|
239
|
+
- `--rel-fonts-weight-body-medium` - Default text weight
|
|
240
|
+
- `--rel-fonts-weight-body-semibold` - Active page weight
|
|
241
|
+
- `--rel-body-sm-regular-font-size` - Comfortable mode font size
|
|
242
|
+
- `--rel-body-xs-regular-font-size` - Compact mode font size
|
|
243
243
|
|
|
244
244
|
### Spacing
|
|
245
|
-
- `--rel-spacing-
|
|
246
|
-
- `--rel-spacing-
|
|
247
|
-
- `--rel-spacing-
|
|
248
|
-
- `--rel-spacing-
|
|
245
|
+
- `--rel-spacing-3xs` (2px) - Compact gap
|
|
246
|
+
- `--rel-spacing-2xs` (4px) - Comfortable gap
|
|
247
|
+
- `--rel-spacing-xs` (8px) - Compact padding
|
|
248
|
+
- `--rel-spacing-sm` (12px) - Comfortable padding
|
|
249
249
|
|
|
250
250
|
### Borders
|
|
251
|
-
- `--rel-
|
|
252
|
-
- `--rel-
|
|
251
|
+
- `--rel-stroke-sm` (1px) - Border width
|
|
252
|
+
- `--rel-border-radius-sm` (8px) - Border radius
|
|
253
253
|
|
|
254
254
|
## Complete Examples
|
|
255
255
|
|