@odx/ui 1.0.0-rc.3 → 1.0.0-rc.5

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 (33) hide show
  1. package/core-theme.css +1 -1
  2. package/package.json +1 -1
  3. package/scss/abstract/_utils.scss +16 -7
  4. package/scss/cdk/active-indicator.scss +25 -0
  5. package/scss/components/area-header.component.scss +6 -13
  6. package/scss/components/button.component.scss +1 -0
  7. package/scss/components/chip.component.scss +51 -0
  8. package/scss/components/circular-progress.component.scss +75 -0
  9. package/scss/components/form-field.component.scss +11 -7
  10. package/scss/components/header.component.scss +1 -1
  11. package/scss/components/list-item.component.scss +101 -0
  12. package/scss/components/list.component.scss +3 -0
  13. package/scss/components/loading-spinner.component.scss +53 -0
  14. package/scss/components/main-menu-item.component.scss +2 -1
  15. package/scss/components/main-menu.component.scss +1 -0
  16. package/scss/components/modal.component.scss +19 -3
  17. package/scss/components/progress.component.scss +41 -0
  18. package/scss/components/rail-navigation-item.component.scss +60 -0
  19. package/scss/components/rail-navigation.component.scss +32 -0
  20. package/scss/components/switch.component.scss +1 -2
  21. package/scss/components/toggle-button-group.component.scss +33 -0
  22. package/scss/components/toggle-button.component.scss +11 -26
  23. package/scss/core.scss +15 -0
  24. package/scss/layout/_base.scss +6 -0
  25. package/scss/layout/_content.scss +20 -0
  26. package/scss/layout/_helpers.scss +0 -16
  27. package/scss/layout/_text-list.scss +18 -0
  28. package/scss/layout/_typography.scss +17 -22
  29. package/scss/reset.scss +4 -0
  30. package/scss/variables/_color-palettes.scss +2 -0
  31. package/scss/variables/_colors.scss +3 -0
  32. package/scss/variables/_controls.scss +1 -1
  33. package/scss/variables/_visuals.scss +4 -4
@@ -24,13 +24,6 @@
24
24
  flex: 0 0 auto;
25
25
  }
26
26
 
27
- &__container,
28
- &__inner,
29
- &__title,
30
- &__subtitle {
31
- @include typography.prevent-text-overflow();
32
- }
33
-
34
27
  &__title,
35
28
  &__subtitle {
36
29
  display: block;
@@ -48,14 +41,14 @@
48
41
 
49
42
  &__title {
50
43
  @extend .odx-title;
51
- @extend .odx-title--6;
44
+ @extend .odx-title-6;
52
45
 
53
46
  color: var(--odx-area-header-title-color);
54
47
  }
55
48
 
56
49
  &__subtitle {
57
50
  @extend .odx-subtitle;
58
- @extend .odx-title--6;
51
+ @extend .odx-subtitle-6;
59
52
 
60
53
  color: var(--odx-area-header-subtitle-color);
61
54
  }
@@ -101,7 +94,7 @@
101
94
  }
102
95
 
103
96
  .odx-area-header__title {
104
- @extend .odx-title--5;
97
+ @extend .odx-title-5;
105
98
  }
106
99
  }
107
100
 
@@ -113,7 +106,7 @@
113
106
  }
114
107
 
