@odx/ui 1.0.0-rc.2 → 1.0.0-rc.21

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 (73) hide show
  1. package/323d385340fb9fee6450.svg +6 -0
  2. package/README.md +4 -4
  3. package/core-icons.css +43 -0
  4. package/core-icons.woff2 +0 -0
  5. package/core-theme.css +1 -1
  6. package/package.json +2 -1
  7. package/scss/abstract/_breakpoints.scss +12 -6
  8. package/scss/abstract/_dimensions.scss +2 -1
  9. package/scss/abstract/_motion.scss +3 -1
  10. package/scss/abstract/_utils.scss +18 -8
  11. package/scss/assets/fonts/PangeaText-MediumWeb.woff2 +0 -0
  12. package/scss/assets/fonts/PangeaText-RegularWeb.woff2 +0 -0
  13. package/scss/assets/fonts/PangeaText-SemiBoldWeb.woff2 +0 -0
  14. package/scss/assets/images/logo.svg +6 -0
  15. package/scss/cdk/active-indicator.scss +25 -0
  16. package/scss/cdk/connected-overlay.scss +36 -0
  17. package/scss/components/accordion-item.component.scss +5 -8
  18. package/scss/components/action-group.component.scss +3 -3
  19. package/scss/components/area-header.component.scss +15 -23
  20. package/scss/components/avatar.component.scss +6 -1
  21. package/scss/components/badge.component.scss +5 -14
  22. package/scss/components/bar.component.scss +86 -0
  23. package/scss/components/breadcrumbs.component.scss +26 -0
  24. package/scss/components/button-group.component.scss +9 -5
  25. package/scss/components/button.component.scss +26 -2
  26. package/scss/components/checkbox.component.scss +2 -1
  27. package/scss/components/chip.component.scss +52 -0
  28. package/scss/components/circular-progress.component.scss +75 -0
  29. package/scss/components/content-box.component.scss +20 -16
  30. package/scss/components/dropdown.component.scss +28 -0
  31. package/scss/components/expandable-list-item.component.scss +66 -0
  32. package/scss/components/form-field.component.scss +41 -9
  33. package/scss/components/header.component.scss +10 -4
  34. package/scss/components/icon.component.scss +1 -1
  35. package/scss/components/inline-message.component.scss +33 -0
  36. package/scss/components/launch-tile.component.scss +119 -0
  37. package/scss/components/list-item.component.scss +107 -0
  38. package/scss/components/list.component.scss +3 -0
  39. package/scss/components/loading-spinner.component.scss +54 -0
  40. package/scss/components/main-menu-item.component.scss +2 -1
  41. package/scss/components/main-menu.component.scss +6 -4
  42. package/scss/components/mainfilter-group.component.scss +80 -0
  43. package/scss/components/menu.component.scss +52 -0
  44. package/scss/components/modal.component.scss +79 -10
  45. package/scss/components/progress.component.scss +41 -0
  46. package/scss/components/radio-button.component.scss +1 -1
  47. package/scss/components/rail-navigation-item.component.scss +60 -0
  48. package/scss/components/rail-navigation.component.scss +32 -0
  49. package/scss/components/select.component.scss +107 -0
  50. package/scss/components/slider.component.scss +131 -0
  51. package/scss/components/spinbox.component.scss +124 -0
  52. package/scss/components/switch.component.scss +4 -4
  53. package/scss/components/tab-bar-item.component.scss +53 -0
  54. package/scss/components/tab-bar.component.scss +124 -0
  55. package/scss/components/toast-item.component.scss +77 -0
  56. package/scss/components/toast.component.scss +33 -0
  57. package/scss/components/toggle-button-group.component.scss +43 -4
  58. package/scss/components/toggle-button.component.scss +51 -29
  59. package/scss/components/tooltip.component.scss +34 -0
  60. package/scss/core.scss +34 -10
  61. package/scss/layout/_base.scss +6 -0
  62. package/scss/layout/_content.scss +25 -0
  63. package/scss/layout/_description-list.scss +30 -0
  64. package/scss/layout/_helpers.scss +6 -16
  65. package/scss/layout/_layout.scss +4 -0
  66. package/scss/layout/_text-list.scss +18 -0
  67. package/scss/layout/_typography.scss +23 -26
  68. package/scss/reset.scss +5 -0
  69. package/scss/variables/_color-palettes.scss +3 -2
  70. package/scss/variables/_colors.scss +9 -1
  71. package/scss/variables/_controls.scss +11 -2
  72. package/scss/variables/_typography.scss +2 -2
  73. package/scss/variables/_visuals.scss +12 -5
