frutjam 1.0.0-beta.0 → 1.0.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/README.md +7 -4
- package/dist/frutjam.local.css +2 -0
- package/dist/frutjam.min.css +5 -0
- package/dist/frutjam.min.css.map +1 -0
- package/dist/frutjam.min.js +3 -0
- package/dist/frutjam.min.js.LICENSE.txt +1 -0
- package/dist/frutjam.min.js.map +1 -0
- package/dist/frutjam.safelist.local.css +1 -0
- package/package.json +56 -24
- package/src/base/preflight.css +0 -7
- package/src/components/accordion.css +0 -44
- package/src/components/breadcrumb.css +0 -72
- package/src/components/button.css +0 -370
- package/src/components/card.css +0 -54
- package/src/components/checkbox.css +0 -221
- package/src/components/container.css +0 -52
- package/src/components/divider.css +0 -220
- package/src/components/drawer.css +0 -98
- package/src/components/dropdown.css +0 -122
- package/src/components/header.css +0 -22
- package/src/components/input.css +0 -283
- package/src/components/modal.css +0 -68
- package/src/components/nav.css +0 -35
- package/src/components/popover.css +0 -99
- package/src/components/sidebar.css +0 -9
- package/src/components/typography.css +0 -6
- package/src/main.css +0 -20
- package/src/main.js +0 -1
- package/src/theme/animation/slide.css +0 -6
- package/src/theme/animation/wiggle.css +0 -14
- package/src/theme/jams/base.css +0 -123
- package/src/theme/jams/darkberry.css +0 -133
- package/src/theme/jams/pinkberry.css +0 -0
- package/src/theme/jams/snowberry.css +0 -138
- package/src/theme/placement.css +0 -8
- package/src/theme/typography.css +0 -8
- package/src/utilities/headings.css +0 -22
- package/src/utilities/para.css +0 -22
- package/src/utilities/surface.css +0 -64
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
@utility divider-x {
|
|
2
|
-
&:not(:empty) {
|
|
3
|
-
@apply gap-x-2;
|
|
4
|
-
}
|
|
5
|
-
&::before, &::after {
|
|
6
|
-
@apply w-full h-[0.5px];
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
@utility divider-x-solid {
|
|
11
|
-
@apply divider-x;
|
|
12
|
-
&::before, &::after {
|
|
13
|
-
background: light-dark(
|
|
14
|
-
var(--divider-700),
|
|
15
|
-
var(--divider-900)
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
@media print {
|
|
19
|
-
&::before,
|
|
20
|
-
&::after {
|
|
21
|
-
border-top: 0.5px solid var(--divider-700);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
@utility divider-x-dashed {
|
|
27
|
-
@apply divider-x;
|
|
28
|
-
&::before, &::after {
|
|
29
|
-
background: repeating-linear-gradient(
|
|
30
|
-
to right,
|
|
31
|
-
var(--divider-700) 0,
|
|
32
|
-
var(--divider-700) 5px,
|
|
33
|
-
transparent 5px,
|
|
34
|
-
transparent 10px
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
@media print {
|
|
38
|
-
&::before,
|
|
39
|
-
&::after {
|
|
40
|
-
border-top: 0.5px dashed var(--divider-700);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/* Container with two sections and a vertical divider in between.
|
|
45
|
-
|
|
46
|
-
✅ This will work correctly when:
|
|
47
|
-
- You set a fixed height on `.container` (e.g. height: 200px), OR
|
|
48
|
-
- You set `height: 100%` on `.container` **AND**
|
|
49
|
-
all parent elements (including html and body) also have `height: 100%`
|
|
50
|
-
|
|
51
|
-
⚠️ If you use `height: 100%` but the parent elements do not have defined height,
|
|
52
|
-
the vertical divider will collapse because 100% of "auto" is meaningless in CSS.
|
|
53
|
-
|
|
54
|
-
💡 Best practice:
|
|
55
|
-
Use fixed height for predictable layouts.
|
|
56
|
-
Use 100% height only if you're sure the full layout chain supports it. */
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
@utility divider-y {
|
|
60
|
-
@apply flex-col;
|
|
61
|
-
&:not(:empty) {
|
|
62
|
-
@apply gap-y-2;
|
|
63
|
-
}
|
|
64
|
-
&::before, &::after {
|
|
65
|
-
@apply w-[0.5px] flex-1;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@utility divider-y-solid {
|
|
70
|
-
@apply divider-y;
|
|
71
|
-
&::before, &::after {
|
|
72
|
-
background: light-dark(
|
|
73
|
-
var(--divider-700),
|
|
74
|
-
var(--divider-800)
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
@media print {
|
|
78
|
-
&::before,
|
|
79
|
-
&::after {
|
|
80
|
-
border-left: 0.5px solid var(--divider-700);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@utility divider-y-dashed {
|
|
86
|
-
@apply divider-y;
|
|
87
|
-
&::before, &::after {
|
|
88
|
-
background: repeating-linear-gradient(
|
|
89
|
-
to bottom,
|
|
90
|
-
var(--divider-700) 0,
|
|
91
|
-
var(--divider-700) 5px,
|
|
92
|
-
transparent 5px,
|
|
93
|
-
transparent 10px
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
@media print {
|
|
97
|
-
&::before,
|
|
98
|
-
&::after {
|
|
99
|
-
border-left: 0.5px dashed var(--divider-700);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
@utility divider {
|
|
105
|
-
@apply divider-x-solid flex items-center justify-center h-full;
|
|
106
|
-
|
|
107
|
-
&::before, &::after {
|
|
108
|
-
@apply content-[''];
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
--divider-50: var(--default-50);
|
|
112
|
-
--divider-100: var(--default-100);
|
|
113
|
-
--divider-200: var(--default-200);
|
|
114
|
-
--divider-300: var(--default-300);
|
|
115
|
-
--divider-400: var(--default-400);
|
|
116
|
-
--divider-500: var(--default-500);
|
|
117
|
-
--divider-600: var(--default-600);
|
|
118
|
-
--divider-700: light-dark(var(--default-200),var(--default-600));
|
|
119
|
-
--divider-800: var(--default-800);
|
|
120
|
-
--divider-900: var(--default-900);
|
|
121
|
-
--divider-950: var(--default-950);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@utility divider-primary {
|
|
125
|
-
--divider-50: var(--primary-50);
|
|
126
|
-
--divider-100: var(--primary-100);
|
|
127
|
-
--divider-200: var(--primary-200);
|
|
128
|
-
--divider-300: var(--primary-300);
|
|
129
|
-
--divider-400: var(--primary-400);
|
|
130
|
-
--divider-500: var(--primary-500);
|
|
131
|
-
--divider-600: var(--primary-600);
|
|
132
|
-
--divider-700: var(--primary-700);
|
|
133
|
-
--divider-800: var(--primary-800);
|
|
134
|
-
--divider-900: var(--primary-900);
|
|
135
|
-
--divider-950: var(--primary-950);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
@utility divider-secondary {
|
|
139
|
-
--divider-50: var(--secondary-50);
|
|
140
|
-
--divider-100: var(--secondary-100);
|
|
141
|
-
--divider-200: var(--secondary-200);
|
|
142
|
-
--divider-300: var(--secondary-300);
|
|
143
|
-
--divider-400: var(--secondary-400);
|
|
144
|
-
--divider-500: var(--secondary-500);
|
|
145
|
-
--divider-600: var(--secondary-600);
|
|
146
|
-
--divider-700: var(--secondary-700);
|
|
147
|
-
--divider-800: var(--secondary-800);
|
|
148
|
-
--divider-900: var(--secondary-900);
|
|
149
|
-
--divider-950: var(--secondary-950);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
@utility divider-accent {
|
|
153
|
-
--divider-50: var(--accent-50);
|
|
154
|
-
--divider-100: var(--accent-100);
|
|
155
|
-
--divider-200: var(--accent-200);
|
|
156
|
-
--divider-300: var(--accent-300);
|
|
157
|
-
--divider-400: var(--accent-400);
|
|
158
|
-
--divider-500: var(--accent-500);
|
|
159
|
-
--divider-600: var(--accent-600);
|
|
160
|
-
--divider-700: var(--accent-700);
|
|
161
|
-
--divider-800: var(--accent-800);
|
|
162
|
-
--divider-900: var(--accent-900);
|
|
163
|
-
--divider-950: var(--accent-950);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
@utility divider-info {
|
|
167
|
-
--divider-50: var(--info-50);
|
|
168
|
-
--divider-100: var(--info-100);
|
|
169
|
-
--divider-200: var(--info-200);
|
|
170
|
-
--divider-300: var(--info-300);
|
|
171
|
-
--divider-400: var(--info-400);
|
|
172
|
-
--divider-500: var(--info-500);
|
|
173
|
-
--divider-600: var(--info-600);
|
|
174
|
-
--divider-700: var(--info-700);
|
|
175
|
-
--divider-800: var(--info-800);
|
|
176
|
-
--divider-900: var(--info-900);
|
|
177
|
-
--divider-950: var(--info-950);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
@utility divider-success {
|
|
181
|
-
--divider-50: var(--success-50);
|
|
182
|
-
--divider-100: var(--success-100);
|
|
183
|
-
--divider-200: var(--success-200);
|
|
184
|
-
--divider-300: var(--success-300);
|
|
185
|
-
--divider-400: var(--success-400);
|
|
186
|
-
--divider-500: var(--success-500);
|
|
187
|
-
--divider-600: var(--success-600);
|
|
188
|
-
--divider-700: var(--success-700);
|
|
189
|
-
--divider-800: var(--success-800);
|
|
190
|
-
--divider-900: var(--success-900);
|
|
191
|
-
--divider-950: var(--success-950);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
@utility divider-warning {
|
|
195
|
-
--divider-50: var(--warning-50);
|
|
196
|
-
--divider-100: var(--warning-100);
|
|
197
|
-
--divider-200: var(--warning-200);
|
|
198
|
-
--divider-300: var(--warning-300);
|
|
199
|
-
--divider-400: var(--warning-400);
|
|
200
|
-
--divider-500: var(--warning-500);
|
|
201
|
-
--divider-600: var(--warning-600);
|
|
202
|
-
--divider-700: var(--warning-700);
|
|
203
|
-
--divider-800: var(--warning-800);
|
|
204
|
-
--divider-900: var(--warning-900);
|
|
205
|
-
--divider-950: var(--warning-950);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
@utility divider-error {
|
|
209
|
-
--divider-50: var(--error-50);
|
|
210
|
-
--divider-100: var(--error-100);
|
|
211
|
-
--divider-200: var(--error-200);
|
|
212
|
-
--divider-300: var(--error-300);
|
|
213
|
-
--divider-400: var(--error-400);
|
|
214
|
-
--divider-500: var(--error-500);
|
|
215
|
-
--divider-600: var(--error-600);
|
|
216
|
-
--divider-700: var(--error-700);
|
|
217
|
-
--divider-800: var(--error-800);
|
|
218
|
-
--divider-900: var(--error-900);
|
|
219
|
-
--divider-950: var(--error-950);
|
|
220
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
@import "../theme/jams/base.css";
|
|
2
|
-
@utility drawer {
|
|
3
|
-
@apply pointer-events-none invisible fixed inset-0 m-0 grid h-full max-h-none w-full max-w-none place-items-start bg-transparent p-0 text-inherit z-999 overflow-hidden overscroll-contain;
|
|
4
|
-
|
|
5
|
-
&:not(drawer:not([open]):not(.drawer-open)),
|
|
6
|
-
&::backdrop {
|
|
7
|
-
@apply starting:invisible;
|
|
8
|
-
background: light-dark(
|
|
9
|
-
color-mix(in oklab,var(--color-default-100)30%,var(--color-default-900)20%),
|
|
10
|
-
color-mix(in oklab,var(--color-default-800)50%,transparent)
|
|
11
|
-
);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
&[open], &.drawer-open{
|
|
15
|
-
@apply pointer-events-auto visible starting:invisible;
|
|
16
|
-
|
|
17
|
-
.drawer-body {
|
|
18
|
-
translate: 0 0;
|
|
19
|
-
scale: 1;
|
|
20
|
-
opacity: 1;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@utility drawer-backdrop {
|
|
26
|
-
@apply col-start-1 row-start-1 grid self-stretch justify-self-stretch text-transparent -z-1;
|
|
27
|
-
button {
|
|
28
|
-
@apply cursor-pointer;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@utility drawer-body {
|
|
33
|
-
@apply rounded-none forced-colors:outline col-start-1 row-start-1 h-screen max-h-none w-11/12 w-auto max-w-none p-1 overflow-y-auto overscroll-contain;
|
|
34
|
-
translate: -100% 0;
|
|
35
|
-
scale: 1;
|
|
36
|
-
|
|
37
|
-
--tw-shadow-color: light-dark(
|
|
38
|
-
color-mix(in oklab,var(--core-300)50%,transparent),
|
|
39
|
-
color-mix(in oklab,var(--core-900)60%,transparent)
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
background: light-dark(
|
|
43
|
-
var(--core-50),
|
|
44
|
-
var(--core-950)
|
|
45
|
-
);
|
|
46
|
-
color: light-dark(
|
|
47
|
-
var(--default-800),
|
|
48
|
-
var(--default-50)
|
|
49
|
-
);
|
|
50
|
-
border: 1px solid light-dark(
|
|
51
|
-
var(--core-300),
|
|
52
|
-
var(--core-900)
|
|
53
|
-
);
|
|
54
|
-
transition: translate 0.3s ease-out, visibility 0.3s allow-discrete, background-color 0.3s ease-out, opacity 0.1s ease-out;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
@utility drawer-top {
|
|
59
|
-
@apply place-items-start;
|
|
60
|
-
|
|
61
|
-
:where(.drawer-body) {
|
|
62
|
-
@apply h-auto w-full max-w-none rounded-none;
|
|
63
|
-
max-height: calc(100vh - 5em);
|
|
64
|
-
translate: 0 -100%;
|
|
65
|
-
scale: 1;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@utility drawer-bottom {
|
|
70
|
-
@apply place-items-end;
|
|
71
|
-
|
|
72
|
-
:where(.drawer-body) {
|
|
73
|
-
@apply h-auto w-full max-w-none rounded-none;
|
|
74
|
-
max-height: calc(100vh - 5em);
|
|
75
|
-
translate: 0 100%;
|
|
76
|
-
scale: 1;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
@utility drawer-start {
|
|
81
|
-
@apply place-items-start;
|
|
82
|
-
|
|
83
|
-
:where(.drawer-body) {
|
|
84
|
-
@apply h-screen max-h-none w-auto max-w-none rounded-none;
|
|
85
|
-
translate: -100% 0;
|
|
86
|
-
scale: 1;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
@utility drawer-end {
|
|
91
|
-
@apply place-items-end;
|
|
92
|
-
|
|
93
|
-
:where(.drawer-body) {
|
|
94
|
-
@apply h-screen max-h-none w-auto max-w-none rounded-none;
|
|
95
|
-
translate: 100% 0;
|
|
96
|
-
scale: 1;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
@import "../theme/jams/base.css";
|
|
2
|
-
@import "../theme/placement.css";
|
|
3
|
-
|
|
4
|
-
@utility dropdown {
|
|
5
|
-
@apply relative inline-block;
|
|
6
|
-
position-area: var(--anchor-v, bottom) var(--anchor-h, span-right);
|
|
7
|
-
|
|
8
|
-
& > *:not(summary):focus {
|
|
9
|
-
@apply outline-hidden;
|
|
10
|
-
}
|
|
11
|
-
.dropdown-body {
|
|
12
|
-
@apply absolute;
|
|
13
|
-
}
|
|
14
|
-
&:not(details, .dropdown-open, .dropdown-hover:hover, :focus-within) {
|
|
15
|
-
.dropdown-body {
|
|
16
|
-
@apply hidden origin-top opacity-0 scale-9;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
&[popover],
|
|
21
|
-
.dropdown-body {
|
|
22
|
-
@apply starting:[scale:95%] starting:[opacity:0] z-999 w-max transition-discrete duration-200 transition-[opacity,_scale,_display] ease-in-out;
|
|
23
|
-
/* animation: dropdown 0.2s; */
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
&.dropdown-open,
|
|
27
|
-
&:not(.dropdown-hover):focus,
|
|
28
|
-
&:focus-within {
|
|
29
|
-
> [tabindex]:first-child {
|
|
30
|
-
@apply pointer-events-none;
|
|
31
|
-
}
|
|
32
|
-
.dropdown-body {
|
|
33
|
-
@apply opacity-100;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
&.dropdown-hover:hover {
|
|
38
|
-
.dropdown-body {
|
|
39
|
-
@apply opacity-100 scale-100;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
&:is(details) {
|
|
44
|
-
summary {
|
|
45
|
-
&::-webkit-details-marker {
|
|
46
|
-
@apply hidden;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
&.dropdown-open,
|
|
52
|
-
&:focus,
|
|
53
|
-
&:focus-within {
|
|
54
|
-
.dropdown-body {
|
|
55
|
-
@apply scale-100;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/* experimental */
|
|
60
|
-
&:where([popover]) {
|
|
61
|
-
background: #0000;
|
|
62
|
-
}
|
|
63
|
-
&[popover] {
|
|
64
|
-
@apply fixed text-inherit;
|
|
65
|
-
|
|
66
|
-
@supports not (position-area: bottom) {
|
|
67
|
-
@apply m-auto;
|
|
68
|
-
|
|
69
|
-
&.dropdown-open:not(:popover-open) {
|
|
70
|
-
@apply hidden origin-top opacity-0 scale-95;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
&::backdrop {
|
|
74
|
-
background-color: color-mix(in oklab, #000 30%, #0000);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
&:not(.dropdown-open, :popover-open) {
|
|
79
|
-
@apply hidden origin-top opacity-0 scale-95;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
@utility dropdown-body {
|
|
85
|
-
@apply shadow forced-colors:outline col-start-1 row-start-1 max-h-screen p-3 transition-all duration-150 scale-95 opacity-0 overflow-y-auto overscroll-contain;
|
|
86
|
-
|
|
87
|
-
--tw-shadow-color: light-dark(
|
|
88
|
-
color-mix(in oklab,var(--core-300)50%,transparent),
|
|
89
|
-
color-mix(in oklab,var(--core-900)60%,transparent)
|
|
90
|
-
);
|
|
91
|
-
border: 1px solid light-dark(
|
|
92
|
-
var(--core-200),
|
|
93
|
-
var(--core-900)
|
|
94
|
-
);
|
|
95
|
-
border-radius: var(--radius-dropdown);
|
|
96
|
-
background: light-dark(
|
|
97
|
-
var(--core-50),
|
|
98
|
-
var(--core-950)
|
|
99
|
-
);
|
|
100
|
-
color: light-dark(
|
|
101
|
-
var(--core-800),
|
|
102
|
-
var(--core-50)
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/* placements */
|
|
107
|
-
/* Positioning Classes */
|
|
108
|
-
.dropdown-x-start {
|
|
109
|
-
left: 0; /* Aligns dropdown to start horizontally */
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
.dropdown-x-end {
|
|
113
|
-
right: 0; /* Aligns dropdown to end horizontally */
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.dropdown-y-top {
|
|
117
|
-
bottom: calc(100% + 10px); /* Positions above the button */
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.dropdown-y-bottom {
|
|
121
|
-
top: calc(100% + 10px); /* Positions below the button */
|
|
122
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
@import "./container.css";
|
|
2
|
-
|
|
3
|
-
@utility header {
|
|
4
|
-
background-color: light-dark(var(--core-0), var(--core-1000));
|
|
5
|
-
color: light-dark(var(--core-900), var(--core-50));
|
|
6
|
-
border-bottom: 1px solid light-dark(var(--core-200), var(--core-800));
|
|
7
|
-
top: 0;
|
|
8
|
-
z-index: 999;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
@utility header-body {
|
|
12
|
-
@apply gap-3 py-2 container;
|
|
13
|
-
display: flex;
|
|
14
|
-
justify-content: space-between;
|
|
15
|
-
align-items:center;
|
|
16
|
-
margin-left: auto;
|
|
17
|
-
margin-right: auto;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@utility header-sticky {
|
|
21
|
-
position: sticky;
|
|
22
|
-
}
|