115
108
  .odx-area-header__title {
116
- @extend .odx-title--4;
109
+ @extend .odx-title-4;
117
110
 
118
111
  @include breakpoints.down(tablet) {
119
112
  @include dimensions.line-height(1);
@@ -139,11 +132,11 @@
139
132
  }
140
133
 
141
134
  .odx-area-header__title {
142
- @extend .odx-title--2;
135
+ @extend .odx-title-2;
143
136
  }
144
137
 
145
138
  .odx-area-header__subtitle {
146
- @extend .odx-title--5;
139
+ @extend .odx-subtitle-5;
147
140
  }
148
141
 
149
142
  .odx-avatar {
@@ -19,6 +19,7 @@
19
19
  @include typography.font-weight(medium);
20
20
  @include utils.center-content(true);
21
21
  @include utils.interactive($with-background: false);
22
+ @include utils.with-outline-bold;
22
23
 
23
24
  border-radius: var(--odx-v-border-radius-controls);
24
25
  min-width: dimensions.get-size(1.5);
@@ -0,0 +1,51 @@
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
+ @include typography.font-weight(medium);
13
+ @include motion.transition(background-color color);
14
+
15
+ display: inline-flex;
16
+ gap: dimensions.get-size(math.div(4, 24));
17
+ user-select: none;
18
+
19
+ &__content {
20
+ @include typography.prevent-text-overflow();
21
+ }
22
+
23
+ &__action {
24
+ @include utils.center-content();
25
+ @include motion.transition(background-color color outline);
26
+
27
+ border-radius: 50%;
28
+ margin: 0;
29
+ }
30
+
31
+ @each $size, $size-factor, $font-size-factor in $sizes {
32
+ &--#{$size} {
33
+ @include dimensions.padding-x(math.div($size-factor, 3));
34
+ @include dimensions.line-height($size-factor);
35
+ @include typography.font-size($font-size-factor);
36
+
37
+ border-radius: dimensions.get-size(math.div($size-factor, 2));
38
+
39
+ #{$root}__action {
40
+ @include dimensions.margin(math.div($size-factor, -3), 'right');
41
+ }
42
+ }
43
+ }
44
+
45
+ @each $variant in $variants {
46
+ &--#{$variant} {
47
+ background-color: var(--odx-c-#{$variant});
48
+ color: var(--odx-c-#{$variant}-text);
49
+ }
50
+ }
51
+ }
@@ -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
+ }
@@ -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);
@@ -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
 
@@ -169,6 +169,10 @@ $form-field-inner-padding: math.div(8, 24);
169
169
 
170
170
  #{$control-selector} {
171
171
  @include utils.non-interactive;
172
+
173
+ &::placeholder {
174
+ color: var(--odx-input-control-color-disabled);
175
+ }
172
176
  }
173
177
  }
174
178
 
@@ -190,9 +194,9 @@ $form-field-inner-padding: math.div(8, 24);
190
194
  }
191
195
  }
192
196
 