@@ -12,7 +12,7 @@
12
12
  display: inline-block;
13
13
 
14
14
  &.is-disabled {
15
- color: var(--odx-input-control-color-disabled);
15
+ color: var(--odx-control-color-disabled);
16
16
  }
17
17
 
18
18
  &.is-readonly {
@@ -57,6 +57,7 @@
57
57
 
58
58
  > .odx-icon {
59
59
  $checkmark-size: math.div(18, 24);
60
+
60
61
  @include dimensions.container($checkmark-size);
61
62
  @include motion.transition(opacity);
62
63
 
@@ -0,0 +1,52 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/utils';
4
+ @use '../abstract/motion';
5
+ @use '../abstract/typography';
6
+
7
+ $sizes: 'small' 1 -1, 'medium' 1.5 0;
8
+ $variants: 'secondary', 'highlight', 'success', 'danger';
9
+
10
+ .odx-chip {
11
+ $root: &;
12
+
13
+ @include typography.font-weight(medium);
14
+ @include motion.transition(background-color color);
15
+
16
+ display: inline-flex;
17
+ gap: dimensions.get-size(math.div(4, 24));
18
+ user-select: none;
19
+
20
+ &__content {
21
+ @include typography.prevent-text-overflow();
22
+ }
23
+
24
+ &__action {
25
+ @include utils.center-content();
26
+ @include motion.transition(background-color color outline);
27
+
28
+ border-radius: 50%;
29
+ margin: 0;
30
+ }
31
+
32
+ @each $size, $size-factor, $font-size-factor in $sizes {
33
+ &--#{$size} {
34
+ @include dimensions.padding-x(math.div($size-factor, 3));
35
+ @include dimensions.line-height($size-factor);
36
+ @include typography.font-size($font-size-factor);
37
+
38
+ border-radius: dimensions.get-size(math.div($size-factor, 2));
39
+
40
+ #{$root}__action {
41
+ @include dimensions.margin(math.div($size-factor, -3), 'right');
42
+ }
43
+ }
44
+ }
45
+
46
+ @each $variant in $variants {
47
+ &--#{$variant} {
48
+ background-color: var(--odx-c-#{$variant});
49
+ color: var(--odx-c-#{$variant}-text);
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,75 @@
1
+ @use '../abstract/motion';
2
+ @use '../abstract/dimensions';
3
+
4
+ @keyframes odx-circular-progress-indicator-animation {
5
+ 0% {
6
+ stroke-dashoffset: 100;
7
+ }
8
+
9
+ 25% {
10
+ stroke-dashoffset: 250;
11
+ transform: rotate(180deg);
12
+ }
13
+
14
+ 100% {
15
+ stroke-dashoffset: 100;
16
+ transform: rotate(270deg);
17
+ }
18
+ }
19
+
20
+ @keyframes odx-circular-progress-inner-animation {
21
+ 0% {
22
+ transform: rotate(0deg);
23
+ }
24
+
25
+ 100% {
26
+ transform: rotate(360deg);
27
+ }
28
+ }
29
+
30
+ .odx-circular-progress {
31
+ $root: &;
32
+
33
+ aspect-ratio: 1;
34
+ display: inline-block;
35
+ height: 100%;
36
+
37
+ &__track,
38
+ &__indicator {
39
+ fill: transparent;
40
+ }
41
+
42
+ &__track {
43
+ stroke: var(--gray-100);
44
+ }
45
+
46
+ &__indicator {
47
+ @include motion.transition(stroke-dashoffset);
48
+
49
+ stroke: var(--odx-c-highlight);
50
+ transform: rotate(-90deg);
51
+ transform-origin: 50% 50%;
52
+ }
53
+
54
+ &--indeterminate {
55
+ #{$root}__inner {
56
+ animation: 1.75s linear infinite odx-circular-progress-inner-animation;
57
+ }
58
+
59
+ #{$root}__indicator {
60
+ animation: 1.75s ease infinite odx-circular-progress-indicator-animation both;
61
+ }
62
+ }
63
+
64
+ &--small {
65
+ @include dimensions.height(2, 1.5);
66
+ }
67
+
68
+ &--medium {
69
+ @include dimensions.height(3, 2.5);
70
+ }
71
+
72
+ &--large {
73
+ @include dimensions.height(4, 4);
74
+ }
75
+ }
@@ -17,34 +17,38 @@
17
17
  }
18
18
 
19
19
  &__header {
20
- @include dimensions.padding(1, ('top', 'right', 'left'));
21
- @include breakpoints.down(phone) {
22
- @include dimensions.padding(0.5, ('top', 'right', 'left'));
20
+ @include dimensions.padding(0.5, ('top', 'right', 'left'));
21
+
22
+ @include breakpoints.up(phone) {
23
+ @include dimensions.padding(1, ('top', 'right', 'left'));
23
24
  }
24
25
  }
25
26
 
26
27
  &__footer {
27
- @include dimensions.padding(1, ('right', 'bottom', 'left'));
28
- @include breakpoints.down(phone) {
29
- @include dimensions.padding(0.5, ('right', 'bottom', 'left'));
28
+ @include dimensions.padding(0.5, ('right', 'bottom', 'left'));
29
+
30
+ @include breakpoints.up(phone) {
31
+ @include dimensions.padding(1, ('right', 'bottom', 'left'));
30
32
  }
31
33
  }
32
34
 
33
35
  &__content {
34
- @include dimensions.padding(1);
35
- @include breakpoints.down(phone) {
36
- @include dimensions.padding(0.5);
36
+ @include dimensions.padding(0.5);
37
+
38
+ @include breakpoints.up(phone) {
39
+ @include dimensions.padding(1);
37
40
  }
38
41
  }
39
42
 
40
- .odx-area-header ~ &__content {
41
- padding-top: 0;
42
- }
43
+ > .odx-area-header {
44
+ @include dimensions.padding(0.5, ('top', 'bottom'));
43
45
 
44
- .odx-area-header {
45
- @include dimensions.padding(1, ('top', 'bottom'));
46
- @include breakpoints.down(phone) {
47
- @include dimensions.padding(0.5, ('top', 'bottom'));
46
+ @include breakpoints.up(phone) {
47
+ @include dimensions.padding(1, ('top', 'bottom'));
48
48
  }
49
49
  }
50
+
51
+ & > .odx-area-header ~ &__content {
52
+ padding-top: 0;
53
+ }
50
54
  }
@@ -0,0 +1,28 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+
4
+ $dropdown-open-selector: '.odx-dropdown-host[aria-expanded="true"]';
5
+
6
+ .odx-dropdown {
7
+ background-color: var(--odx-c-background-content);
8
+ border-radius: var(--odx-v-border-radius);
9
+ box-shadow: var(--odx-v-box-shadow-layer-2);
10
+ display: block;
11
+ min-height: inherit;
12
+
13
+ &__inner {
14
+ @include dimensions.padding-x(0.5);
15
+
16
+ border-bottom: dimensions.get-size(0.5) solid transparent;
17
+ border-top: dimensions.get-size(0.5) solid transparent;
18
+ max-height: inherit;
19
+ min-height: inherit;
20
+ overflow: auto;
21
+ }
22
+ }
23
+
24
+ .odx-dropdown-overlay {
25
+ .odx-cdk-connected-overlay-arrow {
26
+ background-color: var(--odx-c-background-content);
27
+ }
28
+ }
@@ -0,0 +1,66 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/motion';
3
+ @use '../abstract/dimensions';
4
+
5
+ .odx-expandable-list-item {
6
+ $root: &;
7
+
8
+ position: relative;
9
+
10
+ &::before {
11
+ @include motion.transition(border-color);
12
+
13
+ border-bottom: 1px solid var(--gray-200);
14
+ content: '';
15
+ display: block;
16
+ position: absolute;
17
+ top: 0;
18
+ width: calc(100% - #{dimensions.get-size(math.div(14, 24))});
19
+ }
20
+
21
+ &:hover,
22
+ &:focus-visible,
23
+ &:first-child {
24
+ &::before {
25
+ border-bottom-color: transparent;
26
+ }
27
+ }
28
+
29
+ &--danger + &::before,
30
+ &--expanded + &::before,
31
+ &:hover + &::before {
32
+ border-color: transparent;
33
+ }
34
+
35
+ &--danger {
36
+ &::before {
37
+ border-bottom-color: transparent;
38
+ }
39
+ }
40
+
41
+ &--expanded {
42
+ &::before {
43
+ border-bottom-color: transparent;
44
+ }
45
+ }
46
+
47
+ &__content {
48
+ flex: 1;
49
+ }
50
+
51
+ &__expand-icon {
52
+ @include motion.transition(transform);
53
+
54
+ position: relative;
55
+
56
+ #{$root}--expanded & {
57
+ transform: scaleY(-1);
58
+ }
59
+ }
60
+
61
+ &__slot {
62
+ .odx-list-item__content {
63
+ @include dimensions.padding(math.div(36, 24), left);
64
+ }
65
+ }
66
+ }
@@ -21,7 +21,7 @@ $form-field-inner-padding: math.div(8, 24);
21
21
 
22
22
  .odx-form-field {
23
23
  $root: &;
24
- $control-selector: '> *:not(.odx-form-field__prefix, .odx-form-field__suffix)';
24
+ $control-selector: '.odx-form-field-control';
25
25
 
26
26
  @include dimensions.padding($form-field-label-height, top);
27
27
 
@@ -88,7 +88,7 @@ $form-field-inner-padding: math.div(8, 24);
88
88
  @include dimensions.min-height(1.5);
89
89
  @include motion.transition(background-color color outline-color);
90
90
  @include utils.with-outline();
91
- @include utils.focus-state(true, true, $focus-within-selector: $control-selector);
91
+ @include utils.focus-state(true, true, $control-selector);
92
92
 
93
93
  background-color: var(--odx-input-control-background-color);
94
94
  border-radius: var(--odx-v-border-radius-controls);
@@ -108,7 +108,7 @@ $form-field-inner-padding: math.div(8, 24);
108
108
  left: 0;
109
109
  position: absolute;
110
110
  width: 100%;
111
- z-index: 1;
111
+ z-index: var(--odx-v-layer-1);
112
112
  }
113
113
 
114
114
  #{$control-selector} {
@@ -121,8 +121,8 @@ $form-field-inner-padding: math.div(8, 24);
121
121
  &::placeholder {
122
122
  @include typography.font-weight(normal);
123
123
 
124
- color: var(--odx-input-control-placeholder-color);
125
- opacity: 1;
124
+ color: var(--odx-input-control-color);
125
+ opacity: 0.65;
126
126
  }
127
127
  }
128
128
 
@@ -155,6 +155,19 @@ $form-field-inner-padding: math.div(8, 24);
155
155
  }
156
156
  }
157
157
 
158
+ #{$root}.has-warning & {
159
+ background-color: var(--odx-input-control-background-color-warning);
160
+ outline-color: var(--odx-input-control-outline-color-warning);
161
+
162
+ &:hover {
163
+ background-color: var(--odx-input-control-background-color-warning);
164
+ }
165
+
166
+ &::after {
167
+ background-color: var(--odx-input-control-color-warning);
168
+ }
169
+ }
170
+
158
171
  #{$root}.is-disabled &,
159
172
  #{$root}.is-readonly & {
160
173
  &::after {
@@ -168,7 +181,11 @@ $form-field-inner-padding: math.div(8, 24);
168
181
  outline-color: var(--odx-input-control-outline-color-disabled);
169
182
 
170
183
  #{$control-selector} {
171
- @include utils.non-interactive;
184
+ @include utils.non-interactive();
185
+
186
+ &::placeholder {
187
+ color: var(--odx-input-control-color-disabled);
188
+ }
172
189
  }
173
190
  }
