chaincss 2.0.5 → 2.0.7

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 CHANGED
@@ -255,12 +255,6 @@ For complete guide, API reference, and examples:
255
255
 
256
256
  ### [Documentation](https://chaincss.dev/docs)
257
257
 
258
- - [Getting Started](https://chaincss.dev/docs)
259
- - [Chainable API](https://chaincss.dev/docs/chainable-api)
260
- - [Responsive Design](https://chaincss.dev/docs/responsive)
261
- - [Animations](https://chaincss.dev/docs/animations)
262
- - [Configuration](https://chaincss.dev/docs/configuration)
263
-
264
258
  ## 🤝 Contributing
265
259
 
266
260
  Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md).
package/dist/cli/index.js CHANGED
@@ -518,9 +518,75 @@ var init_commonProps = __esm({
518
518
  });
519
519
 
520
520
  // src/compiler/btt.ts
521
+ var btt_exports = {};
522
+ __export(btt_exports, {
523
+ $: () => $,
524
+ atomicOptimizer: () => atomicOptimizer,
525
+ chain: () => chain,
526
+ chainObject: () => chain,
527
+ clearTimeline: () => clearTimeline,
528
+ compile: () => compile,
529
+ configureAtomic: () => configureAtomic,
530
+ createTokens: () => createTokens,
531
+ enableDebug: () => enableDebug,
532
+ enableTimeline: () => enableTimeline,
533
+ exportTimeline: () => exportTimeline,
534
+ generateComponentCode: () => generateComponentCode,
535
+ getStyleChanges: () => getStyleChanges,
536
+ getStyleDiff: () => getStyleDiff,
537
+ getStyleHistory: () => getStyleHistory,
538
+ helpers: () => helpers,
539
+ recipe: () => recipe,
540
+ run: () => run,
541
+ setAtomicOptimizer: () => setAtomicOptimizer,
542
+ setBreakpoints: () => setBreakpoints,
543
+ setSourceComments: () => setSourceComments,
544
+ tokens: () => tokens2
545
+ });
521
546
  import path2 from "path";
522
547
  import https from "https";
523
548
  import { fileURLToPath } from "url";
549
+ function enableTimeline(enable = true) {
550
+ timelineEnabled = enable;
551
+ if (!enable) {
552
+ styleHistory = [];
553
+ styleChanges = [];
554
+ }
555
+ }
556
+ function getStyleHistory() {
557
+ return styleHistory;
558
+ }
559
+ function getStyleChanges() {
560
+ return styleChanges;
561
+ }
562
+ function getStyleDiff(snapshotId1, snapshotId2) {
563
+ const snapshot1 = styleHistory.find((s) => s.id === snapshotId1);
564
+ const snapshot2 = styleHistory.find((s) => s.id === snapshotId2);
565
+ if (!snapshot1 || !snapshot2) {
566
+ return { error: "Snapshot not found" };
567
+ }
568
+ const diff = {
569
+ added: {},
570
+ removed: {},
571
+ modified: {}
572
+ };
573
+ for (const [key, value] of Object.entries(snapshot2.styles)) {
574
+ if (!(key in snapshot1.styles)) {
575
+ diff.added[key] = value;
576
+ } else if (JSON.stringify(snapshot1.styles[key]) !== JSON.stringify(value)) {
577
+ diff.modified[key] = {
578
+ old: snapshot1.styles[key],
579
+ new: value
580
+ };
581
+ }
582
+ }
583
+ for (const [key, value] of Object.entries(snapshot1.styles)) {
584
+ if (!(key in snapshot2.styles)) {
585
+ diff.removed[key] = value;
586
+ }
587
+ }
588
+ return diff;
589
+ }
524
590
  function takeSnapshot(selector, styles, source) {
525
591
  if (!timelineEnabled)
526
592
  return "";
@@ -580,6 +646,239 @@ function takeSnapshot(selector, styles, source) {
580
646
  }
581
647
  return id;
582
648
  }
649
+ function exportTimeline() {
650
+ return JSON.stringify({
651
+ history: styleHistory,
652
+ changes: styleChanges,
653
+ exportedAt: Date.now()
654
+ }, null, 2);
655
+ }
656
+ function clearTimeline() {
657
+ styleHistory = [];
658
+ styleChanges = [];
659
+ currentSnapshotId = 0;
660
+ }
661
+ function levenshteinDistance(a, b) {
662
+ const matrix = [];
663
+ for (let i = 0; i <= b.length; i++) {
664
+ matrix[i] = [i];
665
+ }
666
+ for (let j = 0; j <= a.length; j++) {
667
+ matrix[0][j] = j;
668
+ }
669
+ for (let i = 1; i <= b.length; i++) {
670
+ for (let j = 1; j <= a.length; j++) {
671
+ const cost = a[j - 1] === b[i - 1] ? 0 : 1;
672
+ matrix[i][j] = Math.min(
673
+ matrix[i - 1][j] + 1,
674
+ matrix[i][j - 1] + 1,
675
+ matrix[i - 1][j - 1] + cost
676
+ );
677
+ }
678
+ }
679
+ return matrix[b.length][a.length];
680
+ }
681
+ function getSuggestion(prop, validProperties = []) {
682
+ const knownShorthands = Object.keys(shorthandMap);
683
+ const commonCSS = [
684
+ "display",
685
+ "position",
686
+ "margin",
687
+ "padding",
688
+ "color",
689
+ "background",
690
+ "background-color",
691
+ "border",
692
+ "border-radius",
693
+ "width",
694
+ "height",
695
+ "font-size",
696
+ "font-weight",
697
+ "text-align",
698
+ "cursor",
699
+ "opacity",
700
+ "z-index",
701
+ "overflow",
702
+ "flex",
703
+ "grid",
704
+ "gap",
705
+ "justify-content",
706
+ "align-items",
707
+ "transition",
708
+ "transform",
709
+ "animation"
710
+ ];
711
+ const allKnown = [...knownShorthands, ...commonCSS, ...validProperties];
712
+ const uniqueKnown = [...new Set(allKnown)];
713
+ let bestMatch = "";
714
+ let bestDistance = 4;
715
+ for (const known of uniqueKnown) {
716
+ const distance = levenshteinDistance(prop.toLowerCase(), known.toLowerCase());
717
+ if (distance < bestDistance) {
718
+ bestDistance = distance;
719
+ bestMatch = known;
720
+ }
721
+ }
722
+ if (bestMatch && bestDistance <= 3) {
723
+ return bestMatch;
724
+ }
725
+ return "";
726
+ }
727
+ function detectFrameworkFromProject() {
728
+ try {
729
+ __require.resolve("react/package.json");
730
+ return "react";
731
+ } catch (e) {
732
+ }
733
+ try {
734
+ __require.resolve("vue/package.json");
735
+ return "vue";
736
+ } catch (e) {
737
+ }
738
+ try {
739
+ __require.resolve("svelte/package.json");
740
+ return "svelte";
741
+ } catch (e) {
742
+ }
743
+ try {
744
+ __require.resolve("solid-js/package.json");
745
+ return "solid";
746
+ } catch (e) {
747
+ }
748
+ return "react";
749
+ }
750
+ function generateReactComponent(info) {
751
+ const propsInterface = info.propsDefinition ? Object.entries(info.propsDefinition).map(([key, type]) => ` ${key}?: ${type};`).join("\n") : " [key: string]: any;";
752
+ return `// Auto-generated by ChainCSS
753
+ import React from 'react';
754
+ import styles from './${info.name}.class.js';
755
+ import './${info.name}.css';
756
+
757
+ export interface ${info.name}Props {
758
+ className?: string;
759
+ children?: React.ReactNode;
760
+ ${propsInterface}
761
+ }
762
+
763
+ export const ${info.name}: React.FC<${info.name}Props> = ({
764
+ className,
765
+ children,
766
+ ...props
767
+ }) => {
768
+ const combinedClassName = [styles.${info.selector.replace(/^\./, "")}, className]
769
+ .filter(Boolean)
770
+ .join(' ');
771
+
772
+ return (
773
+ <div className={combinedClassName} {...props}>
774
+ {children}
775
+ </div>
776
+ );
777
+ };
778
+
779
+ ${info.name}.displayName = 'ChainCSS${info.name}';
780
+
781
+ export default ${info.name};
782
+ `;
783
+ }
784
+ function generateVueComponent(info) {
785
+ const propsDefinition = info.propsDefinition ? Object.entries(info.propsDefinition).map(([key, type]) => ` ${key}: { type: ${type}, default: null },`).join("\n") : "";
786
+ return `<!-- Auto-generated by ChainCSS -->
787
+ <template>
788
+ <component
789
+ :is="tag"
790
+ :class="combinedClass"
791
+ v-bind="$attrs"
792
+ >
793
+ <slot />
794
+ </component>
795
+ </template>
796
+
797
+ <script>
798
+ import styles from './${info.name}.class.js';
799
+ import './${info.name}.css';
800
+
801
+ export default {
802
+ name: 'ChainCSS${info.name}',
803
+ props: {
804
+ tag: {
805
+ type: String,
806
+ default: 'div'
807
+ },
808
+ className: {
809
+ type: String,
810
+ default: ''
811
+ },
812
+ ${propsDefinition}
813
+ },
814
+ computed: {
815
+ combinedClass() {
816
+ return [styles.${info.selector.replace(/^\./, "")}, this.className]
817
+ .filter(Boolean)
818
+ .join(' ');
819
+ }
820
+ }
821
+ };
822
+ </script>
823
+ `;
824
+ }
825
+ function generateSvelteComponent(info) {
826
+ return `<!-- Auto-generated by ChainCSS -->
827
+ <script>
828
+ import styles from './${info.name}.class.js';
829
+ import './${info.name}.css';
830
+
831
+ export let className = '';
832
+ export let tag = 'div';
833
+
834
+ $: combinedClass = [styles.${info.selector.replace(/^\./, "")}, className]
835
+ .filter(Boolean)
836
+ .join(' ');
837
+ </script>
838
+
839
+ <svelte:element this={tag} class={combinedClass}>
840
+ <slot />
841
+ </svelte:element>
842
+ `;
843
+ }
844
+ function generateSolidComponent(info) {
845
+ return `// Auto-generated by ChainCSS
846
+ import { splitProps } from 'solid-js';
847
+ import styles from './${info.name}.class.js';
848
+ import './${info.name}.css';
849
+
850
+ export function ${info.name}(props) {
851
+ const [local, others] = splitProps(props, ['class', 'children']);
852
+ const combinedClass = () => [styles.${info.selector.replace(/^\./, "")}, local.class]
853
+ .filter(Boolean)
854
+ .join(' ');
855
+
856
+ return (
857
+ <div class={combinedClass()} {...others}>
858
+ {local.children}
859
+ </div>
860
+ );
861
+ }
862
+ `;
863
+ }
864
+ function generateComponentCode(info) {
865
+ let framework = info.framework;
866
+ if (framework === "auto") {
867
+ framework = detectFrameworkFromProject();
868
+ }
869
+ switch (framework) {
870
+ case "react":
871
+ return generateReactComponent(info);
872
+ case "vue":
873
+ return generateVueComponent(info);
874
+ case "svelte":
875
+ return generateSvelteComponent(info);
876
+ case "solid":
877
+ return generateSolidComponent(info);
878
+ default:
879
+ return generateReactComponent(info);
880
+ }
881
+ }
583
882
  function getSourceLocation() {
584
883
  if (!enableSourceComments)
585
884
  return null;
@@ -661,12 +960,23 @@ function max(...values) {
661
960
  function clamp(min2, preferred, max2) {
662
961
  return `clamp(${min2}, ${preferred}, ${max2})`;
663
962
  }
963
+ function enableDebug(enable = true) {
964
+ debugMode = enable;
965
+ if (debugMode) {
966
+ console.log("\u{1F50D} ChainCSS Debug Mode Enabled");
967
+ }
968
+ }
664
969
  function setBreakpoints(breakpoints) {
665
970
  currentBreakpoints = { ...DEFAULT_BREAKPOINTS, ...breakpoints };
666
971
  }
667
972
  function setAtomicOptimizer(optimizer) {
668
973
  atomicOptimizer = optimizer;
669
974
  }
975
+ function configureAtomic(opts) {
976
+ if (atomicOptimizer) {
977
+ Object.assign(atomicOptimizer.options, opts);
978
+ }
979
+ }
670
980
  function createTokens(tokenValues) {
671
981
  const tokenObj = new DesignTokens(tokenValues);
672
982
  currentTokenContext = tokenObj;
@@ -716,6 +1026,25 @@ function chaincssv2(useTokens = true) {
716
1026
  };
717
1027
  const handler = {
718
1028
  get: (target, prop) => {
1029
+ if (prop === "componentName") {
1030
+ return (name) => {
1031
+ catcher._componentName = name;
1032
+ return proxy;
1033
+ };
1034
+ }
1035
+ if (prop === "component") {
1036
+ return (framework) => {
1037
+ catcher._generateComponent = true;
1038
+ catcher._framework = framework || "auto";
1039
+ return proxy;
1040
+ };
1041
+ }
1042
+ if (prop === "props") {
1043
+ return (propsDefinition) => {
1044
+ catcher._propsDefinition = propsDefinition;
1045
+ return proxy;
1046
+ };
1047
+ }
719
1048
  if (prop === "debug") {
720
1049
  return () => {
721
1050
  debugMode = true;
@@ -919,6 +1248,17 @@ function chaincssv2(useTokens = true) {
919
1248
  }
920
1249
  const mappedProp = shorthandMap[prop] || prop;
921
1250
  const cssProperty = mappedProp.replace(/([A-Z])/g, "-$1").toLowerCase();
1251
+ if (!shorthandMap[prop] && prop !== mappedProp) {
1252
+ const suggestion = getSuggestion(prop, validProperties);
1253
+ if (suggestion) {
1254
+ console.warn(`\u26A0\uFE0F ChainCSS: '${prop}' is not a recognized shorthand or CSS property. Did you mean '${suggestion}'?`);
1255
+ } else {
1256
+ console.warn(`\u26A0\uFE0F ChainCSS: '${prop}' is not a recognized shorthand or CSS property. It will be used as-is.`);
1257
+ }
1258
+ }
1259
+ if (debugMode && mappedProp !== prop) {
1260
+ console.log(` \u{1F504} Shortcut: .${prop}() \u2192 ${mappedProp}`);
1261
+ }
922
1262
  if (prop === "select") {
923
1263
  return function(selector) {
924
1264
  const nestedStyles = {};
@@ -1149,7 +1489,7 @@ function chaincssv2(useTokens = true) {
1149
1489
  const cssProp = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
1150
1490
  console.log(` \u{1F3A8} ${cssProp}: ${value}`);
1151
1491
  }
1152
- catcher[prop] = resolveToken(value, useTokens, tokenContext);
1492
+ catcher[mappedProp] = resolveToken(value, useTokens, tokenContext);
1153
1493
  return proxy;
1154
1494
  };
1155
1495
  }
@@ -5430,6 +5770,7 @@ export const classMap = {
5430
5770
  const componentExports = /* @__PURE__ */ new Map();
5431
5771
  const componentCSS = /* @__PURE__ */ new Map();
5432
5772
  let allCSS = "";
5773
+ const allComponentInfo = [];
5433
5774
  for (const file of components) {
5434
5775
  const sourceDir = path4.dirname(file);
5435
5776
  const baseName = path4.basename(file, ".chain.js");
@@ -5459,6 +5800,18 @@ export const classMap = {
5459
5800
  compiledObj[`${baseName}_${name}`] = processedStyle;
5460
5801
  compile(compiledObj);
5461
5802
  componentCSSContent += chain.cssOutput + "\n";
5803
+ if (styleDef._generateComponent) {
5804
+ const componentName = styleDef._componentName || name;
5805
+ const selector = styleDef.selectors?.[0] || `.${componentName.toLowerCase()}`;
5806
+ allComponentInfo.push({
5807
+ name: componentName,
5808
+ selector,
5809
+ styles: styleDef,
5810
+ propsDefinition: styleDef._propsDefinition,
5811
+ framework: styleDef._framework || "auto",
5812
+ outputDir: stylesDir
5813
+ });
5814
+ }
5462
5815
  }
5463
5816
  }
5464
5817
  if (code && componentCSSContent) {
@@ -5477,6 +5830,33 @@ export const classMap = {
5477
5830
  }
5478
5831
  }
5479
5832
  }
5833
+ if (allComponentInfo.length > 0) {
5834
+ const { generateComponentCode: generateComponentCode2 } = await Promise.resolve().then(() => (init_btt(), btt_exports));
5835
+ for (const componentInfo of allComponentInfo) {
5836
+ try {
5837
+ const componentCode = generateComponentCode2({
5838
+ name: componentInfo.name,
5839
+ selector: componentInfo.selector,
5840
+ styles: componentInfo.styles,
5841
+ propsDefinition: componentInfo.propsDefinition,
5842
+ framework: componentInfo.framework
5843
+ });
5844
+ let ext = ".tsx";
5845
+ if (componentInfo.framework === "vue")
5846
+ ext = ".vue";
5847
+ if (componentInfo.framework === "svelte")
5848
+ ext = ".svelte";
5849
+ const componentPath = path4.join(componentInfo.outputDir, `${componentInfo.name}${ext}`);
5850
+ fs3.writeFileSync(componentPath, componentCode);
5851
+ if (this.config.verbose) {
5852
+ console.log(` \u2713 Generated component: ${componentPath}`);
5853
+ }
5854
+ } catch (error) {
5855
+ console.warn(` \u26A0 Failed to generate component for ${componentInfo.name}:`, error);
5856
+ }
5857
+ }
5858
+ console.log(`\u2713 Generated ${allComponentInfo.length} framework component(s)`);
5859
+ }
5480
5860
  const globalStylesDir = path4.join(process.cwd(), "src/global-style");
5481
5861
  if (!fs3.existsSync(globalStylesDir)) {
5482
5862
  fs3.mkdirSync(globalStylesDir, { recursive: true });
@@ -5822,23 +6202,20 @@ program.command("init").description("Initialize ChainCSS configuration file").op
5822
6202
  return;
5823
6203
  }
5824
6204
  const config = `export default {
6205
+ // Look for .chain.js files in src/styles folders
6206
+ inputs: ['src/**/*.chain.js', 'src/**/styles/*.chain.js'],
6207
+
6208
+ // Output class files next to source files (in the same folder)
6209
+ output: 'src',
6210
+
6211
+ // Where to put the combined global.css
6212
+ globalOutput: 'src/global.css',
6213
+
6214
+ verbose: true
5825
6215
  components: 'src/**/*.chain.js'
5826
6216
  };`;
5827
6217
  writeFileSync(configPath, config);
5828
- const exampleStyle = `import { $ } from 'chaincssv2';
5829
-
5830
- export const button = $
5831
- .display('inline-block')
5832
- .padding('8px 16px')
5833
- .backgroundColor('#667eea')
5834
- .color('white')
5835
- .borderRadius('8px')
5836
- .cursor('pointer')
5837
- .$el('.btn');
5838
- `;
5839
- writeFileSync("src/styles/example.chain.js", exampleStyle);
5840
6218
  console.log(chalk3.green("\u2713 Created chaincss.config.js"));
5841
- console.log(chalk3.green("\u2713 Created src/styles/example.chain.js"));
5842
6219
  } catch (error) {
5843
6220
  handleError(error, "init");
5844
6221
  }
@@ -23,6 +23,14 @@ export declare function getStyleChanges(): StyleChange[];
23
23
  export declare function getStyleDiff(snapshotId1: string, snapshotId2: string): Record<string, any>;
24
24
  export declare function exportTimeline(): string;
25
25
  export declare function clearTimeline(): void;
26
+ interface ComponentInfo {
27
+ name: string;
28
+ selector: string;
29
+ styles: Record<string, any>;
30
+ propsDefinition?: Record<string, any>;
31
+ framework: 'react' | 'vue' | 'svelte' | 'solid' | 'auto';
32
+ }
33
+ export declare function generateComponentCode(info: ComponentInfo): string;
26
34
  export declare function setSourceComments(enabled: boolean): void;
27
35
  declare function calc(expression: string): string;
28
36
  declare function add(a: string | number, b: string | number): string;
@@ -1 +1 @@
1
- {"version":3,"file":"btt.d.ts","sourceRoot":"","sources":["../../src/compiler/btt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"btt.d.ts","sourceRoot":"","sources":["../../src/compiler/btt.ts"],"names":[],"mappings":"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"}
@@ -2838,6 +2838,72 @@ function takeSnapshot(selector, styles, source) {
2838
2838
  }
2839
2839
  return id;
2840
2840
  }
2841
+ function levenshteinDistance(a, b) {
2842
+ const matrix = [];
2843
+ for (let i = 0; i <= b.length; i++) {
2844
+ matrix[i] = [i];
2845
+ }
2846
+ for (let j = 0; j <= a.length; j++) {
2847
+ matrix[0][j] = j;
2848
+ }
2849
+ for (let i = 1; i <= b.length; i++) {
2850
+ for (let j = 1; j <= a.length; j++) {
2851
+ const cost = a[j - 1] === b[i - 1] ? 0 : 1;
2852
+ matrix[i][j] = Math.min(
2853
+ matrix[i - 1][j] + 1,
2854
+ matrix[i][j - 1] + 1,
2855
+ matrix[i - 1][j - 1] + cost
2856
+ );
2857
+ }
2858
+ }
2859
+ return matrix[b.length][a.length];
2860
+ }
2861
+ function getSuggestion(prop, validProperties = []) {
2862
+ const knownShorthands = Object.keys(shorthandMap);
2863
+ const commonCSS = [
2864
+ "display",
2865
+ "position",
2866
+ "margin",
2867
+ "padding",
2868
+ "color",
2869
+ "background",
2870
+ "background-color",
2871
+ "border",
2872
+ "border-radius",
2873
+ "width",
2874
+ "height",
2875
+ "font-size",
2876
+ "font-weight",
2877
+ "text-align",
2878
+ "cursor",
2879
+ "opacity",
2880
+ "z-index",
2881
+ "overflow",
2882
+ "flex",
2883
+ "grid",
2884
+ "gap",
2885
+ "justify-content",
2886
+ "align-items",
2887
+ "transition",
2888
+ "transform",
2889
+ "animation"
2890
+ ];
2891
+ const allKnown = [...knownShorthands, ...commonCSS, ...validProperties];
2892
+ const uniqueKnown = [...new Set(allKnown)];
2893
+ let bestMatch = "";
2894
+ let bestDistance = 4;
2895
+ for (const known of uniqueKnown) {
2896
+ const distance = levenshteinDistance(prop.toLowerCase(), known.toLowerCase());
2897
+ if (distance < bestDistance) {
2898
+ bestDistance = distance;
2899
+ bestMatch = known;
2900
+ }
2901
+ }
2902
+ if (bestMatch && bestDistance <= 3) {
2903
+ return bestMatch;
2904
+ }
2905
+ return "";
2906
+ }
2841
2907
  var enableSourceComments = true;
2842
2908
  function getSourceLocation() {
2843
2909
  if (!enableSourceComments)
@@ -3251,6 +3317,25 @@ function chaincssv2(useTokens = true) {
3251
3317
  };
3252
3318
  const handler = {
3253
3319
  get: (target, prop) => {
3320
+ if (prop === "componentName") {
3321
+ return (name) => {
3322
+ catcher._componentName = name;
3323
+ return proxy;
3324
+ };
3325
+ }
3326
+ if (prop === "component") {
3327
+ return (framework) => {
3328
+ catcher._generateComponent = true;
3329
+ catcher._framework = framework || "auto";
3330
+ return proxy;
3331
+ };
3332
+ }
3333
+ if (prop === "props") {
3334
+ return (propsDefinition) => {
3335
+ catcher._propsDefinition = propsDefinition;
3336
+ return proxy;
3337
+ };
3338
+ }
3254
3339
  if (prop === "debug") {
3255
3340
  return () => {
3256
3341
  debugMode = true;
@@ -3454,6 +3539,17 @@ function chaincssv2(useTokens = true) {
3454
3539
  }
3455
3540
  const mappedProp = shorthandMap[prop] || prop;
3456
3541
  const cssProperty = mappedProp.replace(/([A-Z])/g, "-$1").toLowerCase();
3542
+ if (!shorthandMap[prop] && prop !== mappedProp) {
3543
+ const suggestion = getSuggestion(prop, validProperties);
3544
+ if (suggestion) {
3545
+ console.warn(`\u26A0\uFE0F ChainCSS: '${prop}' is not a recognized shorthand or CSS property. Did you mean '${suggestion}'?`);
3546
+ } else {
3547
+ console.warn(`\u26A0\uFE0F ChainCSS: '${prop}' is not a recognized shorthand or CSS property. It will be used as-is.`);
3548
+ }
3549
+ }
3550
+ if (debugMode && mappedProp !== prop) {
3551
+ console.log(` \u{1F504} Shortcut: .${prop}() \u2192 ${mappedProp}`);
3552
+ }
3457
3553
  if (prop === "select") {
3458
3554
  return function(selector) {
3459
3555
  const nestedStyles = {};
@@ -3684,7 +3780,7 @@ function chaincssv2(useTokens = true) {
3684
3780
  const cssProp = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
3685
3781
  console.log(` \u{1F3A8} ${cssProp}: ${value}`);
3686
3782
  }
3687
- catcher[prop] = resolveToken(value, useTokens, tokenContext);
3783
+ catcher[mappedProp] = resolveToken(value, useTokens, tokenContext);
3688
3784
  return proxy;
3689
3785
  };
3690
3786
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/core/compiler.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAgB9F,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,QAAQ,CAA6B;gBAEjC,MAAM,GAAE,cAAmB;IAwBvC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAcnB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,aAAa;IAgCvE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,aAAa;IAmC7D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAuC5D,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBzF,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAuB1F,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ3E,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;KACxC,CAAC;IAqBI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA0F9C,YAAY;IAiB1B,OAAO,CAAC,IAAI;IASN,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhE,QAAQ,IAAI,GAAG;IAKf,UAAU,IAAI,IAAI;CAKnB;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAGlD"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/core/compiler.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAgB9F,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,QAAQ,CAA6B;gBAEjC,MAAM,GAAE,cAAmB;IAwBvC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAcnB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,aAAa;IAgCvE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,aAAa;IAmC7D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAuC5D,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBzF,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAuB1F,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ3E,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;KACxC,CAAC;IAqBI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA8J9C,YAAY;IAiB1B,OAAO,CAAC,IAAI;IASN,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhE,QAAQ,IAAI,GAAG;IAKf,UAAU,IAAI,IAAI;CAKnB;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAGlD"}
@@ -8,6 +8,10 @@ export interface StyleDefinition {
8
8
  atRules?: AtRule[];
9
9
  nestedRules?: NestedRule[];
10
10
  themes?: ThemeBlock[];
11
+ _componentName?: string;
12
+ _generateComponent?: boolean;
13
+ _framework?: 'react' | 'vue' | 'svelte' | 'solid' | 'auto';
14
+ _propsDefinition?: Record<string, any>;
11
15
  [cssProperty: string]: any;
12
16
  }
13
17
  export interface AtRule {