@oardi/css-utils 0.91.0 → 0.93.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oardi/css-utils",
3
- "version": "0.91.0",
3
+ "version": "0.93.0",
4
4
  "author": "Ardian Shala",
5
5
  "homepage": "https://css-utils.oardi.com",
6
6
  "description": "Powerful set of semantic css classes with support for breakpoints, directions and spacings",
@@ -0,0 +1,72 @@
1
+ @layer components {
2
+ .empty-state {
3
+ --empty-state-max-width: 36rem;
4
+ --empty-state-min-height: 0;
5
+ --empty-state-padding-y: var(--spacer-5);
6
+ --empty-state-padding-x: var(--spacer-3);
7
+ --empty-state-gap: var(--spacer-3);
8
+ --empty-state-icon-size: 3rem;
9
+ --empty-state-icon-color: var(--text-muted);
10
+ --empty-state-title-color: var(--text-color);
11
+ --empty-state-description-color: var(--text-muted);
12
+ --empty-state-actions-gap: var(--spacer-2);
13
+
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ flex-direction: column;
18
+ gap: var(--empty-state-gap);
19
+ width: 100%;
20
+ max-width: var(--empty-state-max-width);
21
+ min-height: var(--empty-state-min-height);
22
+ margin-inline: auto;
23
+ padding: var(--empty-state-padding-y) var(--empty-state-padding-x);
24
+ text-align: center;
25
+ }
26
+
27
+ .empty-state-icon {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ flex-shrink: 0;
32
+ width: var(--empty-state-icon-size);
33
+ height: var(--empty-state-icon-size);
34
+ color: var(--empty-state-icon-color);
35
+ fill: currentColor;
36
+ line-height: 1;
37
+ }
38
+
39
+ .empty-state .empty-state-icon > svg {
40
+ width: 100%;
41
+ height: 100%;
42
+ }
43
+
44
+ .empty-state-title {
45
+ margin: 0;
46
+ color: var(--empty-state-title-color);
47
+ }
48
+
49
+ .empty-state-description {
50
+ margin: 0;
51
+ color: var(--empty-state-description-color);
52
+ }
53
+
54
+ .empty-state-actions {
55
+ display: flex;
56
+ flex-wrap: wrap;
57
+ align-items: center;
58
+ justify-content: center;
59
+ gap: var(--empty-state-actions-gap);
60
+ }
61
+
62
+ .empty-state-compact {
63
+ --empty-state-padding-y: var(--spacer-3);
64
+ --empty-state-padding-x: var(--spacer-2);
65
+ --empty-state-gap: var(--spacer-2);
66
+ --empty-state-icon-size: 2.5rem;
67
+ }
68
+
69
+ .empty-state-page {
70
+ --empty-state-min-height: 50vh;
71
+ }
72
+ }
@@ -0,0 +1,261 @@
1
+ @layer components {
2
+ .menu {
3
+ --menu-min-width: 12rem;
4
+ --menu-max-width: 22rem;
5
+ --menu-max-height: 20rem;
6
+ --menu-available-height: calc(100vh - 1rem);
7
+ --menu-offset: var(--spacer-2);
8
+ --menu-viewport-inset: var(--spacer-2);
9
+
10
+ --menu-padding-y: var(--spacer-1);
11
+ --menu-padding-x: var(--spacer-1);
12
+ --menu-gap: var(--spacer-1);
13
+
14
+ --menu-bg-color: var(--bg-surface);
15
+ --menu-color: var(--text-color);
16
+ --menu-border-width: var(--border-width);
17
+ --menu-border-color: var(--border-color);
18
+ --menu-border-radius: var(--border-radius);
19
+ --menu-box-shadow: var(--shadow-lg);
20
+ --menu-z-index: var(--z-index-tooltip);
21
+
22
+ --menu-item-padding-y: var(--spacer-2);
23
+ --menu-item-padding-x: var(--spacer-3);
24
+ --menu-item-gap: var(--spacer-2);
25
+ --menu-item-border-radius: var(--border-radius-sm);
26
+ --menu-item-hover-bg-color: var(--bg-surface-hover);
27
+ --menu-item-active-bg-color: var(--bg-active);
28
+ --menu-item-current-color: var(--primary);
29
+ --menu-item-destructive-color: var(--error);
30
+ --menu-item-disabled-color: var(--disabled-text-color);
31
+ --menu-item-description-color: var(--text-muted);
32
+ --menu-item-shortcut-color: var(--text-muted);
33
+
34
+ --menu-group-label-color: var(--text-muted);
35
+ --menu-separator-color: var(--border-color);
36
+ --menu-transition-duration: var(--transition-duration-fast);
37
+ --menu-transition-easing: var(--transition-easing);
38
+
39
+ position: relative;
40
+ display: inline-flex;
41
+ }
42
+
43
+ .menu-trigger {
44
+ &[aria-expanded='true'],
45
+ .menu[open] > & {
46
+ box-shadow: 0 0 0 var(--focus-outline-width) var(--focus-outline-color);
47
+ }
48
+ }
49
+
50
+ .menu-popup {
51
+ position: fixed;
52
+ z-index: var(--menu-z-index);
53
+ inset: auto;
54
+ display: flex;
55
+ box-sizing: border-box;
56
+ flex-direction: column;
57
+ gap: var(--menu-gap);
58
+ min-inline-size: var(--menu-min-width);
59
+ max-inline-size: min(var(--menu-max-width), calc(100vw - 1rem));
60
+ max-block-size: min(var(--menu-max-height), var(--menu-available-height));
61
+ margin: 0;
62
+ padding: var(--menu-padding-y) var(--menu-padding-x);
63
+ border: var(--menu-border-width) solid var(--menu-border-color);
64
+ border-radius: var(--menu-border-radius);
65
+ background-color: var(--menu-bg-color);
66
+ color: var(--menu-color);
67
+ box-shadow: var(--menu-box-shadow);
68
+ overflow: auto;
69
+ overscroll-behavior: contain;
70
+ transform-origin: top;
71
+ animation: menu-open var(--menu-transition-duration) var(--menu-transition-easing);
72
+
73
+ &[data-menu-placement='top'] {
74
+ transform-origin: bottom;
75
+ }
76
+
77
+ &[hidden] {
78
+ display: none;
79
+ }
80
+ }
81
+
82
+ .menu-item {
83
+ display: grid;
84
+ grid-template-columns: auto minmax(0, 1fr) auto;
85
+ align-items: center;
86
+ gap: var(--menu-item-gap);
87
+ inline-size: 100%;
88
+ min-inline-size: 0;
89
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
90
+ border: 0;
91
+ border-radius: var(--menu-item-border-radius);
92
+ background: transparent;
93
+ color: inherit;
94
+ font: inherit;
95
+ line-height: inherit;
96
+ text-align: start;
97
+ text-decoration: none;
98
+ cursor: pointer;
99
+ transition:
100
+ background-color var(--menu-transition-duration) var(--menu-transition-easing),
101
+ color var(--menu-transition-duration) var(--menu-transition-easing);
102
+
103
+ &:hover,
104
+ &:focus-visible {
105
+ background-color: var(--menu-item-hover-bg-color);
106
+ }
107
+
108
+ &:focus-visible {
109
+ outline: var(--focus-outline-width) var(--focus-outline-style)
110
+ var(--focus-outline-color);
111
+ outline-offset: var(--focus-offset);
112
+ }
113
+
114
+ &:active {
115
+ background-color: var(--menu-item-active-bg-color);
116
+ }
117
+
118
+ &.is-active,
119
+ &[aria-current] {
120
+ color: var(--menu-item-current-color);
121
+ }
122
+
123
+ &.menu-item-destructive {
124
+ color: var(--menu-item-destructive-color);
125
+ }
126
+
127
+ &:disabled,
128
+ &[aria-disabled='true'] {
129
+ background-color: transparent;
130
+ color: var(--menu-item-disabled-color);
131
+ cursor: not-allowed;
132
+ opacity: 0.75;
133
+ }
134
+ }
135
+
136
+ .menu-item-icon,
137
+ .menu-item-indicator {
138
+ display: inline-flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ min-inline-size: 1.25rem;
142
+ fill: currentColor;
143
+ }
144
+
145
+ .menu-item-content {
146
+ display: flex;
147
+ min-inline-size: 0;
148
+ flex-direction: column;
149
+ }
150
+
151
+ .menu-item-label,
152
+ .menu-item-description {
153
+ overflow-wrap: anywhere;
154
+ }
155
+
156
+ .menu-item-description {
157
+ color: var(--menu-item-description-color);
158
+ font-size: var(--font-size-sm);
159
+ }
160
+
161
+ .menu-item-shortcut {
162
+ color: var(--menu-item-shortcut-color);
163
+ font-size: var(--font-size-sm);
164
+ white-space: nowrap;
165
+ }
166
+
167
+ .menu-item-indicator::before {
168
+ content: '';
169
+ }
170
+
171
+ .menu-item[role='menuitemcheckbox'][aria-checked='true'] .menu-item-indicator::before {
172
+ content: '\2713';
173
+ }
174
+
175
+ .menu-item[role='menuitemradio'][aria-checked='true'] .menu-item-indicator::before {
176
+ content: '\2022';
177
+ font-size: 1.5em;
178
+ line-height: 0;
179
+ }
180
+
181
+ .menu-group {
182
+ display: flex;
183
+ flex-direction: column;
184
+ gap: var(--menu-gap);
185
+ }
186
+
187
+ .menu-group-label {
188
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x) 0;
189
+ color: var(--menu-group-label-color);
190
+ font-size: var(--font-size-sm);
191
+ font-weight: 600;
192
+ }
193
+
194
+ .menu-separator {
195
+ inline-size: auto;
196
+ margin: var(--menu-gap) calc(-1 * var(--menu-padding-x));
197
+ border: 0;
198
+ border-block-start: var(--menu-border-width) solid var(--menu-separator-color);
199
+ }
200
+
201
+ .menu-disclosure {
202
+ .menu-trigger {
203
+ display: flex;
204
+ align-items: center;
205
+ list-style: none;
206
+ cursor: pointer;
207
+
208
+ &::-webkit-details-marker {
209
+ display: none;
210
+ }
211
+ }
212
+
213
+ .menu-popup {
214
+ position: absolute;
215
+ inset-block-start: calc(100% + var(--menu-offset));
216
+ inset-inline-start: 0;
217
+ max-block-size: var(--menu-max-height);
218
+ }
219
+
220
+ &.menu-align-end .menu-popup {
221
+ inset-inline: auto 0;
222
+ }
223
+
224
+ &:not([open]) > .menu-popup {
225
+ display: none;
226
+ }
227
+ }
228
+
229
+ @keyframes menu-open {
230
+ from {
231
+ opacity: 0;
232
+ transform: scale(0.98);
233
+ }
234
+
235
+ to {
236
+ opacity: 1;
237
+ transform: scale(1);
238
+ }
239
+ }
240
+
241
+ @media (prefers-reduced-motion: reduce) {
242
+ .menu {
243
+ --menu-transition-duration: 0ms;
244
+ }
245
+ }
246
+
247
+ @media (forced-colors: active) {
248
+ .menu-popup {
249
+ border-color: CanvasText;
250
+ }
251
+
252
+ .menu-item:disabled,
253
+ .menu-item[aria-disabled='true'] {
254
+ color: GrayText;
255
+ }
256
+
257
+ .menu-item:focus-visible {
258
+ outline-color: Highlight;
259
+ }
260
+ }
261
+ }
package/scss/index.scss CHANGED
@@ -32,10 +32,12 @@
32
32
  @forward './components/card.scss';
33
33
  @forward './components/chip.scss';
34
34
  @forward './components/drawer.scss';
35
+ @forward './components/empty-state.scss';
35
36
  @forward './components/expansion-panel.scss';
36
37
  @forward './components/form.scss';
37
38
  @forward './components/icon-button.scss';
38
39
  @forward './components/list.scss';
40
+ @forward './components/menu.scss';
39
41
  @forward './components/modal.scss';
40
42
  @forward './components/navbar.scss';
41
43
  @forward './components/overlay.scss';