frutjam 0.6.0-alpha.2 → 0.7.0-alpha.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": "frutjam",
3
- "version": "0.6.0-alpha.2",
3
+ "version": "0.7.0-alpha.0",
4
4
  "description": "A utility-first CSS framework UI Library",
5
5
  "main": "./dist/frutjam.css",
6
6
  "browser": "dist/frutjam.css",
@@ -50,7 +50,7 @@
50
50
  "prettier-plugin-tailwindcss": "^0.6.11",
51
51
  "string-replace-loader": "^3.1.0",
52
52
  "style-loader": "^4.0.0",
53
- "webpack": "^5.98.0",
53
+ "webpack": "^5.99.5",
54
54
  "webpack-cli": "^6.0.1",
55
55
  "webpack-dev-server": "^5.2.1"
56
56
  }
@@ -1,7 +1,7 @@
1
1
  @layer base{
2
2
  :root,
3
3
  [data-theme] {
4
- background-color: var(--color-surface);
5
- color: var(--color-surface-fore);
4
+ background-color: light-dark(var(--core-50), var(--core-950));
5
+ color: light-dark(var(--core-900), var(--core-50));
6
6
  }
7
7
  }
@@ -1,7 +1,7 @@
1
- @import '../themes/styles/base.css';
1
+ @import '../theme/skins/base.css';
2
2
  @utility accordion {
3
3
  @layer components {
4
- @apply grid divide-y divide-info border border-info cursor-pointer rounded-md;
4
+ @apply grid divide-y divide-info-100 border border-info-100 cursor-pointer rounded-md;
5
5
 
6
6
  &>details {
7
7
  @apply text-pretty;
@@ -1,148 +1,339 @@
1
- @import "../themes/styles/base.css";
2
- @import "../themes/animation/wiggle.css";
1
+ @import "../theme/skins/base.css";
2
+ @import "../theme/animation/wiggle.css";
3
3
 
4
- @utility btn-* {
4
+ @utility btn-xs {
5
5
  @layer components {
6
+ @apply px-2.5 py-1.5 text-xs;
7
+ }
8
+ }
9
+
10
+ @utility btn-sm {
11
+ @layer components {
12
+ @apply px-3 py-2 text-sm;
13
+ }
14
+ }
15
+
16
+ @utility btn-md {
17
+ @layer components {
18
+ @apply px-3.5 py-2.5 text-base;
19
+ }
20
+ }
21
+
22
+ @utility btn-lg {
23
+ @layer components {
24
+ @apply px-4 py-3 text-base;
25
+ }
26
+ }
27
+
28
+ @utility btn-xl {
29
+ @layer components {
30
+ @apply px-4.5 py-3.5 text-base;
31
+ }
32
+ }
33
+
34
+ @utility btn-2xl {
35
+ @layer components {
36
+ @apply px-5 py-4 text-lg;
37
+ }
38
+ }
39
+
40
+ @utility btn-circle {
41
+ @layer components {
42
+ @apply rounded-full size-auto aspect-square;
43
+ }
44
+ }
45
+
46
+ @utility btn-square {
47
+ @layer components {
48
+ @apply size-auto aspect-square;
49
+ }
50
+ }
51
+
52
+ @utility btn-wide {
53
+ @layer components {
54
+ @apply w-full max-w-xs;
55
+ }
56
+ }
6
57
 
7
- @apply relative inline-flex self-start shrink-0 flex-nowrap items-center
58
+ @utility btn-block {
59
+ @layer components {
60
+ @apply w-full;
61
+ }
62
+ }
63
+
64
+ @utility btn-core {
65
+ @layer components {
66
+ @apply btn-md relative inline-flex self-start shrink-0 flex-nowrap items-center
8
67
  justify-center gap-1.5 text-center align-middle font-medium overflow-hidden
9
- text-xs transition duration-300 leading-4;
68
+ text-xs transition duration-350 ease-in-out leading-4 cursor-pointer;
10
69
 
11
- &:not(.btn-link){
12
- @apply rounded-[var(--radius-size)];
70
+ color: var(--btn-50);
71
+ border-radius: var(--radius-btn);
72
+ background-color: light-dark(
73
+ var(--btn-600),
74
+ var(--btn-800)
75
+ );
76
+
77
+ &:is(:disabled, [disabled], .btn-disabled) {
78
+ @apply opacity-20 pointer-events-none;
13
79
  }
14
80
 
15
- &:is(.btn-base, .btn-primary, .btn-secondary, .btn-success, .btn-error, .btn-warning, .btn-info, .btn-accent) {
16
- /* global */
17
- &:not(.btn-link) {
18
- @media (hover: hover) {
19
- &:hover {
20
- &::before {
21
- @apply content-[''] absolute size-full animate-wiggle bg-[radial-gradient(#ffffff33,_#00000000)];
22
- }
23
- }
24
- }
81
+ &:is(input[type="checkbox"], input[type="radio"]) {
82
+ @apply appearance-none;
83
+
84
+ &::after {
85
+ content: attr(aria-label);
25
86
  }
26
87
 
27
- /* button for checkbox and radio button */
28
- &:is(input[type="checkbox"], input[type="radio"]) {
29
- @apply appearance-none;
30
-
31
- &::after {
32
- content: attr(aria-label);
33
- }
34
-
35
- &:checked {
36
- @apply ring-1 bg-gradient-to-tr via-[--value(--color-*)]/90 isolate;
37
- }
88
+ &:checked {
89
+ @apply isolate;
38
90
  }
91
+ }
39
92
 
40
- /* disabled button */
41
- &:is(:disabled, [disabled], .btn-disabled) {
42
- @apply bg-[--value(--color-*)]/10 text-[--value(--color-*)]/30 pointer-events-none;
93
+ &:is(.btn-active, :hover) {
94
+ &:is(.btn-link) {
95
+ @apply bg-transparent underline underline-offset-4 cursor-pointer;
96
+
97
+ color: light-dark(
98
+ var(--btn-600),
99
+ var(--btn-500)
100
+ );
43
101
  }
102
+ &:not(.btn-link) {
103
+ @apply shadow-2xl ring-2 outline-none;
44
104
 
45
- /* buttons colors */
46
- &:not(.btn-dashed, .btn-outline, .btn-soft, :disabled, [disabled], .btn-disabled) {
47
- &:not(.btn-ghost, .btn-link) {
48
- @apply text-[--value(--color-*-fore)] bg-gradient-to-br from-[--value(--color-*)] via-[--value(--color-*)]/95 to-[--value(--color-*)] ring-[0.5px] ring-[--value(--color-*)]/50
49
- }
50
- &:is(.btn-ghost, .btn-link) {
51
- @apply text-[--value(--color-*)];
52
- }
105
+ --tw-ring-color: light-dark(
106
+ color-mix(in oklab,var(--btn-700)10%,transparent),
107
+ color-mix(in oklab,var(--btn-400)10%,transparent)
108
+ );
53
109
 
54
- &:is(.btn-active),
55
- &:hover:is(.btn-link) {
56
- @apply underline underline-offset-4 cursor-pointer;
57
- }
110
+ background-color: light-dark(
111
+ var(--btn-700),
112
+ var(--btn-900)
113
+ );
114
+
115
+ color: light-dark(
116
+ var(--btn-50),
117
+ var(--btn-100)
118
+ );
58
119
 
59
- @media (hover: hover) {
60
- &:hover {
61
- &:is(.btn-ghost) {
62
- @apply text-[--value(--color-*-fore)] from-[--value(--color-*)] to-[--value(--color-*)] ring-[--value(--color-*)]/50 duration-500;
63
- }
64
- &:not(.btn-link) {
65
- @apply ring-1 bg-gradient-to-tr via-[--value(--color-*)]/90;
66
- }
120
+ &:not(:disabled, [disabled], .btn-disabled) {
121
+ &::before {
122
+ @apply content-[''] absolute size-full animate-wiggle bg-[radial-gradient(#ffffff33,_#00000000)];
67
123
  }
68
124
  }
69
-
70
125
  }
126
+ }
71
127
 
72
- /* button dashed */
73
- &:is(.btn-dashed) {
74
- @apply text-[--value(--color-*)] bg-transparent border border-dashed border-[--value(--color-*)];
128
+ &:where(.btn-dashed) {
129
+ &:not(.btn-active) {
130
+ @apply bg-transparent outline outline-dashed;
75
131
 
76
- @media (hover: hover) {
77
- &:hover {
78
- @apply ring-1 text-surface bg-[--value(--color-*)] bg-gradient-to-br from-[--value(--color-*)] via-[--value(--color-*)]/95 to-[--value(--color-*)];
79
- }
80
- }
132
+ color: light-dark(
133
+ var(--btn-700),
134
+ var(--btn-500)
135
+ );
81
136
  }
137
+ }
82
138
 
83
- /* button outline */
84
- &:is(.btn-outline) {
85
- @apply text-[--value(--color-*)] bg-transparent ring-1 ring-[--value(--color-*)];
86
-
87
- @media (hover: hover) {
88
- &:hover {
89
- @apply ring-1 text-surface bg-[--value(--color-*)] bg-gradient-to-br from-[--value(--color-*)] via-[--value(--color-*)]/95 to-[--value(--color-*)];
90
- }
91
- }
139
+ &:where(.btn-outline) {
140
+ &:not(.btn-active) {
141
+ @apply bg-transparent outline outline-solid;
142
+
143
+ color: light-dark(
144
+ var(--btn-700),
145
+ var(--btn-500)
146
+ );
92
147
  }
148
+ }
93
149
 
94
- /* button soft */
95
- &:is(.btn-soft) {
96
- @apply text-[--value(--color-*)] bg-[--value(--color-*)]/20 ring-[0.5px] ring-[--value(--color-*)]/20;
97
- @media (hover: hover) {
98
- &:hover {
99
- @apply ring-1;
100
- }
101
- }
150
+ &:where(.btn-soft) {
151
+ &:not(.btn-active) {
152
+
153
+ background-color: light-dark(
154
+ var(--btn-100),
155
+ color-mix(in oklab,var(--btn-900)10%,transparent)
156
+ );
157
+
158
+ color: light-dark(
159
+ var(--btn-800),
160
+ var(--btn-400)
161
+ );
102
162
  }
103
163
  }
104
164
 
105
- /* If no btn size class is present, apply the base size as btn-md */
106
- &:not(.btn-xs, .btn-sm, .btn-md, .btn-lg, .btn-xl, .btn-2xl) {
107
- @apply px-3.5 py-2.5 text-sm;
108
- }
165
+ &:where(.btn-ghost) {
166
+ &:not(.btn-active) {
167
+ @apply bg-transparent;
109
168
 
110
- /* button sizes */
111
- &:is(.btn-xs, .btn-sm, .btn-md, .btn-lg, .btn-xl, .btn-2xl) {
112
- &:is(.btn-xs) {
113
- @apply px-2.5 py-1.5 text-xs;
114
- }
115
- &:is(.btn-sm) {
116
- @apply px-3 py-2 text-sm;
117
- }
118
- &:is(.btn-md) {
119
- @apply px-3.5 py-2.5 text-sm;
120
- }
121
- &:is(.btn-lg) {
122
- @apply px-4 py-3 text-base;
123
- }
124
- &:is(.btn-xl) {
125
- @apply px-4.5 py-3.5 text-base;
126
- }
127
- &:is(.btn-2xl) {
128
- @apply px-5 py-4 text-base;
169
+ color: light-dark(
170
+ var(--btn-600),
171
+ var(--btn-500)
172
+ );
129
173
  }
130
174
  }
131
175
 
132
- /* button modifier */
133
- &:is(.btn-circle, .btn-sqaure, .btn-wide, .btn-block) {
134
- &:is(.btn-circle) {
135
- @apply rounded-full size-auto aspect-square;
136
- }
137
- &:is(.btn-square) {
138
- @apply size-auto aspect-square;
139
- }
140
- &:is(.btn-wide) {
141
- @apply w-full max-w-64;
142
- }
143
- &:is(.btn-block) {
144
- @apply w-full;
176
+ &:where(.btn-link) {
177
+ &:not(.btn-active) {
178
+ @apply bg-transparent;
179
+
180
+ color: light-dark(
181
+ var(--btn-600),
182
+ var(--btn-500)
183
+ );
145
184
  }
146
185
  }
147
186
  }
148
- }
187
+ }
188
+
189
+ @utility btn {
190
+ @layer components {
191
+ @apply btn-core;
192
+ }
193
+ @layer theme {
194
+ --btn-50: var(--default-50);
195
+ --btn-100: var(--default-100);
196
+ --btn-200: var(--default-200);
197
+ --btn-300: var(--default-300);
198
+ --btn-400: var(--default-400);
199
+ --btn-500: var(--default-500);
200
+ --btn-600: var(--default-600);
201
+ --btn-700: var(--default-700);
202
+ --btn-800: var(--default-800);
203
+ --btn-900: var(--default-900);
204
+ --btn-950: var(--default-950);
205
+ }
206
+ }
207
+
208
+ @utility btn-primary {
209
+ @layer components {
210
+ @apply btn-core;
211
+ }
212
+ @layer theme {
213
+ --btn-50: var(--primary-50);
214
+ --btn-100: var(--primary-100);
215
+ --btn-200: var(--primary-200);
216
+ --btn-300: var(--primary-300);
217
+ --btn-400: var(--primary-400);
218
+ --btn-500: var(--primary-500);
219
+ --btn-600: var(--primary-600);
220
+ --btn-700: var(--primary-700);
221
+ --btn-800: var(--primary-800);
222
+ --btn-900: var(--primary-900);
223
+ --btn-950: var(--primary-950);
224
+ }
225
+ }
226
+
227
+ @utility btn-secondary {
228
+ @layer components {
229
+ @apply btn-core;
230
+ }
231
+ @layer theme {
232
+ --btn-50: var(--secondary-50);
233
+ --btn-100: var(--secondary-100);
234
+ --btn-200: var(--secondary-200);
235
+ --btn-300: var(--secondary-300);
236
+ --btn-400: var(--secondary-400);
237
+ --btn-500: var(--secondary-500);
238
+ --btn-600: var(--secondary-600);
239
+ --btn-700: var(--secondary-700);
240
+ --btn-800: var(--secondary-800);
241
+ --btn-900: var(--secondary-900);
242
+ --btn-950: var(--secondary-950);
243
+ }
244
+ }
245
+
246
+ @utility btn-accent {
247
+ @layer components {
248
+ @apply btn-core;
249
+ }
250
+ @layer theme {
251
+ --btn-50: var(--accent-50);
252
+ --btn-100: var(--accent-100);
253
+ --btn-200: var(--accent-200);
254
+ --btn-300: var(--accent-300);
255
+ --btn-400: var(--accent-400);
256
+ --btn-500: var(--accent-500);
257
+ --btn-600: var(--accent-600);
258
+ --btn-700: var(--accent-700);
259
+ --btn-800: var(--accent-800);
260
+ --btn-900: var(--accent-900);
261
+ --btn-950: var(--accent-950);
262
+ }
263
+ }
264
+
265
+ @utility btn-info {
266
+ @layer components {
267
+ @apply btn-core;
268
+ }
269
+ @layer theme {
270
+ --btn-50: var(--info-50);
271
+ --btn-100: var(--info-100);
272
+ --btn-200: var(--info-200);
273
+ --btn-300: var(--info-300);
274
+ --btn-400: var(--info-400);
275
+ --btn-500: var(--info-500);
276
+ --btn-600: var(--info-600);
277
+ --btn-700: var(--info-700);
278
+ --btn-800: var(--info-800);
279
+ --btn-900: var(--info-900);
280
+ --btn-950: var(--info-950);
281
+ }
282
+ }
283
+
284
+ @utility btn-success {
285
+ @layer components {
286
+ @apply btn-core;
287
+ }
288
+ @layer theme {
289
+ --btn-50: var(--success-50);
290
+ --btn-100: var(--success-100);
291
+ --btn-200: var(--success-200);
292
+ --btn-300: var(--success-300);
293
+ --btn-400: var(--success-400);
294
+ --btn-500: var(--success-500);
295
+ --btn-600: var(--success-600);
296
+ --btn-700: var(--success-700);
297
+ --btn-800: var(--success-800);
298
+ --btn-900: var(--success-900);
299
+ --btn-950: var(--success-950);
300
+ }
301
+ }
302
+
303
+ @utility btn-warning {
304
+ @layer components {
305
+ @apply btn-core;
306
+ }
307
+ @layer theme {
308
+ --btn-50: var(--warning-50);
309
+ --btn-100: var(--warning-100);
310
+ --btn-200: var(--warning-200);
311
+ --btn-300: var(--warning-300);
312
+ --btn-400: var(--warning-400);
313
+ --btn-500: var(--warning-500);
314
+ --btn-600: var(--warning-600);
315
+ --btn-700: var(--warning-700);
316
+ --btn-800: var(--warning-800);
317
+ --btn-900: var(--warning-900);
318
+ --btn-950: var(--warning-950);
319
+ }
320
+ }
321
+
322
+ @utility btn-error {
323
+ @layer components {
324
+ @apply btn-core;
325
+ }
326
+ @layer theme {
327
+ --btn-50: var(--error-50);
328
+ --btn-100: var(--error-100);
329
+ --btn-200: var(--error-200);
330
+ --btn-300: var(--error-300);
331
+ --btn-400: var(--error-400);
332
+ --btn-500: var(--error-500);
333
+ --btn-600: var(--error-600);
334
+ --btn-700: var(--error-700);
335
+ --btn-800: var(--error-800);
336
+ --btn-900: var(--error-900);
337
+ --btn-950: var(--error-950);
338
+ }
339
+ }