174
191
 
@@ -188,11 +205,22 @@ $form-field-inner-padding: math.div(8, 24);
188
205
  color: var(--odx-form-field-hint-color);
189
206
  text-align: right;
190
207
  }
208
+
209
+ &--simple {
210
+ padding: 0;
211
+
212
+ @include dimensions.margin-y(0.25);
213
+
214
+ #{$root}__label,
215
+ #{$root}__info {
216
+ display: none;
217
+ }
218
+ }
191
219
  }
192
220
 
193
- .odx-form-group,
194
- .odx-form-field {
195
- &.is-readonly .odx-form-field__info {
221
+ .odx-form-field.is-readonly,
222
+ .odx-form-group:has(.odx-form-field.is-readonly) {
223
+ .odx-form-field__info {
196
224
  @include utils.non-interactive();
197
225
 
198
226
  opacity: 0;
@@ -202,3 +230,7 @@ $form-field-inner-padding: math.div(8, 24);
202
230
  .odx-form-field-error {
203
231
  color: var(--odx-input-control-color-error);
204
232
  }
233
+
234
+ .odx-form-field.has-warning .odx-form-field-error {
235
+ color: var(--odx-input-control-color-warning);
236
+ }
@@ -1,4 +1,5 @@
1
1
  @use 'sass:math';
2
+ @use '../abstract/breakpoints';
2
3
  @use '../abstract/dimensions';
3
4
  @use '../abstract/utils';
4
5
  @use '../abstract/typography';
@@ -17,14 +18,14 @@
17
18
  margin-right: dimensions.get-size(0.5);
18
19
  }
19
20
 
20
- &__title,
21
- .odx-logo {
21
+ > .odx-logo,
22
+ &__title {
22
23
  margin-right: auto;
23
24
  }
24
25
 
25
26
  &__title {
26
27
  @extend .odx-title;
27
- @extend .odx-title--6;
28
+ @extend .odx-title-6;
28
29
  @include typography.prevent-text-overflow();
29
30
  }
30
31
 
@@ -34,7 +35,12 @@
34
35
  padding-right: dimensions.get-size(0.5);
35
36
  }
36
37
 
37
- &__title ~ .odx-logo {
38
+ &:has(.odx-title) > .odx-logo {
38
39
  display: none;
40
+ margin-right: dimensions.get-size(0.5);
41
+
42
+ @include breakpoints.up(tablet) {
43
+ display: block;
44
+ }
39
45
  }
40
46
  }
@@ -2,7 +2,7 @@
2
2
  @use '../abstract/dimensions';
3
3
  @use '../abstract/utils';
4
4
 
5
- $icon-sizes: (small math.div(2, 3) 1, large math.div(4, 3) 2);
5
+ $icon-sizes: (small math.div(16, 24) 1, large math.div(32, 24) 2, xlarge math.div(48, 24) 2);
6
6
 
7
7
  .odx-icon {
8
8
  @include dimensions.container(1);
@@ -0,0 +1,33 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/typography';
4
+
5
+ .odx-inline-message {
6
+ --odx-c-default: var(--blue-50);
7
+ --odx-c-warning: var(--yellow-50);
8
+ --odx-c-danger: var(--red-00);
9
+ --odx-c-success: var(--green-00);
10
+
11
+ $variants: default, warning, danger, success;
12
+
13
+ @include dimensions.padding(math.div(10, 24));
14
+
15
+ display: flex;
16
+ gap: dimensions.get-size(math.div(10, 24));
17
+
18
+ @each $variant in $variants {
19
+ &--#{$variant} {
20
+ background-color: var(--odx-c-#{$variant});
21
+ }
22
+ }
23
+
24
+ &--danger {
25
+ color: var(--red-700);
26
+ }
27
+
28
+ &__content {
29
+ @include typography.font-size(-1);
30
+
31
+ overflow: hidden;
32
+ }
33
+ }
@@ -0,0 +1,119 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/breakpoints';
3
+ @use '../abstract/dimensions';
4
+ @use '../abstract/motion';
5
+ @use '../abstract/typography';
6
+ @use '../abstract/utils';
7
+ @use './avatar.component' as avatar;
8
+
9
+ .odx-launch-tile {
10
+ $root: &;
11
+ $main-padding: dimensions.get-size(math.div(12, 24));
12
+
13
+ @include motion.transition(box-shadow outline-color);
14
+ @include utils.interactive(false);
15
+ @include utils.with-outline-bold();
16
+
17
+ background-color: var(--odx-c-background-content);
18
+ behavior: button;
19
+ border-radius: var(--odx-v-border-radius);
20
+ display: block;
21
+ padding: $main-padding;
22
+ position: relative;
23
+
24
+ &:focus-visible,
25
+ &:hover,
26
+ &:focus-within:has(:focus-visible) {
27
+ box-shadow: var(--odx-v-box-shadow-layer-1);
28
+ }
29
+
30
+ &__container {
31
+ @include dimensions.padding-x(math.div(8, 24));
32
+ @include dimensions.padding-y(0.5);
33
+
34
+ display: flex;
35
+ gap: dimensions.get-size(math.div(16, 24));
36
+
37
+ @include breakpoints.up(phone) {
38
+ @include dimensions.padding(1, bottom);
39
+
40
+ flex-direction: column;
41
+ gap: dimensions.get-size(math.div(8, 24));
42
+ }
43
+ }
44
+
45
+ &__content {
46
+ flex: 1;
47
+ padding-right: dimensions.get-size(math.div(40, 24));
48
+
49
+ @include breakpoints.up(phone) {
50
+ padding-right: unset;
51
+ text-align: center;
52
+ }
53
+ }
54
+
55
+ &__title {
56
+ @include dimensions.margin-y(math.div(9, 24));
57
+ @include typography.font-weight(medium);
58
+
59
+ font-size: dimensions.get-size(math.div(20, 24));
60
+ line-height: dimensions.get-size(math.div(30, 24));
61
+ }
62
+
63
+ &__subtitle {
64
+ color: var(--gray-500);
65
+ }
66
+
67
+ &__title,
68
+ &__subtitle {
69
+ @include motion.transition(color);
70
+
71
+ display: block;
72
+
73
+ #{$root}.is-disabled & {
74
+ color: var(--odx-c-text-disabled);
75
+ }
76
+ }
77
+
78
+ &__footer {
79
+ display: flex;
80
+ gap: dimensions.get-size(math.div(12, 24));
81
+ justify-content: flex-end;
82
+
83
+ @include breakpoints.up(phone) {
84
+ justify-content: center;
85
+ padding-bottom: dimensions.get-size(math.div(12, 24));
86
+ }
87
+
88
+ .odx-button {
89
+ margin: 0;
90
+ }
91
+ }
92
+
93
+ .odx-launch-tile-menu {
94
+ margin: 0;
95
+ position: absolute;
96
+ right: $main-padding;
97
+ top: $main-padding;
98
+ }
99
+
100
+ .odx-avatar {
101
+ @include avatar.avatar-size(math.div(64, 24), math.div(64, 24), 2, math.div(48, 24));
102
+ @include dimensions.margin-y(math.div(4, 24));
103
+
104
+ flex: 0 0 auto;
105
+
106
+ @include breakpoints.up(phone) {
107
+ @include avatar.avatar-size(math.div(128, 24), math.div(128, 24), 4, math.div(76, 24));
108
+
109
+ margin: dimensions.get-size(math.div(4, 24)) auto 0;
110
+ }
111
+ }
112
+
113
+ &.is-disabled {
114
+ .odx-avatar {
115
+ color: var(--odx-c-text-disabled);
116
+ filter: saturate(0);
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,107 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/utils';
4
+ @use '../abstract/motion';
5
+ @use '../abstract/typography';
6
+
7
+ .odx-list-item {
8
+ $root: &;
9
+
10
+ @include dimensions.padding-x(math.div(1, 3));
11
+ @include dimensions.line-height(2, 1);
12
+ @include motion.transition(border-bottom-color background-color outline-color color);
13
+ @include utils.interactive(false);
14
+ @include utils.vertical-center-content();
15
+
16
+ background-color: transparent;
17
+ border-radius: var(--odx-v-border-radius-controls);
18
+ gap: dimensions.get-size(math.div(1, 3));
19
+ position: relative;
20
+
21
+ > [odxListSuffix] {
22
+ margin-left: auto;
23
+ }
24
+
25
+ &:not(.is-disabled) {
26
+ cursor: pointer;
27
+ }
28
+
29
+ &::before {
30
+ @include motion.transition(border-color);
31
+
32
+ border-bottom: 1px solid var(--gray-200);
33
+ content: '';
34
+ display: block;
35
+ position: absolute;
36
+ top: 0;
37
+ width: calc(100% - #{dimensions.get-size(math.div(14, 24))});
38
+ }
39
+
40
+ &:hover,
41
+ &:focus-visible,
42
+ &:first-child {
43
+ &::before {
44
+ border-bottom-color: transparent;
45
+ }
46
+ }
47
+
48
+ &:hover {
49
+ background-color: var(--blue-700-5);
50
+ }
51
+
52
+ &--danger + &::before,
53
+ &--selected + &::before,
54
+ &:hover + &::before {
55
+ border-color: transparent;
56
+ }
57
+
58
+ &.is-disabled {
59
+ color: var(--odx-control-color-disabled);
60
+ pointer-events: none;
61
+ }
62
+
63
+ &--danger {
64
+ --odx-c-focus: var(--odx-c-danger);
65
+
66
+ @include utils.with-outline-bold();
67
+
68
+ background-color: var(--odx-c-danger);
69
+ color: var(--odx-c-danger-text);
70
+
71
+ &::before {
72
+ border-bottom-color: transparent;
73
+ }
74
+
75
+ &:hover {
76
+ background-color: var(--odx-c-danger-hover);
77
+ }
78
+
79
+ &.is-disabled {
80
+ color: var(--odx-c-danger-text-disabled);
81
+ }
82
+ }
83
+
84
+ &--selected {
85
+ background-color: var(--odx-c-selected);
86
+
87
+ &::before {
88
+ border-bottom-color: transparent;
89
+ }
90
+
91
+ &:hover {
92
+ background-color: var(--odx-c-selected-hover);
93
+ }
94
+
95
+ &#{$root}--danger {
96
+ background-color: var(--odx-c-danger-active);
97
+
98
+ &:hover {
99
+ background-color: var(--red-800);
100
+ }
101
+
102
+ &.is-disabled {
103
+ color: var(--odx-c-danger-text);
104
+ }
105
+ }
106
+ }
107
+ }