hghcn 3.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -0
- package/dist/chunk-BFNVF2P5.js +3 -0
- package/dist/chunk-BFNVF2P5.js.map +1 -0
- package/dist/chunk-I3JXSMK6.js +34 -0
- package/dist/chunk-I3JXSMK6.js.map +1 -0
- package/dist/chunk-PMFK2ZSQ.js +3 -0
- package/dist/chunk-PMFK2ZSQ.js.map +1 -0
- package/dist/chunk-SSXFFJQN.js +72 -0
- package/dist/chunk-SSXFFJQN.js.map +1 -0
- package/dist/chunk-WKG3W635.js +2 -0
- package/dist/chunk-WKG3W635.js.map +1 -0
- package/dist/get-config-D6gTsP_D.d.ts +6 -0
- package/dist/icons/index.d.ts +39 -0
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +961 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +27 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/registry/index.d.ts +112 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/schema/index.d.ts +3907 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/tailwind.css +95 -0
- package/dist/utils/index.d.ts +37 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export{y as configJsonSchema,d as configSchema,r as iconsSchema,x as presetSchema,c as rawConfigSchema,w as registriesIndexSchema,s as registryBaseColorSchema,a as registryConfigItemSchema,b as registryConfigSchema,p as registryIndexSchema,m as registryItemCommonSchema,j as registryItemCssSchema,i as registryItemCssVarsSchema,k as registryItemEnvVarsSchema,g as registryItemFileSchema,l as registryItemFontSchema,n as registryItemSchema,h as registryItemTailwindSchema,f as registryItemTypeSchema,t as registryResolvedItemsTreeSchema,o as registrySchema,u as searchResultItemSchema,v as searchResultsSchema,q as stylesSchema,e as workspaceConfigSchema}from'../chunk-WKG3W635.js';//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
@theme inline {
|
|
2
|
+
@keyframes accordion-down {
|
|
3
|
+
from {
|
|
4
|
+
height: 0;
|
|
5
|
+
}
|
|
6
|
+
to {
|
|
7
|
+
height: var(
|
|
8
|
+
--radix-accordion-content-height,
|
|
9
|
+
var(--accordion-panel-height, auto)
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@keyframes accordion-up {
|
|
15
|
+
from {
|
|
16
|
+
height: var(
|
|
17
|
+
--radix-accordion-content-height,
|
|
18
|
+
var(--accordion-panel-height, auto)
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
to {
|
|
22
|
+
height: 0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Custom variants */
|
|
28
|
+
@custom-variant data-open {
|
|
29
|
+
&:where([data-state="open"]),
|
|
30
|
+
&:where([data-open]:not([data-open="false"])) {
|
|
31
|
+
@slot;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@custom-variant data-closed {
|
|
36
|
+
&:where([data-state="closed"]),
|
|
37
|
+
&:where([data-closed]:not([data-closed="false"])) {
|
|
38
|
+
@slot;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@custom-variant data-checked {
|
|
43
|
+
&:where([data-state="checked"]),
|
|
44
|
+
&:where([data-checked]:not([data-checked="false"])) {
|
|
45
|
+
@slot;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@custom-variant data-unchecked {
|
|
50
|
+
&:where([data-state="unchecked"]),
|
|
51
|
+
&:where([data-unchecked]:not([data-unchecked="false"])) {
|
|
52
|
+
@slot;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@custom-variant data-selected {
|
|
57
|
+
&:where([data-selected="true"]) {
|
|
58
|
+
@slot;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@custom-variant data-disabled {
|
|
63
|
+
&:where([data-disabled="true"]),
|
|
64
|
+
&:where([data-disabled]:not([data-disabled="false"])) {
|
|
65
|
+
@slot;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@custom-variant data-active {
|
|
70
|
+
&:where([data-state="active"]),
|
|
71
|
+
&:where([data-active]:not([data-active="false"])) {
|
|
72
|
+
@slot;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@custom-variant data-horizontal {
|
|
77
|
+
&:where([data-orientation="horizontal"]) {
|
|
78
|
+
@slot;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@custom-variant data-vertical {
|
|
83
|
+
&:where([data-orientation="vertical"]) {
|
|
84
|
+
@slot;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@utility no-scrollbar {
|
|
89
|
+
-ms-overflow-style: none;
|
|
90
|
+
scrollbar-width: none;
|
|
91
|
+
|
|
92
|
+
&::-webkit-scrollbar {
|
|
93
|
+
display: none;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { SourceFile } from 'ts-morph';
|
|
3
|
+
import { registryBaseColorSchema } from '../schema/index.js';
|
|
4
|
+
import { C as Config } from '../get-config-D6gTsP_D.js';
|
|
5
|
+
|
|
6
|
+
declare const styleMapSchema: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
7
|
+
type StyleMap = z.infer<typeof styleMapSchema>;
|
|
8
|
+
declare function createStyleMap(input: string): Record<string, string>;
|
|
9
|
+
|
|
10
|
+
type TransformerStyle<Output = SourceFile> = (opts: {
|
|
11
|
+
sourceFile: SourceFile;
|
|
12
|
+
styleMap: StyleMap;
|
|
13
|
+
}) => Promise<Output>;
|
|
14
|
+
declare function transformStyle(source: string, { styleMap, transformers, }: {
|
|
15
|
+
styleMap: StyleMap;
|
|
16
|
+
transformers?: TransformerStyle<SourceFile>[];
|
|
17
|
+
}): Promise<string>;
|
|
18
|
+
|
|
19
|
+
type TransformOpts = {
|
|
20
|
+
filename: string;
|
|
21
|
+
raw: string;
|
|
22
|
+
config: Config;
|
|
23
|
+
baseColor?: z.infer<typeof registryBaseColorSchema>;
|
|
24
|
+
transformJsx?: boolean;
|
|
25
|
+
isRemote?: boolean;
|
|
26
|
+
};
|
|
27
|
+
type Transformer<Output = SourceFile> = (opts: TransformOpts & {
|
|
28
|
+
sourceFile: SourceFile;
|
|
29
|
+
}) => Promise<Output>;
|
|
30
|
+
|
|
31
|
+
declare const transformIcons: Transformer;
|
|
32
|
+
|
|
33
|
+
declare const transformMenu: Transformer;
|
|
34
|
+
|
|
35
|
+
declare const transformRender: Transformer;
|
|
36
|
+
|
|
37
|
+
export { createStyleMap, transformIcons, transformMenu, transformRender, transformStyle };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export{a as transformIcons,b as transformMenu}from'../chunk-PMFK2ZSQ.js';import'../chunk-BFNVF2P5.js';import z$1 from'postcss';import K from'postcss-selector-parser';import {z}from'zod';import {Project,ScriptKind,SyntaxKind,Node}from'ts-morph';var N="cn-",R=z.record(z.string().startsWith(N),z.string());function W(t){let e=z$1.parse(t),r={};return e.walkRules(s=>{let n=s.selectors??[];if(n.length===0)return;let i=D(s);if(i)for(let g of n){let c=B(g);K(o=>{o.each(l=>{let u=k(l);if(!u)return;let f=u.value;f.startsWith(N)&&(r[f]=r[f]?`${i} ${r[f]}`:i);});}).processSync(c);}}),R.parse(r)}function B(t){return t.replace(/\s*&\s*/g,"").trim()}function D(t){let e=[];for(let r of t.nodes||[])if(r.type==="atrule"&&r.name==="apply"){let s=r.params.trim();s&&e.push(s);}return e.length===0?null:e.join(" ")}function k(t){let e=[];return t.walkClasses(r=>{r.value.startsWith(N)&&e.push(r);}),e.length===0?null:e[e.length-1]}var X=new Set(["cn-menu-target"]);function p(t){return Node.isStringLiteral(t)||Node.isNoSubstitutionTemplateLiteral(t)}var $=async({sourceFile:t,styleMap:e})=>{let r=new Set;return _(t,e,r),q(t,e,r),Q(t,e,r),t};function O(t,e,r){let s=t.getLiteralText(),n=y(s);if(n.length===0)return;let i=n.filter(c=>!r.has(c));if(i.length===0){let c=m(s);t.setLiteralValue(c);return}let g=i.map(c=>e[c]).filter(c=>!!c);if(g.length>0){let c=g.join(" "),o=m(E(c,s));t.setLiteralValue(o),i.forEach(l=>r.add(l));}else {let c=m(s);t.setLiteralValue(c);}}function _(t,e,r){t.forEachDescendant(s=>{if(!Node.isCallExpression(s))return;let n=s.getExpression();if(!Node.isIdentifier(n)||n.getText()!=="cva")return;let i=s.getArguments()[0];Node.isStringLiteral(i)&&O(i,e,r);let g=s.getArguments()[1];if(!g||!Node.isObjectLiteralExpression(g))return;let c=g.getProperties().find(l=>Node.isPropertyAssignment(l)&&Node.isIdentifier(l.getNameNode())&&l.getNameNode().getText()==="variants");if(!c||!Node.isPropertyAssignment(c))return;let o=c.getInitializer();!o||!Node.isObjectLiteralExpression(o)||o.getProperties().forEach(l=>{if(!Node.isPropertyAssignment(l))return;let u=l.getInitializer();!u||!Node.isObjectLiteralExpression(u)||u.getProperties().forEach(f=>{if(!Node.isPropertyAssignment(f))return;let x=f.getInitializer();x&&Node.isStringLiteral(x)&&O(x,e,r);});});});}function q(t,e,r){t.forEachDescendant(s=>{if(!Node.isJsxAttribute(s)||s.getNameNode().getText()!=="className")return;let n=s.getInitializer();if(!n)return;let i=G(n);if(i.length===0)return;let g=s.getParent()?.getParent();if(!g||!Node.isJsxOpeningElement(g)&&!Node.isJsxSelfClosingElement(g))return;let c=i.filter(l=>!r.has(l));if(c.length===0){I(n);return}let o=c.map(l=>e[l]).filter(l=>!!l);if(o.length>0){let l=o.join(" ");H(g,l);}else I(n);});}function G(t){let e=[];if(p(t))return y(t.getLiteralText());if(!Node.isJsxExpression(t))return e;let r=t.getExpression();if(!r)return e;if(p(r))return y(r.getLiteralText());if(Node.isCallExpression(r)&&A(r))for(let s of r.getArguments())p(s)&&e.push(...y(s.getLiteralText()));return e}function I(t){if(p(t)){let r=m(t.getLiteralText());t.setLiteralValue(r);return}if(!Node.isJsxExpression(t))return;let e=t.getExpression();if(e){if(p(e)){let r=m(e.getLiteralText());e.setLiteralValue(r);return}if(Node.isCallExpression(e)&&A(e)){for(let r of e.getArguments())if(p(r)){let s=m(r.getLiteralText());r.setLiteralValue(s);}C(e);}}}function y(t){let e=t.matchAll(/\bcn-[\w-]+\b/g);return Array.from(e,r=>r[0])}function m(t){return t.replace(/\bcn-[\w-]+\b/g,e=>X.has(e)?e:"").replace(/\s+/g," ").trim()}function C(t){if(!A(t))return;let e=t.getArguments(),r=e.filter(s=>p(s)?s.getLiteralText().trim()!=="":true);if(r.length!==e.length){let s=r.map(i=>i.getText()),n=t.getParent();n&&Node.isJsxExpression(n)?n.replaceWithText(`{cn(${s.join(", ")})}`):t.replaceWithText(`cn(${s.join(", ")})`);}}function H(t,e){if(!Node.isJsxOpeningElement(t)&&!Node.isJsxSelfClosingElement(t))return;let r=t.getAttributes().find(i=>Node.isJsxAttribute(i)&&i.getNameNode().getText()==="className");if(!r||!Node.isJsxAttribute(r)){t.addAttribute({name:"className",initializer:`{cn(${JSON.stringify(e)})}`});return}let s=r.getInitializer();if(!s){r.setInitializer(`{cn(${JSON.stringify(e)})}`);return}if(p(s)){let i=s.getLiteralText(),g=m(E(e,i));s.setLiteralValue(g);return}if(!Node.isJsxExpression(s))return;let n=s.getExpression();if(!n){r.setInitializer(`{cn(${JSON.stringify(e)})}`);return}if(p(n)){let i=n.getLiteralText(),g=m(E(e,i));n.setLiteralValue(g);return}if(Node.isCallExpression(n)&&A(n)){let i=n.getArguments()[0];if(p(i)){let o=i.getLiteralText(),l=m(E(e,o));i.setLiteralValue(l);for(let u=1;u<n.getArguments().length;u++){let f=n.getArguments()[u];if(p(f)){let x=f.getLiteralText(),T=m(x);T!==x&&f.setLiteralValue(T);}}C(n);return}let g=n.getArguments().map(o=>{if(p(o)){let l=m(o.getLiteralText());return l?JSON.stringify(l):null}return o.getText()}).filter(o=>o!==null),c=[JSON.stringify(e),...g];r.setInitializer(`{cn(${c.join(", ")})}`);return}r.setInitializer(`{cn(${JSON.stringify(e)}, ${n.getText()})}`);}function E(t,e){let r=e.split(/\s+/).filter(Boolean);return [...t.split(/\s+/).filter(Boolean),...r].join(" ").trim()}function A(t){let e=t.getExpression();return Node.isIdentifier(e)&&e.getText()==="cn"}function Q(t,e,r){t.forEachDescendant(s=>{if(!Node.isCallExpression(s))return;let n=s.getExpression();if(!(!Node.isIdentifier(n)||n.getText()!=="mergeProps"))for(let i of s.getArguments()){if(!Node.isObjectLiteralExpression(i))continue;let g=i.getProperties().find(o=>Node.isPropertyAssignment(o)&&Node.isIdentifier(o.getNameNode())&&o.getNameNode().getText()==="className");if(!g||!Node.isPropertyAssignment(g))continue;let c=g.getInitializer();if(c&&Node.isCallExpression(c)&&A(c)){let o=U(c);if(o.length===0)continue;let l=o.filter(f=>!r.has(f));if(l.length===0){P(c);continue}let u=l.map(f=>e[f]).filter(f=>!!f);if(u.length>0){let f=u.join(" ");Y(c,f,r,l);}else P(c);}}});}function U(t){let e=[];for(let r of t.getArguments())p(r)&&e.push(...y(r.getLiteralText()));return e}function P(t){for(let e of t.getArguments())if(p(e)){let r=m(e.getLiteralText());e.setLiteralValue(r);}C(t);}function Y(t,e,r,s){let n=t.getArguments()[0];if(p(n)){let o=n.getLiteralText(),l=m(E(e,o));n.setLiteralValue(l),s.forEach(u=>r.add(u));for(let u=1;u<t.getArguments().length;u++){let f=t.getArguments()[u];if(p(f)){let x=f.getLiteralText(),T=m(x);T!==x&&f.setLiteralValue(T);}}C(t);return}let i=t.getArguments().map(o=>{if(p(o)){let l=m(o.getLiteralText());return l?JSON.stringify(l):null}return o.getText()}).filter(o=>o!==null),g=[JSON.stringify(e),...i];s.forEach(o=>r.add(o)),t.getParent()&&t.replaceWithText(`cn(${g.join(", ")})`);}async function et(t,{styleMap:e,transformers:r=[$]}){let n=new Project({useInMemoryFileSystem:true}).createSourceFile("component.tsx",t,{scriptKind:ScriptKind.TSX,overwrite:true});for(let i of r)await i({sourceFile:n,styleMap:e});return n.getText()}var rt=async({sourceFile:t,config:e})=>{if(!e.style?.startsWith("base-"))return t;let r=[],s=t.getDescendantsOfKind(SyntaxKind.JsxElement);for(let n of s){let i=n.getOpeningElement(),g=i.getAttribute("render");if(!g)continue;let o=n.getJsxChildren().map(S=>S.getText()).join("").trim();if(!o||g.getKind()!==SyntaxKind.JsxAttribute)continue;let u=g.asKindOrThrow(SyntaxKind.JsxAttribute).getInitializer();if(!u||u.getKind()!==SyntaxKind.JsxExpression)continue;let x=u.asKindOrThrow(SyntaxKind.JsxExpression).getExpression();if(!x||x.getKind()!==SyntaxKind.JsxSelfClosingElement)continue;let T=x.asKindOrThrow(SyntaxKind.JsxSelfClosingElement),h=T.getTagNameNode().getText(),b=T.getAttributes().map(S=>S.getText()).join(" "),j=b?`{<${h} ${b}>${o}</${h}>}`:`{<${h}>${o}</${h}>}`,w=i.getTagNameNode().getText(),J=i.getAttributes().filter(S=>S.getKind()===SyntaxKind.JsxAttribute?S.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()!=="render":true).map(S=>S.getText()).join(" "),M=J?`${J} render=${j}`:`render=${j}`,V=`<${w} ${M} />`;r.push({elementStart:n.getStart(),elementEnd:n.getEnd(),newText:V});}for(let n of r.reverse()){let i=t.getFullText(),g=i.substring(0,n.elementStart)+n.newText+i.substring(n.elementEnd);t.replaceWithText(g);}return t};export{W as createStyleMap,rt as transformRender,et as transformStyle};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/styles/create-style-map.ts","../../src/styles/transform-style-map.ts","../../src/styles/transform.ts","../../src/utils/transformers/transform-render.ts"],"names":["CN_PREFIX","styleMapSchema","z","createStyleMap","input","root","postcss","result","rule","selectors","tailwindClasses","extractTailwindClasses","selector","normalizedSelector","normalizeSelector","selectorParser","selectorsRoot","sel","targetClass","findSubjectClass","className","classes","node","value","classNodes","classNode","ALLOWLIST","isStringLiteralLike","Node","transformStyleMap","sourceFile","styleMap","matchedClasses","applyToCvaCalls","applyToClassNameAttributes","applyToMergePropsCalls","applyStyleToCvaString","stringNode","stringValue","cnClasses","extractCnClasses","unmatchedClasses","cnClass","updated","removeCnClasses","tailwindClassesToApply","mergedClasses","mergeClasses","expression","baseArg","configArg","variantsProp","prop","variantsObj","typeProp","typeObj","variantProp","variantValue","initializer","extractCnClassesFromAttribute","jsxElement","cleanCnClassesFromAttribute","applyClassesToElement","isCnCall","argument","cleaned","removeEmptyArgumentsFromCnCall","str","matches","match","callExpression","args","nonEmptyArgs","arg","argTexts","parent","element","attribute","attr","existing","firstArg","i","argText","argumentTexts","updatedArguments","newClasses","existingParts","call","classNameProp","classNameInitializer","extractCnClassesFromCnCall","cleanCnClassesFromCnCall","applyClassesToCnCall","cnCall","transformStyle","source","transformers","Project","ScriptKind","transformer","transformRender","config","transformations","jsxElements","SyntaxKind","openingElement","renderAttr","childrenText","c","selfClosingElement","tagName","attributes","newRenderValue","parentTagName","otherAttrs","newAttrs","newElementText","info","fullText","newFullText"],"mappings":"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","file":"index.js","sourcesContent":["import postcss from \"postcss\"\nimport selectorParser, {\n type ClassName,\n type Selector as SelectorNodeRoot,\n} from \"postcss-selector-parser\"\nimport { z } from \"zod\"\n\nconst CN_PREFIX = \"cn-\"\n\nexport const styleMapSchema = z.record(\n z.string().startsWith(CN_PREFIX),\n z.string()\n)\n\nexport type StyleMap = z.infer<typeof styleMapSchema>\n\nexport function createStyleMap(input: string) {\n const root = postcss.parse(input)\n\n const result: Record<string, string> = {}\n\n root.walkRules((rule) => {\n const selectors = rule.selectors ?? []\n\n if (selectors.length === 0) {\n return\n }\n\n const tailwindClasses = extractTailwindClasses(rule)\n\n if (!tailwindClasses) {\n return\n }\n\n for (const selector of selectors) {\n const normalizedSelector = normalizeSelector(selector)\n\n selectorParser((selectorsRoot) => {\n selectorsRoot.each((sel) => {\n const targetClass = findSubjectClass(sel)\n\n if (!targetClass) {\n return\n }\n\n const className = targetClass.value\n\n if (!className.startsWith(CN_PREFIX)) {\n return\n }\n\n result[className] = result[className]\n ? `${tailwindClasses} ${result[className]}`\n : tailwindClasses\n })\n }).processSync(normalizedSelector)\n }\n })\n\n return styleMapSchema.parse(result)\n}\n\nfunction normalizeSelector(selector: string) {\n return selector.replace(/\\s*&\\s*/g, \"\").trim()\n}\n\nfunction extractTailwindClasses(rule: postcss.Rule) {\n const classes: string[] = []\n\n for (const node of rule.nodes || []) {\n if (node.type === \"atrule\" && node.name === \"apply\") {\n const value = node.params.trim()\n if (value) {\n classes.push(value)\n }\n }\n }\n\n if (classes.length === 0) {\n return null\n }\n\n return classes.join(\" \")\n}\n\nfunction findSubjectClass(selector: SelectorNodeRoot) {\n const classNodes: ClassName[] = []\n\n selector.walkClasses((classNode) => {\n if (classNode.value.startsWith(CN_PREFIX)) {\n classNodes.push(classNode)\n }\n })\n\n if (classNodes.length === 0) {\n return null\n }\n\n return classNodes[classNodes.length - 1]\n}\n","import { TransformerStyle } from \"@/src/styles/transform\"\nimport {\n Node,\n type CallExpression,\n type NoSubstitutionTemplateLiteral,\n type SourceFile,\n type StringLiteral,\n} from \"ts-morph\"\n\nimport { type StyleMap } from \"./create-style-map\"\n\n/**\n * Classes that should never be removed during transformation.\n * These are typically used as CSS selectors or for other purposes\n * that require the class name to remain in the code.\n */\nconst ALLOWLIST = new Set([\"cn-menu-target\"])\n\nfunction isStringLiteralLike(\n node: Node\n): node is StringLiteral | NoSubstitutionTemplateLiteral {\n return (\n Node.isStringLiteral(node) || Node.isNoSubstitutionTemplateLiteral(node)\n )\n}\n\nexport const transformStyleMap: TransformerStyle<SourceFile> = async ({\n sourceFile,\n styleMap,\n}) => {\n const matchedClasses = new Set<string>()\n\n applyToCvaCalls(sourceFile, styleMap, matchedClasses)\n applyToClassNameAttributes(sourceFile, styleMap, matchedClasses)\n applyToMergePropsCalls(sourceFile, styleMap, matchedClasses)\n\n return sourceFile\n}\n\nfunction applyStyleToCvaString(\n stringNode: StringLiteral,\n styleMap: StyleMap,\n matchedClasses: Set<string>\n) {\n const stringValue = stringNode.getLiteralText()\n const cnClasses = extractCnClasses(stringValue)\n\n if (cnClasses.length === 0) {\n return\n }\n\n // Process all cn-* classes, not just the first one\n const unmatchedClasses = cnClasses.filter(\n (cnClass) => !matchedClasses.has(cnClass)\n )\n\n if (unmatchedClasses.length === 0) {\n // All classes already matched, just clean up non-allowlisted ones\n const updated = removeCnClasses(stringValue)\n stringNode.setLiteralValue(updated)\n return\n }\n\n const tailwindClassesToApply = unmatchedClasses\n .map((cnClass) => styleMap[cnClass])\n .filter((classes): classes is string => Boolean(classes))\n\n if (tailwindClassesToApply.length > 0) {\n const mergedClasses = tailwindClassesToApply.join(\" \")\n const updated = removeCnClasses(mergeClasses(mergedClasses, stringValue))\n stringNode.setLiteralValue(updated)\n unmatchedClasses.forEach((cnClass) => matchedClasses.add(cnClass))\n } else {\n // No styles to apply, but still need to clean up non-allowlisted classes\n const updated = removeCnClasses(stringValue)\n stringNode.setLiteralValue(updated)\n }\n}\n\nfunction applyToCvaCalls(\n sourceFile: SourceFile,\n styleMap: StyleMap,\n matchedClasses: Set<string>\n) {\n sourceFile.forEachDescendant((node) => {\n if (!Node.isCallExpression(node)) {\n return\n }\n\n const expression = node.getExpression()\n if (!Node.isIdentifier(expression) || expression.getText() !== \"cva\") {\n return\n }\n\n const baseArg = node.getArguments()[0]\n if (Node.isStringLiteral(baseArg)) {\n applyStyleToCvaString(baseArg, styleMap, matchedClasses)\n }\n\n const configArg = node.getArguments()[1]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n return\n }\n\n const variantsProp = configArg\n .getProperties()\n .find(\n (prop) =>\n Node.isPropertyAssignment(prop) &&\n Node.isIdentifier(prop.getNameNode()) &&\n prop.getNameNode().getText() === \"variants\"\n )\n\n if (!variantsProp || !Node.isPropertyAssignment(variantsProp)) {\n return\n }\n\n const variantsObj = variantsProp.getInitializer()\n if (!variantsObj || !Node.isObjectLiteralExpression(variantsObj)) {\n return\n }\n\n variantsObj.getProperties().forEach((typeProp) => {\n if (!Node.isPropertyAssignment(typeProp)) {\n return\n }\n\n const typeObj = typeProp.getInitializer()\n if (!typeObj || !Node.isObjectLiteralExpression(typeObj)) {\n return\n }\n\n typeObj.getProperties().forEach((variantProp) => {\n if (!Node.isPropertyAssignment(variantProp)) {\n return\n }\n\n const variantValue = variantProp.getInitializer()\n if (variantValue && Node.isStringLiteral(variantValue)) {\n applyStyleToCvaString(variantValue, styleMap, matchedClasses)\n }\n })\n })\n })\n}\n\nfunction applyToClassNameAttributes(\n sourceFile: SourceFile,\n styleMap: StyleMap,\n matchedClasses: Set<string>\n) {\n sourceFile.forEachDescendant((node) => {\n if (\n !Node.isJsxAttribute(node) ||\n node.getNameNode().getText() !== \"className\"\n ) {\n return\n }\n\n const initializer = node.getInitializer()\n if (!initializer) {\n return\n }\n\n const cnClasses = extractCnClassesFromAttribute(initializer)\n\n if (cnClasses.length === 0) {\n return\n }\n\n const jsxElement = node.getParent()?.getParent()\n if (\n !jsxElement ||\n (!Node.isJsxOpeningElement(jsxElement) &&\n !Node.isJsxSelfClosingElement(jsxElement))\n ) {\n return\n }\n\n const unmatchedClasses = cnClasses.filter(\n (cnClass) => !matchedClasses.has(cnClass)\n )\n\n if (unmatchedClasses.length === 0) {\n // Even if all classes are already matched, we still need to clean them up\n cleanCnClassesFromAttribute(initializer)\n return\n }\n\n const tailwindClassesToApply = unmatchedClasses\n .map((cnClass) => styleMap[cnClass])\n .filter((classes): classes is string => Boolean(classes))\n\n if (tailwindClassesToApply.length > 0) {\n const mergedClasses = tailwindClassesToApply.join(\" \")\n applyClassesToElement(jsxElement, mergedClasses)\n } else {\n cleanCnClassesFromAttribute(initializer)\n }\n })\n}\n\nfunction extractCnClassesFromAttribute(initializer: Node) {\n const classes: string[] = []\n\n if (isStringLiteralLike(initializer)) {\n return extractCnClasses(initializer.getLiteralText())\n }\n\n if (!Node.isJsxExpression(initializer)) {\n return classes\n }\n\n const expression = initializer.getExpression()\n if (!expression) {\n return classes\n }\n\n if (isStringLiteralLike(expression)) {\n return extractCnClasses(expression.getLiteralText())\n }\n\n if (Node.isCallExpression(expression) && isCnCall(expression)) {\n for (const argument of expression.getArguments()) {\n if (isStringLiteralLike(argument)) {\n classes.push(...extractCnClasses(argument.getLiteralText()))\n }\n }\n }\n\n return classes\n}\n\nfunction cleanCnClassesFromAttribute(initializer: Node) {\n if (isStringLiteralLike(initializer)) {\n const cleaned = removeCnClasses(initializer.getLiteralText())\n initializer.setLiteralValue(cleaned)\n return\n }\n\n if (!Node.isJsxExpression(initializer)) {\n return\n }\n\n const expression = initializer.getExpression()\n if (!expression) {\n return\n }\n\n if (isStringLiteralLike(expression)) {\n const cleaned = removeCnClasses(expression.getLiteralText())\n expression.setLiteralValue(cleaned)\n return\n }\n\n if (Node.isCallExpression(expression) && isCnCall(expression)) {\n for (const argument of expression.getArguments()) {\n if (isStringLiteralLike(argument)) {\n const cleaned = removeCnClasses(argument.getLiteralText())\n argument.setLiteralValue(cleaned)\n }\n }\n\n removeEmptyArgumentsFromCnCall(expression)\n }\n}\n\nfunction extractCnClasses(str: string) {\n const matches = str.matchAll(/\\bcn-[\\w-]+\\b/g)\n return Array.from(matches, (match) => match[0])\n}\n\nfunction extractCnClass(str: string) {\n const classes = extractCnClasses(str)\n return classes[0] ?? null\n}\n\nfunction removeCnClasses(str: string) {\n return str\n .replace(/\\bcn-[\\w-]+\\b/g, (match) => {\n // Preserve allowlisted classes\n if (ALLOWLIST.has(match)) {\n return match\n }\n return \"\"\n })\n .replace(/\\s+/g, \" \")\n .trim()\n}\n\nfunction removeEmptyArgumentsFromCnCall(callExpression: CallExpression) {\n if (!isCnCall(callExpression)) {\n return\n }\n\n const args = callExpression.getArguments()\n const nonEmptyArgs = args.filter((arg) => {\n if (isStringLiteralLike(arg)) {\n const text = arg.getLiteralText().trim()\n return text !== \"\"\n }\n return true\n })\n\n if (nonEmptyArgs.length !== args.length) {\n const argTexts = nonEmptyArgs.map((arg) => arg.getText())\n const parent = callExpression.getParent()\n if (parent && Node.isJsxExpression(parent)) {\n parent.replaceWithText(`{cn(${argTexts.join(\", \")})}`)\n } else {\n callExpression.replaceWithText(`cn(${argTexts.join(\", \")})`)\n }\n }\n}\n\nfunction applyClassesToElement(element: Node, tailwindClasses: string) {\n if (\n !Node.isJsxOpeningElement(element) &&\n !Node.isJsxSelfClosingElement(element)\n ) {\n return\n }\n\n const attribute = element\n .getAttributes()\n .find(\n (attr) =>\n Node.isJsxAttribute(attr) &&\n attr.getNameNode().getText() === \"className\"\n )\n\n if (!attribute || !Node.isJsxAttribute(attribute)) {\n element.addAttribute({\n name: \"className\",\n initializer: `{cn(${JSON.stringify(tailwindClasses)})}`,\n })\n return\n }\n\n const initializer = attribute.getInitializer()\n\n if (!initializer) {\n attribute.setInitializer(`{cn(${JSON.stringify(tailwindClasses)})}`)\n return\n }\n\n if (isStringLiteralLike(initializer)) {\n const existing = initializer.getLiteralText()\n const updated = removeCnClasses(mergeClasses(tailwindClasses, existing))\n initializer.setLiteralValue(updated)\n return\n }\n\n if (!Node.isJsxExpression(initializer)) {\n return\n }\n\n const expression = initializer.getExpression()\n\n if (!expression) {\n attribute.setInitializer(`{cn(${JSON.stringify(tailwindClasses)})}`)\n return\n }\n\n if (isStringLiteralLike(expression)) {\n const existing = expression.getLiteralText()\n const updated = removeCnClasses(mergeClasses(tailwindClasses, existing))\n expression.setLiteralValue(updated)\n return\n }\n\n if (Node.isCallExpression(expression) && isCnCall(expression)) {\n const firstArg = expression.getArguments()[0]\n if (isStringLiteralLike(firstArg)) {\n const existing = firstArg.getLiteralText()\n const updated = removeCnClasses(mergeClasses(tailwindClasses, existing))\n firstArg.setLiteralValue(updated)\n\n for (let i = 1; i < expression.getArguments().length; i++) {\n const arg = expression.getArguments()[i]\n if (isStringLiteralLike(arg)) {\n const argText = arg.getLiteralText()\n const cleaned = removeCnClasses(argText)\n if (cleaned !== argText) {\n arg.setLiteralValue(cleaned)\n }\n }\n }\n\n removeEmptyArgumentsFromCnCall(expression)\n return\n }\n\n const argumentTexts = expression\n .getArguments()\n .map((argument) => {\n if (isStringLiteralLike(argument)) {\n const cleaned = removeCnClasses(argument.getLiteralText())\n return cleaned ? JSON.stringify(cleaned) : null\n }\n return argument.getText()\n })\n .filter((arg): arg is string => arg !== null)\n\n const updatedArguments = [JSON.stringify(tailwindClasses), ...argumentTexts]\n\n attribute.setInitializer(`{cn(${updatedArguments.join(\", \")})}`)\n return\n }\n\n attribute.setInitializer(\n `{cn(${JSON.stringify(tailwindClasses)}, ${expression.getText()})}`\n )\n}\n\nfunction mergeClasses(newClasses: string, existing: string) {\n const existingParts = existing.split(/\\s+/).filter(Boolean)\n const newParts = newClasses.split(/\\s+/).filter(Boolean)\n const combined = [...newParts, ...existingParts]\n return combined.join(\" \").trim()\n}\n\nfunction isCnCall(call: CallExpression) {\n const expression = call.getExpression()\n return Node.isIdentifier(expression) && expression.getText() === \"cn\"\n}\n\nfunction applyToMergePropsCalls(\n sourceFile: SourceFile,\n styleMap: StyleMap,\n matchedClasses: Set<string>\n) {\n sourceFile.forEachDescendant((node) => {\n if (!Node.isCallExpression(node)) {\n return\n }\n\n const expression = node.getExpression()\n if (\n !Node.isIdentifier(expression) ||\n expression.getText() !== \"mergeProps\"\n ) {\n return\n }\n\n // Look for object literals in mergeProps arguments\n for (const arg of node.getArguments()) {\n if (!Node.isObjectLiteralExpression(arg)) {\n continue\n }\n\n // Find className property in the object literal\n const classNameProp = arg\n .getProperties()\n .find(\n (prop) =>\n Node.isPropertyAssignment(prop) &&\n Node.isIdentifier(prop.getNameNode()) &&\n prop.getNameNode().getText() === \"className\"\n )\n\n if (!classNameProp || !Node.isPropertyAssignment(classNameProp)) {\n continue\n }\n\n const classNameInitializer = classNameProp.getInitializer()\n if (!classNameInitializer) {\n continue\n }\n\n // Handle cn() calls in className\n if (\n Node.isCallExpression(classNameInitializer) &&\n isCnCall(classNameInitializer)\n ) {\n const cnClasses = extractCnClassesFromCnCall(classNameInitializer)\n\n if (cnClasses.length === 0) {\n continue\n }\n\n const unmatchedClasses = cnClasses.filter(\n (cnClass) => !matchedClasses.has(cnClass)\n )\n\n if (unmatchedClasses.length === 0) {\n // Clean up cn-* classes even if already matched\n cleanCnClassesFromCnCall(classNameInitializer)\n continue\n }\n\n const tailwindClassesToApply = unmatchedClasses\n .map((cnClass) => styleMap[cnClass])\n .filter((classes): classes is string => Boolean(classes))\n\n if (tailwindClassesToApply.length > 0) {\n const mergedClasses = tailwindClassesToApply.join(\" \")\n applyClassesToCnCall(\n classNameInitializer,\n mergedClasses,\n matchedClasses,\n unmatchedClasses\n )\n } else {\n cleanCnClassesFromCnCall(classNameInitializer)\n }\n }\n }\n })\n}\n\nfunction extractCnClassesFromCnCall(cnCall: CallExpression): string[] {\n const classes: string[] = []\n\n for (const argument of cnCall.getArguments()) {\n if (isStringLiteralLike(argument)) {\n classes.push(...extractCnClasses(argument.getLiteralText()))\n }\n }\n\n return classes\n}\n\nfunction cleanCnClassesFromCnCall(cnCall: CallExpression) {\n for (const argument of cnCall.getArguments()) {\n if (isStringLiteralLike(argument)) {\n const cleaned = removeCnClasses(argument.getLiteralText())\n argument.setLiteralValue(cleaned)\n }\n }\n\n removeEmptyArgumentsFromCnCall(cnCall)\n}\n\nfunction applyClassesToCnCall(\n cnCall: CallExpression,\n tailwindClasses: string,\n matchedClasses: Set<string>,\n unmatchedClasses: string[]\n) {\n const firstArg = cnCall.getArguments()[0]\n\n if (isStringLiteralLike(firstArg)) {\n const existing = firstArg.getLiteralText()\n const updated = removeCnClasses(mergeClasses(tailwindClasses, existing))\n firstArg.setLiteralValue(updated)\n\n // Mark classes as matched\n unmatchedClasses.forEach((cnClass) => matchedClasses.add(cnClass))\n\n // Clean up cn-* classes from remaining arguments\n for (let i = 1; i < cnCall.getArguments().length; i++) {\n const arg = cnCall.getArguments()[i]\n if (isStringLiteralLike(arg)) {\n const argText = arg.getLiteralText()\n const cleaned = removeCnClasses(argText)\n if (cleaned !== argText) {\n arg.setLiteralValue(cleaned)\n }\n }\n }\n\n removeEmptyArgumentsFromCnCall(cnCall)\n return\n }\n\n // If first arg is not a string literal, prepend tailwind classes\n const argumentTexts = cnCall\n .getArguments()\n .map((argument) => {\n if (isStringLiteralLike(argument)) {\n const cleaned = removeCnClasses(argument.getLiteralText())\n return cleaned ? JSON.stringify(cleaned) : null\n }\n return argument.getText()\n })\n .filter((arg): arg is string => arg !== null)\n\n const updatedArguments = [JSON.stringify(tailwindClasses), ...argumentTexts]\n\n // Mark classes as matched\n unmatchedClasses.forEach((cnClass) => matchedClasses.add(cnClass))\n\n const parent = cnCall.getParent()\n if (parent) {\n cnCall.replaceWithText(`cn(${updatedArguments.join(\", \")})`)\n }\n}\n","import { Project, ScriptKind, type SourceFile } from \"ts-morph\"\n\nimport { type StyleMap } from \"./create-style-map\"\nimport { transformStyleMap } from \"./transform-style-map\"\n\nexport type TransformerStyle<Output = SourceFile> = (opts: {\n sourceFile: SourceFile\n styleMap: StyleMap\n}) => Promise<Output>\n\nexport async function transformStyle(\n source: string,\n {\n styleMap,\n transformers = [transformStyleMap],\n }: {\n styleMap: StyleMap\n transformers?: TransformerStyle<SourceFile>[]\n }\n) {\n const project = new Project({\n useInMemoryFileSystem: true,\n })\n\n const sourceFile = project.createSourceFile(\"component.tsx\", source, {\n scriptKind: ScriptKind.TSX,\n overwrite: true,\n })\n\n for (const transformer of transformers) {\n await transformer({ sourceFile, styleMap })\n }\n\n return sourceFile.getText()\n}\n","import { Transformer } from \"@/src/utils/transformers\"\nimport { SyntaxKind } from \"ts-morph\"\n\ninterface TransformInfo {\n elementStart: number\n elementEnd: number\n newText: string\n}\n\nexport const transformRender: Transformer = async ({ sourceFile, config }) => {\n // Only run for base- styles.\n if (!config.style?.startsWith(\"base-\")) {\n return sourceFile\n }\n\n // Collect all transformations first, then apply them in reverse order.\n // This prevents issues with invalidated nodes when modifying the tree.\n const transformations: TransformInfo[] = []\n\n // Find all JSX elements with render attribute.\n const jsxElements = sourceFile.getDescendantsOfKind(SyntaxKind.JsxElement)\n\n for (const jsxElement of jsxElements) {\n const openingElement = jsxElement.getOpeningElement()\n const renderAttr = openingElement.getAttribute(\"render\")\n\n if (!renderAttr) {\n continue\n }\n\n // Get the children of the parent element.\n const children = jsxElement.getJsxChildren()\n const childrenText = children\n .map((c) => c.getText())\n .join(\"\")\n .trim()\n\n // If there are no children, nothing to transform.\n if (!childrenText) {\n continue\n }\n\n // Get the render attribute value.\n if (renderAttr.getKind() !== SyntaxKind.JsxAttribute) {\n continue\n }\n\n const jsxAttr = renderAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\n const initializer = jsxAttr.getInitializer()\n\n if (!initializer) {\n continue\n }\n\n // The render value should be a JSX expression like {<Button />}.\n if (initializer.getKind() !== SyntaxKind.JsxExpression) {\n continue\n }\n\n const jsxExpression = initializer.asKindOrThrow(SyntaxKind.JsxExpression)\n const expression = jsxExpression.getExpression()\n\n if (!expression) {\n continue\n }\n\n // Check if the expression is a self-closing JSX element.\n if (expression.getKind() !== SyntaxKind.JsxSelfClosingElement) {\n // If it's already a full JSX element with children, skip it.\n continue\n }\n\n const selfClosingElement = expression.asKindOrThrow(\n SyntaxKind.JsxSelfClosingElement\n )\n const tagName = selfClosingElement.getTagNameNode().getText()\n const attributes = selfClosingElement\n .getAttributes()\n .map((attr) => attr.getText())\n .join(\" \")\n\n // Build new render prop value with children moved inside.\n const newRenderValue = attributes\n ? `{<${tagName} ${attributes}>${childrenText}</${tagName}>}`\n : `{<${tagName}>${childrenText}</${tagName}>}`\n\n // Get the parent tag name and other attributes.\n const parentTagName = openingElement.getTagNameNode().getText()\n const otherAttrs = openingElement\n .getAttributes()\n .filter((attr) => {\n if (attr.getKind() === SyntaxKind.JsxAttribute) {\n const attrName = attr\n .asKindOrThrow(SyntaxKind.JsxAttribute)\n .getNameNode()\n .getText()\n return attrName !== \"render\"\n }\n return true\n })\n .map((attr) => attr.getText())\n .join(\" \")\n\n // Build new element text as self-closing since children are now in render.\n const newAttrs = otherAttrs\n ? `${otherAttrs} render=${newRenderValue}`\n : `render=${newRenderValue}`\n\n const newElementText = `<${parentTagName} ${newAttrs} />`\n\n transformations.push({\n elementStart: jsxElement.getStart(),\n elementEnd: jsxElement.getEnd(),\n newText: newElementText,\n })\n }\n\n // Apply transformations in reverse order to preserve positions.\n for (const info of transformations.reverse()) {\n const fullText = sourceFile.getFullText()\n const newFullText =\n fullText.substring(0, info.elementStart) +\n info.newText +\n fullText.substring(info.elementEnd)\n sourceFile.replaceWithText(newFullText)\n }\n\n return sourceFile\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hghcn",
|
|
3
|
+
"version": "3.6.2",
|
|
4
|
+
"description": "Add components to your apps.",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "shadcn",
|
|
11
|
+
"url": "https://twitter.com/shadcn"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/shadcn-ui/ui.git",
|
|
16
|
+
"directory": "packages/shadcn"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"keywords": [
|
|
22
|
+
"components",
|
|
23
|
+
"ui",
|
|
24
|
+
"tailwind",
|
|
25
|
+
"radix-ui",
|
|
26
|
+
"shadcn"
|
|
27
|
+
],
|
|
28
|
+
"type": "module",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"default": "./dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./registry": {
|
|
35
|
+
"types": "./dist/registry/index.d.ts",
|
|
36
|
+
"default": "./dist/registry/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./schema": {
|
|
39
|
+
"types": "./dist/schema/index.d.ts",
|
|
40
|
+
"default": "./dist/schema/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./mcp": {
|
|
43
|
+
"types": "./dist/mcp/index.d.ts",
|
|
44
|
+
"default": "./dist/mcp/index.js"
|
|
45
|
+
},
|
|
46
|
+
"./utils": {
|
|
47
|
+
"types": "./dist/utils/index.d.ts",
|
|
48
|
+
"default": "./dist/utils/index.js"
|
|
49
|
+
},
|
|
50
|
+
"./icons": {
|
|
51
|
+
"types": "./dist/icons/index.d.ts",
|
|
52
|
+
"default": "./dist/icons/index.js"
|
|
53
|
+
},
|
|
54
|
+
"./tailwind.css": {
|
|
55
|
+
"style": "./dist/tailwind.css"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"bin": "./dist/index.js",
|
|
59
|
+
"scripts": {
|
|
60
|
+
"dev": "tsup --watch",
|
|
61
|
+
"build": "tsup",
|
|
62
|
+
"typecheck": "tsc --noEmit",
|
|
63
|
+
"clean": "rimraf dist && rimraf components",
|
|
64
|
+
"start:dev": "cross-env REGISTRY_URL=http://localhost:4000/r node dist/index.js",
|
|
65
|
+
"start:prod": "cross-env REGISTRY_URL=https://ui.shadcn.com/r node dist/index.js",
|
|
66
|
+
"start": "node dist/index.js",
|
|
67
|
+
"format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache",
|
|
68
|
+
"format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache",
|
|
69
|
+
"release": "changeset version",
|
|
70
|
+
"pub:beta": "pnpm build && pnpm publish --no-git-checks --access public --tag beta",
|
|
71
|
+
"pub:next": "pnpm build && pnpm publish --no-git-checks --access public --tag next",
|
|
72
|
+
"pub:release": "pnpm build && pnpm publish --access public",
|
|
73
|
+
"test": "vitest run",
|
|
74
|
+
"test:dev": "REGISTRY_URL=http://localhost:4000/r vitest run",
|
|
75
|
+
"mcp:inspect": "pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp"
|
|
76
|
+
},
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"@antfu/ni": "^25.0.0",
|
|
79
|
+
"@babel/core": "^7.28.0",
|
|
80
|
+
"@babel/parser": "^7.28.0",
|
|
81
|
+
"@babel/plugin-transform-typescript": "^7.28.0",
|
|
82
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
83
|
+
"@dotenvx/dotenvx": "^1.48.4",
|
|
84
|
+
"@modelcontextprotocol/sdk": "^1.17.2",
|
|
85
|
+
"browserslist": "^4.26.2",
|
|
86
|
+
"commander": "^14.0.0",
|
|
87
|
+
"cosmiconfig": "^9.0.0",
|
|
88
|
+
"dedent": "^1.6.0",
|
|
89
|
+
"deepmerge": "^4.3.1",
|
|
90
|
+
"diff": "^8.0.2",
|
|
91
|
+
"execa": "^9.6.0",
|
|
92
|
+
"fast-glob": "^3.3.3",
|
|
93
|
+
"fs-extra": "^11.3.1",
|
|
94
|
+
"fuzzysort": "^3.1.0",
|
|
95
|
+
"https-proxy-agent": "^7.0.6",
|
|
96
|
+
"kleur": "^4.1.5",
|
|
97
|
+
"msw": "^2.10.4",
|
|
98
|
+
"node-fetch": "^3.3.2",
|
|
99
|
+
"open": "^11.0.0",
|
|
100
|
+
"ora": "^8.2.0",
|
|
101
|
+
"postcss": "^8.5.6",
|
|
102
|
+
"postcss-selector-parser": "^7.1.0",
|
|
103
|
+
"prompts": "^2.4.2",
|
|
104
|
+
"recast": "^0.23.11",
|
|
105
|
+
"stringify-object": "^5.0.0",
|
|
106
|
+
"ts-morph": "^26.0.0",
|
|
107
|
+
"tsconfig-paths": "^4.2.0",
|
|
108
|
+
"zod": "^3.24.1",
|
|
109
|
+
"zod-to-json-schema": "^3.24.6"
|
|
110
|
+
},
|
|
111
|
+
"devDependencies": {
|
|
112
|
+
"@types/babel__core": "^7.20.5",
|
|
113
|
+
"@types/fs-extra": "^11.0.4",
|
|
114
|
+
"@types/prompts": "^2.4.9",
|
|
115
|
+
"@types/stringify-object": "^4.0.5",
|
|
116
|
+
"rimraf": "^6.0.1",
|
|
117
|
+
"tsup": "^8.5.0",
|
|
118
|
+
"type-fest": "^4.41.0",
|
|
119
|
+
"typescript": "^5.9.2"
|
|
120
|
+
}
|
|
121
|
+
}
|