@odx/ui 1.0.0-rc.1 → 1.0.0-rc.10

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 (92) hide show
  1. package/323d385340fb9fee6450.svg +6 -0
  2. package/LICENSE +1 -0
  3. package/README.md +32 -0
  4. package/core-icons.css +39 -9
  5. package/core-icons.woff2 +0 -0
  6. package/core-theme.css +1 -1
  7. package/package.json +7 -8
  8. package/scss/{modules → abstract}/_breakpoints.scss +11 -11
  9. package/scss/{modules/_vertical-rythm.scss → abstract/_dimensions.scss} +29 -26
  10. package/scss/abstract/_index.scss +5 -0
  11. package/scss/abstract/_motion.scss +12 -0
  12. package/scss/abstract/_typography.scss +25 -0
  13. package/scss/abstract/_utils.scss +124 -0
  14. package/scss/cdk/active-indicator.scss +25 -0
  15. package/scss/cdk/connected-overlay.scss +36 -0
  16. package/scss/components/accordion-item.component.scss +56 -0
  17. package/scss/components/accordion.component.scss +3 -0
  18. package/scss/components/{action-group/action-group.component.scss → action-group.component.scss} +11 -7
  19. package/scss/components/{area-header/area-header.component.scss → area-header.component.scss} +33 -39
  20. package/scss/components/{avatar/avatar.component.scss → avatar.component.scss} +18 -13
  21. package/scss/components/{badge/badge.component.scss → badge.component.scss} +15 -24
  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 +99 -0
  25. package/scss/components/button.component.scss +129 -0
  26. package/scss/components/checkbox.component.scss +117 -0
  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 +54 -0
  30. package/scss/components/dropdown.component.scss +28 -0
  31. package/scss/components/form-field.component.scss +208 -0
  32. package/scss/components/header.component.scss +40 -0
  33. package/scss/components/icon.component.scss +35 -0
  34. package/scss/components/inline-message.component.scss +33 -0
  35. package/scss/components/launch-tile.component.scss +118 -0
  36. package/scss/components/{link/link.component.scss → link.component.scss} +6 -4
  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/{logo/logo.component.scss → logo.component.scss} +5 -4
  41. package/scss/components/main-menu-button.component.scss +7 -0
  42. package/scss/components/{main-menu/components/main-menu-item.component.scss → main-menu-item.component.scss} +14 -12
  43. package/scss/components/{main-menu/main-menu.component.scss → main-menu.component.scss} +37 -29
  44. package/scss/components/menu-item.component.scss +8 -0
  45. package/scss/components/menu.component.scss +16 -0
  46. package/scss/components/modal.component.scss +144 -0
  47. package/scss/components/progress.component.scss +41 -0
  48. package/scss/components/radio-button.component.scss +120 -0
  49. package/scss/components/radio-group.component.scss +14 -0
  50. package/scss/components/rail-navigation-item.component.scss +60 -0
  51. package/scss/components/rail-navigation.component.scss +32 -0
  52. package/scss/components/select.component.scss +103 -0
  53. package/scss/components/slider.component.scss +131 -0
  54. package/scss/components/spinbox.component.scss +124 -0
  55. package/scss/components/switch.component.scss +163 -0
  56. package/scss/components/tab-bar-item.component.scss +53 -0
  57. package/scss/components/tab-bar.component.scss +124 -0
  58. package/scss/components/toast-item.component.scss +79 -0
  59. package/scss/components/toast.component.scss +33 -0
  60. package/scss/components/toggle-button-group.component.scss +63 -0
  61. package/scss/components/toggle-button.component.scss +69 -0
  62. package/scss/components/tooltip.component.scss +34 -0
  63. package/scss/core.scss +66 -30
  64. package/scss/layout/_base.scss +35 -0
  65. package/scss/layout/_content.scss +25 -0
  66. package/scss/layout/_description-list.scss +30 -0
  67. package/scss/layout/_helpers.scss +85 -0
  68. package/scss/{modules → layout}/_layout.scss +96 -46
  69. package/scss/layout/_text-list.scss +18 -0
  70. package/scss/layout/_typography.scss +114 -0
  71. package/scss/{base/_reset.scss → reset.scss} +30 -5
  72. package/scss/variables/_color-palettes.scss +59 -55
  73. package/scss/variables/_colors.scss +15 -15
  74. package/scss/variables/_controls.scss +47 -0
  75. package/scss/variables/_index.scss +6 -0
  76. package/scss/variables/_typography.scss +18 -0
  77. package/scss/variables/_vertical-rythm.scss +3 -0
  78. package/scss/variables/_visuals.scss +15 -8
  79. package/scss/_helpers.scss +0 -15
  80. package/scss/base/_mixins.scss +0 -3
  81. package/scss/base/_utils.scss +0 -19
  82. package/scss/base/mixins/_container.scss +0 -31
  83. package/scss/base/mixins/_control.scss +0 -50
  84. package/scss/base/mixins/_transition.scss +0 -10
  85. package/scss/components/button/button.component.scss +0 -94
  86. package/scss/components/checkbox/checkbox.component.scss +0 -130
  87. package/scss/components/content-box/content-box.component.scss +0 -50
  88. package/scss/components/header/header.component.scss +0 -39
  89. package/scss/components/icon/icon.component.scss +0 -38
  90. package/scss/components/main-menu/components/main-menu-button.component.scss +0 -7
  91. package/scss/components/radio-group/_radio-group.component.scss +0 -145
  92. package/scss/modules/_typography.scss +0 -161