193
- .odx-form-group,
194
- .odx-form-field {
195
- &.is-readonly .odx-form-field__info {
197
+ .odx-form-field.is-readonly,
198
+ .odx-form-group:has(.odx-form-field.is-readonly) {
199
+ .odx-form-field__info {
196
200
  @include utils.non-interactive();
197
201
 
198
202
  opacity: 0;
@@ -24,7 +24,7 @@
24
24
 
25
25
  &__title {
26
26
  @extend .odx-title;
27
- @extend .odx-title--6;
27
+ @extend .odx-title-6;
28
28
  @include typography.prevent-text-overflow();
29
29
  }
30
30
 
@@ -0,0 +1,101 @@
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 typography.prevent-text-overflow();
14
+ @include utils.interactive(false);
15
+ @include utils.vertical-center-content();
16
+
17
+ border-radius: var(--odx-v-border-radius);
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
+ bottom: 0;
34
+ content: '';
35
+ display: block;
36
+ position: absolute;
37
+ width: calc(100% - #{dimensions.get-size(math.div(2, 3))});
38
+ }
39
+
40
+ &:hover,
41
+ &:focus-visible,
42
+ &:last-child {
43
+ &::before {
44
+ border-bottom-color: transparent;
45
+ }
46
+ }
47
+
48
+ &:hover {
49
+ background-color: var(--blue-700-5);
50
+ }
51
+
52
+ &.is-disabled {
53
+ color: var(--odx-input-control-color-disabled);
54
+ pointer-events: none;
55
+ }
56
+
57
+ &--danger {
58
+ --odx-c-focus: var(--odx-c-danger);
59
+
60
+ @include utils.with-outline-bold;
61
+
62
+ background-color: var(--odx-c-danger);
63
+ color: var(--odx-c-danger-text);
64
+
65
+ &::before {
66
+ border-bottom-color: transparent;
67
+ }
68
+
69
+ &:hover {
70
+ background-color: var(--odx-c-danger-hover);
71
+ }
72
+
73
+ &.is-disabled {
74
+ color: var(--odx-c-danger-text-disabled);
75
+ }
76
+ }
77
+
78
+ &--selected {
79
+ background-color: var(--odx-c-selected);
80
+
81
+ &::before {
82
+ border-bottom-color: transparent;
83
+ }
84
+
85
+ &:hover {
86
+ background-color: var(--odx-c-selected-hover);
87
+ }
88
+
89
+ &#{$root}--danger {
90
+ background-color: var(--odx-c-danger-active);
91
+
92
+ &:hover {
93
+ background-color: var(--red-800);
94
+ }
95
+
96
+ &.is-disabled {
97
+ color: var(--odx-c-danger-text);
98
+ }
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,3 @@
1
+ .odx-list {
2
+ display: block;
3
+ }
@@ -0,0 +1,53 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/motion';
3
+ @use '../abstract/utils';
4
+
5
+ .odx-loading-spinner {
6
+ $root: &;
7
+
8
+ backdrop-filter: blur(var(--odx-v-backdrop-blur));
9
+
10
+ &,
11
+ &__backdrop {
12
+ height: 100%;
13
+ left: 0;
14
+ position: absolute;
15
+ scroll-behavior: contain;
16
+ top: 0;
17
+ width: 100%;
18
+ z-index: 1;
19
+ }
20
+
21
+ &__backdrop {
22
+ @include motion.transition(background-color);
23
+
24
+ background-color: transparent;
25
+ opacity: 0.8;
26
+ }
27
+
28
+ .odx-circular-progress {
29
+ height: 66.67%;
30
+ left: 50%;
31
+ max-height: 40px;
32
+ position: absolute;
33
+ top: 50%;
34
+ transform: translate(-50%, -50%);
35
+ z-index: 2;
36
+
37
+ &__track {
38
+ stroke: var(--blue-700-15);
39
+ }
40
+ }
41
+
42
+ &--auto-color {
43
+ .odx-circular-progress {
44
+ &__indicator {
45
+ stroke: currentcolor;
46
+ }
47
+ }
48
+ }
49
+
50
+ &-parent {
51
+ user-select: none;
52
+ }
53
+ }
@@ -16,7 +16,7 @@
16
16
  @include dimensions.height(3, math.div(7, 3));
17
17
  @include dimensions.padding-x(math.div(2, 3));
18
18
  @include motion.transition(color background-color outline);
19
- @include utils.interactive();
19
+ @include utils.interactive(false);
20
20
  @include utils.vertical-center-content();
21
21
  @include typography.font-weight(medium);
22
22
  @include typography.prevent-text-overflow();
@@ -29,6 +29,7 @@
29
29
  background-color: var(--odx-main-menu-item-background-color-hover);
30
30
  }
31
31
 
32
+ &.is-selected,
32
33
  &:active {
33
34
  background-color: var(--odx-main-menu-item-background-color-active);
34
35
  }
@@ -33,6 +33,7 @@
33
33
  max-width: var(--odx-main-menu-max-width);
34
34
  position: fixed;
35
35
  top: 0;
36
+ width: 100%;
36
37
  z-index: 9000;
37
38
  }
38
39
 
@@ -15,7 +15,6 @@
15
15
  display: block;
16
16
  height: 100%;
17
17
  left: 0;
18
- overflow: auto;
19
18
  overscroll-behavior: contain;
20
19
  position: fixed;
21
20
  top: 0;
@@ -27,8 +26,13 @@
27
26
  --odx-modal-margin-x: #{dimensions.get-size(1)};
28
27
  }
29
28
 
29
+ &--sidesheet {
30
+ backdrop-filter: unset;
31
+ background-color: unset;
32
+ }
33
+
30
34
  &__container {
31
- @include dimensions.padding-x(math.div(16, 24));
35
+ @include dimensions.padding-x(1);
32
36
 
33
37
  background-color: var(--odx-c-background-content);
34
38
  border-radius: var(--odx-v-border-radius);
@@ -47,6 +51,14 @@
47
51
  #{$root}--large & {
48
52
  --odx-modal-max-width: #{dimensions.get-size(50)};
49
53
  }
54
+
55
+ #{$root}--sidesheet & {
56
+ height: 100%;
57
+ left: unset;
58
+ margin-right: dimensions.get-size(0.5);
59
+ max-height: calc(100vh - var(--odx-modal-margin-y) - #{dimensions.get-size(1)});
60
+ right: 0;
61
+ }
50
62
  }
51
63
 
52
64
  &__header,
@@ -73,13 +85,17 @@
73
85
 
74
86
  display: block;
75
87
  overflow: auto;
88
+
89
+ #{$root}--sidesheet & {
90
+ flex: 1;
91
+ }
76
92
  }
