@unifiedsoftware/styles 2.0.1-beta.2 → 2.0.1-beta.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.
@@ -0,0 +1,186 @@
1
+ @use '../variables' as *;
2
+
3
+ .#{$prefix}dropdown {
4
+ // Root dropdown container
5
+ display: inline-block;
6
+
7
+ &-trigger {
8
+ // Trigger button - styles will be inherited from Button component
9
+ // Base UI adds data-popup-open attribute when open
10
+ }
11
+
12
+ &-positioner {
13
+ outline: 0;
14
+ z-index: 1000;
15
+ }
16
+
17
+ &-popup {
18
+ box-sizing: border-box;
19
+ padding-block: var(--#{$prefix}dropdown-popup-padding-block, 0.375rem);
20
+ border-radius: var(--#{$prefix}dropdown-popup-border-radius, 0.5rem);
21
+ background-color: var(--#{$prefix}dropdown-popup-background, rgba(255, 255, 255, 0.98));
22
+ backdrop-filter: blur(10px);
23
+ -webkit-backdrop-filter: blur(10px);
24
+ color: var(--#{$prefix}dropdown-popup-color, #343a40);
25
+ transform-origin: var(--transform-origin);
26
+ transition:
27
+ transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1),
28
+ opacity 200ms ease-out,
29
+ backdrop-filter 200ms ease-out;
30
+ border: 1px solid var(--#{$prefix}dropdown-popup-border-color, rgba(0, 0, 0, 0.08));
31
+ box-shadow: var(
32
+ --#{$prefix}dropdown-popup-shadow,
33
+ 0 0 0 1px rgba(0, 0, 0, 0.02),
34
+ 0 2px 4px rgba(0, 0, 0, 0.04),
35
+ 0 8px 16px rgba(0, 0, 0, 0.08),
36
+ 0 16px 32px rgba(0, 0, 0, 0.06)
37
+ );
38
+ overflow: hidden;
39
+
40
+ &[data-starting-style],
41
+ &[data-ending-style] {
42
+ opacity: 0;
43
+ transform: scale(0.92) translateY(-8px);
44
+ }
45
+ }
46
+
47
+ &-arrow {
48
+ display: flex;
49
+
50
+ &[data-side='top'] {
51
+ bottom: -8px;
52
+ rotate: 180deg;
53
+ }
54
+
55
+ &[data-side='bottom'] {
56
+ top: -8px;
57
+ rotate: 0deg;
58
+ }
59
+
60
+ &[data-side='left'] {
61
+ right: -13px;
62
+ rotate: 90deg;
63
+ }
64
+
65
+ &[data-side='right'] {
66
+ left: -13px;
67
+ rotate: -90deg;
68
+ }
69
+
70
+ &__fill {
71
+ fill: var(--#{$prefix}dropdown-popup-background, #ffffff);
72
+ }
73
+
74
+ &__stroke {
75
+ fill: var(--#{$prefix}dropdown-popup-border-color, #dee2e6);
76
+ }
77
+ }
78
+
79
+ &-item {
80
+ outline: 0;
81
+ cursor: default;
82
+ user-select: none;
83
+ padding-block: var(--#{$prefix}dropdown-item-padding-block, 0.5rem);
84
+ padding-left: var(--#{$prefix}dropdown-item-padding-left, 1rem);
85
+ padding-right: var(--#{$prefix}dropdown-item-padding-right, 2rem);
86
+ display: flex;
87
+ font-size: var(--#{$prefix}dropdown-item-font-size, 0.875rem);
88
+ line-height: var(--#{$prefix}dropdown-item-line-height, 1.25rem);
89
+ border-radius: var(--#{$prefix}dropdown-item-border-radius, 0.375rem);
90
+ margin-inline: var(--#{$prefix}dropdown-item-margin-inline, 0.25rem);
91
+ position: relative;
92
+ z-index: 0;
93
+ transition: transform 150ms cubic-bezier(0.34, 1.56, 0.64, 1);
94
+
95
+ &:focus-visible {
96
+ outline: 2px solid var(--#{$prefix}dropdown-item-focus-outline, var(--#{$prefix}primary-color));
97
+ outline-offset: 2px;
98
+ outline-style: solid;
99
+ }
100
+
101
+ &--selected {
102
+ color: var(--#{$prefix}dropdown-item-selected-color, inherit);
103
+ }
104
+
105
+ &--disabled {
106
+ opacity: 0.5;
107
+ cursor: not-allowed;
108
+ }
109
+
110
+ &__container {
111
+ display: flex;
112
+ align-items: center;
113
+ gap: var(--#{$prefix}dropdown-item-gap, 0.75rem);
114
+ width: 100%;
115
+ position: relative;
116
+ z-index: 1;
117
+ }
118
+
119
+ &__start-content {
120
+ display: flex;
121
+ align-items: center;
122
+ flex-shrink: 0;
123
+ }
124
+
125
+ &__content {
126
+ display: flex;
127
+ flex-direction: column;
128
+ flex: 1;
129
+ min-width: 0;
130
+ }
131
+
132
+ &__title {
133
+ font-weight: 500;
134
+ font-size: var(--#{$prefix}dropdown-item-title-font-size, inherit);
135
+ }
136
+
137
+ &__subtitle {
138
+ font-size: var(--#{$prefix}dropdown-item-subtitle-font-size, 0.75rem);
139
+ color: var(--#{$prefix}dropdown-item-subtitle-color, #6c757d);
140
+ margin-top: 0.125rem;
141
+ }
142
+
143
+ &__end-content {
144
+ display: flex;
145
+ align-items: center;
146
+ flex-shrink: 0;
147
+ margin-left: auto;
148
+ }
149
+ }
150
+
151
+ &-separator {
152
+ margin: var(--#{$prefix}dropdown-separator-margin, 0.375rem 1rem);
153
+ height: 1px;
154
+ background-color: var(--#{$prefix}dropdown-separator-color, #dee2e6);
155
+ }
156
+
157
+ &-submenu {
158
+ // Submenu root - no specific styles needed
159
+ }
160
+
161
+ &-submenu-trigger {
162
+ outline: 0;
163
+ cursor: default;
164
+ user-select: none;
165
+ padding-block: var(--#{$prefix}dropdown-item-padding-block, 0.5rem);
166
+ padding-left: var(--#{$prefix}dropdown-item-padding-left, 1rem);
167
+ padding-right: var(--#{$prefix}dropdown-item-padding-right, 2rem);
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: space-between;
171
+ gap: 1rem;
172
+ font-size: var(--#{$prefix}dropdown-item-font-size, 0.875rem);
173
+ line-height: var(--#{$prefix}dropdown-item-line-height, 1.25rem);
174
+ border-radius: var(--#{$prefix}dropdown-item-border-radius, 0.375rem);
175
+ margin-inline: var(--#{$prefix}dropdown-item-margin-inline, 0.25rem);
176
+ position: relative;
177
+ z-index: 0;
178
+ transition: transform 150ms cubic-bezier(0.34, 1.56, 0.64, 1);
179
+
180
+ &:focus-visible {
181
+ outline: 2px solid var(--#{$prefix}dropdown-item-focus-outline, var(--#{$prefix}primary-color));
182
+ outline-offset: 2px;
183
+ outline-style: solid;
184
+ }
185
+ }
186
+ }
@@ -12,6 +12,7 @@
12
12
 
13
13
  @use 'backdrop';
14
14
  @use 'popover';
15
+ @use 'dropdown';
15
16
  @use 'drawer';
16
17
  @use 'modal';
17
18
 
@@ -19,7 +20,11 @@
19
20
  @use 'list';
20
21
  @use 'data-list';
21
22
  @use 'menu';
22
- @use 'divider';
23
+ @use 'navigation-menu';
24
+ @use 'navigation-menu-item';
25
+ @use 'navigation-menu-group';
26
+ @use 'navigation-menu-separator';
27
+ @use 'navigation-menu-grid';
23
28
 
24
29
  @use 'breadcrumb';
25
30
  @use 'swipe';
@@ -87,11 +87,11 @@
87
87
  }
88
88
 
89
89
  &__content {
90
+ position: relative;
90
91
  flex: 1;
91
92
  height: 100%;
92
93
  display: flex;
93
94
  align-items: center;
94
- z-index: 1;
95
95
  overflow: hidden;
96
96
 
97
97
  &--chips {
@@ -8,21 +8,25 @@
8
8
 
9
9
  &-item {
10
10
  position: relative;
11
- height: var(--#{$prefix}list-item-height);
12
- min-height: var(--#{$prefix}list-item-min-height);
13
- padding-block: var(--#{$prefix}list-item-padding-y);
14
- padding-inline: var(--#{$prefix}list-item-padding-x);
15
11
  font-size: var(--#{$prefix}list-item-font-size);
16
12
  font-weight: var(--#{$prefix}list-item-font-weight);
17
13
  border-radius: var(--#{$prefix}list-item-border-radius);
18
14
  text-decoration: none;
19
15
  z-index: 0;
20
- display: flex;
21
- align-items: center;
22
16
  color: var(--#{$prefix}list-item-color);
23
17
  background-color: var(--#{$prefix}list-item-background);
24
18
  -webkit-tap-highlight-color: transparent;
25
- gap: var(--#{$prefix}list-item-gap);
19
+
20
+ &__container {
21
+ position: relative;
22
+ padding-block: var(--#{$prefix}list-item-padding-y);
23
+ padding-inline: var(--#{$prefix}list-item-padding-x);
24
+ height: var(--#{$prefix}list-item-height);
25
+ min-height: var(--#{$prefix}list-item-min-height);
26
+ display: flex;
27
+ align-items: center;
28
+ gap: var(--#{$prefix}list-item-gap);
29
+ }
26
30
 
27
31
  &:hover {
28
32
  text-decoration: none;
@@ -42,7 +46,6 @@
42
46
  &__start-content,
43
47
  &__end-content {
44
48
  flex-shrink: 0;
45
- z-index: 1;
46
49
  display: flex;
47
50
  justify-content: center;
48
51
  align-items: center;
@@ -51,7 +54,6 @@
51
54
 
52
55
  &__content {
53
56
  flex-grow: 1;
54
- z-index: 1;
55
57
  display: grid;
56
58
  overflow: hidden;
57
59
  }
@@ -0,0 +1,23 @@
1
+ @use '../variables' as *;
2
+
3
+ .#{$prefix}navigation-menu-grid {
4
+ display: grid;
5
+ gap: var(--#{$prefix}navigation-menu-grid-gap, 1.5rem);
6
+ padding: var(--#{$prefix}navigation-menu-grid-padding, 1.25rem);
7
+
8
+ &--columns-1 {
9
+ grid-template-columns: 1fr;
10
+ }
11
+
12
+ &--columns-2 {
13
+ grid-template-columns: repeat(2, 1fr);
14
+ }
15
+
16
+ &--columns-3 {
17
+ grid-template-columns: repeat(3, 1fr);
18
+ }
19
+
20
+ &--columns-4 {
21
+ grid-template-columns: repeat(4, 1fr);
22
+ }
23
+ }
@@ -0,0 +1,25 @@
1
+ @use '../variables' as *;
2
+
3
+ .#{$prefix}navigation-menu-group {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--#{$prefix}navigation-menu-group-gap, 0.5rem);
7
+ padding: var(--#{$prefix}navigation-menu-group-padding, 1.25rem);
8
+
9
+ &__label {
10
+ font-size: var(--#{$prefix}navigation-menu-group-label-font-size, 0.75rem);
11
+ font-weight: var(--#{$prefix}navigation-menu-group-label-font-weight, 600);
12
+ text-transform: uppercase;
13
+ letter-spacing: 0.05em;
14
+ color: var(--#{$prefix}navigation-menu-group-label-color, #6c757d);
15
+ padding-block: var(--#{$prefix}navigation-menu-group-label-padding-block, 0.25rem);
16
+ padding-inline: var(--#{$prefix}navigation-menu-group-label-padding-inline, 0);
17
+ margin-bottom: var(--#{$prefix}navigation-menu-group-label-margin-bottom, 0.25rem);
18
+ }
19
+
20
+ &__content {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: var(--#{$prefix}navigation-menu-group-content-gap, 0.25rem);
24
+ }
25
+ }
@@ -0,0 +1,77 @@
1
+ @use '../variables' as *;
2
+
3
+ .#{$prefix}navigation-menu-item {
4
+ position: relative;
5
+ z-index: 0;
6
+ display: flex;
7
+ padding-block: var(--#{$prefix}navigation-menu-item-padding-block, 0.5rem);
8
+ padding-block: var(--#{$prefix}navigation-menu-item-padding-block, 0.5rem);
9
+ padding-left: var(--#{$prefix}navigation-menu-item-padding-left, 1rem);
10
+ padding-right: var(--#{$prefix}navigation-menu-item-padding-right, 1rem);
11
+ border-radius: var(--#{$prefix}navigation-menu-item-border-radius, 0.375rem);
12
+ margin-inline: var(--#{$prefix}navigation-menu-item-margin-inline, 0.25rem); // Match dropdown
13
+ text-decoration: none;
14
+ color: inherit;
15
+ cursor: pointer;
16
+ user-select: none;
17
+ transition: transform 150ms cubic-bezier(0.34, 1.56, 0.64, 1);
18
+
19
+ // Reset button styles when rendered as button
20
+ border: none;
21
+ background: none;
22
+ font-family: inherit;
23
+ font-size: inherit;
24
+ text-align: left;
25
+ outline: none;
26
+
27
+ &:hover {
28
+ text-decoration: none;
29
+ }
30
+
31
+ &--selected {
32
+ color: var(--#{$prefix}navigation-menu-item-selected-color, inherit);
33
+ }
34
+
35
+ &--disabled {
36
+ opacity: 0.5;
37
+ pointer-events: none;
38
+ cursor: not-allowed;
39
+ }
40
+
41
+ &__container {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: var(--#{$prefix}navigation-menu-item-gap, 0.75rem);
45
+ width: 100%;
46
+ position: relative;
47
+ z-index: 1;
48
+ }
49
+
50
+ &__start-content,
51
+ &__end-content {
52
+ display: flex;
53
+ align-items: center;
54
+ flex-shrink: 0;
55
+ }
56
+
57
+ &__content {
58
+ display: flex;
59
+ flex-direction: column;
60
+ flex: 1;
61
+ min-width: 0;
62
+ }
63
+
64
+ &__title {
65
+ font-weight: var(--#{$prefix}navigation-menu-item-title-font-weight, 500);
66
+ font-size: var(--#{$prefix}navigation-menu-item-title-font-size, 0.875rem);
67
+ line-height: var(--#{$prefix}navigation-menu-item-title-line-height, 1.25rem);
68
+ color: var(--#{$prefix}navigation-menu-item-title-color, inherit);
69
+ }
70
+
71
+ &__subtitle {
72
+ font-size: var(--#{$prefix}navigation-menu-item-subtitle-font-size, 0.75rem);
73
+ line-height: var(--#{$prefix}navigation-menu-item-subtitle-line-height, 1rem);
74
+ color: var(--#{$prefix}navigation-menu-item-subtitle-color, #6c757d);
75
+ margin-top: 0.125rem;
76
+ }
77
+ }
@@ -0,0 +1,8 @@
1
+ @use '../variables' as *;
2
+
3
+ .#{$prefix}navigation-menu-separator {
4
+ height: 1px;
5
+ background-color: var(--#{$prefix}navigation-menu-separator-color, #e9ecef);
6
+ margin-block: var(--#{$prefix}navigation-menu-separator-margin-block, 0.5rem);
7
+ margin-inline: var(--#{$prefix}navigation-menu-separator-margin-inline, 1.25rem);
8
+ }
@@ -0,0 +1,179 @@
1
+ @use '../variables' as *;
2
+
3
+ .#{$prefix}navigation-menu {
4
+ background-color: var(--#{$prefix}navigation-menu-background);
5
+ border-radius: var(--#{$prefix}navigation-menu-border-radius);
6
+ padding: var(--#{$prefix}navigation-menu-padding);
7
+ color: var(--#{$prefix}navigation-menu-color);
8
+ min-width: max-content;
9
+
10
+ &-list {
11
+ display: flex;
12
+ position: relative;
13
+ list-style: none;
14
+ padding: 0;
15
+ margin: 0;
16
+ }
17
+
18
+ &-item {
19
+ display: flex;
20
+ }
21
+
22
+ &-icon {
23
+ transition: transform 0.2s ease;
24
+
25
+ &[data-popup-open] {
26
+ transform: rotate(180deg);
27
+ }
28
+ }
29
+
30
+ &-positioner {
31
+ --easing: cubic-bezier(0.22, 1, 0.36, 1);
32
+ --duration: 0.35s;
33
+ box-sizing: border-box;
34
+ transition-property: top, left, right, bottom;
35
+ transition-duration: var(--duration);
36
+ transition-timing-function: var(--easing);
37
+ width: var(--positioner-width);
38
+ height: var(--positioner-height);
39
+ max-width: var(--available-width);
40
+ z-index: 1000;
41
+
42
+ &[data-instant] {
43
+ transition: none;
44
+ }
45
+ }
46
+
47
+ &-popup {
48
+ position: relative;
49
+ box-sizing: border-box;
50
+ padding-block: var(--#{$prefix}navigation-menu-popup-padding-block, 0.375rem); // Match dropdown
51
+ border-radius: var(--#{$prefix}navigation-menu-popup-border-radius, 0.5rem);
52
+ background-color: var(--#{$prefix}navigation-menu-popup-background, rgba(255, 255, 255, 0.98));
53
+ backdrop-filter: blur(10px);
54
+ -webkit-backdrop-filter: blur(10px);
55
+ color: var(--#{$prefix}navigation-menu-popup-color, #343a40);
56
+ transform-origin: var(--transform-origin);
57
+ transition-property: opacity, transform, width, height, backdrop-filter;
58
+ transition-duration: var(--duration);
59
+ transition-timing-function: var(--easing);
60
+ width: var(--popup-width);
61
+ height: var(--popup-height);
62
+ border: 1px solid var(--#{$prefix}navigation-menu-popup-border-color, rgba(0, 0, 0, 0.08));
63
+ box-shadow: var(
64
+ --#{$prefix}navigation-menu-popup-shadow,
65
+ 0 0 0 1px rgba(0, 0, 0, 0.02),
66
+ 0 2px 4px rgba(0, 0, 0, 0.04),
67
+ 0 8px 16px rgba(0, 0, 0, 0.08),
68
+ 0 16px 32px rgba(0, 0, 0, 0.06)
69
+ );
70
+ overflow: hidden;
71
+
72
+ &[data-starting-style],
73
+ &[data-ending-style] {
74
+ opacity: 0;
75
+ transform: scale(0.92) translateY(-8px);
76
+ }
77
+
78
+ &[data-ending-style] {
79
+ transition-timing-function: ease;
80
+ transition-duration: 0.15s;
81
+ }
82
+ }
83
+
84
+ &-content {
85
+ box-sizing: border-box;
86
+ transition:
87
+ opacity calc(var(--duration) * 0.5) ease,
88
+ transform var(--duration) var(--easing);
89
+ width: calc(100vw - 40px);
90
+ height: 100%;
91
+
92
+ @media (min-width: 500px) {
93
+ width: max-content;
94
+ min-width: 400px;
95
+ }
96
+
97
+ &[data-starting-style],
98
+ &[data-ending-style] {
99
+ opacity: 0;
100
+ }
101
+
102
+ &[data-starting-style] {
103
+ &[data-activation-direction='left'] {
104
+ transform: translateX(-50%);
105
+ }
106
+ &[data-activation-direction='right'] {
107
+ transform: translateX(50%);
108
+ }
109
+ }
110
+
111
+ &[data-ending-style] {
112
+ &[data-activation-direction='left'] {
113
+ transform: translateX(50%);
114
+ }
115
+ &[data-activation-direction='right'] {
116
+ transform: translateX(-50%);
117
+ }
118
+ }
119
+ }
120
+
121
+ &-link {
122
+ text-decoration: none !important;
123
+ color: inherit !important;
124
+ border-radius: 0.375rem;
125
+ transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1);
126
+ display: block;
127
+
128
+ &,
129
+ &:visited,
130
+ &:link {
131
+ text-decoration: none !important;
132
+ color: inherit !important;
133
+ }
134
+
135
+ @media (hover: hover) {
136
+ &:hover {
137
+ background-color: var(--#{$prefix}navigation-menu-link-hover-background, rgba(0, 0, 0, 0.05)) !important;
138
+ }
139
+ }
140
+
141
+ &:focus-visible {
142
+ outline: 2px solid var(--#{$prefix}navigation-menu-trigger-focus-outline, var(--#{$prefix}primary-color));
143
+ outline-offset: 2px;
144
+ outline-style: solid;
145
+ }
146
+ }
147
+
148
+ &-viewport {
149
+ position: relative;
150
+ overflow: hidden;
151
+ width: 100%;
152
+ height: 100%;
153
+ }
154
+
155
+ &-arrow {
156
+ display: flex;
157
+ transition: left calc(var(--duration)) var(--easing);
158
+
159
+ &[data-side='top'] {
160
+ bottom: -8px;
161
+ rotate: 180deg;
162
+ }
163
+
164
+ &[data-side='bottom'] {
165
+ top: -8px;
166
+ rotate: 0deg;
167
+ }
168
+
169
+ &[data-side='left'] {
170
+ right: -13px;
171
+ rotate: 90deg;
172
+ }
173
+
174
+ &[data-side='right'] {
175
+ left: -13px;
176
+ rotate: -90deg;
177
+ }
178
+ }
179
+ }
@@ -85,7 +85,10 @@
85
85
  display: flex;
86
86
  justify-content: center;
87
87
  align-items: center;
88
- z-index: 1;
88
+ }
89
+
90
+ &__icon {
91
+ position: relative;
89
92
  }
90
93
 
91
94
  &--current &__avatar-wrapper {
@@ -1,23 +1,23 @@
1
1
  @use '../variables' as *;
2
2
 
3
3
  .#{$prefix}toolbar {
4
+ flex-shrink: 0;
4
5
  position: relative;
5
6
  width: 100%;
6
- min-height: var(--#{$prefix}toolbar-min-height);
7
+ height: var(--#{$prefix}toolbar-height);
7
8
  padding-block: var(--#{$prefix}toolbar-padding-y);
8
9
  padding-inline: var(--#{$prefix}toolbar-padding-x);
9
- border-bottom: var(--#{$prefix}toolbar-border);
10
- background: var(--#{$prefix}toolbar-background);
10
+ color: var(--#{$prefix}toolbar-color);
11
11
  display: flex;
12
12
  align-items: center;
13
13
 
14
14
  &__container {
15
+ position: relative;
15
16
  width: 100%;
16
17
  margin: 0 auto;
17
18
  display: flex;
18
19
  align-items: center;
19
20
  gap: var(--#{$prefix}toolbar-gap);
20
- z-index: 1;
21
21
  }
22
22
 
23
23
  &__start-action,