@schemyx/mcp 0.1.3 → 0.1.4

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.
@@ -183,6 +183,8 @@ function createBundle(rootPath, projectType, files) {
183
183
  const nodes = [];
184
184
  const edges = [];
185
185
  const reviewItems = [];
186
+ const componentStyleContext = createComponentStyleContext(files);
187
+ enrichUiElementsWithComponentStyles(files, componentStyleContext);
186
188
  const styleResolutionContext = createStyleResolutionContext(files);
187
189
  for (const file of files) {
188
190
  const fileSource = sourceInfo('core.files', 'high', [`path:${file.relPath}`], file);
@@ -722,6 +724,186 @@ function createBundle(rootPath, projectType, files) {
722
724
  detected: detectProjectFacts(files),
723
725
  };
724
726
  }
727
+ function createComponentStyleContext(files) {
728
+ const byName = new Map();
729
+ const byHelper = new Map();
730
+ for (const file of files) {
731
+ for (const definition of file.componentStyleDefinitions) {
732
+ if (!byName.has(definition.name)) {
733
+ byName.set(definition.name, definition);
734
+ }
735
+ if (definition.styleHelper && !byHelper.has(definition.styleHelper)) {
736
+ byHelper.set(definition.styleHelper, definition);
737
+ }
738
+ }
739
+ }
740
+ return { byName, byHelper };
741
+ }
742
+ function enrichUiElementsWithComponentStyles(files, context) {
743
+ for (const file of files) {
744
+ file.uiElements = file.uiElements.map((element) => enrichUiElementWithComponentStyles(element, context));
745
+ file.uiElements = file.uiElements.map((element) => ({
746
+ ...element,
747
+ childSummary: element.childSummary?.map((child) => enrichUiChildWithComponentStyles(child, context)),
748
+ }));
749
+ file.classReferences = (0, utils_1.unique)([
750
+ ...file.classReferences,
751
+ ...file.uiElements.flatMap((element) => element.classes),
752
+ ...file.uiElements.flatMap((element) => element.defaultClasses ?? []),
753
+ ]).slice(0, 500);
754
+ file.tailwindUtilities = (0, utils_1.unique)([
755
+ ...file.tailwindUtilities,
756
+ ...file.uiElements.flatMap((element) => element.classes),
757
+ ...file.uiElements.flatMap((element) => element.defaultClasses ?? []),
758
+ ]).slice(0, 160);
759
+ }
760
+ }
761
+ function enrichUiElementWithComponentStyles(element, context) {
762
+ const resolved = resolveComponentStyleClasses(element.originalTag, element.styleHelper, element.variants ?? element.styleHelperVariants, context);
763
+ if (!resolved.classes.length) {
764
+ return element;
765
+ }
766
+ const defaultClasses = mergeTailwindConflictClasses([
767
+ ...resolved.defaultClasses,
768
+ ...(element.defaultClasses ?? []),
769
+ ]);
770
+ const classes = mergeTailwindConflictClasses([
771
+ ...resolved.classes,
772
+ ...element.classes,
773
+ ...defaultClasses,
774
+ ]);
775
+ return {
776
+ ...element,
777
+ classes,
778
+ defaultClasses,
779
+ classGroups: (0, extractors_1.groupTailwindClasses)(classes),
780
+ styleHelper: element.styleHelper ?? resolved.styleHelper,
781
+ ...(element.styleHelperVariants ?? resolved.styleHelperVariants
782
+ ? {
783
+ styleHelperVariants: {
784
+ ...(resolved.styleHelperVariants ?? {}),
785
+ ...(element.styleHelperVariants ?? {}),
786
+ },
787
+ }
788
+ : {}),
789
+ };
790
+ }
791
+ function enrichUiChildWithComponentStyles(child, context) {
792
+ const resolved = resolveComponentStyleClasses(child.originalTag, child.styleHelper, child.variants ?? child.styleHelperVariants, context);
793
+ if (!resolved.classes.length) {
794
+ return child;
795
+ }
796
+ const defaultClasses = mergeTailwindConflictClasses([
797
+ ...resolved.defaultClasses,
798
+ ...(child.defaultClasses ?? []),
799
+ ]);
800
+ const classes = mergeTailwindConflictClasses([
801
+ ...resolved.classes,
802
+ ...child.classes,
803
+ ...defaultClasses,
804
+ ]);
805
+ return {
806
+ ...child,
807
+ classes,
808
+ defaultClasses,
809
+ styleHelper: child.styleHelper ?? resolved.styleHelper,
810
+ ...(child.styleHelperVariants ?? resolved.styleHelperVariants
811
+ ? {
812
+ styleHelperVariants: {
813
+ ...(resolved.styleHelperVariants ?? {}),
814
+ ...(child.styleHelperVariants ?? {}),
815
+ },
816
+ }
817
+ : {}),
818
+ };
819
+ }
820
+ function resolveComponentStyleClasses(componentName, styleHelperName, variants, context) {
821
+ const wrapper = componentName ? context.byName.get(componentName) : undefined;
822
+ const helperName = styleHelperName ?? wrapper?.styleHelper;
823
+ const helper = helperName ? context.byName.get(helperName) : undefined;
824
+ const helperClasses = helper
825
+ ? resolveComponentDefinitionClasses(helper, variants)
826
+ : { classes: [], defaultClasses: [] };
827
+ const wrapperClasses = wrapper
828
+ ? resolveComponentDefinitionClasses(wrapper, variants)
829
+ : { classes: [], defaultClasses: [] };
830
+ const normalizedVariants = normalizeVariantRecord(variants);
831
+ return {
832
+ classes: (0, utils_1.unique)([...wrapperClasses.classes, ...helperClasses.classes]),
833
+ defaultClasses: (0, utils_1.unique)([...wrapperClasses.defaultClasses, ...helperClasses.defaultClasses]),
834
+ ...(helperName ? { styleHelper: helperName } : {}),
835
+ ...(Object.keys(normalizedVariants).length ? { styleHelperVariants: normalizedVariants } : {}),
836
+ };
837
+ }
838
+ function resolveComponentDefinitionClasses(definition, variants) {
839
+ const normalizedVariants = normalizeVariantRecord(variants);
840
+ const defaultClasses = new Set(definition.baseClasses);
841
+ const classes = new Set(definition.classes);
842
+ for (const [variantName, variantMap] of Object.entries(definition.variants)) {
843
+ const requestedVariant = normalizedVariants[variantName] ?? definition.defaultVariants[variantName];
844
+ if (requestedVariant && variantMap[requestedVariant]) {
845
+ for (const className of variantMap[requestedVariant]) {
846
+ defaultClasses.add(className);
847
+ classes.add(className);
848
+ }
849
+ }
850
+ }
851
+ return {
852
+ classes: Array.from(classes),
853
+ defaultClasses: Array.from(defaultClasses),
854
+ };
855
+ }
856
+ function normalizeVariantRecord(variants) {
857
+ const normalized = {};
858
+ for (const [key, value] of Object.entries(variants ?? {})) {
859
+ if (typeof value === 'string' && /^[A-Za-z0-9_-]+$/.test(value)) {
860
+ normalized[key] = value;
861
+ }
862
+ }
863
+ return normalized;
864
+ }
865
+ function mergeTailwindConflictClasses(classes) {
866
+ const result = [];
867
+ const keyIndexes = new Map();
868
+ for (const className of classes) {
869
+ const key = tailwindConflictKey(className);
870
+ if (key && keyIndexes.has(key)) {
871
+ result[keyIndexes.get(key)] = className;
872
+ continue;
873
+ }
874
+ if (key) {
875
+ keyIndexes.set(key, result.length);
876
+ }
877
+ result.push(className);
878
+ }
879
+ return (0, utils_1.unique)(result);
880
+ }
881
+ function tailwindConflictKey(className) {
882
+ const segments = className.split(':');
883
+ const base = segments.pop() ?? className;
884
+ const prefix = segments.join(':');
885
+ const keyPrefix = prefix ? `${prefix}|` : '';
886
+ if (/^-?bg-/.test(base)) {
887
+ return `${keyPrefix}bg`;
888
+ }
889
+ if (/^rounded(?:-|$|\[)/.test(base)) {
890
+ const side = base.match(/^rounded(?:-([trbl]|tl|tr|br|bl|s|e|ss|se|ee|es))?(?:-|$|\[)/)?.[1];
891
+ return `${keyPrefix}rounded:${side ?? 'all'}`;
892
+ }
893
+ if (/^border-(?:\[[^\]]+\]|transparent|current|black|white|[a-z]+-\d{2,3}|[a-z][a-z0-9-]*)$/.test(base)) {
894
+ return `${keyPrefix}border-color`;
895
+ }
896
+ if (/^text-(?:\[[^\]]+\]|transparent|current|black|white|foreground|muted-foreground|card-foreground|primary-foreground|secondary-foreground|[a-z]+-\d{2,3})$/.test(base)) {
897
+ return `${keyPrefix}text-color`;
898
+ }
899
+ if (/^text-(?:xs|sm|base|lg|xl|[2-9]xl|\[[^\]]+\])$/.test(base)) {
900
+ return `${keyPrefix}text-size`;
901
+ }
902
+ if (/^shadow(?:-|$|\[)/.test(base)) {
903
+ return `${keyPrefix}shadow`;
904
+ }
905
+ return undefined;
906
+ }
725
907
  function addEntry(entries, usedKeys, entry) {
726
908
  let key = entry.key;
727
909
  if (usedKeys.has(key)) {