@neo-design/foundations 1.0.0-rc.4

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 (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -0
  3. package/css/alert.css +133 -0
  4. package/css/aspect-ratio.css +32 -0
  5. package/css/badge.css +57 -0
  6. package/css/banner.css +220 -0
  7. package/css/button-icon.css +14 -0
  8. package/css/button.css +174 -0
  9. package/css/checkbox.css +124 -0
  10. package/css/chips-group.css +26 -0
  11. package/css/chips.css +88 -0
  12. package/css/combobox.css +229 -0
  13. package/css/empty-state.css +149 -0
  14. package/css/index.css +36 -0
  15. package/css/link.css +39 -0
  16. package/css/menu.css +112 -0
  17. package/css/modal-dialog.css +204 -0
  18. package/css/modal-fullscreen.css +145 -0
  19. package/css/radio-button.css +132 -0
  20. package/css/select.css +181 -0
  21. package/css/snackbar.css +85 -0
  22. package/css/spinner.css +21 -0
  23. package/css/tabs.css +126 -0
  24. package/css/tag.css +38 -0
  25. package/css/text-field.css +224 -0
  26. package/css/toggle.css +53 -0
  27. package/css/tooltip.css +32 -0
  28. package/icon-aliases.mjs +57 -0
  29. package/icons/README.md +84 -0
  30. package/icons/icons.css +16 -0
  31. package/icons/index.json +843 -0
  32. package/icons/sprite.mjs +2 -0
  33. package/package.json +44 -0
  34. package/tokens/_brand.mjs +3 -0
  35. package/tokens/_primitives.mjs +44 -0
  36. package/tokens/_util.mjs +12 -0
  37. package/tokens/api-js.mjs +11 -0
  38. package/tokens/breakpoints.mjs +8 -0
  39. package/tokens/color-semantic.mjs +47 -0
  40. package/tokens/color.mjs +58 -0
  41. package/tokens/component-tokens.mjs +24 -0
  42. package/tokens/container.mjs +8 -0
  43. package/tokens/iconSize.mjs +18 -0
  44. package/tokens/neo-color.css +97 -0
  45. package/tokens/neo-foundations.css +250 -0
  46. package/tokens/radius.mjs +18 -0
  47. package/tokens/shadows.mjs +14 -0
  48. package/tokens/spacing.mjs +21 -0
  49. package/tokens/stroke.mjs +15 -0
  50. package/tokens/typography.mjs +59 -0
@@ -0,0 +1,124 @@
1
+ /* packages/foundations/css/checkbox.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .checkbox {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: 0;
7
+ cursor: pointer;
8
+ min-height: 2.75rem;
9
+ }
10
+
11
+ .checkbox__wrapper {
12
+ position: relative;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ width: 2.5rem;
17
+ height: 2.75rem;
18
+ flex-shrink: 0;
19
+ }
20
+
21
+ .checkbox__wrapper input[type="checkbox"] {
22
+ position: absolute;
23
+ inset: 0;
24
+ margin: 0;
25
+ opacity: 0;
26
+ cursor: pointer;
27
+ }
28
+
29
+ .checkbox__control {
30
+ width: 1.5rem;
31
+ height: 1.5rem;
32
+ border-radius: var(--neo-radius-xs);
33
+ border: var(--neo-stroke-xs) solid var(--border--base--default);
34
+ background: var(--fill--base--default);
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ flex-shrink: 0;
39
+ transition: background 100ms ease, border-color 100ms ease;
40
+ }
41
+
42
+ .checkbox__control svg {
43
+ display: none;
44
+ fill: var(--icon--base--contrast);
45
+ color: var(--icon--base--contrast);
46
+ width: 1.125rem;
47
+ height: 1.125rem;
48
+ }
49
+
50
+ .checkbox__label {
51
+ font-size: var(--neo-type-body-lg-regular-size-rem);
52
+ font-weight: var(--neo-type-body-lg-regular-weight);
53
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
54
+ color: var(--text--base--default);
55
+ }
56
+
57
+ .checkbox:hover .checkbox__control {
58
+ border-color: var(--border--base--focus);
59
+ }
60
+
61
+ .checkbox--selected .checkbox__control,
62
+ input[type="checkbox"]:checked + .checkbox__control {
63
+ background: var(--icon--base--default);
64
+ border-color: var(--icon--base--default);
65
+ }
66
+
67
+ .checkbox--selected .checkbox__control svg,
68
+ input[type="checkbox"]:checked + .checkbox__control svg {
69
+ display: block;
70
+ }
71
+
72
+ .checkbox--indeterminate .checkbox__control {
73
+ background: var(--icon--base--default);
74
+ border-color: var(--icon--base--default);
75
+ }
76
+
77
+ input[type="checkbox"]:focus-visible + .checkbox__control {
78
+ outline: var(--neo-stroke-focus-ring-width) solid var(--focus--ring--default);
79
+ outline-offset: 0.125rem;
80
+ box-shadow: 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--gap--default);
81
+ }
82
+
83
+ .checkbox--disabled {
84
+ cursor: not-allowed;
85
+ pointer-events: none;
86
+ }
87
+
88
+ .checkbox--disabled .checkbox__control {
89
+ background: var(--fill--base--light);
90
+ border-color: var(--border--base--disabled);
91
+ }
92
+
93
+ .checkbox--selected.checkbox--disabled .checkbox__control,
94
+ .checkbox--indeterminate.checkbox--disabled .checkbox__control {
95
+ background: var(--icon--base--disabled);
96
+ border-color: var(--icon--base--disabled);
97
+ }
98
+
99
+ .checkbox--disabled .checkbox__label {
100
+ color: var(--text--base--disabled);
101
+ }
102
+
103
+ .checkbox-group {
104
+ display: flex;
105
+ flex-direction: column;
106
+ gap: var(--neo-space-xs-rem);
107
+ margin: 0;
108
+ padding: 0;
109
+ border: none;
110
+ min-width: 0;
111
+ }
112
+
113
+
114
+ .checkbox--hidden-label .checkbox__label {
115
+ position: absolute;
116
+ width: 1px;
117
+ height: 1px;
118
+ margin: -1px;
119
+ padding: 0;
120
+ overflow: hidden;
121
+ clip: rect(0 0 0 0);
122
+ white-space: nowrap;
123
+ border: 0;
124
+ }
@@ -0,0 +1,26 @@
1
+ /* packages/foundations/css/chips-group.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .chips-group {
4
+ display: flex;
5
+ flex-direction: row;
6
+ align-items: center;
7
+ gap: var(--neo-space-xs-rem);
8
+ padding-block: var(--neo-space-none-rem);
9
+ padding-inline: var(--neo-space-none-rem);
10
+ overflow-x: auto;
11
+ scrollbar-width: none;
12
+ }
13
+
14
+ .chips-group::-webkit-scrollbar { display: none; }
15
+
16
+ .chips-group input[type="radio"] {
17
+ border: 0;
18
+ clip: rect(0 0 0 0);
19
+ height: 1px;
20
+ margin: -1px;
21
+ overflow: hidden;
22
+ padding: 0;
23
+ position: absolute;
24
+ white-space: nowrap;
25
+ width: 1px;
26
+ }
package/css/chips.css ADDED
@@ -0,0 +1,88 @@
1
+ /* packages/foundations/css/chips.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .chip {
4
+ display: inline-flex;
5
+ flex-shrink: 0;
6
+ align-items: center;
7
+ gap: var(--neo-space-xs-rem);
8
+ padding-inline: var(--neo-space-md-rem);
9
+ padding-block: var(--neo-space-sm-rem);
10
+ height: 32px;
11
+ border-radius: var(--neo-radius-pill);
12
+ border: var(--neo-stroke-xs) solid var(--border--base--default);
13
+ background: var(--fill--base--default);
14
+ font-size: var(--neo-type-body-md-medium-size-rem);
15
+ font-weight: var(--neo-type-body-md-medium-weight);
16
+ line-height: var(--neo-type-body-md-medium-line-height-rem);
17
+ color: var(--text--base--default);
18
+ cursor: pointer;
19
+ white-space: nowrap;
20
+ transition: background 100ms ease, border-color 100ms ease, color 100ms ease;
21
+ }
22
+
23
+
24
+ .chip svg,
25
+ .chip [aria-hidden="true"] {
26
+ fill: var(--icon--base--default);
27
+ color: var(--icon--base--default);
28
+ width: var(--neo-icon-size-xs-rem);
29
+ height: var(--neo-icon-size-xs-rem);
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ .chip:hover:not([disabled]):not(.chip--disabled):not([aria-pressed="true"]):not(.chip--selected):not(:has(input:checked)) {
34
+ background: var(--fill--primary--hover);
35
+ border-color: var(--fill--primary--hover);
36
+ color: var(--text--base--contrast);
37
+ }
38
+
39
+ .chip:hover:not([disabled]):not(.chip--disabled):not([aria-pressed="true"]):not(.chip--selected):not(:has(input:checked)) svg,
40
+ .chip:hover:not([disabled]):not(.chip--disabled):not([aria-pressed="true"]):not(.chip--selected):not(:has(input:checked)) [aria-hidden="true"] {
41
+ fill: var(--icon--base--contrast);
42
+ color: var(--icon--base--contrast);
43
+ }
44
+
45
+ .chip[aria-pressed="true"],
46
+ .chip--selected,
47
+ .chip:has(input:checked) {
48
+ background: var(--fill--primary--active);
49
+ border-color: var(--fill--primary--active);
50
+ color: var(--text--base--contrast);
51
+ }
52
+
53
+ .chip[aria-pressed="true"] svg,
54
+ .chip[aria-pressed="true"] [aria-hidden="true"],
55
+ .chip--selected svg,
56
+ .chip--selected [aria-hidden="true"],
57
+ .chip:has(input:checked) svg,
58
+ .chip:has(input:checked) [aria-hidden="true"] {
59
+ fill: var(--icon--base--contrast);
60
+ color: var(--icon--base--contrast);
61
+ }
62
+
63
+ .chip:focus-visible,
64
+ .chip:has(input:focus-visible) {
65
+ outline: var(--neo-stroke-focus-ring-width) solid var(--focus--ring--default);
66
+ outline-offset: 0.125rem;
67
+ box-shadow: 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--gap--default);
68
+ }
69
+
70
+ .chip[disabled],
71
+ .chip--disabled,
72
+ .chip:has(input:disabled) {
73
+ background: var(--fill--base--disabled);
74
+ border-color: var(--border--base--disabled);
75
+ color: var(--text--base--disabled);
76
+ cursor: not-allowed;
77
+ pointer-events: none;
78
+ }
79
+
80
+ .chip[disabled] svg,
81
+ .chip--disabled svg,
82
+ .chip:has(input:disabled) svg {
83
+ fill: var(--icon--base--disabled);
84
+ color: var(--icon--base--disabled);
85
+ }
86
+
87
+ .chip:has(input[type="radio"]) { position: relative; }
88
+
@@ -0,0 +1,229 @@
1
+ /* packages/foundations/css/combobox.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .combobox {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--neo-space-xs-rem);
7
+ position: relative;
8
+ width: 100%;
9
+ }
10
+
11
+
12
+ .combobox__label-row {
13
+ display: flex;
14
+ align-items: center;
15
+ gap: var(--neo-space-xs-rem);
16
+ }
17
+
18
+ .combobox__label {
19
+ font-size: var(--neo-type-body-lg-medium-size-rem);
20
+ font-weight: var(--neo-type-body-lg-medium-weight);
21
+ line-height: var(--neo-type-body-lg-medium-line-height-rem);
22
+ color: var(--text--base--default);
23
+ }
24
+
25
+
26
+ .combobox__field {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: var(--neo-space-sm-rem);
30
+ min-height: 44px;
31
+ padding-block: var(--neo-space-sm-rem);
32
+ padding-inline: var(--neo-space-md-rem);
33
+ min-width: 160px;
34
+ border: var(--neo-stroke-xs) solid var(--border--base--default);
35
+ border-radius: var(--neo-radius-sm);
36
+ background: var(--fill--base--default);
37
+ width: 100%;
38
+ transition: border-color 100ms ease, box-shadow 100ms ease;
39
+ }
40
+
41
+ .combobox__input {
42
+ flex: 1;
43
+ border: none;
44
+ background: transparent;
45
+ font-size: var(--neo-type-body-lg-regular-size-rem);
46
+ font-weight: var(--neo-type-body-lg-regular-weight);
47
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
48
+ color: var(--text--base--default);
49
+ outline: none;
50
+ min-width: 0;
51
+ overflow: hidden;
52
+ text-overflow: ellipsis;
53
+ }
54
+
55
+ .combobox__input::placeholder {
56
+ color: var(--text--base--secondary);
57
+ }
58
+
59
+ .combobox__icon {
60
+ fill: var(--icon--base--default);
61
+ color: var(--icon--base--default);
62
+ width: var(--neo-icon-size-md-rem);
63
+ height: var(--neo-icon-size-md-rem);
64
+ flex-shrink: 0;
65
+ }
66
+
67
+ .combobox__clear {
68
+ flex-shrink: 0;
69
+ display: inline-flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ width: var(--neo-icon-size-lg-rem);
73
+ height: var(--neo-icon-size-lg-rem);
74
+ padding: 0;
75
+ border: none;
76
+ border-radius: var(--neo-radius-pill);
77
+ background: transparent;
78
+ cursor: pointer;
79
+ }
80
+
81
+ .combobox__clear:focus-visible {
82
+ outline: var(--neo-stroke-focus-ring-width) solid var(--focus--ring--default);
83
+ outline-offset: 2px;
84
+ }
85
+
86
+ .combobox__clear svg {
87
+ width: var(--neo-icon-size-md-rem);
88
+ height: var(--neo-icon-size-md-rem);
89
+ fill: var(--icon--base--secondary);
90
+ color: var(--icon--base--secondary);
91
+ }
92
+
93
+ .combobox__chevron {
94
+ flex-shrink: 0;
95
+ width: var(--neo-icon-size-md-rem);
96
+ height: var(--neo-icon-size-md-rem);
97
+ fill: var(--icon--base--secondary);
98
+ color: var(--icon--base--secondary);
99
+ transition: transform 150ms ease;
100
+ }
101
+
102
+ @media (prefers-reduced-motion: reduce) {
103
+ .combobox__chevron { transition: none; }
104
+ }
105
+
106
+
107
+ .combobox__helper,
108
+ .combobox__feedback {
109
+ font-size: var(--neo-type-body-md-regular-size-rem);
110
+ font-weight: var(--neo-type-body-md-regular-weight);
111
+ line-height: var(--neo-type-body-md-regular-line-height-rem);
112
+ }
113
+
114
+ .combobox__helper { color: var(--text--base--secondary); }
115
+ .combobox__feedback { color: var(--text--semantic--error); }
116
+
117
+
118
+ .combobox--active .combobox__field,
119
+ .combobox--writing .combobox__field,
120
+ .combobox--no-results .combobox__field {
121
+ border-width: var(--neo-stroke-sm);
122
+ border-color: var(--border--base--focus);
123
+ }
124
+
125
+ .combobox--active .combobox__chevron,
126
+ .combobox--writing .combobox__chevron,
127
+ .combobox--no-results .combobox__chevron {
128
+ transform: rotate(180deg);
129
+ }
130
+
131
+ .combobox--focus .combobox__field {
132
+ outline: none;
133
+ box-shadow:
134
+ 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--gap--default),
135
+ 0 0 0 calc(var(--neo-stroke-focus-ring-width) * 2) var(--focus--ring--default);
136
+ }
137
+
138
+ .combobox--filled .combobox__field {
139
+ border-width: var(--neo-stroke-xs);
140
+ border-color: var(--border--base--default);
141
+ }
142
+
143
+ .combobox--error .combobox__field {
144
+ border-width: var(--neo-stroke-sm);
145
+ border-color: var(--border--semantic--error-solid);
146
+ }
147
+
148
+ .combobox--error.combobox--focus .combobox__field {
149
+ box-shadow:
150
+ 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--gap--default),
151
+ 0 0 0 calc(var(--neo-stroke-focus-ring-width) * 2) var(--focus--ring--default);
152
+ }
153
+
154
+ .combobox--error .combobox__label {
155
+ color: var(--text--semantic--error);
156
+ }
157
+
158
+ .combobox--read-only .combobox__field {
159
+ background: var(--fill--base--medium);
160
+ border-color: var(--border--base--default);
161
+ pointer-events: none;
162
+ }
163
+
164
+ .combobox--read-only .combobox__input {
165
+ cursor: default;
166
+ }
167
+
168
+ .combobox--disabled .combobox__field {
169
+ background: var(--fill--base--disabled);
170
+ border-color: var(--border--base--disabled);
171
+ pointer-events: none;
172
+ }
173
+
174
+ .combobox--disabled .combobox__label,
175
+ .combobox--disabled .combobox__input,
176
+ .combobox--disabled .combobox__helper {
177
+ color: var(--text--base--disabled);
178
+ }
179
+
180
+ .combobox--disabled .combobox__icon,
181
+ .combobox--disabled .combobox__clear svg,
182
+ .combobox--disabled .combobox__chevron {
183
+ fill: var(--icon--base--disabled);
184
+ color: var(--icon--base--disabled);
185
+ }
186
+
187
+
188
+ .menu-list__empty {
189
+ display: flex;
190
+ align-items: center;
191
+ min-height: 44px;
192
+ padding-block: var(--neo-space-md-rem);
193
+ padding-inline: var(--neo-space-lg-rem);
194
+ font-size: var(--neo-type-body-lg-regular-size-rem);
195
+ font-weight: var(--neo-type-body-lg-regular-weight);
196
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
197
+ color: var(--text--base--secondary);
198
+ list-style: none;
199
+ }
200
+
201
+ .combobox__icon--tooltip {
202
+ width: var(--neo-icon-size-xs-rem);
203
+ height: var(--neo-icon-size-xs-rem);
204
+ flex-shrink: 0;
205
+ }
206
+
207
+ button.combobox__icon--tooltip {
208
+ padding: 0;
209
+ border: none;
210
+ background: none;
211
+ display: inline-flex;
212
+ align-items: center;
213
+ justify-content: center;
214
+ cursor: pointer;
215
+ color: inherit;
216
+ }
217
+
218
+ button.combobox__icon--tooltip { position: relative; }
219
+ button.combobox__icon--tooltip::after {
220
+ content: '';
221
+ position: absolute;
222
+ inset: calc((var(--neo-icon-size-md-rem) - var(--neo-icon-size-xs-rem)) / -2);
223
+ }
224
+
225
+ .combobox__icon--tooltip > svg {
226
+ width: 100%;
227
+ height: 100%;
228
+ display: block;
229
+ }
@@ -0,0 +1,149 @@
1
+ /* packages/foundations/css/empty-state.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .empty-state-shell {
4
+ container-type: inline-size;
5
+ container-name: empty-state;
6
+ }
7
+
8
+ .empty-state {
9
+ display: flex;
10
+ flex-direction: column;
11
+ justify-content: center;
12
+ align-items: center;
13
+ gap: var(--neo-space-lg-rem);
14
+ padding-block: var(--neo-space-xl-rem);
15
+ padding-inline: var(--neo-space-xl-rem);
16
+ border-radius: var(--neo-radius-md);
17
+ background: var(--surface--base--default);
18
+ }
19
+
20
+
21
+ @container empty-state (min-width: 720px) {
22
+ .empty-state {
23
+ gap: var(--neo-space-xl-rem);
24
+ padding-block: var(--neo-space-3xl-rem);
25
+ padding-inline: var(--neo-space-2xl-rem);
26
+ }
27
+ }
28
+
29
+ .empty-state__body {
30
+ display: flex;
31
+ flex-direction: column;
32
+ justify-content: flex-start;
33
+ align-items: center;
34
+ gap: var(--neo-space-md-rem);
35
+ width: 100%;
36
+ max-width: 480px;
37
+ }
38
+
39
+ @container empty-state (min-width: 720px) {
40
+ .empty-state__body { gap: var(--neo-space-lg-rem); }
41
+ }
42
+
43
+ .empty-state__icon-box {
44
+ display: flex;
45
+ flex-direction: row;
46
+ justify-content: flex-start;
47
+ align-items: center;
48
+ gap: var(--neo-space-none-rem);
49
+ width: 48px;
50
+ height: 48px;
51
+ padding-block: var(--neo-space-md-rem);
52
+ padding-inline: var(--neo-space-md-rem);
53
+ border-radius: var(--neo-radius-md);
54
+ background: var(--fill--base--light);
55
+ flex-shrink: 0;
56
+ }
57
+
58
+ @container empty-state (min-width: 720px) {
59
+ .empty-state__icon-box {
60
+ width: 64px;
61
+ height: 64px;
62
+ padding-block: var(--neo-space-lg-rem);
63
+ padding-inline: var(--neo-space-lg-rem);
64
+ border-radius: var(--neo-radius-lg);
65
+ }
66
+ }
67
+
68
+ .empty-state__icon {
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ width: var(--neo-icon-size-md-rem);
73
+ height: var(--neo-icon-size-md-rem);
74
+ color: var(--icon--base--default);
75
+ fill: var(--icon--base--default);
76
+ flex-shrink: 0;
77
+ }
78
+
79
+ .empty-state__icon > svg {
80
+ width: 100%;
81
+ height: 100%;
82
+ }
83
+
84
+ @container empty-state (min-width: 720px) {
85
+ .empty-state__icon {
86
+ width: var(--neo-icon-size-lg-rem);
87
+ height: var(--neo-icon-size-lg-rem);
88
+ }
89
+ }
90
+
91
+ .empty-state__content {
92
+ display: flex;
93
+ flex-direction: column;
94
+ justify-content: flex-start;
95
+ align-items: center;
96
+ gap: var(--neo-space-none-rem);
97
+ width: 100%;
98
+ }
99
+
100
+ .empty-state__title {
101
+ text-align: center;
102
+ margin: 0;
103
+ color: var(--text--base--default);
104
+ font-size: var(--neo-type-body-lg-bold-size-rem);
105
+ font-weight: var(--neo-type-body-lg-bold-weight);
106
+ line-height: var(--neo-type-body-lg-bold-line-height-rem);
107
+ display: -webkit-box;
108
+ -webkit-box-orient: vertical;
109
+ -webkit-line-clamp: 1;
110
+ overflow: hidden;
111
+ }
112
+
113
+ @container empty-state (min-width: 720px) {
114
+ .empty-state__title {
115
+ font-size: var(--neo-type-title-sm-bold-size-rem);
116
+ font-weight: var(--neo-type-title-sm-bold-weight);
117
+ line-height: var(--neo-type-title-sm-bold-line-height-rem);
118
+ }
119
+ }
120
+
121
+ .empty-state__description {
122
+ text-align: center;
123
+ margin: 0;
124
+ color: var(--text--base--secondary);
125
+ font-size: var(--neo-type-body-md-regular-size-rem);
126
+ font-weight: var(--neo-type-body-md-regular-weight);
127
+ line-height: var(--neo-type-body-md-regular-line-height-rem);
128
+ display: -webkit-box;
129
+ -webkit-box-orient: vertical;
130
+ -webkit-line-clamp: 2;
131
+ overflow: hidden;
132
+ }
133
+
134
+ @container empty-state (min-width: 720px) {
135
+ .empty-state__description {
136
+ font-size: var(--neo-type-body-lg-regular-size-rem);
137
+ font-weight: var(--neo-type-body-lg-regular-weight);
138
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
139
+ }
140
+ }
141
+
142
+ .empty-state__actions {
143
+ display: flex;
144
+ flex-direction: row;
145
+ justify-content: flex-start;
146
+ align-items: flex-start;
147
+ gap: var(--neo-space-sm-rem);
148
+ flex-wrap: wrap;
149
+ }
package/css/index.css ADDED
@@ -0,0 +1,36 @@
1
+ /* packages/foundations/css/index.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ @import './alert.css';
4
+ @import './aspect-ratio.css';
5
+ @import './badge.css';
6
+ @import './banner.css';
7
+ @import './button.css';
8
+ @import './button-icon.css';
9
+ @import './checkbox.css';
10
+ @import './chips.css';
11
+ @import './chips-group.css';
12
+ @import './combobox.css';
13
+ @import './empty-state.css';
14
+ @import './link.css';
15
+ @import './menu.css';
16
+ @import './modal-dialog.css';
17
+ @import './modal-fullscreen.css';
18
+ @import './radio-button.css';
19
+ @import './select.css';
20
+ @import './snackbar.css';
21
+ @import './spinner.css';
22
+ @import './tabs.css';
23
+ @import './tag.css';
24
+ @import './text-field.css';
25
+ @import './toggle.css';
26
+ @import './tooltip.css';
27
+
28
+ .alert, .aspect-ratio, .badge, .notification, .banner, .btn, .checkbox, .checkbox-group,
29
+ .chip, .chips-group, .combobox, .empty-state, .empty-state-shell, .link, .menu-item, .menu-list, .menu-divider, .modal-overlay, .modal-dialog,
30
+ .modal-full, .radio, .radio-group, .select, .snackbar, .spinner, .tabs, .tag, .field, .toggle, .tooltip,
31
+ .alert *, .aspect-ratio *, .badge *, .banner *, .btn *, .checkbox *, .chip *, .combobox *,
32
+ .empty-state *, .menu-item *, .menu-list *, .modal-dialog *, .modal-full *, .radio *, .select *, .snackbar *, .tabs *,
33
+ .tag *, .field *, .toggle *, .tooltip *,
34
+ [role="tablist"], [role="tab"] {
35
+ box-sizing: border-box;
36
+ }
package/css/link.css ADDED
@@ -0,0 +1,39 @@
1
+ /* packages/foundations/css/link.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .link {
4
+ color: inherit;
5
+ font-weight: var(--neo-type-body-lg-bold-weight);
6
+ text-decoration: underline;
7
+ text-decoration-color: currentColor;
8
+ text-underline-offset: 2px;
9
+ text-decoration-thickness: 1px;
10
+ text-decoration-skip-ink: auto;
11
+ cursor: pointer;
12
+ }
13
+
14
+ .link:focus-visible {
15
+ outline: var(--neo-stroke-focus-ring-width) solid var(--focus--ring--default);
16
+ outline-offset: 2px;
17
+ box-shadow: 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--gap--default);
18
+ border-radius: var(--neo-radius-xs);
19
+ }
20
+
21
+ .link[data-surface="inverse"]:focus-visible {
22
+ outline-color: var(--focus--ring--inverse);
23
+ box-shadow: 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--gap--inverse);
24
+ }
25
+
26
+ .link--disabled,
27
+ .link:not([href]) {
28
+ color: var(--text--base--disabled);
29
+ pointer-events: none;
30
+ cursor: default;
31
+ }
32
+
33
+ .link--standalone {
34
+ display: inline-flex;
35
+ align-items: center;
36
+ min-height: 24px;
37
+ }
38
+
39
+