tailwind-styled-v4 4.0.0 → 5.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/dist/animate.cjs +754 -235
- package/dist/animate.cjs.map +1 -1
- package/dist/animate.d.cts +55 -99
- package/dist/animate.d.ts +55 -99
- package/dist/animate.js +742 -235
- package/dist/animate.js.map +1 -1
- package/dist/chunk-VZEJV27B.js +11 -0
- package/dist/chunk-VZEJV27B.js.map +1 -0
- package/dist/chunk-Y5D3E72P.cjs +13 -0
- package/dist/chunk-Y5D3E72P.cjs.map +1 -0
- package/dist/css.cjs +61 -11
- package/dist/css.cjs.map +1 -1
- package/dist/css.d.cts +3 -18
- package/dist/css.d.ts +3 -18
- package/dist/css.js +61 -11
- package/dist/css.js.map +1 -1
- package/dist/devtools.cjs +200 -88
- package/dist/devtools.cjs.map +1 -1
- package/dist/devtools.js +200 -88
- package/dist/devtools.js.map +1 -1
- package/dist/index.cjs +430 -135
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +74 -3
- package/dist/index.d.ts +74 -3
- package/dist/index.js +415 -132
- package/dist/index.js.map +1 -1
- package/dist/next.cjs +118 -138
- package/dist/next.cjs.map +1 -1
- package/dist/next.d.cts +28 -19
- package/dist/next.d.ts +28 -19
- package/dist/next.js +111 -131
- package/dist/next.js.map +1 -1
- package/dist/preset.cjs +312 -18
- package/dist/preset.cjs.map +1 -1
- package/dist/preset.d.cts +29 -2
- package/dist/preset.d.ts +29 -2
- package/dist/preset.js +311 -19
- package/dist/preset.js.map +1 -1
- package/dist/turbopackLoader.cjs +24 -2676
- package/dist/turbopackLoader.cjs.map +1 -1
- package/dist/turbopackLoader.d.cts +3 -13
- package/dist/turbopackLoader.d.ts +3 -13
- package/dist/turbopackLoader.js +24 -2670
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/vite.cjs +90 -57
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.cts +35 -6
- package/dist/vite.d.ts +35 -6
- package/dist/vite.js +90 -58
- package/dist/vite.js.map +1 -1
- package/dist/webpackLoader.cjs +27 -2646
- package/dist/webpackLoader.cjs.map +1 -1
- package/dist/webpackLoader.d.cts +3 -10
- package/dist/webpackLoader.d.ts +3 -10
- package/dist/webpackLoader.js +27 -2640
- package/dist/webpackLoader.js.map +1 -1
- package/package.json +31 -28
- package/dist/astTransform-ua-eapqs.d.cts +0 -41
- package/dist/astTransform-ua-eapqs.d.ts +0 -41
- package/dist/compiler.cjs +0 -3594
- package/dist/compiler.cjs.map +0 -1
- package/dist/compiler.d.cts +0 -716
- package/dist/compiler.d.ts +0 -716
- package/dist/compiler.js +0 -3535
- package/dist/compiler.js.map +0 -1
- 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/theme.cjs +0 -154
- package/dist/theme.cjs.map +0 -1
- package/dist/theme.d.cts +0 -181
- package/dist/theme.d.ts +0 -181
- package/dist/theme.js +0 -148
- package/dist/theme.js.map +0 -1
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/theme.cjs
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
4
|
-
|
|
5
|
-
// ../theme/src/index.ts
|
|
6
|
-
function defineThemeContract(shape) {
|
|
7
|
-
const vars = {};
|
|
8
|
-
for (const group in shape) {
|
|
9
|
-
vars[group] = {};
|
|
10
|
-
for (const token in shape[group]) {
|
|
11
|
-
vars[group][token] = `var(--${group}-${token})`;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return { _contract: shape, _vars: vars };
|
|
15
|
-
}
|
|
16
|
-
function createTheme(contract, name, values, asRoot = false) {
|
|
17
|
-
const flatVars = {};
|
|
18
|
-
const cssLines = [];
|
|
19
|
-
for (const group in values) {
|
|
20
|
-
for (const token in values[group]) {
|
|
21
|
-
const varName = `--${group}-${token}`;
|
|
22
|
-
const value = values[group][token];
|
|
23
|
-
flatVars[varName] = value;
|
|
24
|
-
cssLines.push(` ${varName}: ${value};`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
const selector = asRoot ? ":root" : `[data-theme="${name}"]`;
|
|
28
|
-
const css = `${selector} {
|
|
29
|
-
${cssLines.join("\n")}
|
|
30
|
-
}`;
|
|
31
|
-
return {
|
|
32
|
-
name,
|
|
33
|
-
contract,
|
|
34
|
-
values,
|
|
35
|
-
css,
|
|
36
|
-
vars: flatVars,
|
|
37
|
-
selector
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
var ThemeRegistry = class {
|
|
41
|
-
constructor() {
|
|
42
|
-
this.themes = /* @__PURE__ */ new Map();
|
|
43
|
-
this.defaultTheme = null;
|
|
44
|
-
}
|
|
45
|
-
/** Register a theme */
|
|
46
|
-
register(theme, isDefault = false) {
|
|
47
|
-
this.themes.set(theme.name, theme);
|
|
48
|
-
if (isDefault || !this.defaultTheme) {
|
|
49
|
-
this.defaultTheme = theme.name;
|
|
50
|
-
}
|
|
51
|
-
return this;
|
|
52
|
-
}
|
|
53
|
-
/** Get a theme by name */
|
|
54
|
-
get(name) {
|
|
55
|
-
return this.themes.get(name);
|
|
56
|
-
}
|
|
57
|
-
/** Get all theme names */
|
|
58
|
-
names() {
|
|
59
|
-
return Array.from(this.themes.keys());
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Generate combined CSS for all themes.
|
|
63
|
-
* Inject into <head> or a .css file.
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* // In globals.css or layout.tsx
|
|
67
|
-
* const css = registry.generateCss()
|
|
68
|
-
*/
|
|
69
|
-
generateCss() {
|
|
70
|
-
return Array.from(this.themes.values()).map((t) => t.css).join("\n\n");
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get the CSS for a specific theme only.
|
|
74
|
-
*/
|
|
75
|
-
getThemeCss(name) {
|
|
76
|
-
var _a, _b;
|
|
77
|
-
return (_b = (_a = this.themes.get(name)) == null ? void 0 : _a.css) != null ? _b : null;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Inject all theme CSS into document <head> (browser only).
|
|
81
|
-
* Call once on app init.
|
|
82
|
-
*/
|
|
83
|
-
inject(styleId = "__tw_themes") {
|
|
84
|
-
if (typeof document === "undefined") return;
|
|
85
|
-
let style = document.getElementById(styleId);
|
|
86
|
-
if (!style) {
|
|
87
|
-
style = document.createElement("style");
|
|
88
|
-
style.id = styleId;
|
|
89
|
-
document.head.appendChild(style);
|
|
90
|
-
}
|
|
91
|
-
style.textContent = this.generateCss();
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Switch active theme by setting data-theme on <html>.
|
|
95
|
-
*/
|
|
96
|
-
apply(name, target = document.documentElement) {
|
|
97
|
-
if (typeof document === "undefined") return;
|
|
98
|
-
if (!this.themes.has(name)) {
|
|
99
|
-
console.warn(`[tailwind-styled-v4] Theme "${name}" not registered.`);
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
target.dataset.theme = name;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Get current active theme name from data-theme attribute.
|
|
106
|
-
*/
|
|
107
|
-
current(target = document.documentElement) {
|
|
108
|
-
var _a;
|
|
109
|
-
if (typeof document === "undefined") return this.defaultTheme;
|
|
110
|
-
return (_a = target.dataset.theme) != null ? _a : this.defaultTheme;
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
function createMultiTheme(config) {
|
|
114
|
-
var _a;
|
|
115
|
-
const registry = new ThemeRegistry();
|
|
116
|
-
const light = createTheme(config.contract, "light", config.light, true);
|
|
117
|
-
const dark = createTheme(config.contract, "dark", config.dark, false);
|
|
118
|
-
registry.register(light, true);
|
|
119
|
-
registry.register(dark);
|
|
120
|
-
for (const [name, values] of Object.entries((_a = config.extras) != null ? _a : {})) {
|
|
121
|
-
registry.register(createTheme(config.contract, name, values));
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
registry,
|
|
125
|
-
vars: config.contract._vars,
|
|
126
|
-
light,
|
|
127
|
-
dark
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
function compileDesignTokens(tokens, prefix = "") {
|
|
131
|
-
const vars = [];
|
|
132
|
-
function flatten(obj, path) {
|
|
133
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
134
|
-
const varPath = path ? `${path}-${key}` : key;
|
|
135
|
-
if (typeof value === "string") {
|
|
136
|
-
vars.push(` --${varPath}: ${value};`);
|
|
137
|
-
} else {
|
|
138
|
-
flatten(value, varPath);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
flatten(tokens, prefix);
|
|
143
|
-
return `:root {
|
|
144
|
-
${vars.join("\n")}
|
|
145
|
-
}`;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
exports.ThemeRegistry = ThemeRegistry;
|
|
149
|
-
exports.compileDesignTokens = compileDesignTokens;
|
|
150
|
-
exports.createMultiTheme = createMultiTheme;
|
|
151
|
-
exports.createTheme = createTheme;
|
|
152
|
-
exports.defineThemeContract = defineThemeContract;
|
|
153
|
-
//# sourceMappingURL=theme.cjs.map
|
|
154
|
-
//# sourceMappingURL=theme.cjs.map
|