77
93
 
78
94
  &__footer {
79
- --odx-grid-gutter: #{dimensions.get-size(math.div(16, 24))};
80
95
  @include dimensions.height(2.5);
81
96
  @include dimensions.padding($modal-padding, bottom);
82
97
 
98
+ gap: dimensions.get-size(math.div(16, 24));
83
99
  justify-content: flex-end;
84
100
  }
85
101
  }
@@ -0,0 +1,41 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/motion';
3
+ @use '../abstract/dimensions';
4
+
5
+ @keyframes progress-indeterminate-animation {
6
+ from {
7
+ transform: translateX(-100%);
8
+ }
9
+
10
+ to {
11
+ transform: translateX(100%);
12
+ }
13
+ }
14
+
15
+ .odx-progress {
16
+ @include dimensions.height(1, math.div(4, 24));
17
+
18
+ background: var(--gray-100);
19
+ display: block;
20
+ outline: 1px solid var(--gray-200);
21
+ outline-offset: -1px;
22
+ overflow: hidden;
23
+ position: relative;
24
+
25
+ &__indicator {
26
+ @include motion.transition(transform);
27
+
28
+ background-color: var(--odx-c-highlight);
29
+ display: block;
30
+ height: 100%;
31
+ left: 0;
32
+ position: absolute;
33
+ top: 0;
34
+ transform-origin: 0 0;
35
+ width: 100%;
36
+ }
37
+
38
+ &--indeterminate #{&}__indicator {
39
+ animation: 2s ease-in-out infinite progress-indeterminate-animation;
40
+ }
41
+ }
@@ -0,0 +1,60 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/motion';
4
+ @use '../abstract/typography';
5
+ @use '../abstract/breakpoints';
6
+ @use '../abstract//utils';
7
+
8
+ .odx-rail-navigation-item {
9
+ @include motion.transition(outline-color background-color color);
10
+ @include dimensions.padding(math.div(8, 24));
11
+ @include utils.interactive(false);
12
+
13
+ align-items: center;
14
+ background-color: unset;
15
+ border-radius: dimensions.get-size(math.div(3, 24));
16
+ box-sizing: border-box;
17
+ display: flex;
18
+ text-align: left;
19
+
20
+ &:hover {
21
+ background-color: var(--blue-700-5);
22
+ }
23
+
24
+ &.is-selected {
25
+ background-color: var(--odx-c-selected);
26
+
27
+ &:hover {
28
+ background-color: var(--odx-c-selected-hover);
29
+ }
30
+ }
31
+
32
+ &.is-disabled {
33
+ background-color: transparent;
34
+ color: var(--odx-input-control-color-disabled);
35
+ pointer-events: none;
36
+ }
37
+
38
+ &__container {
39
+ @include typography.prevent-text-overflow();
40
+ @include motion.transition(width padding-left opacity);
41
+
42
+ opacity: 0;
43
+ overflow: hidden;
44
+ padding-left: 0;
45
+ width: 0;
46
+
47
+ .odx-rail-navigation.is-open & {
48
+ &:not(:empty) {
49
+ @include dimensions.padding(math.div(8, 24), left);
50
+
51
+ opacity: 1;
52
+ width: calc(var(--odx-rail-navigation-max-width) - dimensions.get-size(math.div(64, 24)));
53
+ }
54
+ }
55
+ }
56
+
57
+ > .odx-icon {
58
+ margin: 0;
59
+ }
60
+ }
@@ -0,0 +1,32 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/motion';
4
+ @use '../abstract/breakpoints';
5
+
6
+ .odx-rail-navigation {
7
+ --odx-rail-navigation-max-width: 230px;
8
+
9
+ @include motion.transition(max-width);
10
+
11
+ align-items: flex-start;
12
+ display: inline-flex;
13
+ flex-direction: column;
14
+ height: 100%;
15
+ justify-content: space-between;
16
+ padding: dimensions.get-size(1) dimensions.get-size(math.div(8, 24));
17
+
18
+ &__expand > .odx-icon {
19
+ @include motion.transition(transform);
20
+ }
21
+
22
+ &__content {
23
+ display: flex;
24
+ flex-direction: column;
25
+ gap: dimensions.get-size(math.div(12, 24));
26
+ overflow: auto;
27
+ }
28
+
29
+ &.is-open &__expand > .odx-icon {
30
+ transform: rotateY(180deg);
31
+ }
32
+ }
@@ -91,8 +91,7 @@
91
91
  content: '';
