@pandacss/generator 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -94,6 +94,10 @@ declare const getEngine: (conf: ConfigResultWithHooks) => {
94
94
  conditions: _pandacss_core.Conditions;
95
95
  createSheetContext: () => _pandacss_core.StylesheetContext;
96
96
  createSheet: (options?: Pick<_pandacss_core.StylesheetOptions, "content"> | undefined) => _pandacss_core.Stylesheet;
97
+ layers: _pandacss_types.CascadeLayers;
98
+ isValidLayerRule: (layerRule: string) => boolean;
99
+ layerString: string;
100
+ layerNames: string[];
97
101
  hooks: _pandacss_types.PandaHookable;
98
102
  path: string;
99
103
  config: _pandacss_types_dist_shared.UnwrapExtend<_pandacss_types.RequiredBy<_pandacss_types.Config, "outdir" | "cwd" | "include">>;
@@ -320,6 +324,10 @@ declare const createGenerator: (conf: ConfigResultWithHooks) => {
320
324
  conditions: _pandacss_core.Conditions;
321
325
  createSheetContext: () => _pandacss_core.StylesheetContext;
322
326
  createSheet: (options?: Pick<_pandacss_core.StylesheetOptions, "content"> | undefined) => _pandacss_core.Stylesheet;
327
+ layers: _pandacss_types.CascadeLayers;
328
+ isValidLayerRule: (layerRule: string) => boolean;
329
+ layerString: string;
330
+ layerNames: string[];
323
331
  hooks: _pandacss_types.PandaHookable;
324
332
  path: string;
325
333
  config: _pandacss_types_dist_shared.UnwrapExtend<_pandacss_types.RequiredBy<_pandacss_types.Config, "outdir" | "cwd" | "include">>;
package/dist/index.d.ts CHANGED
@@ -94,6 +94,10 @@ declare const getEngine: (conf: ConfigResultWithHooks) => {
94
94
  conditions: _pandacss_core.Conditions;
95
95
  createSheetContext: () => _pandacss_core.StylesheetContext;
96
96
  createSheet: (options?: Pick<_pandacss_core.StylesheetOptions, "content"> | undefined) => _pandacss_core.Stylesheet;
97
+ layers: _pandacss_types.CascadeLayers;
98
+ isValidLayerRule: (layerRule: string) => boolean;
99
+ layerString: string;
100
+ layerNames: string[];
97
101
  hooks: _pandacss_types.PandaHookable;
98
102
  path: string;
99
103
  config: _pandacss_types_dist_shared.UnwrapExtend<_pandacss_types.RequiredBy<_pandacss_types.Config, "outdir" | "cwd" | "include">>;
@@ -320,6 +324,10 @@ declare const createGenerator: (conf: ConfigResultWithHooks) => {
320
324
  conditions: _pandacss_core.Conditions;
321
325
  createSheetContext: () => _pandacss_core.StylesheetContext;
322
326
  createSheet: (options?: Pick<_pandacss_core.StylesheetOptions, "content"> | undefined) => _pandacss_core.Stylesheet;
327
+ layers: _pandacss_types.CascadeLayers;
328
+ isValidLayerRule: (layerRule: string) => boolean;
329
+ layerString: string;
330
+ layerNames: string[];
323
331
  hooks: _pandacss_types.PandaHookable;
324
332
  path: string;
325
333
  config: _pandacss_types_dist_shared.UnwrapExtend<_pandacss_types.RequiredBy<_pandacss_types.Config, "outdir" | "cwd" | "include">>;
package/dist/index.js CHANGED
@@ -206,7 +206,7 @@ function generateKeyframeCss(ctx) {
206
206
  var css = String.raw;
207
207
  function generateResetCss(ctx, scope = "") {
208
208
  const selector = scope ? `${scope} ` : "";
209
- const output = css`@layer reset {
209
+ const output = css`@layer ${ctx.layers.reset} {
210
210
  ${selector}* {
211
211
  margin: 0;
212
212
  padding: 0;
@@ -473,7 +473,7 @@ function generateTokenCss(ctx) {
473
473
  }
474
474
  }
475
475
  const css2 = results.join("\n\n");
476
- const output = `@layer tokens {
476
+ const output = `@layer ${ctx.layers.tokens} {
477
477
  ${(0, import_core3.prettifyCss)(cleanupSelectors(css2, root))}
478
478
  }
479
479
  `;
@@ -654,13 +654,13 @@ function generateCssFn(ctx) {
654
654
  return result;
655
655
  }).join(",")}"
656
656
 
657
- const classNames = new Map()
657
+ const classNameByProp = new Map()
658
658
  ${utility.hasShorthand ? import_outdent4.outdent`
659
659
  const shorthands = new Map()
660
660
  utilities.split(',').forEach((utility) => {
661
661
  const [prop, meta] = utility.split(':')
662
662
  const [className, ...shorthandList] = meta.split('/')
663
- classNames.set(prop, className)
663
+ classNameByProp.set(prop, className)
664
664
  if (shorthandList.length) {
665
665
  shorthandList.forEach((shorthand) => {
666
666
  shorthands.set(shorthand === '1' ? className : shorthand, prop)
@@ -672,7 +672,7 @@ function generateCssFn(ctx) {
672
672
  ` : import_outdent4.outdent`
673
673
  utilities.split(',').forEach((utility) => {
674
674
  const [prop, className] = utility.split(':')
675
- classNames.set(prop, className)
675
+ classNameByProp.set(prop, className)
676
676
  })
677
677
  `}
678
678
 
@@ -687,15 +687,21 @@ function generateCssFn(ctx) {
687
687
  ${prefix ? "prefix: " + JSON.stringify(prefix) + "," : ""}
688
688
  transform: ${utility.hasShorthand ? `(prop, value) => {
689
689
  const key = resolveShorthand(prop)
690
- const propKey = classNames.get(key) || hypenateProperty(key)
690
+ const propKey = classNameByProp.get(key) || hypenateProperty(key)
691
691
  return { className: \`\${propKey}${separator}\${withoutSpace(value)}\` }
692
- }` : `(key, value) => ({ className: \`\${classNames.get(key) || hypenateProperty(key)}${separator}\${withoutSpace(value)}\` })`},
692
+ }` : `(key, value) => ({ className: \`\${classNameByProp.get(key) || hypenateProperty(key)}${separator}\${withoutSpace(value)}\` })`},
693
693
  ${utility.hasShorthand ? "hasShorthand: true," : ""}
694
694
  resolveShorthand: ${utility.hasShorthand ? "resolveShorthand" : "prop => prop"},
695
695
  }
696
696
  }
697
697
 
698
- export const css = createCss(context)
698
+ const cssFn = createCss(context)
699
+ export const cssCache = new Map()
700
+ export const css = (styles) => {
701
+ const classNames = cssFn(styles)
702
+ cssCache.set(classNames, styles)
703
+ return classNames
704
+ }
699
705
  css.raw = (styles) => styles
700
706
 
701
707
  export const { mergeCss, assignCss } = createMergeCss(context)
@@ -833,23 +839,34 @@ function generateCvaFn(ctx) {
833
839
 
834
840
  // src/artifacts/js/cx.ts
835
841
  var import_outdent7 = __toESM(require("outdent"));
836
- function generateCx() {
842
+ function generateCx(ctx) {
837
843
  return {
838
844
  js: import_outdent7.default`
845
+ ${ctx.file.import("cssCache, css, mergeCss", "./css")}
846
+
839
847
  function cx() {
848
+ const objs = []
840
849
  let str = '',
841
850
  i = 0,
842
851
  arg
843
-
852
+
844
853
  for (; i < arguments.length; ) {
845
- if ((arg = arguments[i++]) && typeof arg === 'string') {
846
- str && (str += ' ')
847
- str += arg
854
+ arg = arguments[i++]
855
+ if (!arg || typeof arg !== 'string') continue
856
+
857
+ if (cssCache.has(arg)) {
858
+ objs.push(cssCache.get(arg))
859
+ continue
848
860
  }
861
+
862
+ str && (str += ' ')
863
+ str += arg.toString()
849
864
  }
850
- return str
865
+
866
+ const merged = mergeCss(...objs)
867
+ return [css(merged), str].join(' ')
851
868
  }
852
-
869
+
853
870
  export { cx }
854
871
  `,
855
872
  dts: import_outdent7.default`
@@ -901,14 +918,14 @@ function generateHelpers(ctx) {
901
918
 
902
919
  // src/artifacts/generated/is-valid-prop.mjs.json
903
920
  var is_valid_prop_mjs_default = {
904
- content: '// src/index.ts\nvar userGeneratedStr = "";\nvar userGenerated = userGeneratedStr.split(",");\nvar cssPropertiesStr = "WebkitAppearance,WebkitBorderBefore,WebkitBorderBeforeColor,WebkitBorderBeforeStyle,WebkitBorderBeforeWidth,WebkitBoxReflect,WebkitLineClamp,WebkitMask,WebkitMaskAttachment,WebkitMaskClip,WebkitMaskComposite,WebkitMaskImage,WebkitMaskOrigin,WebkitMaskPosition,WebkitMaskPositionX,WebkitMaskPositionY,WebkitMaskRepeat,WebkitMaskRepeatX,WebkitMaskRepeatY,WebkitMaskSize,WebkitOverflowScrolling,WebkitTapHighlightColor,WebkitTextFillColor,WebkitTextStroke,WebkitTextStrokeColor,WebkitTextStrokeWidth,WebkitTouchCallout,WebkitUserModify,accentColor,alignContent,alignItems,alignSelf,alignTracks,all,animation,animationComposition,animationDelay,animationDirection,animationDuration,animationFillMode,animationIterationCount,animationName,animationPlayState,animationTimingFunction,animationTimeline,appearance,aspectRatio,azimuth,backdropFilter,backfaceVisibility,background,backgroundAttachment,backgroundBlendMode,backgroundClip,backgroundColor,backgroundImage,backgroundOrigin,backgroundPosition,backgroundPositionX,backgroundPositionY,backgroundRepeat,backgroundSize,blockOverflow,blockSize,border,borderBlock,borderBlockColor,borderBlockStyle,borderBlockWidth,borderBlockEnd,borderBlockEndColor,borderBlockEndStyle,borderBlockEndWidth,borderBlockStart,borderBlockStartColor,borderBlockStartStyle,borderBlockStartWidth,borderBottom,borderBottomColor,borderBottomLeftRadius,borderBottomRightRadius,borderBottomStyle,borderBottomWidth,borderCollapse,borderColor,borderEndEndRadius,borderEndStartRadius,borderImage,borderImageOutset,borderImageRepeat,borderImageSlice,borderImageSource,borderImageWidth,borderInline,borderInlineEnd,borderInlineColor,borderInlineStyle,borderInlineWidth,borderInlineEndColor,borderInlineEndStyle,borderInlineEndWidth,borderInlineStart,borderInlineStartColor,borderInlineStartStyle,borderInlineStartWidth,borderLeft,borderLeftColor,borderLeftStyle,borderLeftWidth,borderRadius,borderRight,borderRightColor,borderRightStyle,borderRightWidth,borderSpacing,borderStartEndRadius,borderStartStartRadius,borderStyle,borderTop,borderTopColor,borderTopLeftRadius,borderTopRightRadius,borderTopStyle,borderTopWidth,borderWidth,bottom,boxAlign,boxDecorationBreak,boxDirection,boxFlex,boxFlexGroup,boxLines,boxOrdinalGroup,boxOrient,boxPack,boxShadow,boxSizing,breakAfter,breakBefore,breakInside,captionSide,caret,caretColor,caretShape,clear,clip,clipPath,color,colorScheme,columnCount,columnFill,columnGap,columnRule,columnRuleColor,columnRuleStyle,columnRuleWidth,columnSpan,columnWidth,columns,contain,containIntrinsicSize,containIntrinsicBlockSize,containIntrinsicHeight,containIntrinsicInlineSize,containIntrinsicWidth,container,containerName,containerType,content,contentVisibility,counterIncrement,counterReset,counterSet,cursor,direction,display,emptyCells,filter,flex,flexBasis,flexDirection,flexFlow,flexGrow,flexShrink,flexWrap,float,font,fontFamily,fontFeatureSettings,fontKerning,fontLanguageOverride,fontOpticalSizing,fontPalette,fontVariationSettings,fontSize,fontSizeAdjust,fontSmooth,fontStretch,fontStyle,fontSynthesis,fontVariant,fontVariantAlternates,fontVariantCaps,fontVariantEastAsian,fontVariantEmoji,fontVariantLigatures,fontVariantNumeric,fontVariantPosition,fontWeight,forcedColorAdjust,gap,grid,gridArea,gridAutoColumns,gridAutoFlow,gridAutoRows,gridColumn,gridColumnEnd,gridColumnGap,gridColumnStart,gridGap,gridRow,gridRowEnd,gridRowGap,gridRowStart,gridTemplate,gridTemplateAreas,gridTemplateColumns,gridTemplateRows,hangingPunctuation,height,hyphenateCharacter,hyphenateLimitChars,hyphens,imageOrientation,imageRendering,imageResolution,imeMode,initialLetter,initialLetterAlign,inlineSize,inputSecurity,inset,insetBlock,insetBlockEnd,insetBlockStart,insetInline,insetInlineEnd,insetInlineStart,isolation,justifyContent,justifyItems,justifySelf,justifyTracks,left,letterSpacing,lineBreak,lineClamp,lineHeight,lineHeightStep,listStyle,listStyleImage,listStylePosition,listStyleType,margin,marginBlock,marginBlockEnd,marginBlockStart,marginBottom,marginInline,marginInlineEnd,marginInlineStart,marginLeft,marginRight,marginTop,marginTrim,mask,maskBorder,maskBorderMode,maskBorderOutset,maskBorderRepeat,maskBorderSlice,maskBorderSource,maskBorderWidth,maskClip,maskComposite,maskImage,maskMode,maskOrigin,maskPosition,maskRepeat,maskSize,maskType,masonryAutoFlow,mathDepth,mathShift,mathStyle,maxBlockSize,maxHeight,maxInlineSize,maxLines,maxWidth,minBlockSize,minHeight,minInlineSize,minWidth,mixBlendMode,objectFit,objectPosition,offset,offsetAnchor,offsetDistance,offsetPath,offsetPosition,offsetRotate,opacity,order,orphans,outline,outlineColor,outlineOffset,outlineStyle,outlineWidth,overflow,overflowAnchor,overflowBlock,overflowClipBox,overflowClipMargin,overflowInline,overflowWrap,overflowX,overflowY,overscrollBehavior,overscrollBehaviorBlock,overscrollBehaviorInline,overscrollBehaviorX,overscrollBehaviorY,padding,paddingBlock,paddingBlockEnd,paddingBlockStart,paddingBottom,paddingInline,paddingInlineEnd,paddingInlineStart,paddingLeft,paddingRight,paddingTop,page,pageBreakAfter,pageBreakBefore,pageBreakInside,paintOrder,perspective,perspectiveOrigin,placeContent,placeItems,placeSelf,pointerEvents,position,printColorAdjust,quotes,resize,right,rotate,rowGap,rubyAlign,rubyMerge,rubyPosition,scale,scrollbarColor,scrollbarGutter,scrollbarWidth,scrollBehavior,scrollMargin,scrollMarginBlock,scrollMarginBlockStart,scrollMarginBlockEnd,scrollMarginBottom,scrollMarginInline,scrollMarginInlineStart,scrollMarginInlineEnd,scrollMarginLeft,scrollMarginRight,scrollMarginTop,scrollPadding,scrollPaddingBlock,scrollPaddingBlockStart,scrollPaddingBlockEnd,scrollPaddingBottom,scrollPaddingInline,scrollPaddingInlineStart,scrollPaddingInlineEnd,scrollPaddingLeft,scrollPaddingRight,scrollPaddingTop,scrollSnapAlign,scrollSnapCoordinate,scrollSnapDestination,scrollSnapPointsX,scrollSnapPointsY,scrollSnapStop,scrollSnapType,scrollSnapTypeX,scrollSnapTypeY,scrollTimeline,scrollTimelineAxis,scrollTimelineName,shapeImageThreshold,shapeMargin,shapeOutside,tabSize,tableLayout,textAlign,textAlignLast,textCombineUpright,textDecoration,textDecorationColor,textDecorationLine,textDecorationSkip,textDecorationSkipInk,textDecorationStyle,textDecorationThickness,textEmphasis,textEmphasisColor,textEmphasisPosition,textEmphasisStyle,textIndent,textJustify,textOrientation,textOverflow,textRendering,textShadow,textSizeAdjust,textTransform,textUnderlineOffset,textUnderlinePosition,top,touchAction,transform,transformBox,transformOrigin,transformStyle,transition,transitionDelay,transitionDuration,transitionProperty,transitionTimingFunction,translate,unicodeBidi,userSelect,verticalAlign,viewTransitionName,visibility,whiteSpace,widows,width,willChange,wordBreak,wordSpacing,wordWrap,writingMode,zIndex,zoom";\nvar allCssProperties = cssPropertiesStr.split(",").concat(userGenerated);\nvar properties = new Map(allCssProperties.map((prop) => [prop, true]));\nfunction memo(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (arg) => {\n if (cache[arg] === void 0)\n cache[arg] = fn(arg);\n return cache[arg];\n };\n}\nvar selectorRegex = /&|@/;\nvar isCssProperty = /* @__PURE__ */ memo((prop) => {\n return properties.has(prop) || prop.startsWith("--") || selectorRegex.test(prop);\n});\nexport {\n allCssProperties,\n isCssProperty\n};\n'
921
+ content: '// src/index.ts\nvar userGeneratedStr = "";\nvar userGenerated = userGeneratedStr.split(",");\nvar cssPropertiesStr = "WebkitAppearance,WebkitBorderBefore,WebkitBorderBeforeColor,WebkitBorderBeforeStyle,WebkitBorderBeforeWidth,WebkitBoxReflect,WebkitLineClamp,WebkitMask,WebkitMaskAttachment,WebkitMaskClip,WebkitMaskComposite,WebkitMaskImage,WebkitMaskOrigin,WebkitMaskPosition,WebkitMaskPositionX,WebkitMaskPositionY,WebkitMaskRepeat,WebkitMaskRepeatX,WebkitMaskRepeatY,WebkitMaskSize,WebkitOverflowScrolling,WebkitTapHighlightColor,WebkitTextFillColor,WebkitTextStroke,WebkitTextStrokeColor,WebkitTextStrokeWidth,WebkitTouchCallout,WebkitUserModify,accentColor,alignContent,alignItems,alignSelf,alignTracks,all,animation,animationComposition,animationDelay,animationDirection,animationDuration,animationFillMode,animationIterationCount,animationName,animationPlayState,animationTimingFunction,animationTimeline,appearance,aspectRatio,azimuth,backdropFilter,backfaceVisibility,background,backgroundAttachment,backgroundBlendMode,backgroundClip,backgroundColor,backgroundImage,backgroundOrigin,backgroundPosition,backgroundPositionX,backgroundPositionY,backgroundRepeat,backgroundSize,blockOverflow,blockSize,border,borderBlock,borderBlockColor,borderBlockStyle,borderBlockWidth,borderBlockEnd,borderBlockEndColor,borderBlockEndStyle,borderBlockEndWidth,borderBlockStart,borderBlockStartColor,borderBlockStartStyle,borderBlockStartWidth,borderBottom,borderBottomColor,borderBottomLeftRadius,borderBottomRightRadius,borderBottomStyle,borderBottomWidth,borderCollapse,borderColor,borderEndEndRadius,borderEndStartRadius,borderImage,borderImageOutset,borderImageRepeat,borderImageSlice,borderImageSource,borderImageWidth,borderInline,borderInlineEnd,borderInlineColor,borderInlineStyle,borderInlineWidth,borderInlineEndColor,borderInlineEndStyle,borderInlineEndWidth,borderInlineStart,borderInlineStartColor,borderInlineStartStyle,borderInlineStartWidth,borderLeft,borderLeftColor,borderLeftStyle,borderLeftWidth,borderRadius,borderRight,borderRightColor,borderRightStyle,borderRightWidth,borderSpacing,borderStartEndRadius,borderStartStartRadius,borderStyle,borderTop,borderTopColor,borderTopLeftRadius,borderTopRightRadius,borderTopStyle,borderTopWidth,borderWidth,bottom,boxAlign,boxDecorationBreak,boxDirection,boxFlex,boxFlexGroup,boxLines,boxOrdinalGroup,boxOrient,boxPack,boxShadow,boxSizing,breakAfter,breakBefore,breakInside,captionSide,caret,caretColor,caretShape,clear,clip,clipPath,color,colorScheme,columnCount,columnFill,columnGap,columnRule,columnRuleColor,columnRuleStyle,columnRuleWidth,columnSpan,columnWidth,columns,contain,containIntrinsicSize,containIntrinsicBlockSize,containIntrinsicHeight,containIntrinsicInlineSize,containIntrinsicWidth,container,containerName,containerType,content,contentVisibility,counterIncrement,counterReset,counterSet,cursor,direction,display,emptyCells,filter,flex,flexBasis,flexDirection,flexFlow,flexGrow,flexShrink,flexWrap,float,font,fontFamily,fontFeatureSettings,fontKerning,fontLanguageOverride,fontOpticalSizing,fontPalette,fontVariationSettings,fontSize,fontSizeAdjust,fontSmooth,fontStretch,fontStyle,fontSynthesis,fontVariant,fontVariantAlternates,fontVariantCaps,fontVariantEastAsian,fontVariantEmoji,fontVariantLigatures,fontVariantNumeric,fontVariantPosition,fontWeight,forcedColorAdjust,gap,grid,gridArea,gridAutoColumns,gridAutoFlow,gridAutoRows,gridColumn,gridColumnEnd,gridColumnGap,gridColumnStart,gridGap,gridRow,gridRowEnd,gridRowGap,gridRowStart,gridTemplate,gridTemplateAreas,gridTemplateColumns,gridTemplateRows,hangingPunctuation,height,hyphenateCharacter,hyphenateLimitChars,hyphens,imageOrientation,imageRendering,imageResolution,imeMode,initialLetter,initialLetterAlign,inlineSize,inputSecurity,inset,insetBlock,insetBlockEnd,insetBlockStart,insetInline,insetInlineEnd,insetInlineStart,isolation,justifyContent,justifyItems,justifySelf,justifyTracks,left,letterSpacing,lineBreak,lineClamp,lineHeight,lineHeightStep,listStyle,listStyleImage,listStylePosition,listStyleType,margin,marginBlock,marginBlockEnd,marginBlockStart,marginBottom,marginInline,marginInlineEnd,marginInlineStart,marginLeft,marginRight,marginTop,marginTrim,mask,maskBorder,maskBorderMode,maskBorderOutset,maskBorderRepeat,maskBorderSlice,maskBorderSource,maskBorderWidth,maskClip,maskComposite,maskImage,maskMode,maskOrigin,maskPosition,maskRepeat,maskSize,maskType,masonryAutoFlow,mathDepth,mathShift,mathStyle,maxBlockSize,maxHeight,maxInlineSize,maxLines,maxWidth,minBlockSize,minHeight,minInlineSize,minWidth,mixBlendMode,objectFit,objectPosition,offset,offsetAnchor,offsetDistance,offsetPath,offsetPosition,offsetRotate,opacity,order,orphans,outline,outlineColor,outlineOffset,outlineStyle,outlineWidth,overflow,overflowAnchor,overflowBlock,overflowClipBox,overflowClipMargin,overflowInline,overflowWrap,overflowX,overflowY,overscrollBehavior,overscrollBehaviorBlock,overscrollBehaviorInline,overscrollBehaviorX,overscrollBehaviorY,padding,paddingBlock,paddingBlockEnd,paddingBlockStart,paddingBottom,paddingInline,paddingInlineEnd,paddingInlineStart,paddingLeft,paddingRight,paddingTop,page,pageBreakAfter,pageBreakBefore,pageBreakInside,paintOrder,perspective,perspectiveOrigin,placeContent,placeItems,placeSelf,pointerEvents,position,printColorAdjust,quotes,resize,right,rotate,rowGap,rubyAlign,rubyMerge,rubyPosition,scale,scrollbarColor,scrollbarGutter,scrollbarWidth,scrollBehavior,scrollMargin,scrollMarginBlock,scrollMarginBlockStart,scrollMarginBlockEnd,scrollMarginBottom,scrollMarginInline,scrollMarginInlineStart,scrollMarginInlineEnd,scrollMarginLeft,scrollMarginRight,scrollMarginTop,scrollPadding,scrollPaddingBlock,scrollPaddingBlockStart,scrollPaddingBlockEnd,scrollPaddingBottom,scrollPaddingInline,scrollPaddingInlineStart,scrollPaddingInlineEnd,scrollPaddingLeft,scrollPaddingRight,scrollPaddingTop,scrollSnapAlign,scrollSnapCoordinate,scrollSnapDestination,scrollSnapPointsX,scrollSnapPointsY,scrollSnapStop,scrollSnapType,scrollSnapTypeX,scrollSnapTypeY,scrollTimeline,scrollTimelineAxis,scrollTimelineName,shapeImageThreshold,shapeMargin,shapeOutside,tabSize,tableLayout,textAlign,textAlignLast,textCombineUpright,textDecoration,textDecorationColor,textDecorationLine,textDecorationSkip,textDecorationSkipInk,textDecorationStyle,textDecorationThickness,textEmphasis,textEmphasisColor,textEmphasisPosition,textEmphasisStyle,textIndent,textJustify,textOrientation,textOverflow,textRendering,textShadow,textSizeAdjust,textTransform,textUnderlineOffset,textUnderlinePosition,top,touchAction,transform,transformBox,transformOrigin,transformStyle,transition,transitionDelay,transitionDuration,transitionProperty,transitionTimingFunction,translate,unicodeBidi,userSelect,verticalAlign,viewTransitionName,visibility,whiteSpace,widows,width,willChange,wordBreak,wordSpacing,wordWrap,writingMode,zIndex,zoom,alignmentBaseline,baselineShift,clipRule,colorInterpolation,colorRendering,dominantBaseline,fill,fillOpacity,fillRule,floodColor,floodOpacity,glyphOrientationVertical,lightingColor,marker,markerEnd,markerMid,markerStart,shapeRendering,stopColor,stopOpacity,stroke,strokeDasharray,strokeDashoffset,strokeLinecap,strokeLinejoin,strokeMiterlimit,strokeOpacity,strokeWidth,textAnchor,vectorEffect";\nvar allCssProperties = cssPropertiesStr.split(",").concat(userGenerated);\nvar properties = new Map(allCssProperties.map((prop) => [prop, true]));\nfunction memo(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (arg) => {\n if (cache[arg] === void 0)\n cache[arg] = fn(arg);\n return cache[arg];\n };\n}\nvar cssPropertySelectorRegex = /&|@/;\nvar isCssProperty = /* @__PURE__ */ memo((prop) => {\n return properties.has(prop) || prop.startsWith("--") || cssPropertySelectorRegex.test(prop);\n});\nexport {\n allCssProperties,\n isCssProperty\n};\n'
905
922
  };
906
923
 
907
924
  // src/artifacts/js/is-valid-prop.ts
908
925
  var import_outdent9 = require("outdent");
909
926
  var import_ts_pattern = require("ts-pattern");
910
927
  var cssPropRegex = /var cssPropertiesStr = ".*?";/;
911
- var memoFnDeclarationRegex = /function memo(.+?)\nvar selectorRegex/s;
928
+ var memoFnDeclarationRegex = /function memo(.+?)\nvar cssPropertySelectorRegex/s;
912
929
  function generateIsValidProp(ctx) {
913
930
  if (ctx.isTemplateLiteralSyntax)
914
931
  return;
@@ -917,7 +934,7 @@ function generateIsValidProp(ctx) {
917
934
  'var userGeneratedStr = "";',
918
935
  `var userGeneratedStr = "${(0, import_ts_pattern.match)(ctx.jsx.styleProps).with("all", () => Array.from(new Set(ctx.properties)).join(",")).with("minimal", () => "css").with("none", () => "").exhaustive()}"`
919
936
  );
920
- content = content.replace(memoFnDeclarationRegex, "var selectorRegex");
937
+ content = content.replace(memoFnDeclarationRegex, "var cssPropertySelectorRegex");
921
938
  if (ctx.jsx.styleProps === "minimal" || ctx.jsx.styleProps === "none") {
922
939
  content = content.replace("/* @__PURE__ */ memo(", "/* @__PURE__ */ (");
923
940
  content = content.replace(cssPropRegex, 'var cssPropertiesStr = "";');
@@ -3168,7 +3185,7 @@ function setupSva(ctx) {
3168
3185
  };
3169
3186
  }
3170
3187
  function setupCx(ctx) {
3171
- const code = generateCx();
3188
+ const code = generateCx(ctx);
3172
3189
  return {
3173
3190
  dir: ctx.paths.css,
3174
3191
  files: [
@@ -3334,7 +3351,7 @@ var generateFlattenedCss = (ctx) => (options) => {
3334
3351
  const { files, resolve } = options;
3335
3352
  const { theme: { keyframes } = {}, preflight, minify, staticCss } = ctx.config;
3336
3353
  const unresolved = [
3337
- "@layer reset, base, tokens, recipes, utilities;",
3354
+ ctx.layerString,
3338
3355
  preflight && "@import './reset.css';",
3339
3356
  "@import './global.css';",
3340
3357
  staticCss && "@import './static.css';",
@@ -3485,12 +3502,20 @@ var getBaseEngine = (conf) => {
3485
3502
  });
3486
3503
  const compositionContext = { conditions, utility };
3487
3504
  (0, import_core5.assignCompositions)(compositions, compositionContext);
3505
+ const layers = config.layers;
3506
+ const layerNames = Object.values(layers);
3507
+ const isValidLayerRule = (0, import_shared5.memo)((layerRule) => {
3508
+ const names = new Set(layerRule.split(",").map((name) => name.trim()));
3509
+ return names.size >= 5 && layerNames.every((name) => names.has(name));
3510
+ });
3511
+ const layerString = `@layer ${layerNames.join(", ")};`;
3488
3512
  const createSheetContext = () => ({
3489
3513
  root: import_postcss3.default.root(),
3490
3514
  conditions,
3491
3515
  utility,
3492
3516
  hash: hash.className,
3493
- helpers
3517
+ helpers,
3518
+ layers
3494
3519
  });
3495
3520
  const createSheet = (options) => {
3496
3521
  const sheetContext = createSheetContext();
@@ -3526,7 +3551,12 @@ var getBaseEngine = (conf) => {
3526
3551
  recipes,
3527
3552
  conditions,
3528
3553
  createSheetContext,
3529
- createSheet
3554
+ createSheet,
3555
+ // cascade layer
3556
+ layers,
3557
+ isValidLayerRule,
3558
+ layerString,
3559
+ layerNames
3530
3560
  };
3531
3561
  };
3532
3562
 
@@ -3635,7 +3665,15 @@ var defaults = (conf) => ({
3635
3665
  outExtension: "mjs",
3636
3666
  shorthands: true,
3637
3667
  syntax: "object-literal",
3638
- ...conf.config
3668
+ ...conf.config,
3669
+ layers: {
3670
+ reset: "reset",
3671
+ base: "base",
3672
+ tokens: "tokens",
3673
+ recipes: "recipes",
3674
+ utilities: "utilities",
3675
+ ...conf.config.layers
3676
+ }
3639
3677
  }
3640
3678
  });
3641
3679
  var getImportMap = (outdir) => ({
package/dist/index.mjs CHANGED
@@ -175,7 +175,7 @@ function generateKeyframeCss(ctx) {
175
175
  var css = String.raw;
176
176
  function generateResetCss(ctx, scope = "") {
177
177
  const selector = scope ? `${scope} ` : "";
178
- const output = css`@layer reset {
178
+ const output = css`@layer ${ctx.layers.reset} {
179
179
  ${selector}* {
180
180
  margin: 0;
181
181
  padding: 0;
@@ -442,7 +442,7 @@ function generateTokenCss(ctx) {
442
442
  }
443
443
  }
444
444
  const css2 = results.join("\n\n");
445
- const output = `@layer tokens {
445
+ const output = `@layer ${ctx.layers.tokens} {
446
446
  ${prettifyCss(cleanupSelectors(css2, root))}
447
447
  }
448
448
  `;
@@ -623,13 +623,13 @@ function generateCssFn(ctx) {
623
623
  return result;
624
624
  }).join(",")}"
625
625
 
626
- const classNames = new Map()
626
+ const classNameByProp = new Map()
627
627
  ${utility.hasShorthand ? outdent4`
628
628
  const shorthands = new Map()
629
629
  utilities.split(',').forEach((utility) => {
630
630
  const [prop, meta] = utility.split(':')
631
631
  const [className, ...shorthandList] = meta.split('/')
632
- classNames.set(prop, className)
632
+ classNameByProp.set(prop, className)
633
633
  if (shorthandList.length) {
634
634
  shorthandList.forEach((shorthand) => {
635
635
  shorthands.set(shorthand === '1' ? className : shorthand, prop)
@@ -641,7 +641,7 @@ function generateCssFn(ctx) {
641
641
  ` : outdent4`
642
642
  utilities.split(',').forEach((utility) => {
643
643
  const [prop, className] = utility.split(':')
644
- classNames.set(prop, className)
644
+ classNameByProp.set(prop, className)
645
645
  })
646
646
  `}
647
647
 
@@ -656,15 +656,21 @@ function generateCssFn(ctx) {
656
656
  ${prefix ? "prefix: " + JSON.stringify(prefix) + "," : ""}
657
657
  transform: ${utility.hasShorthand ? `(prop, value) => {
658
658
  const key = resolveShorthand(prop)
659
- const propKey = classNames.get(key) || hypenateProperty(key)
659
+ const propKey = classNameByProp.get(key) || hypenateProperty(key)
660
660
  return { className: \`\${propKey}${separator}\${withoutSpace(value)}\` }
661
- }` : `(key, value) => ({ className: \`\${classNames.get(key) || hypenateProperty(key)}${separator}\${withoutSpace(value)}\` })`},
661
+ }` : `(key, value) => ({ className: \`\${classNameByProp.get(key) || hypenateProperty(key)}${separator}\${withoutSpace(value)}\` })`},
662
662
  ${utility.hasShorthand ? "hasShorthand: true," : ""}
663
663
  resolveShorthand: ${utility.hasShorthand ? "resolveShorthand" : "prop => prop"},
664
664
  }
665
665
  }
666
666
 
667
- export const css = createCss(context)
667
+ const cssFn = createCss(context)
668
+ export const cssCache = new Map()
669
+ export const css = (styles) => {
670
+ const classNames = cssFn(styles)
671
+ cssCache.set(classNames, styles)
672
+ return classNames
673
+ }
668
674
  css.raw = (styles) => styles
669
675
 
670
676
  export const { mergeCss, assignCss } = createMergeCss(context)
@@ -802,23 +808,34 @@ function generateCvaFn(ctx) {
802
808
 
803
809
  // src/artifacts/js/cx.ts
804
810
  import outdent7 from "outdent";
805
- function generateCx() {
811
+ function generateCx(ctx) {
806
812
  return {
807
813
  js: outdent7`
814
+ ${ctx.file.import("cssCache, css, mergeCss", "./css")}
815
+
808
816
  function cx() {
817
+ const objs = []
809
818
  let str = '',
810
819
  i = 0,
811
820
  arg
812
-
821
+
813
822
  for (; i < arguments.length; ) {
814
- if ((arg = arguments[i++]) && typeof arg === 'string') {
815
- str && (str += ' ')
816
- str += arg
823
+ arg = arguments[i++]
824
+ if (!arg || typeof arg !== 'string') continue
825
+
826
+ if (cssCache.has(arg)) {
827
+ objs.push(cssCache.get(arg))
828
+ continue
817
829
  }
830
+
831
+ str && (str += ' ')
832
+ str += arg.toString()
818
833
  }
819
- return str
834
+
835
+ const merged = mergeCss(...objs)
836
+ return [css(merged), str].join(' ')
820
837
  }
821
-
838
+
822
839
  export { cx }
823
840
  `,
824
841
  dts: outdent7`
@@ -870,14 +887,14 @@ function generateHelpers(ctx) {
870
887
 
871
888
  // src/artifacts/generated/is-valid-prop.mjs.json
872
889
  var is_valid_prop_mjs_default = {
873
- content: '// src/index.ts\nvar userGeneratedStr = "";\nvar userGenerated = userGeneratedStr.split(",");\nvar cssPropertiesStr = "WebkitAppearance,WebkitBorderBefore,WebkitBorderBeforeColor,WebkitBorderBeforeStyle,WebkitBorderBeforeWidth,WebkitBoxReflect,WebkitLineClamp,WebkitMask,WebkitMaskAttachment,WebkitMaskClip,WebkitMaskComposite,WebkitMaskImage,WebkitMaskOrigin,WebkitMaskPosition,WebkitMaskPositionX,WebkitMaskPositionY,WebkitMaskRepeat,WebkitMaskRepeatX,WebkitMaskRepeatY,WebkitMaskSize,WebkitOverflowScrolling,WebkitTapHighlightColor,WebkitTextFillColor,WebkitTextStroke,WebkitTextStrokeColor,WebkitTextStrokeWidth,WebkitTouchCallout,WebkitUserModify,accentColor,alignContent,alignItems,alignSelf,alignTracks,all,animation,animationComposition,animationDelay,animationDirection,animationDuration,animationFillMode,animationIterationCount,animationName,animationPlayState,animationTimingFunction,animationTimeline,appearance,aspectRatio,azimuth,backdropFilter,backfaceVisibility,background,backgroundAttachment,backgroundBlendMode,backgroundClip,backgroundColor,backgroundImage,backgroundOrigin,backgroundPosition,backgroundPositionX,backgroundPositionY,backgroundRepeat,backgroundSize,blockOverflow,blockSize,border,borderBlock,borderBlockColor,borderBlockStyle,borderBlockWidth,borderBlockEnd,borderBlockEndColor,borderBlockEndStyle,borderBlockEndWidth,borderBlockStart,borderBlockStartColor,borderBlockStartStyle,borderBlockStartWidth,borderBottom,borderBottomColor,borderBottomLeftRadius,borderBottomRightRadius,borderBottomStyle,borderBottomWidth,borderCollapse,borderColor,borderEndEndRadius,borderEndStartRadius,borderImage,borderImageOutset,borderImageRepeat,borderImageSlice,borderImageSource,borderImageWidth,borderInline,borderInlineEnd,borderInlineColor,borderInlineStyle,borderInlineWidth,borderInlineEndColor,borderInlineEndStyle,borderInlineEndWidth,borderInlineStart,borderInlineStartColor,borderInlineStartStyle,borderInlineStartWidth,borderLeft,borderLeftColor,borderLeftStyle,borderLeftWidth,borderRadius,borderRight,borderRightColor,borderRightStyle,borderRightWidth,borderSpacing,borderStartEndRadius,borderStartStartRadius,borderStyle,borderTop,borderTopColor,borderTopLeftRadius,borderTopRightRadius,borderTopStyle,borderTopWidth,borderWidth,bottom,boxAlign,boxDecorationBreak,boxDirection,boxFlex,boxFlexGroup,boxLines,boxOrdinalGroup,boxOrient,boxPack,boxShadow,boxSizing,breakAfter,breakBefore,breakInside,captionSide,caret,caretColor,caretShape,clear,clip,clipPath,color,colorScheme,columnCount,columnFill,columnGap,columnRule,columnRuleColor,columnRuleStyle,columnRuleWidth,columnSpan,columnWidth,columns,contain,containIntrinsicSize,containIntrinsicBlockSize,containIntrinsicHeight,containIntrinsicInlineSize,containIntrinsicWidth,container,containerName,containerType,content,contentVisibility,counterIncrement,counterReset,counterSet,cursor,direction,display,emptyCells,filter,flex,flexBasis,flexDirection,flexFlow,flexGrow,flexShrink,flexWrap,float,font,fontFamily,fontFeatureSettings,fontKerning,fontLanguageOverride,fontOpticalSizing,fontPalette,fontVariationSettings,fontSize,fontSizeAdjust,fontSmooth,fontStretch,fontStyle,fontSynthesis,fontVariant,fontVariantAlternates,fontVariantCaps,fontVariantEastAsian,fontVariantEmoji,fontVariantLigatures,fontVariantNumeric,fontVariantPosition,fontWeight,forcedColorAdjust,gap,grid,gridArea,gridAutoColumns,gridAutoFlow,gridAutoRows,gridColumn,gridColumnEnd,gridColumnGap,gridColumnStart,gridGap,gridRow,gridRowEnd,gridRowGap,gridRowStart,gridTemplate,gridTemplateAreas,gridTemplateColumns,gridTemplateRows,hangingPunctuation,height,hyphenateCharacter,hyphenateLimitChars,hyphens,imageOrientation,imageRendering,imageResolution,imeMode,initialLetter,initialLetterAlign,inlineSize,inputSecurity,inset,insetBlock,insetBlockEnd,insetBlockStart,insetInline,insetInlineEnd,insetInlineStart,isolation,justifyContent,justifyItems,justifySelf,justifyTracks,left,letterSpacing,lineBreak,lineClamp,lineHeight,lineHeightStep,listStyle,listStyleImage,listStylePosition,listStyleType,margin,marginBlock,marginBlockEnd,marginBlockStart,marginBottom,marginInline,marginInlineEnd,marginInlineStart,marginLeft,marginRight,marginTop,marginTrim,mask,maskBorder,maskBorderMode,maskBorderOutset,maskBorderRepeat,maskBorderSlice,maskBorderSource,maskBorderWidth,maskClip,maskComposite,maskImage,maskMode,maskOrigin,maskPosition,maskRepeat,maskSize,maskType,masonryAutoFlow,mathDepth,mathShift,mathStyle,maxBlockSize,maxHeight,maxInlineSize,maxLines,maxWidth,minBlockSize,minHeight,minInlineSize,minWidth,mixBlendMode,objectFit,objectPosition,offset,offsetAnchor,offsetDistance,offsetPath,offsetPosition,offsetRotate,opacity,order,orphans,outline,outlineColor,outlineOffset,outlineStyle,outlineWidth,overflow,overflowAnchor,overflowBlock,overflowClipBox,overflowClipMargin,overflowInline,overflowWrap,overflowX,overflowY,overscrollBehavior,overscrollBehaviorBlock,overscrollBehaviorInline,overscrollBehaviorX,overscrollBehaviorY,padding,paddingBlock,paddingBlockEnd,paddingBlockStart,paddingBottom,paddingInline,paddingInlineEnd,paddingInlineStart,paddingLeft,paddingRight,paddingTop,page,pageBreakAfter,pageBreakBefore,pageBreakInside,paintOrder,perspective,perspectiveOrigin,placeContent,placeItems,placeSelf,pointerEvents,position,printColorAdjust,quotes,resize,right,rotate,rowGap,rubyAlign,rubyMerge,rubyPosition,scale,scrollbarColor,scrollbarGutter,scrollbarWidth,scrollBehavior,scrollMargin,scrollMarginBlock,scrollMarginBlockStart,scrollMarginBlockEnd,scrollMarginBottom,scrollMarginInline,scrollMarginInlineStart,scrollMarginInlineEnd,scrollMarginLeft,scrollMarginRight,scrollMarginTop,scrollPadding,scrollPaddingBlock,scrollPaddingBlockStart,scrollPaddingBlockEnd,scrollPaddingBottom,scrollPaddingInline,scrollPaddingInlineStart,scrollPaddingInlineEnd,scrollPaddingLeft,scrollPaddingRight,scrollPaddingTop,scrollSnapAlign,scrollSnapCoordinate,scrollSnapDestination,scrollSnapPointsX,scrollSnapPointsY,scrollSnapStop,scrollSnapType,scrollSnapTypeX,scrollSnapTypeY,scrollTimeline,scrollTimelineAxis,scrollTimelineName,shapeImageThreshold,shapeMargin,shapeOutside,tabSize,tableLayout,textAlign,textAlignLast,textCombineUpright,textDecoration,textDecorationColor,textDecorationLine,textDecorationSkip,textDecorationSkipInk,textDecorationStyle,textDecorationThickness,textEmphasis,textEmphasisColor,textEmphasisPosition,textEmphasisStyle,textIndent,textJustify,textOrientation,textOverflow,textRendering,textShadow,textSizeAdjust,textTransform,textUnderlineOffset,textUnderlinePosition,top,touchAction,transform,transformBox,transformOrigin,transformStyle,transition,transitionDelay,transitionDuration,transitionProperty,transitionTimingFunction,translate,unicodeBidi,userSelect,verticalAlign,viewTransitionName,visibility,whiteSpace,widows,width,willChange,wordBreak,wordSpacing,wordWrap,writingMode,zIndex,zoom";\nvar allCssProperties = cssPropertiesStr.split(",").concat(userGenerated);\nvar properties = new Map(allCssProperties.map((prop) => [prop, true]));\nfunction memo(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (arg) => {\n if (cache[arg] === void 0)\n cache[arg] = fn(arg);\n return cache[arg];\n };\n}\nvar selectorRegex = /&|@/;\nvar isCssProperty = /* @__PURE__ */ memo((prop) => {\n return properties.has(prop) || prop.startsWith("--") || selectorRegex.test(prop);\n});\nexport {\n allCssProperties,\n isCssProperty\n};\n'
890
+ content: '// src/index.ts\nvar userGeneratedStr = "";\nvar userGenerated = userGeneratedStr.split(",");\nvar cssPropertiesStr = "WebkitAppearance,WebkitBorderBefore,WebkitBorderBeforeColor,WebkitBorderBeforeStyle,WebkitBorderBeforeWidth,WebkitBoxReflect,WebkitLineClamp,WebkitMask,WebkitMaskAttachment,WebkitMaskClip,WebkitMaskComposite,WebkitMaskImage,WebkitMaskOrigin,WebkitMaskPosition,WebkitMaskPositionX,WebkitMaskPositionY,WebkitMaskRepeat,WebkitMaskRepeatX,WebkitMaskRepeatY,WebkitMaskSize,WebkitOverflowScrolling,WebkitTapHighlightColor,WebkitTextFillColor,WebkitTextStroke,WebkitTextStrokeColor,WebkitTextStrokeWidth,WebkitTouchCallout,WebkitUserModify,accentColor,alignContent,alignItems,alignSelf,alignTracks,all,animation,animationComposition,animationDelay,animationDirection,animationDuration,animationFillMode,animationIterationCount,animationName,animationPlayState,animationTimingFunction,animationTimeline,appearance,aspectRatio,azimuth,backdropFilter,backfaceVisibility,background,backgroundAttachment,backgroundBlendMode,backgroundClip,backgroundColor,backgroundImage,backgroundOrigin,backgroundPosition,backgroundPositionX,backgroundPositionY,backgroundRepeat,backgroundSize,blockOverflow,blockSize,border,borderBlock,borderBlockColor,borderBlockStyle,borderBlockWidth,borderBlockEnd,borderBlockEndColor,borderBlockEndStyle,borderBlockEndWidth,borderBlockStart,borderBlockStartColor,borderBlockStartStyle,borderBlockStartWidth,borderBottom,borderBottomColor,borderBottomLeftRadius,borderBottomRightRadius,borderBottomStyle,borderBottomWidth,borderCollapse,borderColor,borderEndEndRadius,borderEndStartRadius,borderImage,borderImageOutset,borderImageRepeat,borderImageSlice,borderImageSource,borderImageWidth,borderInline,borderInlineEnd,borderInlineColor,borderInlineStyle,borderInlineWidth,borderInlineEndColor,borderInlineEndStyle,borderInlineEndWidth,borderInlineStart,borderInlineStartColor,borderInlineStartStyle,borderInlineStartWidth,borderLeft,borderLeftColor,borderLeftStyle,borderLeftWidth,borderRadius,borderRight,borderRightColor,borderRightStyle,borderRightWidth,borderSpacing,borderStartEndRadius,borderStartStartRadius,borderStyle,borderTop,borderTopColor,borderTopLeftRadius,borderTopRightRadius,borderTopStyle,borderTopWidth,borderWidth,bottom,boxAlign,boxDecorationBreak,boxDirection,boxFlex,boxFlexGroup,boxLines,boxOrdinalGroup,boxOrient,boxPack,boxShadow,boxSizing,breakAfter,breakBefore,breakInside,captionSide,caret,caretColor,caretShape,clear,clip,clipPath,color,colorScheme,columnCount,columnFill,columnGap,columnRule,columnRuleColor,columnRuleStyle,columnRuleWidth,columnSpan,columnWidth,columns,contain,containIntrinsicSize,containIntrinsicBlockSize,containIntrinsicHeight,containIntrinsicInlineSize,containIntrinsicWidth,container,containerName,containerType,content,contentVisibility,counterIncrement,counterReset,counterSet,cursor,direction,display,emptyCells,filter,flex,flexBasis,flexDirection,flexFlow,flexGrow,flexShrink,flexWrap,float,font,fontFamily,fontFeatureSettings,fontKerning,fontLanguageOverride,fontOpticalSizing,fontPalette,fontVariationSettings,fontSize,fontSizeAdjust,fontSmooth,fontStretch,fontStyle,fontSynthesis,fontVariant,fontVariantAlternates,fontVariantCaps,fontVariantEastAsian,fontVariantEmoji,fontVariantLigatures,fontVariantNumeric,fontVariantPosition,fontWeight,forcedColorAdjust,gap,grid,gridArea,gridAutoColumns,gridAutoFlow,gridAutoRows,gridColumn,gridColumnEnd,gridColumnGap,gridColumnStart,gridGap,gridRow,gridRowEnd,gridRowGap,gridRowStart,gridTemplate,gridTemplateAreas,gridTemplateColumns,gridTemplateRows,hangingPunctuation,height,hyphenateCharacter,hyphenateLimitChars,hyphens,imageOrientation,imageRendering,imageResolution,imeMode,initialLetter,initialLetterAlign,inlineSize,inputSecurity,inset,insetBlock,insetBlockEnd,insetBlockStart,insetInline,insetInlineEnd,insetInlineStart,isolation,justifyContent,justifyItems,justifySelf,justifyTracks,left,letterSpacing,lineBreak,lineClamp,lineHeight,lineHeightStep,listStyle,listStyleImage,listStylePosition,listStyleType,margin,marginBlock,marginBlockEnd,marginBlockStart,marginBottom,marginInline,marginInlineEnd,marginInlineStart,marginLeft,marginRight,marginTop,marginTrim,mask,maskBorder,maskBorderMode,maskBorderOutset,maskBorderRepeat,maskBorderSlice,maskBorderSource,maskBorderWidth,maskClip,maskComposite,maskImage,maskMode,maskOrigin,maskPosition,maskRepeat,maskSize,maskType,masonryAutoFlow,mathDepth,mathShift,mathStyle,maxBlockSize,maxHeight,maxInlineSize,maxLines,maxWidth,minBlockSize,minHeight,minInlineSize,minWidth,mixBlendMode,objectFit,objectPosition,offset,offsetAnchor,offsetDistance,offsetPath,offsetPosition,offsetRotate,opacity,order,orphans,outline,outlineColor,outlineOffset,outlineStyle,outlineWidth,overflow,overflowAnchor,overflowBlock,overflowClipBox,overflowClipMargin,overflowInline,overflowWrap,overflowX,overflowY,overscrollBehavior,overscrollBehaviorBlock,overscrollBehaviorInline,overscrollBehaviorX,overscrollBehaviorY,padding,paddingBlock,paddingBlockEnd,paddingBlockStart,paddingBottom,paddingInline,paddingInlineEnd,paddingInlineStart,paddingLeft,paddingRight,paddingTop,page,pageBreakAfter,pageBreakBefore,pageBreakInside,paintOrder,perspective,perspectiveOrigin,placeContent,placeItems,placeSelf,pointerEvents,position,printColorAdjust,quotes,resize,right,rotate,rowGap,rubyAlign,rubyMerge,rubyPosition,scale,scrollbarColor,scrollbarGutter,scrollbarWidth,scrollBehavior,scrollMargin,scrollMarginBlock,scrollMarginBlockStart,scrollMarginBlockEnd,scrollMarginBottom,scrollMarginInline,scrollMarginInlineStart,scrollMarginInlineEnd,scrollMarginLeft,scrollMarginRight,scrollMarginTop,scrollPadding,scrollPaddingBlock,scrollPaddingBlockStart,scrollPaddingBlockEnd,scrollPaddingBottom,scrollPaddingInline,scrollPaddingInlineStart,scrollPaddingInlineEnd,scrollPaddingLeft,scrollPaddingRight,scrollPaddingTop,scrollSnapAlign,scrollSnapCoordinate,scrollSnapDestination,scrollSnapPointsX,scrollSnapPointsY,scrollSnapStop,scrollSnapType,scrollSnapTypeX,scrollSnapTypeY,scrollTimeline,scrollTimelineAxis,scrollTimelineName,shapeImageThreshold,shapeMargin,shapeOutside,tabSize,tableLayout,textAlign,textAlignLast,textCombineUpright,textDecoration,textDecorationColor,textDecorationLine,textDecorationSkip,textDecorationSkipInk,textDecorationStyle,textDecorationThickness,textEmphasis,textEmphasisColor,textEmphasisPosition,textEmphasisStyle,textIndent,textJustify,textOrientation,textOverflow,textRendering,textShadow,textSizeAdjust,textTransform,textUnderlineOffset,textUnderlinePosition,top,touchAction,transform,transformBox,transformOrigin,transformStyle,transition,transitionDelay,transitionDuration,transitionProperty,transitionTimingFunction,translate,unicodeBidi,userSelect,verticalAlign,viewTransitionName,visibility,whiteSpace,widows,width,willChange,wordBreak,wordSpacing,wordWrap,writingMode,zIndex,zoom,alignmentBaseline,baselineShift,clipRule,colorInterpolation,colorRendering,dominantBaseline,fill,fillOpacity,fillRule,floodColor,floodOpacity,glyphOrientationVertical,lightingColor,marker,markerEnd,markerMid,markerStart,shapeRendering,stopColor,stopOpacity,stroke,strokeDasharray,strokeDashoffset,strokeLinecap,strokeLinejoin,strokeMiterlimit,strokeOpacity,strokeWidth,textAnchor,vectorEffect";\nvar allCssProperties = cssPropertiesStr.split(",").concat(userGenerated);\nvar properties = new Map(allCssProperties.map((prop) => [prop, true]));\nfunction memo(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (arg) => {\n if (cache[arg] === void 0)\n cache[arg] = fn(arg);\n return cache[arg];\n };\n}\nvar cssPropertySelectorRegex = /&|@/;\nvar isCssProperty = /* @__PURE__ */ memo((prop) => {\n return properties.has(prop) || prop.startsWith("--") || cssPropertySelectorRegex.test(prop);\n});\nexport {\n allCssProperties,\n isCssProperty\n};\n'
874
891
  };
875
892
 
876
893
  // src/artifacts/js/is-valid-prop.ts
877
894
  import { outdent as outdent9 } from "outdent";
878
895
  import { match } from "ts-pattern";
879
896
  var cssPropRegex = /var cssPropertiesStr = ".*?";/;
880
- var memoFnDeclarationRegex = /function memo(.+?)\nvar selectorRegex/s;
897
+ var memoFnDeclarationRegex = /function memo(.+?)\nvar cssPropertySelectorRegex/s;
881
898
  function generateIsValidProp(ctx) {
882
899
  if (ctx.isTemplateLiteralSyntax)
883
900
  return;
@@ -886,7 +903,7 @@ function generateIsValidProp(ctx) {
886
903
  'var userGeneratedStr = "";',
887
904
  `var userGeneratedStr = "${match(ctx.jsx.styleProps).with("all", () => Array.from(new Set(ctx.properties)).join(",")).with("minimal", () => "css").with("none", () => "").exhaustive()}"`
888
905
  );
889
- content = content.replace(memoFnDeclarationRegex, "var selectorRegex");
906
+ content = content.replace(memoFnDeclarationRegex, "var cssPropertySelectorRegex");
890
907
  if (ctx.jsx.styleProps === "minimal" || ctx.jsx.styleProps === "none") {
891
908
  content = content.replace("/* @__PURE__ */ memo(", "/* @__PURE__ */ (");
892
909
  content = content.replace(cssPropRegex, 'var cssPropertiesStr = "";');
@@ -3137,7 +3154,7 @@ function setupSva(ctx) {
3137
3154
  };
3138
3155
  }
3139
3156
  function setupCx(ctx) {
3140
- const code = generateCx();
3157
+ const code = generateCx(ctx);
3141
3158
  return {
3142
3159
  dir: ctx.paths.css,
3143
3160
  files: [
@@ -3303,7 +3320,7 @@ var generateFlattenedCss = (ctx) => (options) => {
3303
3320
  const { files, resolve } = options;
3304
3321
  const { theme: { keyframes } = {}, preflight, minify, staticCss } = ctx.config;
3305
3322
  const unresolved = [
3306
- "@layer reset, base, tokens, recipes, utilities;",
3323
+ ctx.layerString,
3307
3324
  preflight && "@import './reset.css';",
3308
3325
  "@import './global.css';",
3309
3326
  staticCss && "@import './static.css';",
@@ -3460,12 +3477,20 @@ var getBaseEngine = (conf) => {
3460
3477
  });
3461
3478
  const compositionContext = { conditions, utility };
3462
3479
  assignCompositions(compositions, compositionContext);
3480
+ const layers = config.layers;
3481
+ const layerNames = Object.values(layers);
3482
+ const isValidLayerRule = memo((layerRule) => {
3483
+ const names = new Set(layerRule.split(",").map((name) => name.trim()));
3484
+ return names.size >= 5 && layerNames.every((name) => names.has(name));
3485
+ });
3486
+ const layerString = `@layer ${layerNames.join(", ")};`;
3463
3487
  const createSheetContext = () => ({
3464
3488
  root: postcss3.root(),
3465
3489
  conditions,
3466
3490
  utility,
3467
3491
  hash: hash.className,
3468
- helpers
3492
+ helpers,
3493
+ layers
3469
3494
  });
3470
3495
  const createSheet = (options) => {
3471
3496
  const sheetContext = createSheetContext();
@@ -3501,7 +3526,12 @@ var getBaseEngine = (conf) => {
3501
3526
  recipes,
3502
3527
  conditions,
3503
3528
  createSheetContext,
3504
- createSheet
3529
+ createSheet,
3530
+ // cascade layer
3531
+ layers,
3532
+ isValidLayerRule,
3533
+ layerString,
3534
+ layerNames
3505
3535
  };
3506
3536
  };
3507
3537
 
@@ -3610,7 +3640,15 @@ var defaults = (conf) => ({
3610
3640
  outExtension: "mjs",
3611
3641
  shorthands: true,
3612
3642
  syntax: "object-literal",
3613
- ...conf.config
3643
+ ...conf.config,
3644
+ layers: {
3645
+ reset: "reset",
3646
+ base: "base",
3647
+ tokens: "tokens",
3648
+ recipes: "recipes",
3649
+ utilities: "utilities",
3650
+ ...conf.config.layers
3651
+ }
3614
3652
  }
3615
3653
  });
3616
3654
  var getImportMap = (outdir) => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pandacss/generator",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "The css generator for css panda",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -20,17 +20,17 @@
20
20
  "pluralize": "8.0.0",
21
21
  "postcss": "8.4.27",
22
22
  "ts-pattern": "5.0.4",
23
- "@pandacss/core": "0.11.0",
24
- "@pandacss/is-valid-prop": "0.11.0",
25
- "@pandacss/logger": "0.11.0",
26
- "@pandacss/shared": "0.11.0",
27
- "@pandacss/token-dictionary": "0.11.0",
28
- "@pandacss/types": "0.11.0"
23
+ "@pandacss/core": "0.11.1",
24
+ "@pandacss/is-valid-prop": "0.11.1",
25
+ "@pandacss/logger": "0.11.1",
26
+ "@pandacss/shared": "0.11.1",
27
+ "@pandacss/token-dictionary": "0.11.1",
28
+ "@pandacss/types": "0.11.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/pluralize": "0.0.30",
32
32
  "hookable": "5.5.3",
33
- "@pandacss/fixture": "0.11.0"
33
+ "@pandacss/fixture": "0.11.1"
34
34
  },
35
35
  "scripts": {
36
36
  "prebuild": "tsx scripts/prebuild.ts",