@@ -0,0 +1,120 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/typography';
4
+ @use '../abstract/utils';
5
+ @use '../abstract/motion';
6
+
7
+ .odx-radio-button {
8
+ $root: &;
9
+
10
+ color: var(--odx-control-color);
11
+ display: block;
12
+
13
+ &.is-disabled {
14
+ color: var(--odx-control-color-disabled);
15
+ }
16
+
17
+ &.is-readonly {
18
+ @include utils.non-interactive();
19
+ }
20
+
21
+ &__label {
22
+ @include dimensions.line-height(1);
23
+ @include motion.transition(background-color color outline);
24
+ @include typography.font-size(0);
25
+ @include utils.interactive($focus-within: true);
26
+
27
+ border-radius: dimensions.get-size(1);
28
+ color: inherit;
29
+ display: inline-flex;
30
+ min-height: dimensions.get-size(1);
31
+ padding: 0 2px;
32
+ user-select: auto;
33
+ vertical-align: top;
34
+
35
+ #{$root}--with-label & {
36
+ border-bottom-right-radius: calc(2 * var(--odx-v-border-radius-controls));
37
+ border-top-right-radius: calc(2 * var(--odx-v-border-radius-controls));
38
+ }
39
+
40
+ #{$root}.is-disabled & {
41
+ cursor: default;
42
+ }
43
+ }
44
+
45
+ &__input {
46
+ @include utils.visually-hidden();
47
+ }
48
+
49
+ &__indicator {
50
+ @include dimensions.container(1, math.div(20, 24));
51
+ @include motion.transition(background-color color outline-color);
52
+ @include utils.center-content();
53
+ @include utils.with-outline();
54
+
55
+ background-color: var(--odx-control-background-color);
56
+ border-radius: 50%;
57
+ color: var(--odx-control-color-selected);
58
+ flex: 0 0 auto;
59
+ outline-color: var(--odx-control-outline-color);
60
+ padding: 1px;
61
+
62
+ &::before {
63
+ @include dimensions.container(math.div(4, 24));
64
+ @include motion.transition(transform);
65
+
66
+ background-color: currentcolor;
67
+ border-radius: 50%;
68
+ content: '';
69
+ transform: scale(0);
70
+ }
71
+
72
+ #{$root}:hover & {
73
+ background-color: var(--odx-control-background-color-hover);
74
+ outline-color: var(--odx-control-outline-color-hover);
75
+ }
76
+
77
+ #{$root}.is-active &,
78
+ #{$root}__input:checked ~ & {
79
+ background-color: var(--odx-control-background-color-selected);
80
+ outline-color: var(--odx-control-outline-color-selected);
81
+
82
+ &::before {
83
+ transform: scale(1);
84
+ }
85
+ }
86
+
87
+ #{$root}.has-error & {
88
+ background-color: var(--odx-control-background-color-error);
89
+ color: var(--odx-control-color-error);
90
+ outline-color: var(--odx-control-outline-color-error);
91
+ }
92
+
93
+ #{$root}.has-error:hover & {
94
+ outline-color: var(--odx-control-outline-color-error-hover);
95
+ }
96
+
97
+ #{$root}.is-disabled & {
98
+ background-color: var(--odx-control-background-color-disabled);
99
+ color: var(--odx-control-color-disabled);
100
+ outline-color: var(--odx-control-outline-color-disabled);
101
+ }
102
+
103
+ #{$root}.is-readonly & {
104
+ background-color: var(--odx-control-background-color-readonly);
105
+ color: var(--odx-control-color-readonly);
106
+ outline-color: var(--odx-control-outline-color-readonly);
107
+ }
108
+ }
109
+
110
+ &__content {
111
+ @include dimensions.margin(0.5, left);
112
+
113
+ padding-left: 2px;
114
+
115
+ &:empty {
116
+ margin: 0;
117
+ padding: 0;
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,14 @@
1
+ @use '../abstract/dimensions';
2
+
3
+ .odx-radio-group {
4
+ @include dimensions.padding-y(0.5);
5
+
6
+ align-items: flex-start;
7
+ display: flex;
8
+ flex-direction: column;
9
+
10
+ &--horizontal {
11
+ column-gap: dimensions.get-size(0.5);
12
+ flex-flow: row wrap;
13
+ }
14
+ }
@@ -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-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
+ }
@@ -0,0 +1,103 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/motion';
4
+ @use '../abstract/typography';
5
+ @use '../abstract/utils';
6
+
7
+ :root {
8
+ --odx-select-max-height: 220px;
9
+ }
10
+
11
+ .odx-select {
12
+ $root: &;
13
+
14
+ &__trigger {
15
+ @include utils.vertical-center-content();
16
+
17
+ cursor: pointer;
18
+ flex: 1 1 100%;
19
+ gap: dimensions.get-size(math.div(6, 24));
20
+ height: 100%;
21
+ width: 100%;
22
+
23
+ #{$root}.is-readonly & {
24
+ cursor: text;
25
+ user-select: unset;
26
+ }
27
+ }
28
+
29
+ &__placeholder,
30
+ &__value {
31
+ @include dimensions.padding-y(math.div(4, 24));
32
+ @include typography.prevent-text-overflow();
33
+
34
+ flex: 1 1 auto;
35
+ gap: dimensions.get-size(math.div(4, 24));
36
+ user-select: none;
37
+ }
38
+
39
+ &__placeholder {
40
+ @include typography.font-weight(normal);
41
+
42
+ color: var(--odx-input-control-color);
43
+ opacity: 0.65;
44
+ }
45
+
46
+ &__search {
47
+ height: 100%;
48
+ outline: inherit;
49
+ padding: 0 !important;
50
+ }
51
+
52
+ &__indicator {
53
+ @include motion.transition(transform opacity);
54
+ @include dimensions.margin(math.div(-2, 24), right);
55
+
56
+ margin-left: auto;
57
+
58
+ #{$root}.is-readonly & {
59
+ opacity: 0;
60
+ }
61
+ }
62
+ }
63
+
64
+ .odx-select-dropdown {
65
+ display: flex;
66
+ flex-direction: column;
67
+ max-height: var(--odx-select-max-height);
68
+ min-height: dimensions.get-size(1.5);
69
+ }
70
+
71
+ .odx-option {
72
+ @include dimensions.line-height(1.5, 1);
73
+ @include dimensions.margin(math.div(4, 24), bottom);
74
+ @include dimensions.padding-x(0.5);
75
+ @include motion.transition(background-color color outline-color);
76
+ @include typography.font-weight(normal);
77
+
78
+ border-radius: var(--odx-v-border-radius-controls);
79
+ cursor: pointer;
80
+ user-select: none;
81
+
82
+ &:last-child {
83
+ margin-bottom: 0;
84
+ }
85
+
86
+ &.is-active,
87
+ &:hover {
88
+ background-color: var(--gray-50);
89
+ }
90
+
91
+ &.is-selected {
92
+ background-color: var(--cyan-500-15);
93
+ }
94
+
95
+ &.is-disabled {
96
+ color: var(--odx-control-color-disabled);
97
+ pointer-events: none;
98
+ }
99
+
100
+ > .odx-checkbox {
101
+ @include dimensions.margin(math.div(8, 24), right);
102
+ }
103
+ }
@@ -0,0 +1,131 @@
1
+ @use 'sass:math';
2
+ @use '../abstract/dimensions';
3
+ @use '../abstract/motion';
4
+
5
+ .odx-slider {
6
+ --odx-control-outline-color: var(--gray-200);
7
+ --odx-control-background-color: var(--gray-100);
8
+ --odx-control-background-color-hover: var(--cyan-600);
9
+
10
+ $root: &;
11
+ $thumb-size: dimensions.get-size(math.div(20, 24));
12
+ $track-height: dimensions.get-size(math.div(4, 24));
13
+
14
+ appearance: none;
15
+ box-sizing: border-box;
16
+ display: block;
17
+ width: 100%;
18
+
19
+ @mixin track-container() {
20
+ background-color: var(--odx-control-background-color);
21
+ border-radius: 2px;
22
+ outline: 1px solid var(--odx-control-outline-color);
23
+ outline-offset: -1px;
24
+ }
25
+
26
+ @mixin track-progress() {
27
+ border-radius: 2px;
28
+ height: $track-height;
29
+ position: relative;
30
+ }
31
+
32
+ @mixin thumb() {
33
+ @include motion.transition(background-color outline-color);
34
+
35
+ appearance: none;
36
+ background-color: var(--odx-control-background-color-selected);
37
+ border-radius: 50%;
38
+ height: $thumb-size;
39
+ margin-top: calc(#{$thumb-size} / -2 + #{$track-height} / 2);
40
+ outline: 1px solid var(--white);
41
+ width: $thumb-size;
42
+ }
43
+
44
+ &::-webkit-slider-container {
45
+ @include track-container();
46
+
47
+ margin: calc((#{$thumb-size} - #{$track-height}) / 2) 0;
48
+ }
49
+
50
+ &::-moz-range-track {
51
+ @include track-container();
52
+
53
+ height: $track-height;
54
+ }
55
+
56
+ &::-webkit-slider-runnable-track {
57
+ @include track-progress();
58
+
59
+ background: linear-gradient(var(--odx-control-background-color-selected), var(--odx-control-background-color-selected)) 0 / var(--odx-slider-filled) 100%
60
+ no-repeat,
61
+ transparent;
62
+ }
63
+
64
+ &::-moz-range-progress {
65
+ @include track-progress();
66
+
67
+ background: var(--odx-control-background-color-selected);
68
+ }
69
+
70
+ &::-webkit-slider-thumb {
71
+ @include thumb();
72
+
73
+ position: relative;
74
+ }
75
+
76
+ &::-moz-range-thumb {
77
+ @include thumb();
78
+
79
+ border: unset;
80
+ }
81
+
82
+ &.is-disabled {
83
+ &::-webkit-slider-container {
84
+ background-color: var(--odx-control-background-color-disabled);
85
+ outline: 1px solid transparent;
86
+ }
87
+
88
+ &::-moz-range-track {
89
+ background-color: var(--odx-control-background-color-disabled);
90
+ outline: 1px solid transparent;
91
+ }
92
+
93
+ &::-webkit-slider-thumb {
94
+ background-color: var(--odx-c-text-disabled);
95
+ outline: 1px solid transparent;
96
+ }
97
+
98
+ &::-moz-range-thumb {
99
+ background-color: var(--odx-c-text-disabled);
100
+ outline: 1px solid transparent;
101
+ }
102
+
103
+ &::-webkit-slider-runnable-track {
104
+ background-image: linear-gradient(var(--odx-c-text-disabled), var(--odx-c-text-disabled));
105
+ }
106
+
107
+ &::-moz-range-progress {
108
+ background-image: linear-gradient(var(--odx-c-text-disabled), var(--odx-c-text-disabled));
109
+ }
110
+ }
111
+
112
+ &:focus-visible {
113
+ &::-webkit-slider-thumb {
114
+ outline: 2px solid var(--odx-c-highlight-active);
115
+ }
116
+
117
+ &::-moz-range-thumb {
118
+ outline: 2px solid var(--odx-c-highlight-active);
119
+ }
120
+ }
121
+
122
+ &:hover:not(.is-disabled) {
123
+ &::-webkit-slider-thumb {
124
+ background-color: var(--odx-control-background-color-hover);
125
+ }
126
+
127
+ &::-moz-range-thumb {
128
+ background-color: var(--odx-control-background-color-hover);
129
+ }
130
+ }
131
+ }
@@ -0,0 +1,124 @@
1
+ @use 'sass:math';
2
+ @use '../layout/helpers';
3
+ @use '../abstract/dimensions';
4
+ @use '../abstract/typography';
5
+ @use '../abstract/utils';
6
+ @use '../abstract/motion';
7
+
8
+ .odx-form-field__control:has(.odx-spinbox) {
9
+ background-color: transparent !important;
10
+ outline-color: transparent !important;
11
+
12
+ .odx-form-field-control {
13
+ padding: 0;
14
+ }
15
+
16
+ &::after {
17
+ content: none;
18
+ }
19
+
20
+ &.has-error & {
21
+ background-color: transparent;
22
+ outline-color: transparent;
23
+
24
+ &:hover {
25
+ background-color: transparent;
26
+ }
27
+ }
28
+ }
29
+
30
+ .odx-spinbox {
31
+ $root: &;
32
+
33
+ align-items: stretch;
34
+ display: flex;
35
+ flex: 1;
36
+ gap: 1px;
37
+
38
+ &__input {
39
+ @include typography.font-weight(medium);
40
+ @include dimensions.padding-x(math.div(8, 24));
41
+
42
+ appearance: textfield;
43
+ text-align: center;
44
+ width: 100%;
45
+
46
+ &::placeholder {
47
+ @include typography.font-weight(normal);
48
+
49
+ color: var(--odx-input-control-color);
50
+ opacity: 0.65;
51
+ }
52
+
53
+ &::-webkit-inner-spin-button {
54
+ appearance: none;
55
+ }
56
+ }
57
+
58
+ &__input,
59
+ &__action {
60
+ @include motion.transition(background-color border-color color);
61
+
62
+ background-color: var(--odx-input-control-background-color);
63
+ border: 1px solid var(--odx-input-control-outline-color);
64
+
65
+ #{$root}.has-error & {
66
+ background-color: var(--odx-input-control-background-color-error);
67
+ border-color: var(--odx-input-control-outline-color-error) !important;
68
+ }
69
+
70
+ #{$root} &:hover {
71
+ background-color: var(--odx-input-control-background-color-hover);
72
+ border-color: var(--odx-input-control-outline-color-hover);
73
+ }
74
+
75
+ #{$root} &:active {
76
+ background-color: var(--odx-input-control-outline-color-hover);
77
+ border-color: var(--odx-input-control-outline-color-hover);
78
+ }
79
+
80
+ #{$root}.is-readonly & {
81
+ background-color: var(--odx-input-control-outline-color-disabled);
82
+ border-color: var(--odx-input-control-outline-color-readonly) !important;
83
+ }
84
+
85
+ #{$root} &:focus-visible {
86
+ background-color: var(--odx-c-focus);
87
+ border-color: var(--odx-c-focus-outline) !important;
88
+ }
89
+
90
+ #{$root}.is-disabled & {
91
+ @include utils.non-interactive();
92
+
93
+ background-color: var(--odx-input-control-background-color-disabled);
94
+ border-color: var(--odx-input-control-outline-color-disabled) !important;
95
+ color: var(--odx-input-control-color-disabled);
96
+ }
97
+ }
98
+
99
+ &__action {
100
+ border-radius: var(--odx-v-border-radius-controls);
101
+ flex: 0 0 dimensions.get-size(math.div(36, 24));
102
+ height: 100%;
103
+ margin: 0;
104
+ outline: none;
105
+
106
+ &:first-child {
107
+ border-bottom-right-radius: 0;
108
+ border-right: unset;
109
+ border-top-right-radius: 0;
110
+ }
111
+
112
+ &:last-child {
113
+ border-bottom-left-radius: 0;
114
+ border-left: unset;
115
+ border-top-left-radius: 0;
116
+ }
117
+
118
+ #{$root}.is-readonly & {
119
+ @include utils.non-interactive();
120
+
121
+ color: var(--odx-input-control-color-disabled);
122
+ }
123
+ }
124
+ }