@codenhub/styles 0.0.3 → 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.
Files changed (75) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +52 -0
  3. package/README.md +60 -90
  4. package/dist/aesthetics/chunky-tile.css +1 -0
  5. package/dist/aesthetics/glass.css +1 -0
  6. package/dist/aesthetics/index.css +2 -0
  7. package/dist/aesthetics/neobrutalism.css +1 -0
  8. package/dist/aesthetics/pixel.css +1 -0
  9. package/dist/components.css +2 -2
  10. package/dist/index.css +2 -2
  11. package/dist/native.css +2 -0
  12. package/dist/theme.css +2 -2
  13. package/dist/tw/aesthetics/chunky-tile.css +107 -0
  14. package/dist/tw/aesthetics/glass.css +66 -0
  15. package/dist/tw/aesthetics/index.css +9 -0
  16. package/dist/tw/aesthetics/neobrutalism.css +63 -0
  17. package/dist/tw/aesthetics/pixel.css +88 -0
  18. package/dist/tw/box.css +185 -0
  19. package/dist/tw/components/button.css +88 -0
  20. package/dist/tw/components/feedback.css +163 -0
  21. package/dist/tw/components/form.css +601 -0
  22. package/dist/tw/components/index.css +18 -0
  23. package/dist/tw/components/loader.css +122 -0
  24. package/dist/tw/components/surface.css +98 -0
  25. package/dist/tw/components/tooltip.css +132 -0
  26. package/dist/tw/elevation.css +39 -0
  27. package/dist/tw/index.css +12 -0
  28. package/dist/tw/intent.css +189 -0
  29. package/dist/tw/native.css +203 -0
  30. package/dist/tw/presentation.css +77 -0
  31. package/dist/tw/reset.css +142 -0
  32. package/dist/tw/theme.css +218 -0
  33. package/dist/tw/typography.css +34 -0
  34. package/dist/tw/utilities/content.css +349 -0
  35. package/dist/tw/utilities/index.css +6 -0
  36. package/dist/tw/utilities/layout.css +107 -0
  37. package/docs/accessibility.md +43 -14
  38. package/docs/concepts.md +94 -0
  39. package/docs/index.md +62 -73
  40. package/docs/integrating/astro.md +29 -0
  41. package/docs/integrating/index.md +32 -0
  42. package/docs/integrating/nextjs.md +44 -0
  43. package/docs/integrating/svelte.md +37 -0
  44. package/docs/integrating/tailwind.md +40 -0
  45. package/docs/integrating/vue.md +25 -0
  46. package/docs/setup.md +116 -0
  47. package/docs/usage/aesthetics.md +197 -0
  48. package/docs/usage/buttons.md +74 -0
  49. package/docs/usage/composing.md +218 -0
  50. package/docs/usage/content-and-layout.md +200 -0
  51. package/docs/usage/customizing.md +213 -0
  52. package/docs/usage/feedback.md +117 -0
  53. package/docs/usage/forms.md +177 -0
  54. package/docs/usage/index.md +32 -0
  55. package/docs/usage/theming.md +210 -0
  56. package/docs/usage/tooltips.md +45 -0
  57. package/llms-full.txt +2122 -0
  58. package/llms.txt +26 -0
  59. package/package.json +96 -32
  60. package/docs/classes.md +0 -198
  61. package/docs/roadmap.md +0 -34
  62. package/docs/tests.md +0 -128
  63. package/docs/tokens.md +0 -101
  64. package/src/components/button.css +0 -155
  65. package/src/components/feedback.css +0 -214
  66. package/src/components/form.css +0 -296
  67. package/src/components/index.css +0 -9
  68. package/src/components/loader.css +0 -56
  69. package/src/components/surface.css +0 -6
  70. package/src/components/tooltip.css +0 -60
  71. package/src/index.css +0 -7
  72. package/src/overrides.css +0 -76
  73. package/src/theme.css +0 -136
  74. package/src/typography.css +0 -30
  75. package/src/utilities.css +0 -40
