tailwind-styled-v4 4.0.0 → 5.0.1
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/CHANGELOG.md +398 -0
- package/LICENSE +21 -0
- package/README.md +532 -0
- package/dist/analyzer.d.mts +114 -0
- package/dist/analyzer.d.ts +114 -0
- package/dist/analyzer.js +1555 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/analyzer.mjs +1544 -0
- package/dist/analyzer.mjs.map +1 -0
- package/dist/animate.d.mts +46 -0
- package/dist/animate.d.ts +41 -112
- package/dist/animate.js +792 -235
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +782 -0
- package/dist/animate.mjs.map +1 -0
- package/dist/atomic.d.mts +18 -0
- package/dist/atomic.d.ts +18 -0
- package/dist/atomic.js +191 -0
- package/dist/atomic.js.map +1 -0
- package/dist/atomic.mjs +185 -0
- package/dist/atomic.mjs.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +6063 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +6053 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/{compiler.d.cts → compiler.d.mts} +503 -210
- package/dist/compiler.d.ts +503 -210
- package/dist/compiler.js +1549 -566
- package/dist/compiler.js.map +1 -1
- package/dist/{compiler.cjs → compiler.mjs} +1476 -627
- package/dist/compiler.mjs.map +1 -0
- package/dist/dashboard.d.mts +272 -0
- package/dist/dashboard.d.ts +272 -0
- package/dist/dashboard.js +249 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/dashboard.mjs +239 -0
- package/dist/dashboard.mjs.map +1 -0
- package/dist/devtools.js +336 -211
- package/dist/devtools.js.map +1 -1
- package/dist/{devtools.cjs → devtools.mjs} +331 -220
- package/dist/devtools.mjs.map +1 -0
- package/dist/engine.d.mts +84 -0
- package/dist/engine.d.ts +84 -0
- package/dist/engine.js +3014 -0
- package/dist/engine.js.map +1 -0
- package/dist/engine.mjs +3005 -0
- package/dist/engine.mjs.map +1 -0
- package/dist/{index.d.cts → index.d.mts} +75 -4
- package/dist/index.d.ts +75 -4
- package/dist/index.js +1341 -149
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2162 -0
- package/dist/index.mjs.map +1 -0
- package/dist/liveTokenEngine-DYN3Zale.d.mts +34 -0
- package/dist/liveTokenEngine-DYN3Zale.d.ts +34 -0
- package/dist/next.d.mts +55 -0
- package/dist/next.d.ts +30 -20
- package/dist/next.js +6947 -149
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +7050 -0
- package/dist/next.mjs.map +1 -0
- package/dist/plugin.d.mts +90 -0
- package/dist/plugin.d.ts +90 -0
- package/dist/plugin.js +185 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugin.mjs +174 -0
- package/dist/plugin.mjs.map +1 -0
- package/dist/pluginRegistry.d.mts +83 -0
- package/dist/pluginRegistry.d.ts +83 -0
- package/dist/pluginRegistry.js +303 -0
- package/dist/pluginRegistry.js.map +1 -0
- package/dist/pluginRegistry.mjs +298 -0
- package/dist/pluginRegistry.mjs.map +1 -0
- package/dist/{preset.d.cts → preset.d.mts} +29 -2
- package/dist/preset.d.ts +29 -2
- package/dist/preset.js +318 -21
- package/dist/preset.js.map +1 -1
- package/dist/preset.mjs +414 -0
- package/dist/preset.mjs.map +1 -0
- package/dist/rspack.d.mts +33 -0
- package/dist/rspack.d.ts +33 -0
- package/dist/rspack.js +55 -0
- package/dist/rspack.js.map +1 -0
- package/dist/rspack.mjs +45 -0
- package/dist/rspack.mjs.map +1 -0
- package/dist/runtime.d.mts +62 -0
- package/dist/runtime.d.ts +62 -0
- package/dist/runtime.js +207 -0
- package/dist/runtime.js.map +1 -0
- package/dist/runtime.mjs +188 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/runtimeCss.d.mts +65 -0
- package/dist/runtimeCss.d.ts +65 -0
- package/dist/runtimeCss.js +188 -0
- package/dist/runtimeCss.js.map +1 -0
- package/dist/runtimeCss.mjs +173 -0
- package/dist/runtimeCss.mjs.map +1 -0
- package/dist/scanner.d.mts +25 -0
- package/dist/scanner.d.ts +25 -0
- package/dist/scanner.js +717 -0
- package/dist/scanner.js.map +1 -0
- package/dist/scanner.mjs +703 -0
- package/dist/scanner.mjs.map +1 -0
- package/dist/shared.d.mts +85 -0
- package/dist/shared.d.ts +85 -0
- package/dist/shared.js +255 -0
- package/dist/shared.js.map +1 -0
- package/dist/shared.mjs +233 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/storybookAddon.d.mts +108 -0
- package/dist/storybookAddon.d.ts +108 -0
- package/dist/storybookAddon.js +95 -0
- package/dist/storybookAddon.js.map +1 -0
- package/dist/storybookAddon.mjs +88 -0
- package/dist/storybookAddon.mjs.map +1 -0
- package/dist/svelte.d.mts +114 -0
- package/dist/svelte.d.ts +114 -0
- package/dist/svelte.js +67 -0
- package/dist/svelte.js.map +1 -0
- package/dist/svelte.mjs +59 -0
- package/dist/svelte.mjs.map +1 -0
- package/dist/testing.d.mts +185 -0
- package/dist/testing.d.ts +185 -0
- package/dist/testing.js +173 -0
- package/dist/testing.js.map +1 -0
- package/dist/testing.mjs +158 -0
- package/dist/testing.mjs.map +1 -0
- package/dist/{theme.d.cts → theme.d.mts} +18 -11
- package/dist/theme.d.ts +18 -11
- package/dist/theme.js +205 -19
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +311 -0
- package/dist/theme.mjs.map +1 -0
- package/dist/types-DXr2PmGP.d.mts +31 -0
- package/dist/types-DXr2PmGP.d.ts +31 -0
- package/dist/vite.d.mts +51 -0
- package/dist/vite.d.ts +35 -6
- package/dist/vite.js +4254 -57
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +4281 -0
- package/dist/vite.mjs.map +1 -0
- package/dist/vue.d.mts +89 -0
- package/dist/vue.d.ts +89 -0
- package/dist/vue.js +104 -0
- package/dist/vue.js.map +1 -0
- package/dist/vue.mjs +96 -0
- package/dist/vue.mjs.map +1 -0
- package/package.json +173 -67
- package/dist/animate.cjs +0 -252
- package/dist/animate.cjs.map +0 -1
- package/dist/animate.d.cts +0 -117
- package/dist/astTransform-ua-eapqs.d.cts +0 -41
- package/dist/astTransform-ua-eapqs.d.ts +0 -41
- package/dist/compiler.cjs.map +0 -1
- package/dist/css.cjs +0 -71
- package/dist/css.cjs.map +0 -1
- package/dist/css.d.cts +0 -45
- package/dist/css.d.ts +0 -45
- package/dist/css.js +0 -62
- package/dist/css.js.map +0 -1
- package/dist/devtools.cjs.map +0 -1
- package/dist/index.cjs +0 -1058
- package/dist/index.cjs.map +0 -1
- package/dist/next.cjs +0 -268
- package/dist/next.cjs.map +0 -1
- package/dist/next.d.cts +0 -45
- package/dist/plugins.cjs +0 -396
- package/dist/plugins.cjs.map +0 -1
- package/dist/plugins.d.cts +0 -231
- package/dist/plugins.d.ts +0 -231
- package/dist/plugins.js +0 -381
- package/dist/plugins.js.map +0 -1
- package/dist/preset.cjs +0 -129
- package/dist/preset.cjs.map +0 -1
- package/dist/theme.cjs +0 -154
- package/dist/theme.cjs.map +0 -1
- package/dist/turbopackLoader.cjs +0 -2689
- package/dist/turbopackLoader.cjs.map +0 -1
- package/dist/turbopackLoader.d.cts +0 -22
- package/dist/turbopackLoader.d.ts +0 -22
- package/dist/turbopackLoader.js +0 -2681
- package/dist/turbopackLoader.js.map +0 -1
- package/dist/vite.cjs +0 -105
- package/dist/vite.cjs.map +0 -1
- package/dist/vite.d.cts +0 -22
- package/dist/webpackLoader.cjs +0 -2670
- package/dist/webpackLoader.cjs.map +0 -1
- package/dist/webpackLoader.d.cts +0 -24
- package/dist/webpackLoader.d.ts +0 -24
- package/dist/webpackLoader.js +0 -2662
- package/dist/webpackLoader.js.map +0 -1
- /package/dist/{devtools.d.cts → devtools.d.mts} +0 -0
package/dist/plugins.js
DELETED
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defProps = Object.defineProperties;
|
|
4
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
-
var __spreadValues = (a, b) => {
|
|
10
|
-
for (var prop in b || (b = {}))
|
|
11
|
-
if (__hasOwnProp.call(b, prop))
|
|
12
|
-
__defNormalProp(a, prop, b[prop]);
|
|
13
|
-
if (__getOwnPropSymbols)
|
|
14
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
-
if (__propIsEnum.call(b, prop))
|
|
16
|
-
__defNormalProp(a, prop, b[prop]);
|
|
17
|
-
}
|
|
18
|
-
return a;
|
|
19
|
-
};
|
|
20
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
|
-
|
|
22
|
-
// ../plugin/src/plugins.ts
|
|
23
|
-
function pluginAnimation(opts = {}) {
|
|
24
|
-
const { prefix = "tw-anim", reducedMotion = true } = opts;
|
|
25
|
-
return {
|
|
26
|
-
name: "tw-plugin-animation",
|
|
27
|
-
setup(ctx) {
|
|
28
|
-
if (reducedMotion) {
|
|
29
|
-
ctx.addVariant(
|
|
30
|
-
"motion-safe",
|
|
31
|
-
(sel) => `@media (prefers-reduced-motion: no-preference) { ${sel} }`
|
|
32
|
-
);
|
|
33
|
-
ctx.addVariant(
|
|
34
|
-
"motion-reduce",
|
|
35
|
-
(sel) => `@media (prefers-reduced-motion: reduce) { ${sel} }`
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
ctx.onGenerateCSS((css) => {
|
|
39
|
-
const keyframes = `
|
|
40
|
-
/* tw-plugin-animation: preset keyframes */
|
|
41
|
-
@keyframes ${prefix}-fade-in { from{opacity:0} to{opacity:1} }
|
|
42
|
-
@keyframes ${prefix}-fade-out { from{opacity:1} to{opacity:0} }
|
|
43
|
-
@keyframes ${prefix}-slide-up { from{opacity:0;transform:translateY(0.5rem)} to{opacity:1;transform:translateY(0)} }
|
|
44
|
-
@keyframes ${prefix}-slide-down { from{opacity:0;transform:translateY(-0.5rem)}to{opacity:1;transform:translateY(0)} }
|
|
45
|
-
@keyframes ${prefix}-slide-left { from{opacity:0;transform:translateX(0.5rem)} to{opacity:1;transform:translateX(0)} }
|
|
46
|
-
@keyframes ${prefix}-scale-in { from{opacity:0;transform:scale(0.95)} to{opacity:1;transform:scale(1)} }
|
|
47
|
-
@keyframes ${prefix}-scale-out { from{opacity:1;transform:scale(1)} to{opacity:0;transform:scale(0.95)} }
|
|
48
|
-
@keyframes ${prefix}-spin { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }
|
|
49
|
-
@keyframes ${prefix}-ping { 0%,100%{opacity:1;transform:scale(1)} 75%{opacity:0;transform:scale(2)} }
|
|
50
|
-
@keyframes ${prefix}-pulse { 0%,100%{opacity:1} 50%{opacity:0.5} }
|
|
51
|
-
@keyframes ${prefix}-bounce { 0%,100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)} 50%{transform:translateY(0);animation-timing-function:cubic-bezier(0,0,.2,1)} }
|
|
52
|
-
`;
|
|
53
|
-
return keyframes + css;
|
|
54
|
-
});
|
|
55
|
-
const dur = "300ms";
|
|
56
|
-
const ease = "cubic-bezier(0.16,1,0.3,1)";
|
|
57
|
-
ctx.addUtility(`animate-fade-in`, { animation: `${prefix}-fade-in ${dur} ${ease} both` });
|
|
58
|
-
ctx.addUtility(`animate-fade-out`, { animation: `${prefix}-fade-out ${dur} ${ease} both` });
|
|
59
|
-
ctx.addUtility(`animate-slide-up`, { animation: `${prefix}-slide-up ${dur} ${ease} both` });
|
|
60
|
-
ctx.addUtility(`animate-slide-down`, {
|
|
61
|
-
animation: `${prefix}-slide-down ${dur} ${ease} both`
|
|
62
|
-
});
|
|
63
|
-
ctx.addUtility(`animate-slide-left`, {
|
|
64
|
-
animation: `${prefix}-slide-left ${dur} ${ease} both`
|
|
65
|
-
});
|
|
66
|
-
ctx.addUtility(`animate-scale-in`, { animation: `${prefix}-scale-in 200ms ease-out both` });
|
|
67
|
-
ctx.addUtility(`animate-scale-out`, { animation: `${prefix}-scale-out 150ms ease-in both` });
|
|
68
|
-
ctx.addUtility(`animate-spin`, { animation: `${prefix}-spin 1s linear infinite` });
|
|
69
|
-
ctx.addUtility(`animate-ping`, {
|
|
70
|
-
animation: `${prefix}-ping 1s cubic-bezier(0,0,.2,1) infinite`
|
|
71
|
-
});
|
|
72
|
-
ctx.addUtility(`animate-pulse`, {
|
|
73
|
-
animation: `${prefix}-pulse 2s cubic-bezier(.4,0,.6,1) infinite`
|
|
74
|
-
});
|
|
75
|
-
ctx.addUtility(`animate-bounce`, { animation: `${prefix}-bounce 1s infinite` });
|
|
76
|
-
ctx.addUtility(`animate-none`, { animation: "none" });
|
|
77
|
-
ctx.addTransform((node, _ctx) => {
|
|
78
|
-
if ((node == null ? void 0 : node.type) === "TwAnimateCall") {
|
|
79
|
-
return __spreadProps(__spreadValues({}, node), { pluginHandled: "tw-plugin-animation" });
|
|
80
|
-
}
|
|
81
|
-
return node;
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
function pluginTokens(opts = {}) {
|
|
87
|
-
const { generateUtilities = true } = opts;
|
|
88
|
-
return {
|
|
89
|
-
name: "tw-plugin-tokens",
|
|
90
|
-
setup(ctx) {
|
|
91
|
-
var _a, _b, _c, _d, _e, _f;
|
|
92
|
-
for (const [name, value] of Object.entries((_a = opts.colors) != null ? _a : {})) {
|
|
93
|
-
ctx.addToken(`color-${name}`, value);
|
|
94
|
-
if (!value.startsWith("var(")) {
|
|
95
|
-
const hoverValue = darken(value, 0.1);
|
|
96
|
-
const activeValue = darken(value, 0.2);
|
|
97
|
-
ctx.addToken(`color-${name}-hover`, hoverValue);
|
|
98
|
-
ctx.addToken(`color-${name}-active`, activeValue);
|
|
99
|
-
}
|
|
100
|
-
if (generateUtilities) {
|
|
101
|
-
ctx.addUtility(`bg-${name}`, { "background-color": `var(--color-${name})` });
|
|
102
|
-
ctx.addUtility(`text-${name}`, { color: `var(--color-${name})` });
|
|
103
|
-
ctx.addUtility(`border-${name}`, { "border-color": `var(--color-${name})` });
|
|
104
|
-
ctx.addUtility(`ring-${name}`, { "--tw-ring-color": `var(--color-${name})` });
|
|
105
|
-
ctx.addUtility(`hover-bg-${name}:hover`, {
|
|
106
|
-
"background-color": `var(--color-${name}-hover)`
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
for (const [name, value] of Object.entries((_b = opts.spacing) != null ? _b : {})) {
|
|
111
|
-
ctx.addToken(`spacing-${name}`, value);
|
|
112
|
-
}
|
|
113
|
-
for (const [name, value] of Object.entries((_c = opts.fonts) != null ? _c : {})) {
|
|
114
|
-
ctx.addToken(`font-${name}`, value);
|
|
115
|
-
if (generateUtilities) {
|
|
116
|
-
ctx.addUtility(`font-${name}`, { "font-family": `var(--font-${name})` });
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
for (const [name, value] of Object.entries((_d = opts.radii) != null ? _d : {})) {
|
|
120
|
-
ctx.addToken(`radius-${name}`, value);
|
|
121
|
-
if (generateUtilities) {
|
|
122
|
-
ctx.addUtility(`rounded-${name}`, { "border-radius": `var(--radius-${name})` });
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
for (const [name, value] of Object.entries((_e = opts.shadows) != null ? _e : {})) {
|
|
126
|
-
ctx.addToken(`shadow-${name}`, value);
|
|
127
|
-
if (generateUtilities) {
|
|
128
|
-
ctx.addUtility(`shadow-${name}`, { "box-shadow": `var(--shadow-${name})` });
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
for (const [group, tokens] of Object.entries((_f = opts.custom) != null ? _f : {})) {
|
|
132
|
-
for (const [name, value] of Object.entries(tokens)) {
|
|
133
|
-
ctx.addToken(`${group}-${name}`, value);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
function pluginTypography(opts = {}) {
|
|
140
|
-
const { color = "inherit", fontFamily = "inherit", maxWidth = "65ch" } = opts;
|
|
141
|
-
return {
|
|
142
|
-
name: "tw-plugin-typography",
|
|
143
|
-
setup(ctx) {
|
|
144
|
-
ctx.addUtility("prose", {
|
|
145
|
-
color,
|
|
146
|
-
"font-family": fontFamily,
|
|
147
|
-
"max-width": maxWidth,
|
|
148
|
-
"line-height": "1.75",
|
|
149
|
-
"font-size": "1rem"
|
|
150
|
-
});
|
|
151
|
-
ctx.addUtility("font-ligatures", { "font-variant-ligatures": "common-ligatures" });
|
|
152
|
-
ctx.addUtility("font-no-ligatures", { "font-variant-ligatures": "none" });
|
|
153
|
-
ctx.addUtility("font-numeric", { "font-variant-numeric": "tabular-nums" });
|
|
154
|
-
ctx.addUtility("font-oldstyle-nums", { "font-variant-numeric": "oldstyle-nums" });
|
|
155
|
-
ctx.addUtility("font-kerning", { "font-kerning": "auto" });
|
|
156
|
-
ctx.addUtility("font-optical-sizing", { "font-optical-sizing": "auto" });
|
|
157
|
-
ctx.addUtility("text-balance", { "text-wrap": "balance" });
|
|
158
|
-
ctx.addUtility("text-pretty", { "text-wrap": "pretty" });
|
|
159
|
-
ctx.addUtility("text-stable", { "text-wrap": "stable" });
|
|
160
|
-
ctx.addUtility("prose-h1", {
|
|
161
|
-
"font-size": "2.25rem",
|
|
162
|
-
"font-weight": "800",
|
|
163
|
-
"line-height": "1.25",
|
|
164
|
-
"margin-bottom": "0.5em"
|
|
165
|
-
});
|
|
166
|
-
ctx.addUtility("prose-h2", {
|
|
167
|
-
"font-size": "1.5rem",
|
|
168
|
-
"font-weight": "700",
|
|
169
|
-
"line-height": "1.33",
|
|
170
|
-
"margin-bottom": "0.5em"
|
|
171
|
-
});
|
|
172
|
-
ctx.addUtility("prose-h3", {
|
|
173
|
-
"font-size": "1.25rem",
|
|
174
|
-
"font-weight": "600",
|
|
175
|
-
"line-height": "1.4",
|
|
176
|
-
"margin-bottom": "0.5em"
|
|
177
|
-
});
|
|
178
|
-
ctx.addUtility("prose-h4", {
|
|
179
|
-
"font-size": "1.125rem",
|
|
180
|
-
"font-weight": "600",
|
|
181
|
-
"line-height": "1.5",
|
|
182
|
-
"margin-bottom": "0.5em"
|
|
183
|
-
});
|
|
184
|
-
ctx.addVariant("prose-invert", (sel) => `.dark ${sel}, [data-theme="dark"] ${sel}`);
|
|
185
|
-
ctx.onGenerateCSS((css) => {
|
|
186
|
-
const proseCss = `
|
|
187
|
-
/* tw-plugin-typography: prose content styles */
|
|
188
|
-
.prose > * + * { margin-top: 1.25em }
|
|
189
|
-
.prose p { line-height: 1.75 }
|
|
190
|
-
.prose h1,.prose h2,.prose h3,.prose h4 { font-weight: 700; line-height: 1.3 }
|
|
191
|
-
.prose a { color: var(--color-primary, #3b82f6); text-decoration: underline; text-underline-offset: 2px }
|
|
192
|
-
.prose a:hover { opacity: 0.8 }
|
|
193
|
-
.prose strong,.prose b { font-weight: 700 }
|
|
194
|
-
.prose em,.prose i { font-style: italic }
|
|
195
|
-
.prose code { background: rgba(127,127,127,.15); padding: 0.15em 0.35em; border-radius: 3px; font-size: 0.875em }
|
|
196
|
-
.prose pre { background: #09090b; padding: 1.25em; border-radius: 8px; overflow-x: auto }
|
|
197
|
-
.prose pre code { background: none; padding: 0; font-size: 0.875em }
|
|
198
|
-
.prose ul { list-style: disc; padding-left: 1.5em }
|
|
199
|
-
.prose ol { list-style: decimal; padding-left: 1.5em }
|
|
200
|
-
.prose li { margin-top: 0.25em; margin-bottom: 0.25em }
|
|
201
|
-
.prose blockquote { border-left: 4px solid var(--color-primary, #3b82f6); padding-left: 1em; font-style: italic; opacity: 0.8 }
|
|
202
|
-
.prose hr { border-color: rgba(127,127,127,.2); margin: 2em 0 }
|
|
203
|
-
.prose img { border-radius: 8px; max-width: 100% }
|
|
204
|
-
.prose table { width: 100%; border-collapse: collapse }
|
|
205
|
-
.prose th,.prose td { padding: 0.5em 1em; border: 1px solid rgba(127,127,127,.2); text-align: left }
|
|
206
|
-
.prose th { font-weight: 600; background: rgba(127,127,127,.05) }
|
|
207
|
-
`;
|
|
208
|
-
return proseCss + css;
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
function darken(hex, amount) {
|
|
214
|
-
try {
|
|
215
|
-
const n = parseInt(hex.replace("#", ""), 16);
|
|
216
|
-
const r = Math.max(0, (n >> 16 & 255) * (1 - amount)) | 0;
|
|
217
|
-
const g = Math.max(0, (n >> 8 & 255) * (1 - amount)) | 0;
|
|
218
|
-
const b = Math.max(0, (n & 255) * (1 - amount)) | 0;
|
|
219
|
-
return `#${(r << 16 | g << 8 | b).toString(16).padStart(6, "0")}`;
|
|
220
|
-
} catch (e) {
|
|
221
|
-
return hex;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// ../plugin/src/index.ts
|
|
226
|
-
function createRegistry() {
|
|
227
|
-
return {
|
|
228
|
-
variants: /* @__PURE__ */ new Map(),
|
|
229
|
-
utilities: /* @__PURE__ */ new Map(),
|
|
230
|
-
tokens: /* @__PURE__ */ new Map(),
|
|
231
|
-
transforms: [],
|
|
232
|
-
cssHooks: [],
|
|
233
|
-
buildHooks: [],
|
|
234
|
-
plugins: /* @__PURE__ */ new Set()
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
var _globalRegistry = createRegistry();
|
|
238
|
-
function getGlobalRegistry() {
|
|
239
|
-
return _globalRegistry;
|
|
240
|
-
}
|
|
241
|
-
function resetGlobalRegistry() {
|
|
242
|
-
_globalRegistry = createRegistry();
|
|
243
|
-
}
|
|
244
|
-
function createContext(registry, config = {}) {
|
|
245
|
-
return {
|
|
246
|
-
config,
|
|
247
|
-
addVariant(name, resolver) {
|
|
248
|
-
if (registry.variants.has(name)) {
|
|
249
|
-
console.warn(
|
|
250
|
-
`[tailwind-styled-v4] Plugin variant "${name}" already registered \u2014 overwriting.`
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
registry.variants.set(name, resolver);
|
|
254
|
-
},
|
|
255
|
-
addUtility(name, styles) {
|
|
256
|
-
registry.utilities.set(name, styles);
|
|
257
|
-
},
|
|
258
|
-
addToken(name, value) {
|
|
259
|
-
const normalized = name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
260
|
-
registry.tokens.set(normalized, value);
|
|
261
|
-
},
|
|
262
|
-
addTransform(fn) {
|
|
263
|
-
registry.transforms.push(fn);
|
|
264
|
-
},
|
|
265
|
-
onGenerateCSS(hook) {
|
|
266
|
-
registry.cssHooks.push(hook);
|
|
267
|
-
},
|
|
268
|
-
onBuildEnd(hook) {
|
|
269
|
-
registry.buildHooks.push(hook);
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
function use(plugin, config = {}) {
|
|
274
|
-
if (_globalRegistry.plugins.has(plugin.name)) {
|
|
275
|
-
if (process.env.NODE_ENV !== "production") {
|
|
276
|
-
console.warn(`[tailwind-styled-v4] Plugin "${plugin.name}" already registered \u2014 skipping.`);
|
|
277
|
-
}
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
const ctx = createContext(_globalRegistry, config);
|
|
281
|
-
plugin.setup(ctx);
|
|
282
|
-
_globalRegistry.plugins.add(plugin.name);
|
|
283
|
-
if (process.env.NODE_ENV !== "production") {
|
|
284
|
-
console.log(`[tailwind-styled-v4] Plugin "${plugin.name}" registered.`);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
function createTw(opts = {}) {
|
|
288
|
-
var _a, _b;
|
|
289
|
-
const registry = createRegistry();
|
|
290
|
-
for (const plugin of (_a = opts.plugins) != null ? _a : []) {
|
|
291
|
-
if (registry.plugins.has(plugin.name)) continue;
|
|
292
|
-
const ctx = createContext(registry, (_b = opts.config) != null ? _b : {});
|
|
293
|
-
plugin.setup(ctx);
|
|
294
|
-
registry.plugins.add(plugin.name);
|
|
295
|
-
}
|
|
296
|
-
return {
|
|
297
|
-
registry,
|
|
298
|
-
use(plugin) {
|
|
299
|
-
var _a2;
|
|
300
|
-
if (registry.plugins.has(plugin.name)) return;
|
|
301
|
-
const ctx = createContext(registry, (_a2 = opts.config) != null ? _a2 : {});
|
|
302
|
-
plugin.setup(ctx);
|
|
303
|
-
registry.plugins.add(plugin.name);
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
function generateTokenCss(registry) {
|
|
308
|
-
if (registry.tokens.size === 0) return "";
|
|
309
|
-
const vars = Array.from(registry.tokens.entries()).map(([name, value]) => ` --${name}: ${value};`).join("\n");
|
|
310
|
-
return `:root {
|
|
311
|
-
${vars}
|
|
312
|
-
}`;
|
|
313
|
-
}
|
|
314
|
-
function generateUtilityCss(registry) {
|
|
315
|
-
const lines = [];
|
|
316
|
-
for (const [name, styles] of registry.utilities.entries()) {
|
|
317
|
-
const props = Object.entries(styles).map(([p, v]) => ` ${p}: ${v};`).join("\n");
|
|
318
|
-
lines.push(`.${name} {
|
|
319
|
-
${props}
|
|
320
|
-
}`);
|
|
321
|
-
}
|
|
322
|
-
return lines.join("\n\n");
|
|
323
|
-
}
|
|
324
|
-
function applyCssHooks(css, registry) {
|
|
325
|
-
return registry.cssHooks.reduce((acc, hook) => hook(acc), css);
|
|
326
|
-
}
|
|
327
|
-
async function runBuildHooks(registry) {
|
|
328
|
-
for (const hook of registry.buildHooks) {
|
|
329
|
-
await hook();
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
function presetVariants() {
|
|
333
|
-
return {
|
|
334
|
-
name: "preset-variants",
|
|
335
|
-
setup(ctx) {
|
|
336
|
-
ctx.addVariant("group-hover", (sel) => `.group:hover ${sel}`);
|
|
337
|
-
ctx.addVariant("group-focus", (sel) => `.group:focus-within ${sel}`);
|
|
338
|
-
ctx.addVariant("peer-checked", (sel) => `.peer:checked ~ ${sel}`);
|
|
339
|
-
ctx.addVariant("peer-disabled", (sel) => `.peer:disabled ~ ${sel}`);
|
|
340
|
-
ctx.addVariant("rtl", (sel) => `[dir="rtl"] ${sel}`);
|
|
341
|
-
ctx.addVariant("ltr", (sel) => `[dir="ltr"] ${sel}`);
|
|
342
|
-
ctx.addVariant("print", (sel) => `@media print { ${sel} }`);
|
|
343
|
-
ctx.addVariant(
|
|
344
|
-
"motion-safe",
|
|
345
|
-
(sel) => `@media (prefers-reduced-motion: no-preference) { ${sel} }`
|
|
346
|
-
);
|
|
347
|
-
ctx.addVariant("motion-reduce", (sel) => `@media (prefers-reduced-motion: reduce) { ${sel} }`);
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
function presetScrollbar() {
|
|
352
|
-
return {
|
|
353
|
-
name: "preset-scrollbar",
|
|
354
|
-
setup(ctx) {
|
|
355
|
-
ctx.addUtility("scrollbar-none", {
|
|
356
|
-
"scrollbar-width": "none",
|
|
357
|
-
"-ms-overflow-style": "none"
|
|
358
|
-
});
|
|
359
|
-
ctx.addUtility("scrollbar-thin", {
|
|
360
|
-
"scrollbar-width": "thin"
|
|
361
|
-
});
|
|
362
|
-
ctx.addUtility("scrollbar-auto", {
|
|
363
|
-
"scrollbar-width": "auto"
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
function presetTokens(tokens) {
|
|
369
|
-
return {
|
|
370
|
-
name: "preset-tokens",
|
|
371
|
-
setup(ctx) {
|
|
372
|
-
for (const [name, value] of Object.entries(tokens)) {
|
|
373
|
-
ctx.addToken(`color-${name}`, value);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
export { applyCssHooks, createTw, generateTokenCss, generateUtilityCss, getGlobalRegistry, pluginAnimation, pluginTokens, pluginTypography, presetScrollbar, presetTokens, presetVariants, resetGlobalRegistry, runBuildHooks, use };
|
|
380
|
-
//# sourceMappingURL=plugins.js.map
|
|
381
|
-
//# sourceMappingURL=plugins.js.map
|
package/dist/plugins.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../plugin/src/plugins.ts","../../plugin/src/index.ts"],"names":["_a"],"mappings":"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","file":"plugins.js","sourcesContent":["/**\n * tailwind-styled-v4 — Official Plugins\n *\n * 3 plugin resmi sebagai reference implementasi ecosystem.\n * Bisa dipakai langsung atau dijadikan template buat community plugins.\n *\n * Usage:\n * import { pluginAnimation, pluginTokens, pluginTypography } from \"tailwind-styled-v4/plugins\"\n *\n * withTailwindStyled({\n * plugins: [\n * pluginAnimation(),\n * pluginTokens({ primary: \"#3b82f6\", secondary: \"#6366f1\" }),\n * pluginTypography(),\n * ]\n * })(nextConfig)\n *\n * Atau standalone:\n * import { use } from \"tailwind-styled-v4/plugin\"\n * use(pluginAnimation())\n */\n\nimport type { TwPlugin } from \"./index\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// PLUGIN 1: tw-plugin-animation\n//\n// Menambahkan:\n// - Preset animation variants (enter, exit, slide-*, fade-*, scale-*)\n// - tw.animate() DSL support via compiler transform hook\n// - CSS @keyframes injection\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface AnimationPluginOptions {\n /** Prefix untuk generated animation classes. Default: \"tw-anim\" */\n prefix?: string\n /** Tambahkan reduced-motion safe variants. Default: true */\n reducedMotion?: boolean\n}\n\n/**\n * Official animation plugin.\n *\n * Adds:\n * - `enter` variant → apply on mount animation\n * - `exit` variant → apply on unmount animation\n * - `motion-safe:` → only animate if prefers-reduced-motion: no-preference\n * - Preset utility classes: `animate-fade-in`, `animate-slide-up`, etc.\n *\n * @example\n * use(pluginAnimation())\n *\n * const Card = tw.div`p-4 animate-fade-in`\n * const Modal = tw.div`animate-scale-in fixed inset-0`\n */\nexport function pluginAnimation(opts: AnimationPluginOptions = {}): TwPlugin {\n const { prefix = \"tw-anim\", reducedMotion = true } = opts\n\n return {\n name: \"tw-plugin-animation\",\n\n setup(ctx: import(\"./index\").TwContext) {\n // Variant: motion-safe — only animate if user hasn't requested reduced motion\n if (reducedMotion) {\n ctx.addVariant(\n \"motion-safe\",\n (sel: string) => `@media (prefers-reduced-motion: no-preference) { ${sel} }`\n )\n ctx.addVariant(\n \"motion-reduce\",\n (sel: string) => `@media (prefers-reduced-motion: reduce) { ${sel} }`\n )\n }\n\n // ── Preset @keyframes injected via CSS hook ─────────────────────────\n ctx.onGenerateCSS((css: string) => {\n const keyframes = `\n/* tw-plugin-animation: preset keyframes */\n@keyframes ${prefix}-fade-in { from{opacity:0} to{opacity:1} }\n@keyframes ${prefix}-fade-out { from{opacity:1} to{opacity:0} }\n@keyframes ${prefix}-slide-up { from{opacity:0;transform:translateY(0.5rem)} to{opacity:1;transform:translateY(0)} }\n@keyframes ${prefix}-slide-down { from{opacity:0;transform:translateY(-0.5rem)}to{opacity:1;transform:translateY(0)} }\n@keyframes ${prefix}-slide-left { from{opacity:0;transform:translateX(0.5rem)} to{opacity:1;transform:translateX(0)} }\n@keyframes ${prefix}-scale-in { from{opacity:0;transform:scale(0.95)} to{opacity:1;transform:scale(1)} }\n@keyframes ${prefix}-scale-out { from{opacity:1;transform:scale(1)} to{opacity:0;transform:scale(0.95)} }\n@keyframes ${prefix}-spin { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }\n@keyframes ${prefix}-ping { 0%,100%{opacity:1;transform:scale(1)} 75%{opacity:0;transform:scale(2)} }\n@keyframes ${prefix}-pulse { 0%,100%{opacity:1} 50%{opacity:0.5} }\n@keyframes ${prefix}-bounce { 0%,100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)} 50%{transform:translateY(0);animation-timing-function:cubic-bezier(0,0,.2,1)} }\n`\n return keyframes + css\n })\n\n // ── Preset animation utility classes ─────────────────────────────────\n const dur = \"300ms\"\n const ease = \"cubic-bezier(0.16,1,0.3,1)\"\n\n ctx.addUtility(`animate-fade-in`, { animation: `${prefix}-fade-in ${dur} ${ease} both` })\n ctx.addUtility(`animate-fade-out`, { animation: `${prefix}-fade-out ${dur} ${ease} both` })\n ctx.addUtility(`animate-slide-up`, { animation: `${prefix}-slide-up ${dur} ${ease} both` })\n ctx.addUtility(`animate-slide-down`, {\n animation: `${prefix}-slide-down ${dur} ${ease} both`,\n })\n ctx.addUtility(`animate-slide-left`, {\n animation: `${prefix}-slide-left ${dur} ${ease} both`,\n })\n ctx.addUtility(`animate-scale-in`, { animation: `${prefix}-scale-in 200ms ease-out both` })\n ctx.addUtility(`animate-scale-out`, { animation: `${prefix}-scale-out 150ms ease-in both` })\n ctx.addUtility(`animate-spin`, { animation: `${prefix}-spin 1s linear infinite` })\n ctx.addUtility(`animate-ping`, {\n animation: `${prefix}-ping 1s cubic-bezier(0,0,.2,1) infinite`,\n })\n ctx.addUtility(`animate-pulse`, {\n animation: `${prefix}-pulse 2s cubic-bezier(.4,0,.6,1) infinite`,\n })\n ctx.addUtility(`animate-bounce`, { animation: `${prefix}-bounce 1s infinite` })\n ctx.addUtility(`animate-none`, { animation: \"none\" })\n\n // ── Compiler transform for tw.div.animate({}) syntax ─────────────────\n ctx.addTransform((node: any, _ctx: any) => {\n // Hook for AST compiler to pick up tw.element.animate({...}) calls\n // The actual transform is in astTransform.ts — this registers intent\n if (node?.type === \"TwAnimateCall\") {\n return { ...node, pluginHandled: \"tw-plugin-animation\" }\n }\n return node\n })\n },\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// PLUGIN 2: tw-plugin-tokens\n//\n// Menambahkan:\n// - Design tokens sebagai CSS custom properties\n// - Token-aware utility classes (bg-primary, text-primary, etc.)\n// - Tailwind v4 @theme compatible output\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface TokensPluginOptions {\n /** Color tokens */\n colors?: Record<string, string>\n /** Spacing tokens (mapped to --spacing-*) */\n spacing?: Record<string, string>\n /** Typography tokens */\n fonts?: Record<string, string>\n /** Border radius tokens */\n radii?: Record<string, string>\n /** Shadow tokens */\n shadows?: Record<string, string>\n /** Custom tokens (any group) */\n custom?: Record<string, Record<string, string>>\n /** Generate utility classes. Default: true */\n generateUtilities?: boolean\n}\n\n/**\n * Official design token plugin.\n *\n * Generates CSS variables from your token map + optional utility classes.\n *\n * @example\n * use(pluginTokens({\n * colors: {\n * primary: \"#3b82f6\",\n * secondary: \"#6366f1\",\n * danger: \"#ef4444\",\n * },\n * fonts: {\n * sans: \"InterVariable, system-ui, sans-serif\",\n * },\n * }))\n *\n * // Then use in components:\n * const Button = tw.button`bg-primary text-white hover:bg-primary-hover`\n * // → bg-[var(--color-primary)] etc.\n */\nexport function pluginTokens(opts: TokensPluginOptions = {}): TwPlugin {\n const { generateUtilities = true } = opts\n\n return {\n name: \"tw-plugin-tokens\",\n\n setup(ctx: import(\"./index\").TwContext) {\n // ── Register color tokens ────────────────────────────────────────────\n for (const [name, value] of Object.entries(opts.colors ?? {})) {\n ctx.addToken(`color-${name}`, value)\n\n // Derive hover/active tones automatically\n if (!value.startsWith(\"var(\")) {\n const hoverValue = darken(value, 0.1)\n const activeValue = darken(value, 0.2)\n ctx.addToken(`color-${name}-hover`, hoverValue)\n ctx.addToken(`color-${name}-active`, activeValue)\n }\n\n // Generate bg-{name}, text-{name}, border-{name} utilities\n if (generateUtilities) {\n ctx.addUtility(`bg-${name}`, { \"background-color\": `var(--color-${name})` })\n ctx.addUtility(`text-${name}`, { color: `var(--color-${name})` })\n ctx.addUtility(`border-${name}`, { \"border-color\": `var(--color-${name})` })\n ctx.addUtility(`ring-${name}`, { \"--tw-ring-color\": `var(--color-${name})` })\n ctx.addUtility(`hover-bg-${name}:hover`, {\n \"background-color\": `var(--color-${name}-hover)`,\n })\n }\n }\n\n // ── Spacing tokens ───────────────────────────────────────────────────\n for (const [name, value] of Object.entries(opts.spacing ?? {})) {\n ctx.addToken(`spacing-${name}`, value)\n }\n\n // ── Font tokens ──────────────────────────────────────────────────────\n for (const [name, value] of Object.entries(opts.fonts ?? {})) {\n ctx.addToken(`font-${name}`, value)\n if (generateUtilities) {\n ctx.addUtility(`font-${name}`, { \"font-family\": `var(--font-${name})` })\n }\n }\n\n // ── Radii tokens ─────────────────────────────────────────────────────\n for (const [name, value] of Object.entries(opts.radii ?? {})) {\n ctx.addToken(`radius-${name}`, value)\n if (generateUtilities) {\n ctx.addUtility(`rounded-${name}`, { \"border-radius\": `var(--radius-${name})` })\n }\n }\n\n // ── Shadow tokens ────────────────────────────────────────────────────\n for (const [name, value] of Object.entries(opts.shadows ?? {})) {\n ctx.addToken(`shadow-${name}`, value)\n if (generateUtilities) {\n ctx.addUtility(`shadow-${name}`, { \"box-shadow\": `var(--shadow-${name})` })\n }\n }\n\n // ── Custom token groups ──────────────────────────────────────────────\n for (const [group, tokens] of Object.entries(opts.custom ?? {})) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(`${group}-${name}`, value)\n }\n }\n },\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// PLUGIN 3: tw-plugin-typography\n//\n// Menambahkan:\n// - Prose utility class (rich text styling)\n// - Typography scale utilities\n// - Font feature utilities (ligatures, kerning, etc.)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface TypographyPluginOptions {\n /** Default prose text color. Default: \"inherit\" */\n color?: string\n /** Default prose font family. Default: \"inherit\" */\n fontFamily?: string\n /** Max width for prose container. Default: \"65ch\" */\n maxWidth?: string\n}\n\n/**\n * Official typography plugin.\n *\n * Adds `prose` utility class for rich text content (like @tailwindcss/typography).\n * Zero external dependency.\n *\n * @example\n * use(pluginTypography())\n *\n * const Article = tw.article`prose prose-invert max-w-3xl mx-auto`\n */\nexport function pluginTypography(opts: TypographyPluginOptions = {}): TwPlugin {\n const { color = \"inherit\", fontFamily = \"inherit\", maxWidth = \"65ch\" } = opts\n\n return {\n name: \"tw-plugin-typography\",\n\n setup(ctx: import(\"./index\").TwContext) {\n // ── Base prose ───────────────────────────────────────────────────────\n ctx.addUtility(\"prose\", {\n color: color,\n \"font-family\": fontFamily,\n \"max-width\": maxWidth,\n \"line-height\": \"1.75\",\n \"font-size\": \"1rem\",\n })\n\n // ── Font feature utilities ────────────────────────────────────────────\n ctx.addUtility(\"font-ligatures\", { \"font-variant-ligatures\": \"common-ligatures\" })\n ctx.addUtility(\"font-no-ligatures\", { \"font-variant-ligatures\": \"none\" })\n ctx.addUtility(\"font-numeric\", { \"font-variant-numeric\": \"tabular-nums\" })\n ctx.addUtility(\"font-oldstyle-nums\", { \"font-variant-numeric\": \"oldstyle-nums\" })\n ctx.addUtility(\"font-kerning\", { \"font-kerning\": \"auto\" })\n ctx.addUtility(\"font-optical-sizing\", { \"font-optical-sizing\": \"auto\" })\n ctx.addUtility(\"text-balance\", { \"text-wrap\": \"balance\" })\n ctx.addUtility(\"text-pretty\", { \"text-wrap\": \"pretty\" })\n ctx.addUtility(\"text-stable\", { \"text-wrap\": \"stable\" })\n\n // ── Heading scale ─────────────────────────────────────────────────────\n ctx.addUtility(\"prose-h1\", {\n \"font-size\": \"2.25rem\",\n \"font-weight\": \"800\",\n \"line-height\": \"1.25\",\n \"margin-bottom\": \"0.5em\",\n })\n ctx.addUtility(\"prose-h2\", {\n \"font-size\": \"1.5rem\",\n \"font-weight\": \"700\",\n \"line-height\": \"1.33\",\n \"margin-bottom\": \"0.5em\",\n })\n ctx.addUtility(\"prose-h3\", {\n \"font-size\": \"1.25rem\",\n \"font-weight\": \"600\",\n \"line-height\": \"1.4\",\n \"margin-bottom\": \"0.5em\",\n })\n ctx.addUtility(\"prose-h4\", {\n \"font-size\": \"1.125rem\",\n \"font-weight\": \"600\",\n \"line-height\": \"1.5\",\n \"margin-bottom\": \"0.5em\",\n })\n\n // ── Dark mode prose ───────────────────────────────────────────────────\n ctx.addVariant(\"prose-invert\", (sel: string) => `.dark ${sel}, [data-theme=\"dark\"] ${sel}`)\n\n // ── CSS hooks ─────────────────────────────────────────────────────────\n ctx.onGenerateCSS((css: string) => {\n const proseCss = `\n/* tw-plugin-typography: prose content styles */\n.prose > * + * { margin-top: 1.25em }\n.prose p { line-height: 1.75 }\n.prose h1,.prose h2,.prose h3,.prose h4 { font-weight: 700; line-height: 1.3 }\n.prose a { color: var(--color-primary, #3b82f6); text-decoration: underline; text-underline-offset: 2px }\n.prose a:hover { opacity: 0.8 }\n.prose strong,.prose b { font-weight: 700 }\n.prose em,.prose i { font-style: italic }\n.prose code { background: rgba(127,127,127,.15); padding: 0.15em 0.35em; border-radius: 3px; font-size: 0.875em }\n.prose pre { background: #09090b; padding: 1.25em; border-radius: 8px; overflow-x: auto }\n.prose pre code { background: none; padding: 0; font-size: 0.875em }\n.prose ul { list-style: disc; padding-left: 1.5em }\n.prose ol { list-style: decimal; padding-left: 1.5em }\n.prose li { margin-top: 0.25em; margin-bottom: 0.25em }\n.prose blockquote { border-left: 4px solid var(--color-primary, #3b82f6); padding-left: 1em; font-style: italic; opacity: 0.8 }\n.prose hr { border-color: rgba(127,127,127,.2); margin: 2em 0 }\n.prose img { border-radius: 8px; max-width: 100% }\n.prose table { width: 100%; border-collapse: collapse }\n.prose th,.prose td { padding: 0.5em 1em; border: 1px solid rgba(127,127,127,.2); text-align: left }\n.prose th { font-weight: 600; background: rgba(127,127,127,.05) }\n`\n return proseCss + css\n })\n },\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helper: darken hex color by percentage\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction darken(hex: string, amount: number): string {\n try {\n const n = parseInt(hex.replace(\"#\", \"\"), 16)\n const r = Math.max(0, ((n >> 16) & 0xff) * (1 - amount)) | 0\n const g = Math.max(0, ((n >> 8) & 0xff) * (1 - amount)) | 0\n const b = Math.max(0, (n & 0xff) * (1 - amount)) | 0\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, \"0\")}`\n } catch {\n return hex\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Re-export plugin primitives for community plugin development\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { PluginRegistry, TwContext, TwPlugin } from \"./index\"\nexport { createTw, presetScrollbar, presetTokens, presetVariants, use } from \"./index\"\n","/**\n * tailwind-styled-v4 — Plugin System\n *\n * Fondasi ecosystem library. Plugin bisa extend compiler pipeline\n * di berbagai tahap: variant, utility, token, transform, CSS.\n *\n * Usage:\n * import { createTw } from \"tailwind-styled-v4/plugin\"\n * const tw = createTw({\n * plugins: [\n * presetAnimation(),\n * presetTokens({ primary: \"#3b82f6\" }),\n * ]\n * })\n *\n * Buat plugin sendiri:\n * const myPlugin: TwPlugin = {\n * name: \"my-plugin\",\n * setup(ctx) {\n * ctx.addVariant(\"print\", sel => `@media print { ${sel} }`)\n * ctx.addUtility(\"glow\", { \"box-shadow\": \"0 0 20px currentColor\" })\n * ctx.addToken(\"brand\", \"#ff4d6d\")\n * }\n * }\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport type TransformFn = (node: any, ctx: TwContext) => any\n\nexport type CssHook = (css: string) => string\n\nexport interface TwContext {\n /** Add a new variant (e.g. \"group-hover\", \"print\", \"rtl\") */\n addVariant(name: string, resolver: VariantResolver): void\n /** Add a new utility class */\n addUtility(name: string, styles: UtilityDefinition): void\n /** Add a design token (becomes CSS custom property) */\n addToken(name: string, value: string): void\n /** Add a compiler AST transform hook */\n addTransform(fn: TransformFn): void\n /** Hook into CSS generation phase */\n onGenerateCSS(hook: CssHook): void\n /** Hook into build end */\n onBuildEnd(hook: () => void | Promise<void>): void\n /** Read current plugin config */\n readonly config: Record<string, any>\n}\n\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Plugin Registry — singleton per engine instance\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\nfunction createRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\n// Global registry — dipakai bila createTw() tidak digunakan\nlet _globalRegistry: PluginRegistry = createRegistry()\n\nexport function getGlobalRegistry(): PluginRegistry {\n return _globalRegistry\n}\n\nexport function resetGlobalRegistry(): void {\n _globalRegistry = createRegistry()\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Context factory\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction createContext(registry: PluginRegistry, config: Record<string, any> = {}): TwContext {\n return {\n config,\n\n addVariant(name, resolver) {\n if (registry.variants.has(name)) {\n console.warn(\n `[tailwind-styled-v4] Plugin variant \"${name}\" already registered — overwriting.`\n )\n }\n registry.variants.set(name, resolver)\n },\n\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n\n addToken(name, value) {\n // Normalize to CSS variable friendly name\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n registry.tokens.set(normalized, value)\n },\n\n addTransform(fn) {\n registry.transforms.push(fn)\n },\n\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// use() — register plugin to global registry\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Register a plugin globally.\n *\n * @example\n * import { use } from \"tailwind-styled-v4/plugin\"\n * import { presetAnimation } from \"tw-plugin-animation\"\n *\n * use(presetAnimation())\n */\nexport function use(plugin: TwPlugin, config: Record<string, any> = {}): void {\n if (_globalRegistry.plugins.has(plugin.name)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`[tailwind-styled-v4] Plugin \"${plugin.name}\" already registered — skipping.`)\n }\n return\n }\n\n const ctx = createContext(_globalRegistry, config)\n plugin.setup(ctx)\n _globalRegistry.plugins.add(plugin.name)\n\n if (process.env.NODE_ENV !== \"production\") {\n console.log(`[tailwind-styled-v4] Plugin \"${plugin.name}\" registered.`)\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createTw() — scoped engine instance with own registry\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface CreateTwOptions {\n plugins?: TwPlugin[]\n config?: Record<string, any>\n}\n\n/**\n * Create a scoped tw instance with its own plugin registry.\n * Useful for libraries or sub-applications that need isolation.\n *\n * @example\n * const { tw, registry } = createTw({\n * plugins: [presetAnimation(), presetTokens()]\n * })\n */\nexport function createTw(opts: CreateTwOptions = {}): {\n registry: PluginRegistry\n use: (plugin: TwPlugin) => void\n} {\n const registry = createRegistry()\n\n for (const plugin of opts.plugins ?? []) {\n if (registry.plugins.has(plugin.name)) continue\n const ctx = createContext(registry, opts.config ?? {})\n plugin.setup(ctx)\n registry.plugins.add(plugin.name)\n }\n\n return {\n registry,\n use(plugin: TwPlugin) {\n if (registry.plugins.has(plugin.name)) return\n const ctx = createContext(registry, opts.config ?? {})\n plugin.setup(ctx)\n registry.plugins.add(plugin.name)\n },\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CSS generation helpers — used by compiler to apply plugin tokens/utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Generate :root CSS variables from registered tokens.\n */\nexport function generateTokenCss(registry: PluginRegistry): string {\n if (registry.tokens.size === 0) return \"\"\n\n const vars = Array.from(registry.tokens.entries())\n .map(([name, value]) => ` --${name}: ${value};`)\n .join(\"\\n\")\n\n return `:root {\\n${vars}\\n}`\n}\n\n/**\n * Generate CSS for registered utilities.\n */\nexport function generateUtilityCss(registry: PluginRegistry): string {\n const lines: string[] = []\n\n for (const [name, styles] of registry.utilities.entries()) {\n const props = Object.entries(styles)\n .map(([p, v]) => ` ${p}: ${v};`)\n .join(\"\\n\")\n lines.push(`.${name} {\\n${props}\\n}`)\n }\n\n return lines.join(\"\\n\\n\")\n}\n\n/**\n * Apply all CSS hooks to a CSS string.\n */\nexport function applyCssHooks(css: string, registry: PluginRegistry): string {\n return registry.cssHooks.reduce((acc, hook) => hook(acc), css)\n}\n\n/**\n * Run all build end hooks.\n */\nexport async function runBuildHooks(registry: PluginRegistry): Promise<void> {\n for (const hook of registry.buildHooks) {\n await hook()\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Built-in official plugins\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * preset: common group variants\n *\n * Adds: group-hover, group-focus, peer-checked, rtl, ltr, print\n */\nexport function presetVariants(): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n ctx.addVariant(\"group-hover\", (sel) => `.group:hover ${sel}`)\n ctx.addVariant(\"group-focus\", (sel) => `.group:focus-within ${sel}`)\n ctx.addVariant(\"peer-checked\", (sel) => `.peer:checked ~ ${sel}`)\n ctx.addVariant(\"peer-disabled\", (sel) => `.peer:disabled ~ ${sel}`)\n ctx.addVariant(\"rtl\", (sel) => `[dir=\"rtl\"] ${sel}`)\n ctx.addVariant(\"ltr\", (sel) => `[dir=\"ltr\"] ${sel}`)\n ctx.addVariant(\"print\", (sel) => `@media print { ${sel} }`)\n ctx.addVariant(\n \"motion-safe\",\n (sel) => `@media (prefers-reduced-motion: no-preference) { ${sel} }`\n )\n ctx.addVariant(\"motion-reduce\", (sel) => `@media (prefers-reduced-motion: reduce) { ${sel} }`)\n },\n }\n}\n\n/**\n * preset: scrollbar utilities\n */\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addUtility(\"scrollbar-none\", {\n \"scrollbar-width\": \"none\",\n \"-ms-overflow-style\": \"none\",\n })\n ctx.addUtility(\"scrollbar-thin\", {\n \"scrollbar-width\": \"thin\",\n })\n ctx.addUtility(\"scrollbar-auto\", {\n \"scrollbar-width\": \"auto\",\n })\n },\n }\n}\n\n/**\n * preset: design tokens from a color palette\n *\n * @example\n * use(presetTokens({\n * primary: \"#3b82f6\",\n * secondary: \"#6366f1\",\n * accent: \"#f59e0b\",\n * }))\n */\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(`color-${name}`, value)\n }\n },\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Re-export plugin functions dari plugins.ts\n// Ini yang di-import user via \"tailwind-styled-v4/plugins\"\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type {\n AnimationPluginOptions,\n TokensPluginOptions,\n TypographyPluginOptions,\n} from \"./plugins\"\nexport {\n pluginAnimation,\n pluginTokens,\n pluginTypography,\n} from \"./plugins\"\n"]}
|
package/dist/preset.cjs
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
4
|
-
|
|
5
|
-
// ../preset/src/defaultPreset.ts
|
|
6
|
-
var STANDARD_CONTENT_PATHS = [
|
|
7
|
-
// Next.js App Router
|
|
8
|
-
"./src/**/*.{tsx,ts,jsx,js,mdx}",
|
|
9
|
-
"./app/**/*.{tsx,ts,jsx,js,mdx}",
|
|
10
|
-
"./pages/**/*.{tsx,ts,jsx,js,mdx}",
|
|
11
|
-
"./components/**/*.{tsx,ts,jsx,js,mdx}",
|
|
12
|
-
// Vite / React
|
|
13
|
-
"./src/**/*.{tsx,ts,jsx,js}",
|
|
14
|
-
"./index.html",
|
|
15
|
-
// Monorepo
|
|
16
|
-
"../../packages/**/src/**/*.{tsx,ts,jsx,js}"
|
|
17
|
-
];
|
|
18
|
-
var designTokens = {
|
|
19
|
-
colors: {
|
|
20
|
-
// Brand
|
|
21
|
-
primary: { DEFAULT: "#3b82f6", hover: "#2563eb", active: "#1d4ed8", foreground: "#ffffff" },
|
|
22
|
-
secondary: { DEFAULT: "#6366f1", hover: "#4f46e5", active: "#4338ca", foreground: "#ffffff" },
|
|
23
|
-
accent: { DEFAULT: "#f59e0b", hover: "#d97706", active: "#b45309", foreground: "#000000" },
|
|
24
|
-
// Semantic
|
|
25
|
-
success: { DEFAULT: "#10b981", foreground: "#ffffff" },
|
|
26
|
-
warning: { DEFAULT: "#f59e0b", foreground: "#000000" },
|
|
27
|
-
danger: { DEFAULT: "#ef4444", foreground: "#ffffff" },
|
|
28
|
-
info: { DEFAULT: "#3b82f6", foreground: "#ffffff" },
|
|
29
|
-
// Neutral
|
|
30
|
-
surface: "#18181b",
|
|
31
|
-
border: "#27272a",
|
|
32
|
-
muted: "#71717a",
|
|
33
|
-
subtle: "#3f3f46"
|
|
34
|
-
},
|
|
35
|
-
fontFamily: {
|
|
36
|
-
sans: ["InterVariable", "Inter", "system-ui", "sans-serif"],
|
|
37
|
-
mono: ["JetBrains Mono", "Fira Code", "Consolas", "monospace"]
|
|
38
|
-
},
|
|
39
|
-
borderRadius: {
|
|
40
|
-
sm: "0.25rem",
|
|
41
|
-
DEFAULT: "0.5rem",
|
|
42
|
-
md: "0.5rem",
|
|
43
|
-
lg: "0.75rem",
|
|
44
|
-
xl: "1rem",
|
|
45
|
-
"2xl": "1.5rem",
|
|
46
|
-
full: "9999px"
|
|
47
|
-
},
|
|
48
|
-
animation: {
|
|
49
|
-
"fade-in": "fadeIn 0.2s ease-out",
|
|
50
|
-
"fade-out": "fadeOut 0.2s ease-in",
|
|
51
|
-
"slide-up": "slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1)",
|
|
52
|
-
"slide-down": "slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1)",
|
|
53
|
-
"scale-in": "scaleIn 0.2s ease-out"
|
|
54
|
-
},
|
|
55
|
-
keyframes: {
|
|
56
|
-
fadeIn: { from: { opacity: "0" }, to: { opacity: "1" } },
|
|
57
|
-
fadeOut: { from: { opacity: "1" }, to: { opacity: "0" } },
|
|
58
|
-
slideUp: {
|
|
59
|
-
from: { transform: "translateY(8px)", opacity: "0" },
|
|
60
|
-
to: { transform: "translateY(0)", opacity: "1" }
|
|
61
|
-
},
|
|
62
|
-
slideDown: {
|
|
63
|
-
from: { transform: "translateY(-8px)", opacity: "0" },
|
|
64
|
-
to: { transform: "translateY(0)", opacity: "1" }
|
|
65
|
-
},
|
|
66
|
-
scaleIn: {
|
|
67
|
-
from: { transform: "scale(0.95)", opacity: "0" },
|
|
68
|
-
to: { transform: "scale(1)", opacity: "1" }
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
var defaultPreset = {
|
|
73
|
-
content: STANDARD_CONTENT_PATHS,
|
|
74
|
-
darkMode: "class",
|
|
75
|
-
theme: {
|
|
76
|
-
extend: {
|
|
77
|
-
colors: designTokens.colors,
|
|
78
|
-
fontFamily: designTokens.fontFamily,
|
|
79
|
-
borderRadius: designTokens.borderRadius,
|
|
80
|
-
animation: designTokens.animation,
|
|
81
|
-
keyframes: designTokens.keyframes
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
plugins: []
|
|
85
|
-
};
|
|
86
|
-
function generateTailwindConfig(safelistPath = ".tailwind-styled-safelist.json", contentPaths = STANDARD_CONTENT_PATHS) {
|
|
87
|
-
return `import type { Config } from "tailwindcss"
|
|
88
|
-
import { defaultPreset } from "tailwind-styled-v4/preset"
|
|
89
|
-
|
|
90
|
-
// Auto-generated safelist dari tailwind-styled-v4 compiler
|
|
91
|
-
const safelist = (() => {
|
|
92
|
-
try { return require(${JSON.stringify(safelistPath)}) as string[] }
|
|
93
|
-
catch { return [] }
|
|
94
|
-
})()
|
|
95
|
-
|
|
96
|
-
export default {
|
|
97
|
-
presets: [defaultPreset],
|
|
98
|
-
content: ${JSON.stringify(contentPaths, null, 2)},
|
|
99
|
-
safelist,
|
|
100
|
-
} satisfies Config
|
|
101
|
-
`;
|
|
102
|
-
}
|
|
103
|
-
var defaultGlobalCss = `@import "tailwindcss";
|
|
104
|
-
|
|
105
|
-
/* tailwind-styled-v4 \u2014 zero-config base styles */
|
|
106
|
-
*, *::before, *::after {
|
|
107
|
-
box-sizing: border-box;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
html {
|
|
111
|
-
-webkit-font-smoothing: antialiased;
|
|
112
|
-
-moz-osx-font-smoothing: grayscale;
|
|
113
|
-
text-rendering: optimizeLegibility;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
body {
|
|
117
|
-
margin: 0;
|
|
118
|
-
font-family: var(--font-sans, system-ui, sans-serif);
|
|
119
|
-
background: var(--color-background, #09090b);
|
|
120
|
-
color: var(--color-foreground, #fafafa);
|
|
121
|
-
}
|
|
122
|
-
`;
|
|
123
|
-
|
|
124
|
-
exports.defaultGlobalCss = defaultGlobalCss;
|
|
125
|
-
exports.defaultPreset = defaultPreset;
|
|
126
|
-
exports.designTokens = designTokens;
|
|
127
|
-
exports.generateTailwindConfig = generateTailwindConfig;
|
|
128
|
-
//# sourceMappingURL=preset.cjs.map
|
|
129
|
-
//# sourceMappingURL=preset.cjs.map
|
package/dist/preset.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../preset/src/defaultPreset.ts"],"names":[],"mappings":"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","file":"preset.cjs","sourcesContent":["/**\n * tailwind-styled-v4 — Default Preset\n *\n * Tailwind config built-in yang dipakai ketika developer tidak punya\n * tailwind.config.ts / tailwind.config.js di project mereka.\n *\n * Developer tidak perlu setup apapun:\n * npm install tailwind-styled-v4\n * → langsung bisa tw.div`p-4 bg-blue-500`\n *\n * Preset ini juga menyediakan design tokens yang consistent\n * untuk semua project yang pakai tailwind-styled-v4.\n *\n * Override per-project:\n * // tailwind.config.ts\n * import { defaultPreset } from \"tailwind-styled-v4/preset\"\n * export default { presets: [defaultPreset], theme: { extend: {...} } }\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Content paths — auto-detect berdasarkan project structure\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst STANDARD_CONTENT_PATHS = [\n // Next.js App Router\n \"./src/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./app/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./pages/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./components/**/*.{tsx,ts,jsx,js,mdx}\",\n // Vite / React\n \"./src/**/*.{tsx,ts,jsx,js}\",\n \"./index.html\",\n // Monorepo\n \"../../packages/**/src/**/*.{tsx,ts,jsx,js}\",\n]\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design tokens — consistent across all tailwind-styled-v4 projects\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const designTokens = {\n colors: {\n // Brand\n primary: { DEFAULT: \"#3b82f6\", hover: \"#2563eb\", active: \"#1d4ed8\", foreground: \"#ffffff\" },\n secondary: { DEFAULT: \"#6366f1\", hover: \"#4f46e5\", active: \"#4338ca\", foreground: \"#ffffff\" },\n accent: { DEFAULT: \"#f59e0b\", hover: \"#d97706\", active: \"#b45309\", foreground: \"#000000\" },\n // Semantic\n success: { DEFAULT: \"#10b981\", foreground: \"#ffffff\" },\n warning: { DEFAULT: \"#f59e0b\", foreground: \"#000000\" },\n danger: { DEFAULT: \"#ef4444\", foreground: \"#ffffff\" },\n info: { DEFAULT: \"#3b82f6\", foreground: \"#ffffff\" },\n // Neutral\n surface: \"#18181b\",\n border: \"#27272a\",\n muted: \"#71717a\",\n subtle: \"#3f3f46\",\n },\n\n fontFamily: {\n sans: [\"InterVariable\", \"Inter\", \"system-ui\", \"sans-serif\"],\n mono: [\"JetBrains Mono\", \"Fira Code\", \"Consolas\", \"monospace\"],\n },\n\n borderRadius: {\n sm: \"0.25rem\",\n DEFAULT: \"0.5rem\",\n md: \"0.5rem\",\n lg: \"0.75rem\",\n xl: \"1rem\",\n \"2xl\": \"1.5rem\",\n full: \"9999px\",\n },\n\n animation: {\n \"fade-in\": \"fadeIn 0.2s ease-out\",\n \"fade-out\": \"fadeOut 0.2s ease-in\",\n \"slide-up\": \"slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1)\",\n \"slide-down\": \"slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1)\",\n \"scale-in\": \"scaleIn 0.2s ease-out\",\n },\n\n keyframes: {\n fadeIn: { from: { opacity: \"0\" }, to: { opacity: \"1\" } },\n fadeOut: { from: { opacity: \"1\" }, to: { opacity: \"0\" } },\n slideUp: {\n from: { transform: \"translateY(8px)\", opacity: \"0\" },\n to: { transform: \"translateY(0)\", opacity: \"1\" },\n },\n slideDown: {\n from: { transform: \"translateY(-8px)\", opacity: \"0\" },\n to: { transform: \"translateY(0)\", opacity: \"1\" },\n },\n scaleIn: {\n from: { transform: \"scale(0.95)\", opacity: \"0\" },\n to: { transform: \"scale(1)\", opacity: \"1\" },\n },\n },\n} as const\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Tailwind Config — dipakai sebagai fallback + preset\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultPreset = {\n content: STANDARD_CONTENT_PATHS,\n\n darkMode: \"class\" as const,\n\n theme: {\n extend: {\n colors: designTokens.colors,\n fontFamily: designTokens.fontFamily,\n borderRadius: designTokens.borderRadius,\n animation: designTokens.animation,\n keyframes: designTokens.keyframes,\n },\n },\n\n plugins: [],\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config tailwind.config.ts generator\n// Dipakai oleh CLI dan withTailwindStyled saat tidak ada user config\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function generateTailwindConfig(\n safelistPath = \".tailwind-styled-safelist.json\",\n contentPaths = STANDARD_CONTENT_PATHS\n): string {\n return `import type { Config } from \"tailwindcss\"\nimport { defaultPreset } from \"tailwind-styled-v4/preset\"\n\n// Auto-generated safelist dari tailwind-styled-v4 compiler\nconst safelist = (() => {\n try { return require(${JSON.stringify(safelistPath)}) as string[] }\n catch { return [] }\n})()\n\nexport default {\n presets: [defaultPreset],\n content: ${JSON.stringify(contentPaths, null, 2)},\n safelist,\n} satisfies Config\n`\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config globals.css — tidak perlu @tailwind base dll\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultGlobalCss = `@import \"tailwindcss\";\n\n/* tailwind-styled-v4 — zero-config base styles */\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\nhtml {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\nbody {\n margin: 0;\n font-family: var(--font-sans, system-ui, sans-serif);\n background: var(--color-background, #09090b);\n color: var(--color-foreground, #fafafa);\n}\n`\n"]}
|