92
92
  display: block;
93
93
  height: $track-size;
94
- outline: var(--odx-v-outline);
95
- outline-color: var(--odx-c-background-content);
94
+ outline: 1px solid var(--odx-c-background-content);
96
95
  position: absolute;
97
96
  top: calc(#{$track-size} / -2 + 50%);
98
97
  transform: translateX(-1px);
@@ -4,6 +4,7 @@
4
4
  @use '../abstract/utils';
5
5
 
6
6
  .odx-toggle-button-group {
7
+ $root: &;
7
8
  @include dimensions.height(2, 1.5);
8
9
  @include dimensions.padding-x(math.div(6, 24));
9
10
  @include motion.transition(background-color);
@@ -11,7 +12,39 @@
11
12
  @include utils.with-outline();
12
13
 
13
14
  border-radius: var(--odx-v-border-radius-controls);
15
+ color: var(--odx-control-color);
14
16
  column-gap: dimensions.get-size(math.div(6, 24));
17
+ position: relative;
18
+
19
+ &__indicator {
20
+ @include dimensions.height(2, 1);
21
+ @include utils.with-outline();
22
+
23
+ background-color: var(--odx-c-highlight);
24
+ border-radius: 2px;
25
+
26
+ #{$root}.is-disabled & {
27
+ background-color: var(--odx-control-background-color-disabled);
28
+ }
29
+
30
+ #{$root}.is-readonly & {
31
+ background-color: var(--odx-control-background-color-readonly);
32
+ outline-color: var(--odx-control-outline-color-readonly);
33
+ }
34
+
35
+ #{$root}.is-readonly.is-disabled & {
36
+ background-color: transparent;
37
+ outline-color: var(--odx-control-color-disabled);
38
+ }
39
+
40
+ #{$root}:focus-within:has(:focus-visible) & {
41
+ outline-color: var(--odx-control-outline-color-selected-focus);
42
+ }
43
+ }
44
+
45
+ .odx-toggle-button {
46
+ z-index: 1;
47
+ }
15
48
 
16
49
  &.has-error:not(.is-disabled, .is-readonly) {
17
50
  background-color: var(--odx-c-error);