@@ -1,296 +0,0 @@
1
- @import "tailwindcss";
2
- @import "../theme.css";
3
-
4
- @utility field {
5
- @apply flex w-full flex-col gap-1.5;
6
-
7
- .label {
8
- @apply text-text text-sm font-semibold;
9
- }
10
-
11
- .hint {
12
- @apply text-text-secondary text-[0.8125rem];
13
- }
14
-
15
- .error:not(.btn),
16
- &-error {
17
- @apply text-destructive text-[0.8125rem] font-medium;
18
- }
19
- }
20
-
21
- @utility ipt {
22
- --control-bg: var(--color-background);
23
- --control-border: var(--color-border);
24
- --control-border-active: var(--color-primary);
25
- --control-fg: var(--color-text);
26
- --control-placeholder: var(--color-text-secondary);
27
-
28
- @apply min-h-(--control-height,2.5rem) w-full rounded-(--radius-control) bg-(--control-bg) px-3 py-2 text-(--control-fg) transition-[border-color,box-shadow,color,opacity] duration-(--motion-duration-fast) ease-(--motion-ease);
29
- border: var(--border-width) solid var(--control-border);
30
-
31
- &::placeholder {
32
- color: var(--control-placeholder);
33
- }
34
-
35
- &:focus {
36
- @apply outline-none;
37
- }
38
-
39
- &:focus-visible {
40
- border-color: var(--control-border-active);
41
- box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring);
42
- }
43
-
44
- &[aria-invalid="true"] {
45
- --control-border: var(--color-destructive);
46
- --control-border-active: var(--color-destructive);
47
- }
48
-
49
- &:disabled,
50
- &[aria-disabled="true"],
51
- &[data-disabled] {
52
- @apply cursor-not-allowed;
53
-
54
- opacity: 0.58;
55
- }
56
- }
57
-
58
- @utility textarea {
59
- --control-bg: var(--color-background);
60
- --control-border: var(--color-border);
61
- --control-border-active: var(--color-primary);
62
- --control-fg: var(--color-text);
63
- --control-placeholder: var(--color-text-secondary);
64
-
65
- @apply min-h-(--control-height,2.5rem) w-full rounded-(--radius-control) bg-(--control-bg) px-3 py-2 text-(--control-fg) transition-[border-color,box-shadow,color,opacity] duration-(--motion-duration-fast) ease-(--motion-ease);
66
- border: var(--border-width) solid var(--control-border);
67
-
68
- &::placeholder {
69
- color: var(--control-placeholder);
70
- }
71
-
72
- &:focus {
73
- @apply outline-none;
74
- }
75
-
76
- &:focus-visible {
77
- border-color: var(--control-border-active);
78
- box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring);
79
- }
80
-
81
- &[aria-invalid="true"] {
82
- --control-border: var(--color-destructive);
83
- --control-border-active: var(--color-destructive);
84
- }
85
-
86
- &:disabled,
87
- &[aria-disabled="true"],
88
- &[data-disabled] {
89
- @apply cursor-not-allowed;
90
-
91
- opacity: 0.58;
92
- }
93
-
94
- @apply min-h-28 resize-y;
95
- }
96
-
97
- @utility select {
98
- --control-bg: var(--color-background);
99
- --control-border: var(--color-border);
100
- --control-border-active: var(--color-primary);
101
- --control-fg: var(--color-text);
102
- --control-placeholder: var(--color-text-secondary);
103
-
104
- @apply min-h-(--control-height,2.5rem) w-full rounded-(--radius-control) bg-(--control-bg) px-3 py-2 text-(--control-fg) transition-[border-color,box-shadow,color,opacity] duration-(--motion-duration-fast) ease-(--motion-ease);
105
- border: var(--border-width) solid var(--control-border);
106
-
107
- &::placeholder {
108
- color: var(--control-placeholder);
109
- }
110
-
111
- &:focus {
112
- @apply outline-none;
113
- }
114
-
115
- &:focus-visible {
116
- border-color: var(--control-border-active);
117
- box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring);
118
- }
119
-
120
- &[aria-invalid="true"] {
121
- --control-border: var(--color-destructive);
122
- --control-border-active: var(--color-destructive);
123
- }
124
-
125
- &:disabled,
126
- &[aria-disabled="true"],
127
- &[data-disabled] {
128
- @apply cursor-not-allowed;
129
-
130
- opacity: 0.58;
131
- }
132
-
133
- appearance: none;
134
- }
135
-
136
- @utility checkbox {
137
- --control-color: var(--color-text);
138
- --control-contrast: var(--color-text-contrast);
139
-
140
- @apply inline-grid size-4 cursor-pointer appearance-none place-content-center rounded-sm bg-(--color-background) transition-[background-color,border-color,box-shadow] duration-(--motion-duration-normal) ease-(--motion-ease);
141
- border: var(--border-width) solid var(--color-border);
142
-
143
- &:hover {
144
- @apply border-(--color-border-hover);
145
- }
146
-
147
- &:focus {
148
- @apply outline-none;
149
- }
150
-
151
- &:focus-visible {
152
- border-color: var(--control-color);
153
- box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring);
154
- }
155
-
156
- &::after {
157
- @apply block size-3 opacity-0 transition-opacity duration-(--motion-duration-normal) ease-(--motion-ease);
158
-
159
- background-color: var(--control-contrast);
160
- content: "";
161
- mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>');
162
- -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>');
163
- mask-size: contain;
164
- -webkit-mask-size: contain;
165
- }
166
-
167
- &:checked {
168
- border-color: var(--control-color);
169
- background-color: var(--control-color);
170
-
171
- &::after {
172
- @apply opacity-100;
173
- }
174
- }
175
-
176
- &.primary {
177
- --control-color: var(--color-primary);
178
- --control-contrast: var(--color-primary-contrast);
179
- }
180
-
181
- &.secondary {
182
- --control-color: var(--color-accent);
183
- --control-contrast: var(--color-accent-contrast);
184
- }
185
-
186
- &.success {
187
- --control-color: var(--color-success);
188
- --control-contrast: var(--color-success-contrast);
189
- }
190
-
191
- &.warning {
192
- --control-color: var(--color-warning);
193
- --control-contrast: var(--color-warning-contrast);
194
- }
195
-
196
- &.destructive,
197
- &.danger,
198
- &.error {
199
- --control-color: var(--color-destructive);
200
- --control-contrast: var(--color-destructive-contrast);
201
- }
202
-
203
- &.info {
204
- --control-color: var(--color-info);
205
- --control-contrast: var(--color-info-contrast);
206
- }
207
-
208
- &[aria-invalid="true"] {
209
- @apply border-(--color-destructive);
210
- }
211
-
212
- &:disabled,
213
- &[aria-disabled="true"],
214
- &[data-disabled] {
215
- @apply cursor-not-allowed opacity-[0.58];
216
- }
217
- }
218
-
219
- @utility switch {
220
- --control-color: var(--color-text);
221
- --control-contrast: var(--color-text-contrast);
222
-
223
- @apply relative h-4.5 w-9 cursor-pointer appearance-none rounded-full bg-(--color-surface) transition-[background-color,box-shadow] duration-(--motion-duration-normal) ease-(--motion-ease);
224
-
225
- &::after {
226
- @apply absolute top-0.5 left-0.5 size-3.5 rounded-full bg-(--color-text-secondary) transition-[transform,translate,background-color] duration-(--motion-duration-normal) ease-(--motion-ease);
227
-
228
- content: "";
229
- }
230
-
231
- &:hover {
232
- @apply border-(--color-border-hover);
233
- }
234
-
235
- &:focus {
236
- @apply outline-none;
237
- }
238
-
239
- &:focus-visible {
240
- border-color: var(--control-color);
241
- box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring);
242
- }
243
-
244
- &:checked {
245
- border-color: var(--control-color);
246
- background-color: var(--control-color);
247
-
248
- &::after {
249
- @apply translate-x-4.5;
250
-
251
- background-color: var(--control-contrast);
252
- }
253
- }
254
-
255
- &.primary {
256
- --control-color: var(--color-primary);
257
- --control-contrast: var(--color-primary-contrast);
258
- }
259
-
260
- &.secondary {
261
- --control-color: var(--color-accent);
262
- --control-contrast: var(--color-accent-contrast);
263
- }
264
-
265
- &.success {
266
- --control-color: var(--color-success);
267
- --control-contrast: var(--color-success-contrast);
268
- }
269
-
270
- &.warning {
271
- --control-color: var(--color-warning);
272
- --control-contrast: var(--color-warning-contrast);
273
- }
274
-
275
- &.destructive,
276
- &.danger,
277
- &.error {
278
- --control-color: var(--color-destructive);
279
- --control-contrast: var(--color-destructive-contrast);
280
- }
281
-
282
- &.info {
283
- --control-color: var(--color-info);
284
- --control-contrast: var(--color-info-contrast);
285
- }
286
-
287
- &[aria-invalid="true"] {
288
- @apply border-(--color-destructive);
289
- }
290
-
291
- &:disabled,
292
- &[aria-disabled="true"],
293
- &[data-disabled] {
294
- @apply cursor-not-allowed opacity-[0.58];
295
- }
296
- }
@@ -1,9 +0,0 @@
1
- @import "tailwindcss";
2
- @import "../theme.css";
3
- @import "../typography.css";
4
- @import "./button.css";
5
- @import "./feedback.css";
6
- @import "./form.css";
7
- @import "./loader.css";
8
- @import "./surface.css";
9
- @import "./tooltip.css";
@@ -1,56 +0,0 @@
1
- @import "tailwindcss";
2
-
3
- @utility ai {
4
- --ai-image: url('data:image/svg+xml;utf8,<svg stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>.spinner_V8m1{transform-origin:center;animation:spinner_zKoa 2s linear infinite}.spinner_V8m1 circle{stroke-linecap:round;animation:spinner_YpZS 1.5s ease-in-out infinite}@keyframes spinner_zKoa{100%{transform:rotate(360deg)}}@keyframes spinner_YpZS{0%{stroke-dasharray:0 150;stroke-dashoffset:0}47.5%{stroke-dasharray:42 150;stroke-dashoffset:-16}95%,100%{stroke-dasharray:42 150;stroke-dashoffset:-59}}</style><g class="spinner_V8m1"><circle cx="12" cy="12" r="9.5" fill="none" stroke-width="3"></circle></g></svg>');
5
-
6
- mask-image: var(--ai-image);
7
- -webkit-mask-image: var(--ai-image);
8
- mask-size: contain;
9
- -webkit-mask-size: contain;
10
- }
11
-
12
- @utility spinner-stretch {
13
- --ai-image: url('data:image/svg+xml;utf8,<svg stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>.spinner_V8m1{transform-origin:center;animation:spinner_zKoa 2s linear infinite}.spinner_V8m1 circle{stroke-linecap:round;animation:spinner_YpZS 1.5s ease-in-out infinite}@keyframes spinner_zKoa{100%{transform:rotate(360deg)}}@keyframes spinner_YpZS{0%{stroke-dasharray:0 150;stroke-dashoffset:0}47.5%{stroke-dasharray:42 150;stroke-dashoffset:-16}95%,100%{stroke-dasharray:42 150;stroke-dashoffset:-59}}</style><g class="spinner_V8m1"><circle cx="12" cy="12" r="9.5" fill="none" stroke-width="3"></circle></g></svg>');
14
- }
15
-
16
- @utility dots-wave {
17
- --ai-image: url('data:image/svg+xml;utf8,<svg fill="red" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>@keyframes spinner_8HQG{0%,57.14%{animation-timing-function:cubic-bezier(.33,.66,.66,1);transform:translate(0)}28.57%{animation-timing-function:cubic-bezier(.33,0,.66,.33);transform:translateY(-6px)}to{transform:translate(0)}}.spinner_qM83{animation:spinner_8HQG 1.05s infinite}</style><circle class="spinner_qM83" cx="4" cy="12" r="3"/><circle class="spinner_qM83" cx="12" cy="12" r="3" style="animation-delay:.1s"/><circle class="spinner_qM83" cx="20" cy="12" r="3" style="animation-delay:.2s"/></svg>');
18
- }
19
-
20
- @utility dots-fade {
21
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>.dot{animation:dot-anim 1s ease-in-out infinite;fill:currentColor}.d1{animation-delay:-0.32s}.d2{animation-delay:-0.16s}@keyframes dot-anim{0%,80%,100%{transform:scale(0.6);opacity:0.2}40%{transform:scale(1);opacity:1}}</style><circle class="dot d1" cx="4" cy="12" r="3" transform-origin="4px 12px"></circle><circle class="dot d2" cx="12" cy="12" r="3" transform-origin="12px 12px"></circle><circle class="dot d3" cx="20" cy="12" r="3" transform-origin="20px 12px"></circle></svg>');
22
- }
23
-
24
- @utility dots-queue {
25
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>@keyframes spinner_qtyZ{0%{r:0}25%{r:3px;cx:4px}50%{r:3px;cx:12px}75%{r:3px;cx:20px}to{r:0;cx:20px}}.spinner_nOfF{animation:spinner_qtyZ 2s cubic-bezier(.36,.6,.31,1) infinite}</style><circle class="spinner_nOfF" cx="4" cy="12" r="3"/><circle class="spinner_nOfF" cx="4" cy="12" r="3" style="animation-delay:-.5s"/><circle class="spinner_nOfF" cx="4" cy="12" r="3" style="animation-delay:-1s"/><circle class="spinner_nOfF" cx="4" cy="12" r="3" style="animation-delay:-1.5s"/></svg>');
26
- }
27
-
28
- @utility dots-rotate {
29
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>@keyframes spinner_XVY9{50%{transform:rotate(180deg)}to{transform:rotate(360deg)}}</style><circle cx="12" cy="12" r="3"/><g style="transform-origin:center;animation:spinner_XVY9 1s cubic-bezier(.36,.6,.31,1) infinite"><circle cx="4" cy="12" r="3"/><circle cx="20" cy="12" r="3"/></g></svg>');
30
- }
31
-
32
- @utility dots-grow {
33
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>@keyframes spinner_xe7Q{93.75%,to{r:3px}46.875%{r:.2px}}.spinner_b2T7{animation:spinner_xe7Q .8s linear infinite}</style><circle class="spinner_b2T7" cx="4" cy="12" r="3"/><circle class="spinner_b2T7" cx="12" cy="12" r="3" style="animation-delay:-.65s"/><circle class="spinner_b2T7" cx="20" cy="12" r="3" style="animation-delay:-.5s"/></svg>');
34
- }
35
-
36
- @utility dots-grow-alternate {
37
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>@keyframes spinner_qhi1{0%,to{r:1.5px}50%{r:3px}}.spinner_I8Q1{animation:spinner_qhi1 .75s linear infinite}</style><circle class="spinner_I8Q1" cx="4" cy="12" r="1.5"/><circle class="spinner_I8Q1" cx="12" cy="12" r="3" style="animation-delay:-.375s"/><circle class="spinner_I8Q1" cx="20" cy="12" r="1.5"/></svg>');
38
- }
39
-
40
- @utility dot-bounce {
41
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>@keyframes spinner_YeBj{0%{animation-timing-function:cubic-bezier(.33,0,.66,.33);cy:5px}46.875%{cy:20px;rx:4px;ry:4px}50%{animation-timing-function:cubic-bezier(.33,.66,.66,1);cy:20.5px;rx:4.8px;ry:3px}53.125%{rx:4px;ry:4px}to{cy:5px}}</style><circle cx="12" cy="5" style="animation:spinner_YeBj .8s infinite" r="4"/></svg>');
42
- }
43
-
44
- @utility bars-wave {
45
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>.bar{animation:bar-anim 1s ease-in-out infinite;fill:currentColor}.b1{animation-delay:-0.4s}.b2{animation-delay:-0.2s}@keyframes bar-anim{0%,100%{transform:scaleY(0.3)}50%{transform:scaleY(1)}}</style><rect class="bar b1" x="3" y="2" width="4" height="20" rx="2" transform-origin="5px 12px"></rect><rect class="bar b2" x="10" y="2" width="4" height="20" rx="2" transform-origin="12px 12px"></rect><rect class="bar b3" x="17" y="2" width="4" height="20" rx="2" transform-origin="19px 12px"></rect></svg>');
46
- }
47
-
48
- @utility pulse-ring {
49
- --ai-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>.pulse{animation:pulse-anim 1.2s cubic-bezier(0, 0.2, 0.8, 1) infinite;stroke:currentColor;transform-origin:center}.p2{animation-delay:-0.6s}@keyframes pulse-anim{0%{transform:scale(0);opacity:1}100%{transform:scale(1);opacity:0}}</style><circle class="pulse p1" cx="12" cy="12" r="10" fill="none" stroke-width="3"></circle><circle class="pulse p2" cx="12" cy="12" r="10" fill="none" stroke-width="3"></circle></svg>');
50
- }
51
-
52
- @utility loader {
53
- @apply ai bg-text inline-block size-8 [&.lg]:size-10 [&.sm]:size-6;
54
-
55
- content: "";
56
- }
@@ -1,6 +0,0 @@
1
- @import "tailwindcss";
2
- @import "../theme.css";
3
-
4
- @utility empty-state {
5
- @apply text-text-secondary flex flex-col items-center gap-3 p-[clamp(2rem,8vw,5rem)] text-center;
6
- }
@@ -1,60 +0,0 @@
1
- @import "tailwindcss";
2
- @import "../theme.css";
3
-
4
- @utility tooltip {
5
- --tooltip-bg: var(--color-surface);
6
- --tooltip-fg: var(--color-text);
7
- --tooltip-gap: 0.5rem;
8
- --tooltip-top: calc(var(--tooltip-gap) * -1);
9
- --tooltip-right: auto;
10
- --tooltip-bottom: auto;
11
- --tooltip-left: 50%;
12
- --tooltip-origin: bottom;
13
- --tooltip-transform: translate(-50%, -100%);
14
-
15
- @apply relative;
16
-
17
- &.tooltip-icon {
18
- @apply bg-surface text-text inline-flex size-5 cursor-default items-center justify-center rounded-full text-sm font-bold;
19
- }
20
-
21
- &[data-tooltip-position="bottom"] {
22
- --tooltip-top: auto;
23
- --tooltip-bottom: calc(var(--tooltip-gap) * -1);
24
- --tooltip-origin: top;
25
- --tooltip-transform: translate(-50%, 100%);
26
- }
27
-
28
- &[data-tooltip-position="left"] {
29
- --tooltip-top: 50%;
30
- --tooltip-left: calc(var(--tooltip-gap) * -1);
31
- --tooltip-origin: right;
32
- --tooltip-transform: translate(-100%, -50%);
33
- }
34
-
35
- &[data-tooltip-position="right"] {
36
- --tooltip-top: 50%;
37
- --tooltip-left: auto;
38
- --tooltip-right: calc(var(--tooltip-gap) * -1);
39
- --tooltip-origin: left;
40
- --tooltip-transform: translate(100%, -50%);
41
- }
42
-
43
- &::after {
44
- @apply pointer-events-none absolute z-(--z-popover) w-max max-w-72 rounded-(--radius-control) bg-(--tooltip-bg) px-2.5 py-2 text-sm font-normal whitespace-normal text-(--tooltip-fg) opacity-0 shadow-(--elevation-high) transition-[opacity,transform] duration-(--motion-duration-normal) ease-(--motion-ease);
45
- content: attr(data-tooltip);
46
- left: var(--tooltip-left);
47
- right: var(--tooltip-right);
48
- top: var(--tooltip-top);
49
- bottom: var(--tooltip-bottom);
50
- transform: var(--tooltip-transform) scale(0);
51
- transform-origin: var(--tooltip-origin);
52
- }
53
-
54
- &:hover::after,
55
- &:focus-visible::after,
56
- &[data-state="open"]::after {
57
- opacity: 1;
58
- transform: var(--tooltip-transform) scale(1);
59
- }
60
- }
package/src/index.css DELETED
@@ -1,7 +0,0 @@
1
- @import "tailwindcss";
2
-
3
- @import "./components/index.css";
4
- @import "./theme.css";
5
- @import "./typography.css";
6
- @import "./utilities.css";
7
- @import "./overrides.css";
package/src/overrides.css DELETED
@@ -1,76 +0,0 @@
1
- @import "tailwindcss";
2
- @import "./theme.css";
3
- @import "./typography.css";
4
-
5
- @layer base {
6
- ::-webkit-scrollbar {
7
- width: calc(var(--spacing) * 4);
8
- }
9
-
10
- ::-webkit-scrollbar-thumb {
11
- background: var(--color-primary);
12
- border: var(--spacing) solid var(--color-background);
13
- border-radius: calc(var(--spacing) * 2);
14
- }
15
-
16
- html,
17
- body {
18
- @apply bg-background text-text font-default min-h-dvh overflow-x-hidden;
19
- }
20
-
21
- body {
22
- @apply flex flex-col;
23
- }
24
-
25
- button {
26
- @apply not-disabled:cursor-pointer;
27
- }
28
-
29
- img {
30
- @apply select-none;
31
- }
32
-
33
- ::selection {
34
- background: var(--color-primary);
35
- color: var(--color-primary-contrast);
36
- }
37
-
38
- :focus-visible {
39
- outline: var(--focus-ring-width) solid var(--focus-ring);
40
- outline-offset: var(--focus-ring-offset);
41
- }
42
-
43
- @media (prefers-reduced-motion: reduce) {
44
- *,
45
- *::before,
46
- *::after {
47
- animation-duration: 0.01ms !important;
48
- animation-iteration-count: 1 !important;
49
- scroll-behavior: auto !important;
50
- transition-duration: 0.01ms !important;
51
- }
52
- }
53
-
54
- p,
55
- li,
56
- a {
57
- @apply text-body;
58
- }
59
- }
60
-
61
- @layer components {
62
- [aria-current="page"] {
63
- @apply text-primary font-bold;
64
- }
65
-
66
- @media (forced-colors: active) {
67
- .btn,
68
- .ipt,
69
- .textarea,
70
- .select,
71
- .alert,
72
- .badge {
73
- border-color: CanvasText;
74
- }
75
- }
76
- }
package/src/theme.css DELETED
@@ -1,136 +0,0 @@
1
- @import "tailwindcss";
2
-
3
- @theme {
4
- --font-default: "Segoe UI", system-ui, sans-serif;
5
-
6
- --color-primary: var(--color-neutral-950);
7
- --color-primary-contrast: var(--color-neutral-50);
8
- --color-primary-hover: var(--color-neutral-700);
9
- --color-primary-subtle: var(--color-neutral-200);
10
- --color-primary-strong: var(--color-neutral-900);
11
- --color-accent: var(--color-neutral-600);
12
- --color-accent-contrast: var(--color-neutral-50);
13
- --color-accent-hover: var(--color-neutral-700);
14
- --color-accent-subtle: var(--color-neutral-100);
15
- --color-accent-strong: var(--color-neutral-800);
16
- --color-border: var(--color-neutral-300);
17
- --color-border-hover: var(--color-neutral-600);
18
- --color-background: var(--color-neutral-50);
19
- --color-foreground: var(--color-neutral-100);
20
- --color-surface: var(--color-neutral-200);
21
- --color-text: var(--color-neutral-950);
22
- --color-text-secondary: var(--color-neutral-700);
23
- --color-text-contrast: var(--color-neutral-50);
24
- --color-text-hover: var(--color-neutral-700);
25
- --color-text-subtle: var(--color-neutral-200);
26
- --color-text-strong: var(--color-neutral-900);
27
-
28
- --color-success: var(--color-emerald-600);
29
- --color-success-contrast: var(--color-neutral-50);
30
- --color-success-hover: color-mix(in srgb, var(--color-success) 82%, var(--color-success-strong));
31
- --color-success-subtle: var(--color-emerald-100);
32
- --color-success-strong: var(--color-emerald-800);
33
- --color-warning: var(--color-amber-600);
34
- --color-warning-contrast: var(--color-neutral-50);
35
- --color-warning-hover: color-mix(in srgb, var(--color-warning) 82%, var(--color-warning-strong));
36
- --color-warning-subtle: var(--color-amber-100);
37
- --color-warning-strong: var(--color-amber-800);
38
- --color-destructive: var(--color-rose-700);
39
- --color-destructive-contrast: var(--color-neutral-50);
40
- --color-destructive-hover: color-mix(in srgb, var(--color-destructive) 82%, var(--color-destructive-strong));
41
- --color-destructive-subtle: var(--color-rose-100);
42
- --color-destructive-strong: var(--color-rose-800);
43
- --color-info: var(--color-indigo-600);
44
- --color-info-contrast: var(--color-neutral-50);
45
- --color-info-hover: color-mix(in srgb, var(--color-info) 82%, var(--color-info-strong));
46
- --color-info-subtle: var(--color-indigo-100);
47
- --color-info-strong: var(--color-indigo-800);
48
-
49
- --breakpoint-xs: 30rem;
50
- --breakpoint-2xl: 90rem;
51
- }
52
-
53
- :root {
54
- color-scheme: light;
55
-
56
- --container-narrow: 48rem;
57
- --container-max: 80rem;
58
- --container-wide: 90rem;
59
- --layout-gutter: clamp(1rem, 4vw, 2rem);
60
- --layout-section-block: clamp(4rem, 9vw, 7rem);
61
- --layout-stack-gap: 1rem;
62
- --layout-cluster-gap: 0.75rem;
63
- --layout-grid-min: 16rem;
64
-
65
- --radius-small: 0.25rem;
66
- --radius-control: 0.5rem;
67
- --radius-surface: 0.875rem;
68
- --control-height: 2.5rem;
69
- --border-width: 1px;
70
-
71
- --elevation-low: 0 1px 2px rgb(15 23 42 / 0.06), 0 1px 3px rgb(15 23 42 / 0.08);
72
- --elevation-mid: 0 4px 6px -1px rgb(15 23 42 / 0.08), 0 2px 4px -2px rgb(15 23 42 / 0.08);
73
- --elevation-high: 0 20px 25px -5px rgb(15 23 42 / 0.1), 0 8px 10px -6px rgb(15 23 42 / 0.1);
74
-
75
- --focus-ring: color-mix(in srgb, var(--color-primary) 64%, transparent);
76
- --focus-ring-offset: 2px;
77
- --focus-ring-width: 3px;
78
-
79
- --motion-duration-fast: 120ms;
80
- --motion-duration-normal: 200ms;
81
- --motion-duration-slow: 400ms;
82
- --motion-ease: cubic-bezier(0.2, 0, 0, 1);
83
-
84
- --z-popover: 40;
85
-
86
- --surface-hover-transform: translateY(-1px);
87
- }
88
-
89
- .dark {
90
- color-scheme: dark;
91
-
92
- --color-primary: var(--color-neutral-50);
93
- --color-primary-contrast: var(--color-neutral-950);
94
- --color-primary-hover: var(--color-neutral-200);
95
- --color-primary-subtle: var(--color-neutral-900);
96
- --color-primary-strong: var(--color-neutral-100);
97
- --color-accent: var(--color-neutral-400);
98
- --color-accent-contrast: var(--color-neutral-950);
99
- --color-accent-hover: var(--color-neutral-300);
100
- --color-accent-subtle: var(--color-neutral-800);
101
- --color-accent-strong: var(--color-neutral-200);
102
- --color-border: var(--color-neutral-700);
103
- --color-border-hover: var(--color-neutral-500);
104
- --color-background: var(--color-neutral-950);
105
- --color-foreground: var(--color-neutral-900);
106
- --color-surface: var(--color-neutral-800);
107
- --color-text: var(--color-neutral-50);
108
- --color-text-secondary: var(--color-neutral-400);
109
- --color-text-contrast: var(--color-neutral-950);
110
- --color-text-hover: var(--color-neutral-200);
111
- --color-text-subtle: var(--color-neutral-900);
112
- --color-text-strong: var(--color-neutral-100);
113
-
114
- --color-success: var(--color-emerald-600);
115
- --color-success-contrast: var(--color-neutral-50);
116
- --color-success-hover: color-mix(in srgb, var(--color-success) 82%, var(--color-success-strong));
117
- --color-success-subtle: var(--color-emerald-800);
118
- --color-success-strong: var(--color-emerald-100);
119
- --color-warning: var(--color-amber-600);
120
- --color-warning-contrast: var(--color-neutral-50);
121
- --color-warning-hover: color-mix(in srgb, var(--color-warning) 82%, var(--color-warning-strong));
122
- --color-warning-subtle: var(--color-amber-800);
123
- --color-warning-strong: var(--color-amber-100);
124
- --color-destructive: var(--color-rose-700);
125
- --color-destructive-contrast: var(--color-neutral-50);
126
- --color-destructive-hover: color-mix(in srgb, var(--color-destructive) 82%, var(--color-destructive-strong));
127
- --color-destructive-subtle: var(--color-rose-800);
128
- --color-destructive-strong: var(--color-rose-100);
129
- --color-info: var(--color-indigo-600);
130
- --color-info-contrast: var(--color-neutral-50);
131
- --color-info-hover: color-mix(in srgb, var(--color-info) 82%, var(--color-info-strong));
132
- --color-info-subtle: var(--color-indigo-800);
133
- --color-info-strong: var(--color-indigo-100);
134
- }
135
-
136
- @custom-variant dark (&:where(.dark, .dark *));
@@ -1,30 +0,0 @@
1
- @import "tailwindcss";
2
- @import "./theme.css";
3
-
4
- @utility text-display {
5
- @apply text-6xl font-bold tracking-tight md:text-8xl;
6
- }
7
-
8
- @utility text-title-lg {
9
- @apply text-5xl font-bold tracking-tight md:text-6xl;
10
- }
11
-
12
- @utility text-title {
13
- @apply text-3xl font-bold tracking-tight;
14
- }
15
-
16
- @utility text-title-sm {
17
- @apply text-xl font-semibold tracking-tight;
18
- }
19
-
20
- @utility text-label-lg {
21
- @apply text-lg font-medium tracking-wide;
22
- }
23
-
24
- @utility text-label {
25
- @apply text-base font-medium tracking-wide;
26
- }
27
-
28
- @utility text-body {
29
- @apply text-sm font-normal tracking-wider;
30
- }