@alex.radulescu/styled-static 0.2.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/LICENSE +21 -0
- package/README.md +943 -0
- package/dist/hash.d.ts +9 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +46 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +118 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +133 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime.d.ts +58 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +99 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vite.d.ts +87 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +395 -0
- package/dist/vite.js.map +1 -0
- package/package.json +68 -0
package/dist/vite.js
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* styled-static Vite Plugin
|
|
3
|
+
*
|
|
4
|
+
* Transforms styled-static syntax into optimized React components with
|
|
5
|
+
* static CSS extraction.
|
|
6
|
+
*
|
|
7
|
+
* ## Why AST over Regex?
|
|
8
|
+
*
|
|
9
|
+
* We use Vite's built-in parser (via Rollup's acorn) instead of regex because:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Robustness**: Regex breaks on edge cases like CSS containing backticks,
|
|
12
|
+
* strings that look like styled calls, or complex nesting.
|
|
13
|
+
*
|
|
14
|
+
* Example that would break regex:
|
|
15
|
+
* ```tsx
|
|
16
|
+
* const x = styled.div`content: "styled.button\`test\`";`;
|
|
17
|
+
* const comment = "// styled.div`fake`"; // This isn't actually a styled call
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* 2. **No extra dependencies**: Vite provides `this.parse()` for free via Rollup.
|
|
21
|
+
* We don't need acorn or acorn-walk as separate dependencies.
|
|
22
|
+
*
|
|
23
|
+
* 3. **Accuracy**: AST gives us exact node positions for surgical code replacement
|
|
24
|
+
* with proper source maps. Regex can't reliably handle nested backticks or
|
|
25
|
+
* escaped characters.
|
|
26
|
+
*
|
|
27
|
+
* 4. **Maintainability**: Adding new syntax patterns is straightforward with AST
|
|
28
|
+
* visitors vs. increasingly complex regex patterns that become unmaintainable.
|
|
29
|
+
*
|
|
30
|
+
* ## Transformation Pipeline
|
|
31
|
+
*
|
|
32
|
+
* 1. Parse source with Vite's parser
|
|
33
|
+
* 2. Find all styled/css/createGlobalStyle tagged template literals
|
|
34
|
+
* 3. For each:
|
|
35
|
+
* - Extract CSS content
|
|
36
|
+
* - Hash it to generate unique class name
|
|
37
|
+
* - Process CSS (nesting, autoprefixer)
|
|
38
|
+
* - Create virtual CSS module
|
|
39
|
+
* - Replace original code with runtime call + import
|
|
40
|
+
* 4. Return transformed code with source map
|
|
41
|
+
*
|
|
42
|
+
* ## className Order (CSS Cascade)
|
|
43
|
+
*
|
|
44
|
+
* When components are extended, classes are ordered for proper cascade:
|
|
45
|
+
* - Base styles first
|
|
46
|
+
* - Extension styles second (override base)
|
|
47
|
+
* - User className last (override all)
|
|
48
|
+
*
|
|
49
|
+
* Example:
|
|
50
|
+
* ```tsx
|
|
51
|
+
* const Button = styled.button`padding: 1rem;`; // .ss-abc
|
|
52
|
+
* const Primary = styled(Button)`background: blue;`; // .ss-def
|
|
53
|
+
* <Primary className="custom" />
|
|
54
|
+
* // Renders: class="ss-abc ss-def custom"
|
|
55
|
+
* // CSS cascade: padding → background → custom overrides
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
import MagicString from "magic-string";
|
|
59
|
+
import postcss from "postcss";
|
|
60
|
+
import postcssNested from "postcss-nested";
|
|
61
|
+
import autoprefixer from "autoprefixer";
|
|
62
|
+
import { hash } from "./hash.js";
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// Plugin
|
|
65
|
+
// ============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Vite plugin for styled-static.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* import { defineConfig } from 'vite';
|
|
71
|
+
* import react from '@vitejs/plugin-react';
|
|
72
|
+
* import { styledStatic } from 'styled-static/vite';
|
|
73
|
+
*
|
|
74
|
+
* export default defineConfig({
|
|
75
|
+
* plugins: [styledStatic(), react()],
|
|
76
|
+
* });
|
|
77
|
+
*/
|
|
78
|
+
export function styledStatic(options = {}) {
|
|
79
|
+
const { classPrefix = "ss", autoprefixer: autoprefixerOption = [
|
|
80
|
+
"last 2 Chrome versions",
|
|
81
|
+
"last 2 Firefox versions",
|
|
82
|
+
"last 2 Safari versions",
|
|
83
|
+
"last 2 Edge versions",
|
|
84
|
+
], } = options;
|
|
85
|
+
// Virtual CSS modules: filename -> CSS content
|
|
86
|
+
const cssModules = new Map();
|
|
87
|
+
let config;
|
|
88
|
+
let isDev = false;
|
|
89
|
+
return {
|
|
90
|
+
name: "styled-static",
|
|
91
|
+
enforce: "pre", // Run before other plugins (especially React)
|
|
92
|
+
configResolved(resolvedConfig) {
|
|
93
|
+
config = resolvedConfig;
|
|
94
|
+
isDev = config.command === "serve";
|
|
95
|
+
},
|
|
96
|
+
// Resolve virtual CSS module IDs
|
|
97
|
+
resolveId(id) {
|
|
98
|
+
// Handle the virtual module prefix
|
|
99
|
+
if (id.startsWith("\0styled-static:")) {
|
|
100
|
+
return id;
|
|
101
|
+
}
|
|
102
|
+
// Handle imports without the \0 prefix (from our generated code)
|
|
103
|
+
if (id.startsWith("styled-static:")) {
|
|
104
|
+
return "\0" + id;
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
},
|
|
108
|
+
// Load virtual CSS module content
|
|
109
|
+
load(id) {
|
|
110
|
+
if (id.startsWith("\0styled-static:")) {
|
|
111
|
+
const filename = id.slice("\0styled-static:".length);
|
|
112
|
+
return cssModules.get(filename) ?? "";
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
},
|
|
116
|
+
// Handle HMR for virtual CSS modules
|
|
117
|
+
handleHotUpdate({ file, server }) {
|
|
118
|
+
// When a source file changes, the transform will re-run
|
|
119
|
+
// and update cssModules. We just need to invalidate any
|
|
120
|
+
// cached virtual modules.
|
|
121
|
+
if (/\.[tj]sx?$/.test(file)) {
|
|
122
|
+
// Invalidate all virtual CSS modules from this file
|
|
123
|
+
const fileHash = hash(normalizePath(file)).slice(0, 6);
|
|
124
|
+
for (const [name] of cssModules) {
|
|
125
|
+
if (name.startsWith(fileHash)) {
|
|
126
|
+
const mod = server.moduleGraph.getModuleById(`\0styled-static:${name}`);
|
|
127
|
+
if (mod) {
|
|
128
|
+
server.moduleGraph.invalidateModule(mod);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
async transform(code, id) {
|
|
135
|
+
// Only process .tsx/.jsx/.ts/.js files, skip node_modules
|
|
136
|
+
if (!/\.[tj]sx?$/.test(id) || /node_modules/.test(id)) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
// Quick check: does file import from styled-static?
|
|
140
|
+
if (!code.includes("styled-static")) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
console.log("[styled-static] Transforming:", id);
|
|
144
|
+
// Parse AST using Vite's built-in parser
|
|
145
|
+
let ast;
|
|
146
|
+
try {
|
|
147
|
+
ast = this.parse(code);
|
|
148
|
+
console.log("[styled-static] AST parsed successfully, body length:", ast.body.length);
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
// Parse error - this might be a partial file or syntax error
|
|
152
|
+
console.log("[styled-static] AST parse error:", e);
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
// Find styled-static imports and their local names
|
|
156
|
+
const imports = findStyledStaticImports(ast);
|
|
157
|
+
console.log("[styled-static] Found imports:", imports);
|
|
158
|
+
if (!imports.css && !imports.styled && !imports.createGlobalStyle) {
|
|
159
|
+
console.log("[styled-static] No imports found, skipping");
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
// Find all tagged template literals using our imports
|
|
163
|
+
const templates = findTaggedTemplates(ast, imports);
|
|
164
|
+
console.log("[styled-static] Found templates:", templates.length);
|
|
165
|
+
if (templates.length === 0) {
|
|
166
|
+
console.log("[styled-static] No templates found, skipping");
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const s = new MagicString(code);
|
|
170
|
+
const fileHash = hash(normalizePath(id)).slice(0, 6);
|
|
171
|
+
const cssImports = [];
|
|
172
|
+
let needsStyledRuntime = false;
|
|
173
|
+
let needsExtendRuntime = false;
|
|
174
|
+
let needsGlobalRuntime = false;
|
|
175
|
+
for (let i = 0; i < templates.length; i++) {
|
|
176
|
+
const t = templates[i];
|
|
177
|
+
if (!t)
|
|
178
|
+
continue; // Guard against undefined (noUncheckedIndexedAccess)
|
|
179
|
+
const cssContent = extractTemplateContent(code, t.node.quasi);
|
|
180
|
+
const cssHash = hash(cssContent).slice(0, 6);
|
|
181
|
+
const className = `${classPrefix}-${cssHash}`;
|
|
182
|
+
// Process CSS
|
|
183
|
+
const processedCss = await processCSS(cssContent, className, t.type === "createGlobalStyle", autoprefixerOption);
|
|
184
|
+
// Create virtual CSS module
|
|
185
|
+
const cssFilename = `${fileHash}-${i}.css`;
|
|
186
|
+
cssModules.set(cssFilename, processedCss);
|
|
187
|
+
cssImports.push(`import "styled-static:${cssFilename}";`);
|
|
188
|
+
// Generate replacement code and track runtime needs
|
|
189
|
+
const replacement = generateReplacement(t, className, isDev);
|
|
190
|
+
s.overwrite(t.node.start, t.node.end, replacement);
|
|
191
|
+
if (t.type === "styled")
|
|
192
|
+
needsStyledRuntime = true;
|
|
193
|
+
if (t.type === "styledExtend")
|
|
194
|
+
needsExtendRuntime = true;
|
|
195
|
+
if (t.type === "createGlobalStyle")
|
|
196
|
+
needsGlobalRuntime = true;
|
|
197
|
+
}
|
|
198
|
+
// Build runtime imports
|
|
199
|
+
const runtimeImports = [];
|
|
200
|
+
if (needsStyledRuntime)
|
|
201
|
+
runtimeImports.push("__styled");
|
|
202
|
+
if (needsExtendRuntime)
|
|
203
|
+
runtimeImports.push("__styledExtend");
|
|
204
|
+
if (needsGlobalRuntime)
|
|
205
|
+
runtimeImports.push("__GlobalStyle");
|
|
206
|
+
// Prepend imports (CSS first, then runtime)
|
|
207
|
+
let prepend = "";
|
|
208
|
+
if (cssImports.length > 0) {
|
|
209
|
+
prepend += cssImports.join("\n") + "\n";
|
|
210
|
+
}
|
|
211
|
+
if (runtimeImports.length > 0) {
|
|
212
|
+
prepend += `import { ${runtimeImports.join(", ")} } from "styled-static/runtime";\n`;
|
|
213
|
+
}
|
|
214
|
+
if (prepend) {
|
|
215
|
+
s.prepend(prepend);
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
code: s.toString(),
|
|
219
|
+
map: s.generateMap({ hires: true }),
|
|
220
|
+
};
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
// ============================================================================
|
|
225
|
+
// AST Helpers
|
|
226
|
+
// ============================================================================
|
|
227
|
+
/**
|
|
228
|
+
* Find all imports from 'styled-static' and return their local names.
|
|
229
|
+
* Handles aliased imports like `import { styled as s } from 'styled-static'`
|
|
230
|
+
*/
|
|
231
|
+
function findStyledStaticImports(ast) {
|
|
232
|
+
const imports = {};
|
|
233
|
+
for (const node of ast.body) {
|
|
234
|
+
if (node.type === "ImportDeclaration" &&
|
|
235
|
+
node.source.value === "styled-static") {
|
|
236
|
+
for (const spec of node.specifiers) {
|
|
237
|
+
if (spec.type === "ImportSpecifier") {
|
|
238
|
+
const imported = spec.imported.name;
|
|
239
|
+
const local = spec.local.name;
|
|
240
|
+
if (imported === "styled")
|
|
241
|
+
imports.styled = local;
|
|
242
|
+
if (imported === "css")
|
|
243
|
+
imports.css = local;
|
|
244
|
+
if (imported === "createGlobalStyle")
|
|
245
|
+
imports.createGlobalStyle = local;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return imports;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Find all tagged template literals that use styled-static imports.
|
|
254
|
+
* Walks the AST to find variable declarations with our tagged templates.
|
|
255
|
+
*/
|
|
256
|
+
function findTaggedTemplates(ast, imports) {
|
|
257
|
+
const results = [];
|
|
258
|
+
/**
|
|
259
|
+
* Process a variable declaration that might contain a styled template
|
|
260
|
+
*/
|
|
261
|
+
function processVariableDeclaration(node) {
|
|
262
|
+
for (const decl of node.declarations) {
|
|
263
|
+
if (decl.init?.type === "TaggedTemplateExpression" &&
|
|
264
|
+
decl.id.type === "Identifier") {
|
|
265
|
+
const template = decl.init;
|
|
266
|
+
const varName = decl.id.name;
|
|
267
|
+
const found = classifyTemplate(template, imports, varName);
|
|
268
|
+
if (found)
|
|
269
|
+
results.push(found);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
for (const node of ast.body) {
|
|
274
|
+
// Regular variable declaration: const X = styled.div`...`
|
|
275
|
+
if (node.type === "VariableDeclaration") {
|
|
276
|
+
processVariableDeclaration(node);
|
|
277
|
+
}
|
|
278
|
+
// Exported variable: export const X = styled.div`...`
|
|
279
|
+
if (node.type === "ExportNamedDeclaration" &&
|
|
280
|
+
node.declaration?.type === "VariableDeclaration") {
|
|
281
|
+
processVariableDeclaration(node.declaration);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return results;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Classify a tagged template expression into one of our supported types.
|
|
288
|
+
*/
|
|
289
|
+
function classifyTemplate(node, imports, variableName) {
|
|
290
|
+
const { tag } = node;
|
|
291
|
+
// styled.element`...`
|
|
292
|
+
if (tag.type === "MemberExpression" &&
|
|
293
|
+
tag.object.type === "Identifier" &&
|
|
294
|
+
tag.object.name === imports.styled &&
|
|
295
|
+
tag.property.type === "Identifier") {
|
|
296
|
+
return {
|
|
297
|
+
type: "styled",
|
|
298
|
+
node,
|
|
299
|
+
tag: tag.property.name,
|
|
300
|
+
variableName,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
// styled(Component)`...`
|
|
304
|
+
if (tag.type === "CallExpression" &&
|
|
305
|
+
tag.callee.type === "Identifier" &&
|
|
306
|
+
tag.callee.name === imports.styled &&
|
|
307
|
+
tag.arguments[0]?.type === "Identifier") {
|
|
308
|
+
return {
|
|
309
|
+
type: "styledExtend",
|
|
310
|
+
node,
|
|
311
|
+
tag: "",
|
|
312
|
+
baseComponent: tag.arguments[0].name,
|
|
313
|
+
variableName,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
// css`...`
|
|
317
|
+
if (tag.type === "Identifier" && tag.name === imports.css) {
|
|
318
|
+
return {
|
|
319
|
+
type: "css",
|
|
320
|
+
node,
|
|
321
|
+
tag: "",
|
|
322
|
+
variableName,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
// createGlobalStyle`...`
|
|
326
|
+
if (tag.type === "Identifier" && tag.name === imports.createGlobalStyle) {
|
|
327
|
+
return {
|
|
328
|
+
type: "createGlobalStyle",
|
|
329
|
+
node,
|
|
330
|
+
tag: "",
|
|
331
|
+
variableName,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
// ============================================================================
|
|
337
|
+
// CSS Processing
|
|
338
|
+
// ============================================================================
|
|
339
|
+
/**
|
|
340
|
+
* Extract raw CSS content from a template literal.
|
|
341
|
+
* Handles the content between the backticks.
|
|
342
|
+
*/
|
|
343
|
+
function extractTemplateContent(code, quasi) {
|
|
344
|
+
// Get raw content between backticks
|
|
345
|
+
return code.slice(quasi.start + 1, quasi.end - 1);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Process CSS with PostCSS.
|
|
349
|
+
* - Wraps in class selector (unless global)
|
|
350
|
+
* - Processes nested selectors
|
|
351
|
+
* - Adds vendor prefixes
|
|
352
|
+
*/
|
|
353
|
+
async function processCSS(content, className, isGlobal, autoprefixerOption) {
|
|
354
|
+
// Wrap in class selector unless global
|
|
355
|
+
const wrapped = isGlobal ? content : `.${className} { ${content} }`;
|
|
356
|
+
// Build PostCSS plugins
|
|
357
|
+
const plugins = [postcssNested()];
|
|
358
|
+
if (autoprefixerOption !== false) {
|
|
359
|
+
plugins.push(autoprefixer({
|
|
360
|
+
overrideBrowserslist: autoprefixerOption,
|
|
361
|
+
}));
|
|
362
|
+
}
|
|
363
|
+
// Process with PostCSS
|
|
364
|
+
const result = await postcss(plugins).process(wrapped, { from: undefined });
|
|
365
|
+
return result.css;
|
|
366
|
+
}
|
|
367
|
+
// ============================================================================
|
|
368
|
+
// Code Generation
|
|
369
|
+
// ============================================================================
|
|
370
|
+
/**
|
|
371
|
+
* Generate the replacement code for a styled template.
|
|
372
|
+
*/
|
|
373
|
+
function generateReplacement(template, className, isDev) {
|
|
374
|
+
const displayName = isDev ? template.variableName : undefined;
|
|
375
|
+
const displayNameArg = displayName ? `, "${displayName}"` : "";
|
|
376
|
+
switch (template.type) {
|
|
377
|
+
case "styled":
|
|
378
|
+
return `__styled("${template.tag}", "${className}"${displayNameArg})`;
|
|
379
|
+
case "styledExtend":
|
|
380
|
+
return `__styledExtend(${template.baseComponent}, "${className}"${displayNameArg})`;
|
|
381
|
+
case "css":
|
|
382
|
+
return `"${className}"`;
|
|
383
|
+
case "createGlobalStyle":
|
|
384
|
+
return `__GlobalStyle`;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Normalize file paths for consistent hashing across platforms.
|
|
389
|
+
*/
|
|
390
|
+
function normalizePath(p) {
|
|
391
|
+
return p.replace(/\\/g, "/").toLowerCase();
|
|
392
|
+
}
|
|
393
|
+
// Default export for convenience
|
|
394
|
+
export default styledStatic;
|
|
395
|
+
//# sourceMappingURL=vite.js.map
|
package/dist/vite.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alex.radulescu/styled-static",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Zero-runtime styled components for React 19+ with Vite. CSS extracted at build time.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": false,
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"module": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./vite": {
|
|
19
|
+
"types": "./dist/vite.d.ts",
|
|
20
|
+
"import": "./dist/vite.js"
|
|
21
|
+
},
|
|
22
|
+
"./runtime": {
|
|
23
|
+
"types": "./dist/runtime.d.ts",
|
|
24
|
+
"import": "./dist/runtime.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"dev": "vite",
|
|
33
|
+
"dev:watch": "tsc --watch",
|
|
34
|
+
"test": "vitest",
|
|
35
|
+
"prepublishOnly": "npm run build"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"vite": "^5.0.0 || ^6.0.0",
|
|
39
|
+
"react": "^19.0.0"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^22.10.1",
|
|
44
|
+
"@types/react": "^19.0.1",
|
|
45
|
+
"@types/react-dom": "^19.0.2",
|
|
46
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
47
|
+
"acorn": "^8.15.0",
|
|
48
|
+
"react": "^19.0.0",
|
|
49
|
+
"react-dom": "^19.0.0",
|
|
50
|
+
"typescript": "^5.7.2",
|
|
51
|
+
"vite": "^6.0.3",
|
|
52
|
+
"vitest": "^2.1.8"
|
|
53
|
+
},
|
|
54
|
+
"keywords": [
|
|
55
|
+
"styled-components",
|
|
56
|
+
"css-in-js",
|
|
57
|
+
"vite",
|
|
58
|
+
"react",
|
|
59
|
+
"zero-runtime",
|
|
60
|
+
"static-css"
|
|
61
|
+
],
|
|
62
|
+
"license": "MIT",
|
|
63
|
+
"repository": {
|
|
64
|
+
"type": "git",
|
|
65
|
+
"url": "https://github.com/alexradulescu/styled-static"
|
|
66
|
+
},
|
|
67
|
+
"author": "Alex Radulescu"
|
|
68
|
+
}
|