@veracity/vui-poc 0.1.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/src/styles.css ADDED
@@ -0,0 +1,323 @@
1
+ @import "tailwindcss";
2
+
3
+ @import "./default.css" layer(theme);
4
+ @import "./color-light.css";
5
+ @import "./color-dark.css";
6
+ @import "./color-primitives.css";
7
+
8
+ .vui-button:focus-visible,
9
+ .vui-button[data-focus-visible],
10
+ .vui-button.vui-force-focus {
11
+ outline: 3px solid var(--vui-utility-focus);
12
+ outline-offset: 0;
13
+ }
14
+
15
+ .vui-icon-button:focus-visible,
16
+ .vui-icon-button[data-focus-visible],
17
+ .vui-icon-button.vui-force-focus {
18
+ outline: 3px solid var(--vui-utility-focus);
19
+ outline-offset: 0;
20
+ }
21
+
22
+ .vui-button[data-active] {
23
+ cursor: default;
24
+ }
25
+
26
+ .vui-notification,
27
+ .vui-banner-notification {
28
+ --vui-notification-accent: var(--vui-feedback-info-solid);
29
+ --vui-notification-bg: var(--vui-feedback-info-subtle);
30
+ /* Defaults match `data-size="md"`. Overridden below for `sm`. */
31
+ --vui-notification-title-font-size: 1rem; /* 16px */
32
+ --vui-notification-body-font-size: 1rem; /* 16px */
33
+ background-color: var(--vui-notification-bg);
34
+ color: var(--vui-notification-accent);
35
+ }
36
+
37
+ .vui-notification[data-size="sm"],
38
+ .vui-banner-notification[data-size="sm"] {
39
+ --vui-notification-title-font-size: 0.875rem; /* 14px */
40
+ --vui-notification-body-font-size: 0.875rem; /* 14px */
41
+ }
42
+
43
+ .vui-notification .vui-notification-title,
44
+ .vui-banner-notification .vui-notification-title {
45
+ font-size: var(--vui-notification-title-font-size);
46
+ }
47
+
48
+ .vui-notification .vui-notification-body,
49
+ .vui-banner-notification .vui-notification-body {
50
+ font-size: var(--vui-notification-body-font-size);
51
+ }
52
+
53
+ .vui-notification {
54
+ border-color: var(--vui-notification-accent);
55
+ }
56
+
57
+ .vui-notification .vui-notification-icon,
58
+ .vui-banner-notification .vui-notification-icon {
59
+ color: var(--vui-notification-accent);
60
+ }
61
+
62
+ .vui-notification .vui-notification-title,
63
+ .vui-banner-notification .vui-notification-title,
64
+ .vui-notification .vui-notification-body,
65
+ .vui-banner-notification .vui-notification-body {
66
+ color: var(--vui-notification-accent);
67
+ }
68
+
69
+ /* Dismiss button inherits the notification's accent color via currentColor
70
+ * so its tertiary styling tints with the surrounding intent instead of
71
+ * using the IconButton's own intent color. */
72
+ .vui-notification .vui-notification-dismiss,
73
+ .vui-banner-notification .vui-notification-dismiss {
74
+ color: currentColor;
75
+ }
76
+
77
+ /* Override tertiary hover/press backgrounds to use the notification's own
78
+ * accent at 20% opacity, matching the upstream VUI behaviour. */
79
+ .vui-notification .vui-notification-dismiss[data-hovered],
80
+ .vui-banner-notification .vui-notification-dismiss[data-hovered] {
81
+ background-color: color-mix(in srgb, var(--vui-notification-accent) 20%, transparent);
82
+ }
83
+
84
+ .vui-notification .vui-notification-dismiss[data-pressed],
85
+ .vui-banner-notification .vui-notification-dismiss[data-pressed] {
86
+ background-color: color-mix(in srgb, var(--vui-notification-accent) 30%, transparent);
87
+ }
88
+
89
+ .vui-notification[data-intent="info"],
90
+ .vui-banner-notification[data-intent="info"] {
91
+ --vui-notification-accent: var(--vui-feedback-info-solid);
92
+ --vui-notification-bg: var(--vui-feedback-info-subtle);
93
+ }
94
+
95
+ .vui-notification[data-intent="success"],
96
+ .vui-banner-notification[data-intent="success"] {
97
+ --vui-notification-accent: var(--vui-feedback-success-solid);
98
+ --vui-notification-bg: var(--vui-feedback-success-subtle);
99
+ }
100
+
101
+ .vui-notification[data-intent="warning"],
102
+ .vui-banner-notification[data-intent="warning"] {
103
+ --vui-notification-accent: var(--vui-feedback-warning-solid);
104
+ --vui-notification-bg: var(--vui-feedback-warning-subtle);
105
+ }
106
+
107
+ .vui-notification[data-intent="danger"],
108
+ .vui-banner-notification[data-intent="danger"] {
109
+ --vui-notification-accent: var(--vui-feedback-danger-solid);
110
+ --vui-notification-bg: var(--vui-feedback-danger-subtle);
111
+ }
112
+
113
+ /* Animated swipe underline for links inside VUI components (matches
114
+ * uitest). Limited to component scopes so it never affects MDX docs prose
115
+ * or Storybook chrome. Add `.vui-link` to opt in elsewhere; add
116
+ * `.vui-link-bare` to opt out within a scope.
117
+ *
118
+ * Links are underlined by default (background-size: 100% 1px) so they are
119
+ * always distinguishable from surrounding text. On hover/focus the
120
+ * underline re-draws itself in from left to right (linkSwipe animation). */
121
+ @keyframes vui-link-swipe {
122
+ from {
123
+ background-size: 0 1px;
124
+ }
125
+ to {
126
+ background-size: 100% 1px;
127
+ }
128
+ }
129
+
130
+ :where(.vui-notification, .vui-banner-notification) a:not(.vui-link-bare),
131
+ a.vui-link {
132
+ color: var(--vui-notification-accent);
133
+ text-decoration: none;
134
+ background: linear-gradient(to right, currentColor, currentColor) 0 100% / 100% 1px no-repeat;
135
+ padding-bottom: 2px;
136
+ }
137
+
138
+ :where(.vui-notification, .vui-banner-notification)
139
+ a:not(.vui-link-bare):is(:hover, :focus-visible),
140
+ a.vui-link:is(:hover, :focus-visible) {
141
+ animation: vui-link-swipe 0.5s ease forwards;
142
+ }
143
+
144
+ a.vui-link-bare {
145
+ background: none;
146
+ padding-bottom: 0;
147
+ }
148
+
149
+ /* Indeterminate spin used by `SpinnerIcon` and any element opting in via the
150
+ * `vui-spin` utility class. Honors `prefers-reduced-motion` below. */
151
+ @keyframes vui-spin {
152
+ to {
153
+ transform: rotate(360deg);
154
+ }
155
+ }
156
+
157
+ .vui-spin {
158
+ animation: vui-spin 1s linear infinite;
159
+ transform-origin: center;
160
+ }
161
+
162
+ @media (prefers-reduced-motion: reduce) {
163
+ :where(.vui-notification, .vui-banner-notification)
164
+ a:not(.vui-link-bare):is(:hover, :focus-visible),
165
+ a.vui-link:is(:hover, :focus-visible) {
166
+ animation: none;
167
+ }
168
+
169
+ .vui-spin {
170
+ animation: none;
171
+ }
172
+ }
173
+
174
+ .vui-text-field {
175
+ --vui-text-field-border: var(--vui-control-border-default);
176
+ --vui-text-field-focus: var(--vui-utility-focus);
177
+ --vui-text-field-message: var(--vui-control-helper);
178
+ --vui-text-field-placeholder: var(--vui-control-placeholder);
179
+ --vui-text-field-text: var(--vui-control-label);
180
+ color: var(--vui-text-field-text);
181
+ }
182
+
183
+ .vui-text-field[data-intent="success"] {
184
+ --vui-text-field-border: var(--vui-feedback-success-solid);
185
+ --vui-text-field-focus: var(--vui-feedback-success-solid);
186
+ --vui-text-field-message: var(--vui-feedback-success-solid);
187
+ }
188
+
189
+ .vui-text-field[data-intent="danger"],
190
+ .vui-text-field[data-invalid] {
191
+ --vui-text-field-border: var(--vui-feedback-danger-solid);
192
+ --vui-text-field-focus: var(--vui-feedback-danger-solid);
193
+ --vui-text-field-message: var(--vui-feedback-danger-solid);
194
+ }
195
+
196
+ .vui-text-field[data-size="sm"] {
197
+ --vui-text-field-height: 24px;
198
+ --vui-text-field-input-size: 0.875rem;
199
+ --vui-text-field-label-size: 0.875rem;
200
+ --vui-text-field-message-size: 0.875rem;
201
+ }
202
+
203
+ .vui-text-field[data-size="md"] {
204
+ --vui-text-field-height: 32px;
205
+ --vui-text-field-input-size: 1rem;
206
+ --vui-text-field-label-size: 1rem;
207
+ --vui-text-field-message-size: 0.875rem;
208
+ }
209
+
210
+ .vui-text-field[data-size="lg"] {
211
+ --vui-text-field-height: 40px;
212
+ --vui-text-field-input-size: 1rem;
213
+ --vui-text-field-label-size: 1rem;
214
+ --vui-text-field-message-size: 0.875rem;
215
+ }
216
+
217
+ .vui-text-field[data-size="xl"] {
218
+ --vui-text-field-height: 48px;
219
+ --vui-text-field-input-size: 1.125rem;
220
+ --vui-text-field-label-size: 1rem;
221
+ --vui-text-field-message-size: 1rem;
222
+ }
223
+
224
+ .vui-text-field-label {
225
+ color: var(--vui-text-field-text);
226
+ font-size: var(--vui-text-field-label-size);
227
+ font-weight: 700;
228
+ line-height: 1.35;
229
+ }
230
+
231
+ .vui-text-field-input {
232
+ height: var(--vui-text-field-height);
233
+ border-color: var(--vui-text-field-border);
234
+ color: var(--vui-text-field-text);
235
+ font-size: var(--vui-text-field-input-size);
236
+ line-height: 1.35;
237
+ transition-duration: 0s;
238
+ }
239
+
240
+ .vui-text-field-input::placeholder {
241
+ color: var(--vui-text-field-placeholder);
242
+ opacity: 1;
243
+ }
244
+
245
+ .vui-text-field-input:focus-visible,
246
+ .vui-text-field-input[data-focus-visible],
247
+ .vui-text-field-input.vui-force-focus {
248
+ border-color: transparent;
249
+ outline: 3px solid var(--vui-text-field-focus);
250
+ outline-offset: 0;
251
+ }
252
+
253
+ .vui-text-field[data-readonly] .vui-text-field-input,
254
+ .vui-text-field-input[readonly] {
255
+ border-color: var(--vui-control-border-default);
256
+ background-color: var(--vui-background-subtle);
257
+ }
258
+
259
+ .vui-text-field[data-readonly] .vui-text-field-input:focus-visible,
260
+ .vui-text-field[data-readonly] .vui-text-field-input[data-focus-visible],
261
+ .vui-text-field[data-readonly] .vui-text-field-input.vui-force-focus,
262
+ .vui-text-field-input[readonly]:focus-visible,
263
+ .vui-text-field-input[readonly][data-focus-visible],
264
+ .vui-text-field-input[readonly].vui-force-focus {
265
+ border-color: var(--vui-control-border-default);
266
+ outline-color: transparent;
267
+ }
268
+
269
+ .vui-text-field[data-disabled] .vui-text-field-input,
270
+ .vui-text-field-input[data-disabled],
271
+ .vui-text-field-input:disabled {
272
+ border-color: var(--vui-control-background-disabled);
273
+ background-color: var(--vui-control-background-disabled);
274
+ cursor: not-allowed;
275
+ opacity: 0.5;
276
+ }
277
+
278
+ .vui-text-field[data-disabled] .vui-text-field-input::placeholder,
279
+ .vui-text-field-input[data-disabled]::placeholder,
280
+ .vui-text-field-input:disabled::placeholder {
281
+ color: var(--vui-control-placeholder);
282
+ }
283
+
284
+ .vui-text-field-input:-webkit-autofill {
285
+ box-shadow: 0 0 0 1000px white inset;
286
+ -webkit-text-fill-color: var(--vui-text-field-text);
287
+ caret-color: var(--vui-text-field-text);
288
+ }
289
+
290
+ .vui-text-field-footer {
291
+ display: flex;
292
+ flex-wrap: wrap;
293
+ align-items: baseline;
294
+ justify-content: space-between;
295
+ gap: 4px 12px;
296
+ padding-top: 2px;
297
+ }
298
+
299
+ .vui-text-field-message {
300
+ min-width: 0;
301
+ }
302
+
303
+ .vui-text-field-description,
304
+ .vui-text-field-error,
305
+ .vui-text-field-counter {
306
+ font-size: var(--vui-text-field-message-size);
307
+ line-height: 1.25;
308
+ }
309
+
310
+ .vui-text-field-description,
311
+ .vui-text-field-counter {
312
+ color: var(--vui-control-helper);
313
+ }
314
+
315
+ .vui-text-field-error,
316
+ .vui-text-field-counter--danger {
317
+ color: var(--vui-feedback-danger-solid);
318
+ }
319
+
320
+ .vui-text-field-counter {
321
+ margin-left: auto;
322
+ white-space: nowrap;
323
+ }