@pandacss/generator 0.37.1 → 0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -544,7 +544,7 @@ function generatePattern(ctx, filters) {
544
544
  const details = ctx.patterns.filterDetails(filters);
545
545
  return details.map((pattern) => {
546
546
  const { baseName, config, dashName, upperName, styleFnName, blocklistType } = pattern;
547
- const { properties, transform, strict, description, defaultValues } = config;
547
+ const { properties, transform, strict, description, defaultValues, deprecated } = config;
548
548
  const patternConfigFn = (0, import_javascript_stringify.stringify)((0, import_shared.compact)({ transform, defaultValues })) ?? "";
549
549
  const helperImports = ["getPatternStyles, patternFns"];
550
550
  if (patternConfigFn.includes("__spreadValues")) {
@@ -589,7 +589,7 @@ function generatePattern(ctx, filters) {
589
589
  raw: (styles?: ${upperName}Styles) => SystemStyleObject
590
590
  }
591
591
 
592
- ${description ? `/** ${description} */` : ""}
592
+ ${ctx.file.jsDocComment(description, { deprecated })}
593
593
  export declare const ${baseName}: ${upperName}PatternFn;
594
594
  `}
595
595
 
@@ -722,11 +722,11 @@ function generateRecipes(ctx, filters) {
722
722
  const details = ctx.recipes.filterDetails(filters);
723
723
  return details.map((recipe) => {
724
724
  const { baseName, config, upperName, variantKeyMap, dashName } = recipe;
725
- const { description, defaultVariants, compoundVariants } = config;
725
+ const { description, defaultVariants, compoundVariants, deprecated } = config;
726
726
  const jsCode = (0, import_ts_pattern4.match)(config).when(
727
727
  import_core.Recipes.isSlotRecipeConfig,
728
728
  (config2) => import_outdent11.outdent`
729
- ${ctx.file.import("getSlotCompoundVariant, memo, splitProps", "../helpers")}
729
+ ${ctx.file.import("compact, getSlotCompoundVariant, memo, splitProps", "../helpers")}
730
730
  ${ctx.file.import("createRecipe", "./create-recipe")}
731
731
 
732
732
  const ${baseName}DefaultVariants = ${stringify2(defaultVariants ?? {})}
@@ -740,6 +740,7 @@ function generateRecipes(ctx, filters) {
740
740
  })
741
741
 
742
742
  const ${baseName}VariantKeys = ${stringify2(Object.keys(variantKeyMap))}
743
+ const getVariantProps = (variants) => ({ ...${baseName}DefaultVariants, ...compact(variants) })
743
744
 
744
745
  export const ${baseName} = /* @__PURE__ */ Object.assign(${baseName}Fn, {
745
746
  __recipe__: false,
@@ -750,6 +751,7 @@ function generateRecipes(ctx, filters) {
750
751
  splitVariantProps(props) {
751
752
  return splitProps(props, ${baseName}VariantKeys)
752
753
  },
754
+ getVariantProps
753
755
  })
754
756
  `
755
757
  ).otherwise(
@@ -816,7 +818,7 @@ function generateRecipes(ctx, filters) {
816
818
  getVariantProps: (props?: ${upperName}VariantProps) => ${upperName}VariantProps
817
819
  }
818
820
 
819
- ${description ? `/** ${description} */` : ""}
821
+ ${ctx.file.jsDocComment(description, { deprecated })}
820
822
  export declare const ${baseName}: ${upperName}Recipe
821
823
  `
822
824
  };
@@ -828,7 +830,7 @@ var import_outdent12 = require("outdent");
828
830
  function generateSvaFn(ctx) {
829
831
  return {
830
832
  js: import_outdent12.outdent`
831
- ${ctx.file.import("getSlotRecipes, memo, splitProps", "../helpers")}
833
+ ${ctx.file.import("compact, getSlotRecipes, memo, splitProps", "../helpers")}
832
834
  ${ctx.file.import("cva", "./cva")}
833
835
  ${ctx.file.import("cx", "./cx")}
834
836
 
@@ -836,6 +838,7 @@ function generateSvaFn(ctx) {
836
838
 
837
839
  export function sva(config) {
838
840
  const slots = Object.entries(getSlotRecipes(config)).map(([slot, slotCva]) => [slot, cva(slotCva)])
841
+ const defaultVariants = config.defaultVariants ?? {}
839
842
 
840
843
  function svaFn(props) {
841
844
  const result = slots.map(([slot, cvaFn]) => [slot, cx(cvaFn(props), config.className && slotClass(config.className, slot))])
@@ -853,6 +856,7 @@ function generateSvaFn(ctx) {
853
856
  function splitVariantProps(props) {
854
857
  return splitProps(props, variantKeys);
855
858
  }
859
+ const getVariantProps = (variants) => ({ ...(defaultVariants || {}), ...compact(variants) })
856
860
 
857
861
  const variantMap = Object.fromEntries(
858
862
  Object.entries(variants).map(([key, value]) => [key, Object.keys(value)])
@@ -864,6 +868,7 @@ function generateSvaFn(ctx) {
864
868
  variantMap,
865
869
  variantKeys,
866
870
  splitVariantProps,
871
+ getVariantProps,
867
872
  })
868
873
  }
869
874
  `,
@@ -958,13 +963,13 @@ function generatePreactJsxFactory(ctx) {
958
963
  function recipeClass() {
959
964
  const { css: cssStyles, ...propStyles } = styleProps
960
965
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps)
961
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.class, combinedProps.className)
966
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, combinedProps.className)
962
967
  }
963
968
 
964
969
  function cvaClass() {
965
970
  const { css: cssStyles, ...propStyles } = styleProps
966
971
  const cvaStyles = __cvaFn__.raw(variantProps)
967
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.class, combinedProps.className)
972
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, combinedProps.className)
968
973
  }
969
974
 
970
975
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -1017,7 +1022,7 @@ function generatePreactJsxPattern(ctx, filters) {
1017
1022
  const details = ctx.patterns.filterDetails(filters);
1018
1023
  return details.map((pattern) => {
1019
1024
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
1020
- const { description, jsxElement = "div" } = pattern.config;
1025
+ const { description, jsxElement = "div", deprecated } = pattern.config;
1021
1026
  return {
1022
1027
  name: dashName,
1023
1028
  js: import_outdent15.outdent`
@@ -1071,7 +1076,7 @@ function generatePreactJsxPattern(ctx, filters) {
1071
1076
 
1072
1077
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
1073
1078
 
1074
- ${description ? `/** ${description} */` : ""}
1079
+ ${ctx.file.jsDocComment(description, { deprecated })}
1075
1080
  export declare const ${jsxName}: FunctionComponent<${upperName}Props>
1076
1081
  `
1077
1082
  };
@@ -1286,13 +1291,13 @@ function generateQwikJsxFactory(ctx) {
1286
1291
  function recipeClass() {
1287
1292
  const { css: cssStyles, ...propStyles } = styleProps
1288
1293
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps);
1289
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.class, className)
1294
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, className)
1290
1295
  }
1291
1296
 
1292
1297
  function cvaClass() {
1293
1298
  const { css: cssStyles, ...propStyles } = styleProps
1294
1299
  const cvaStyles = __cvaFn__.raw(variantProps)
1295
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.class, className)
1300
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, className)
1296
1301
  }
1297
1302
 
1298
1303
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -1345,7 +1350,7 @@ function generateQwikJsxPattern(ctx, filters) {
1345
1350
  const details = ctx.patterns.filterDetails(filters);
1346
1351
  return details.map((pattern) => {
1347
1352
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
1348
- const { description, jsxElement = "div" } = pattern.config;
1353
+ const { description, jsxElement = "div", deprecated } = pattern.config;
1349
1354
  return {
1350
1355
  name: dashName,
1351
1356
  js: import_outdent20.outdent`
@@ -1398,7 +1403,7 @@ function generateQwikJsxPattern(ctx, filters) {
1398
1403
 
1399
1404
  export interface ${upperName}Props extends Assign<${typeName}<'${jsxElement}'>, DistributiveOmit<${upperName}Properties, ${blocklistType || '""'}>> {}
1400
1405
 
1401
- ${description ? `/** ${description} */` : ""}
1406
+ ${ctx.file.jsDocComment(description, { deprecated })}
1402
1407
  export declare const ${jsxName}: Component<${upperName}Props>
1403
1408
  `
1404
1409
  };
@@ -1619,13 +1624,13 @@ function generateReactJsxFactory(ctx) {
1619
1624
  function recipeClass() {
1620
1625
  const { css: cssStyles, ...propStyles } = styleProps
1621
1626
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps)
1622
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.className)
1627
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.className)
1623
1628
  }
1624
1629
 
1625
1630
  function cvaClass() {
1626
1631
  const { css: cssStyles, ...propStyles } = styleProps
1627
1632
  const cvaStyles = __cvaFn__.raw(variantProps)
1628
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.className)
1633
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.className)
1629
1634
  }
1630
1635
 
1631
1636
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -1679,7 +1684,7 @@ function generateReactJsxPattern(ctx, filters) {
1679
1684
  const details = ctx.patterns.filterDetails(filters);
1680
1685
  return details.map((pattern) => {
1681
1686
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
1682
- const { description, jsxElement = "div" } = pattern.config;
1687
+ const { description, jsxElement = "div", deprecated } = pattern.config;
1683
1688
  return {
1684
1689
  name: dashName,
1685
1690
  js: import_outdent25.outdent`
@@ -1732,7 +1737,7 @@ function generateReactJsxPattern(ctx, filters) {
1732
1737
 
1733
1738
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
1734
1739
 
1735
- ${description ? `/** ${description} */` : ""}
1740
+ ${ctx.file.jsDocComment(description, { deprecated })}
1736
1741
  export declare const ${jsxName}: FunctionComponent<${upperName}Props>
1737
1742
  `
1738
1743
  };
@@ -1982,7 +1987,7 @@ function generateSolidJsxFactory(ctx) {
1982
1987
  __cvaFn__.__getCompoundVariantCss__?.(variantProps)
1983
1988
  return cx(
1984
1989
  __cvaFn__(variantProps, false),
1985
- css(compoundVariantStyles, propStyles, cssStyles),
1990
+ css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])),
1986
1991
  localProps.class,
1987
1992
  localProps.className
1988
1993
  )
@@ -1992,7 +1997,7 @@ function generateSolidJsxFactory(ctx) {
1992
1997
  const { css: cssStyles, ...propStyles } = styleProps
1993
1998
  const cvaStyles = __cvaFn__.raw(variantProps)
1994
1999
  return cx(
1995
- css(cvaStyles, propStyles, cssStyles),
2000
+ css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])),
1996
2001
  localProps.class,
1997
2002
  localProps.className
1998
2003
  )
@@ -2056,7 +2061,7 @@ function generateSolidJsxPattern(ctx, filters) {
2056
2061
  const details = ctx.patterns.filterDetails(filters);
2057
2062
  return details.map((pattern) => {
2058
2063
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
2059
- const { description, jsxElement = "div" } = pattern.config;
2064
+ const { description, jsxElement = "div", deprecated } = pattern.config;
2060
2065
  return {
2061
2066
  name: dashName,
2062
2067
  js: import_outdent30.outdent`
@@ -2111,7 +2116,7 @@ function generateSolidJsxPattern(ctx, filters) {
2111
2116
 
2112
2117
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
2113
2118
 
2114
- ${description ? `/** ${description} */` : ""}
2119
+ ${ctx.file.jsDocComment(description, { deprecated })}
2115
2120
  export declare const ${jsxName}: Component<${upperName}Props>
2116
2121
  `
2117
2122
  };
@@ -2336,14 +2341,14 @@ function generateVueJsxFactory(ctx) {
2336
2341
  const [_htmlProps, _forwardedProps, variantProps, styleProps, _elementProps] = splittedProps.value
2337
2342
  const { css: cssStyles, ...propStyles } = styleProps
2338
2343
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps);
2339
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.value.className, combinedProps.value.class)
2344
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.value.className, combinedProps.value.class)
2340
2345
  })
2341
2346
 
2342
2347
  const cvaClass = computed(() => {
2343
2348
  const [_htmlProps, _forwardedProps, variantProps, styleProps, _elementProps] = splittedProps.value
2344
2349
  const { css: cssStyles, ...propStyles } = styleProps
2345
2350
  const cvaStyles = __cvaFn__.raw(variantProps)
2346
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.value.className, combinedProps.value.class)
2351
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.value.className, combinedProps.value.class)
2347
2352
  })
2348
2353
 
2349
2354
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -2511,7 +2516,7 @@ function generateVueJsxPattern(ctx, filters) {
2511
2516
  const details = ctx.patterns.filterDetails(filters);
2512
2517
  return details.map((pattern) => {
2513
2518
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
2514
- const { description, jsxElement = "div" } = pattern.config;
2519
+ const { description, jsxElement = "div", deprecated } = pattern.config;
2515
2520
  return {
2516
2521
  name: dashName,
2517
2522
  js: import_outdent36.outdent`
@@ -2572,7 +2577,7 @@ function generateVueJsxPattern(ctx, filters) {
2572
2577
 
2573
2578
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
2574
2579
 
2575
- ${description ? `/** ${description} */` : ""}
2580
+ ${ctx.file.jsDocComment(description, { deprecated })}
2576
2581
  export declare const ${jsxName}: FunctionalComponent<${upperName}Props>
2577
2582
  `
2578
2583
  };
@@ -3512,12 +3517,12 @@ var parts_d_ts_default = {
3512
3517
 
3513
3518
  // src/artifacts/generated/pattern.d.ts.json
3514
3519
  var pattern_d_ts_default = {
3515
- content: "import type { CssProperty, SystemStyleObject } from './system-types'\nimport type { TokenCategory } from '../tokens'\n\ntype Primitive = string | number | boolean | null | undefined\ntype LiteralUnion<T, K extends Primitive = string> = T | (K & Record<never, never>)\n\nexport type PatternProperty =\n | { type: 'property'; value: CssProperty }\n | { type: 'enum'; value: string[] }\n | { type: 'token'; value: TokenCategory; property?: CssProperty }\n | { type: 'string' | 'boolean' | 'number' }\n\nexport interface PatternHelpers {\n map: (value: any, fn: (value: string) => string | undefined) => any\n isCssUnit: (value: any) => boolean\n isCssVar: (value: any) => boolean\n isCssFunction: (value: any) => boolean\n}\n\nexport interface PatternProperties {\n [key: string]: PatternProperty\n}\n\ntype InferProps<T> = Record<LiteralUnion<keyof T>, any>\n\nexport type PatternDefaultValue<T> = Partial<InferProps<T>>\n\nexport type PatternDefaultValueFn<T> = (props: InferProps<T>) => PatternDefaultValue<T>\n\nexport interface PatternConfig<T extends PatternProperties = PatternProperties> {\n /**\n * The description of the pattern. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The JSX element rendered by the pattern\n * @default 'div'\n */\n jsxElement?: string\n /**\n * The properties of the pattern.\n */\n properties?: T\n /**\n * The default values of the pattern.\n */\n defaultValues?: PatternDefaultValue<T> | PatternDefaultValueFn<T>\n /**\n * The css object this pattern will generate.\n */\n transform?: (props: InferProps<T>, helpers: PatternHelpers) => SystemStyleObject\n /**\n * The jsx element name this pattern will generate.\n */\n jsxName?: string\n /**\n * The jsx elements to track for this pattern. Can be string or Regexp.\n *\n * @default capitalize(pattern.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Whether to only generate types for the specified properties.\n * This will disallow css properties\n */\n strict?: boolean\n /**\n * @experimental\n * Disallow certain css properties for this pattern\n */\n blocklist?: LiteralUnion<CssProperty>[]\n}\n"
3520
+ content: "import type { CssProperty, SystemStyleObject } from './system-types'\nimport type { TokenCategory } from '../tokens'\n\ntype Primitive = string | number | boolean | null | undefined\ntype LiteralUnion<T, K extends Primitive = string> = T | (K & Record<never, never>)\n\nexport type PatternProperty =\n | { type: 'property'; value: CssProperty }\n | { type: 'enum'; value: string[] }\n | { type: 'token'; value: TokenCategory; property?: CssProperty }\n | { type: 'string' | 'boolean' | 'number' }\n\nexport interface PatternHelpers {\n map: (value: any, fn: (value: string) => string | undefined) => any\n isCssUnit: (value: any) => boolean\n isCssVar: (value: any) => boolean\n isCssFunction: (value: any) => boolean\n}\n\nexport interface PatternProperties {\n [key: string]: PatternProperty\n}\n\ntype InferProps<T> = Record<LiteralUnion<keyof T>, any>\n\nexport type PatternDefaultValue<T> = Partial<InferProps<T>>\n\nexport type PatternDefaultValueFn<T> = (props: InferProps<T>) => PatternDefaultValue<T>\n\nexport interface PatternConfig<T extends PatternProperties = PatternProperties> {\n /**\n * The description of the pattern. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The JSX element rendered by the pattern\n * @default 'div'\n */\n jsxElement?: string\n /**\n * The properties of the pattern.\n */\n properties?: T\n /**\n * The default values of the pattern.\n */\n defaultValues?: PatternDefaultValue<T> | PatternDefaultValueFn<T>\n /**\n * The css object this pattern will generate.\n */\n transform?: (props: InferProps<T>, helpers: PatternHelpers) => SystemStyleObject\n /**\n * Whether the pattern is deprecated.\n */\n deprecated?: boolean | string\n /**\n * The jsx element name this pattern will generate.\n */\n jsxName?: string\n /**\n * The jsx elements to track for this pattern. Can be string or Regexp.\n *\n * @default capitalize(pattern.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Whether to only generate types for the specified properties.\n * This will disallow css properties\n */\n strict?: boolean\n /**\n * @experimental\n * Disallow certain css properties for this pattern\n */\n blocklist?: LiteralUnion<CssProperty>[]\n}\n"
3516
3521
  };
3517
3522
 
3518
3523
  // src/artifacts/generated/recipe.d.ts.json
3519
3524
  var recipe_d_ts_default = {
3520
- content: "import type { RecipeRule } from './static-css'\nimport type { SystemStyleObject, DistributiveOmit, Pretty } from './system-types'\n\ntype StringToBoolean<T> = T extends 'true' | 'false' ? boolean : T\n\nexport type RecipeVariantRecord = Record<any, Record<any, SystemStyleObject>>\n\nexport type RecipeSelection<T extends RecipeVariantRecord> = keyof any extends keyof T\n ? {}\n : {\n [K in keyof T]?: StringToBoolean<keyof T[K]> | undefined\n }\n\nexport type RecipeVariantFn<T extends RecipeVariantRecord> = (props?: RecipeSelection<T>) => string\n\n/**\n * Extract the variant as optional props from a `cva` function.\n * Intended to be used with a JSX component, prefer `RecipeVariant` for a more strict type.\n */\nexport type RecipeVariantProps<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Pretty<Parameters<T>[0]>\n\n/**\n * Extract the variants from a `cva` function.\n */\nexport type RecipeVariant<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Exclude<Pretty<Required<RecipeVariantProps<T>>>, undefined>\n\ntype RecipeVariantMap<T extends RecipeVariantRecord> = {\n [K in keyof T]: Array<keyof T[K]>\n}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Standard\n * -----------------------------------------------------------------------------*/\n\nexport interface RecipeRuntimeFn<T extends RecipeVariantRecord> extends RecipeVariantFn<T> {\n __type: RecipeSelection<T>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n raw: (props?: RecipeSelection<T>) => SystemStyleObject\n config: RecipeConfig<T>\n splitVariantProps<Props extends RecipeSelection<T>>(\n props: Props,\n ): [RecipeSelection<T>, Pretty<DistributiveOmit<Props, keyof T>>]\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\ntype OneOrMore<T> = T | Array<T>\n\nexport type RecipeCompoundSelection<T> = {\n [K in keyof T]?: OneOrMore<StringToBoolean<keyof T[K]>> | undefined\n}\n\nexport type RecipeCompoundVariant<T> = T & {\n css: SystemStyleObject\n}\n\nexport interface RecipeDefinition<T extends RecipeVariantRecord = RecipeVariantRecord> {\n /**\n * The base styles of the recipe.\n */\n base?: SystemStyleObject\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<RecipeCompoundVariant<RecipeCompoundSelection<T>>>[]\n}\n\nexport type RecipeCreatorFn = <T extends RecipeVariantRecord>(config: RecipeDefinition<T>) => RecipeRuntimeFn<T>\n\ninterface RecipeConfigMeta {\n /**\n * The class name of the recipe.\n */\n className: string\n /**\n * The description of the recipe. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The jsx elements to track for this recipe. Can be string or Regexp.\n *\n * @default capitalize(recipe.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Variants to pre-generate, will be include in the final `config.staticCss`\n */\n staticCss?: RecipeRule[]\n}\n\nexport interface RecipeConfig<T extends RecipeVariantRecord = RecipeVariantRecord>\n extends RecipeDefinition<T>,\n RecipeConfigMeta {}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Slot\n * -----------------------------------------------------------------------------*/\n\ntype SlotRecord<S extends string, T> = Partial<Record<S, T>>\n\nexport type SlotRecipeVariantRecord<S extends string> = Record<any, Record<any, SlotRecord<S, SystemStyleObject>>>\n\nexport type SlotRecipeVariantFn<S extends string, T extends RecipeVariantRecord> = (\n props?: RecipeSelection<T>,\n) => SlotRecord<S, string>\n\nexport interface SlotRecipeRuntimeFn<S extends string, T extends SlotRecipeVariantRecord<S>>\n extends SlotRecipeVariantFn<S, T> {\n raw: (props?: RecipeSelection<T>) => Record<S, SystemStyleObject>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\nexport type SlotRecipeCompoundVariant<S extends string, T> = T & {\n css: SlotRecord<S, SystemStyleObject>\n}\n\nexport interface SlotRecipeDefinition<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> {\n /**\n * An optional class name that can be used to target slots in the DOM.\n */\n className?: string\n /**\n * The parts/slots of the recipe.\n */\n slots: S[] | Readonly<S[]>\n /**\n * The base styles of the recipe.\n */\n base?: SlotRecord<S, SystemStyleObject>\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<SlotRecipeCompoundVariant<S, RecipeCompoundSelection<T>>>[]\n}\n\nexport type SlotRecipeCreatorFn = <S extends string, T extends SlotRecipeVariantRecord<S>>(\n config: SlotRecipeDefinition<S, T>,\n) => SlotRecipeRuntimeFn<S, T>\n\nexport type SlotRecipeConfig<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> = SlotRecipeDefinition<S, T> & RecipeConfigMeta\n"
3525
+ content: "import type { RecipeRule } from './static-css'\nimport type { SystemStyleObject, DistributiveOmit, Pretty } from './system-types'\n\ntype StringToBoolean<T> = T extends 'true' | 'false' ? boolean : T\n\nexport type RecipeVariantRecord = Record<any, Record<any, SystemStyleObject>>\n\nexport type RecipeSelection<T extends RecipeVariantRecord> = keyof any extends keyof T\n ? {}\n : {\n [K in keyof T]?: StringToBoolean<keyof T[K]> | undefined\n }\n\nexport type RecipeVariantFn<T extends RecipeVariantRecord> = (props?: RecipeSelection<T>) => string\n\n/**\n * Extract the variant as optional props from a `cva` function.\n * Intended to be used with a JSX component, prefer `RecipeVariant` for a more strict type.\n */\nexport type RecipeVariantProps<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Pretty<Parameters<T>[0]>\n\n/**\n * Extract the variants from a `cva` function.\n */\nexport type RecipeVariant<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Exclude<Pretty<Required<RecipeVariantProps<T>>>, undefined>\n\ntype RecipeVariantMap<T extends RecipeVariantRecord> = {\n [K in keyof T]: Array<keyof T[K]>\n}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Standard\n * -----------------------------------------------------------------------------*/\n\nexport interface RecipeRuntimeFn<T extends RecipeVariantRecord> extends RecipeVariantFn<T> {\n __type: RecipeSelection<T>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n raw: (props?: RecipeSelection<T>) => SystemStyleObject\n config: RecipeConfig<T>\n splitVariantProps<Props extends RecipeSelection<T>>(\n props: Props,\n ): [RecipeSelection<T>, Pretty<DistributiveOmit<Props, keyof T>>]\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\ntype OneOrMore<T> = T | Array<T>\n\nexport type RecipeCompoundSelection<T> = {\n [K in keyof T]?: OneOrMore<StringToBoolean<keyof T[K]>> | undefined\n}\n\nexport type RecipeCompoundVariant<T> = T & {\n css: SystemStyleObject\n}\n\nexport interface RecipeDefinition<T extends RecipeVariantRecord = RecipeVariantRecord> {\n /**\n * The base styles of the recipe.\n */\n base?: SystemStyleObject\n /**\n * Whether the recipe is deprecated.\n */\n deprecated?: boolean | string\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<RecipeCompoundVariant<RecipeCompoundSelection<T>>>[]\n}\n\nexport type RecipeCreatorFn = <T extends RecipeVariantRecord>(config: RecipeDefinition<T>) => RecipeRuntimeFn<T>\n\ninterface RecipeConfigMeta {\n /**\n * The class name of the recipe.\n */\n className: string\n /**\n * The description of the recipe. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The jsx elements to track for this recipe. Can be string or Regexp.\n *\n * @default capitalize(recipe.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Variants to pre-generate, will be include in the final `config.staticCss`\n */\n staticCss?: RecipeRule[]\n}\n\nexport interface RecipeConfig<T extends RecipeVariantRecord = RecipeVariantRecord>\n extends RecipeDefinition<T>,\n RecipeConfigMeta {}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Slot\n * -----------------------------------------------------------------------------*/\n\ntype SlotRecord<S extends string, T> = Partial<Record<S, T>>\n\nexport type SlotRecipeVariantRecord<S extends string> = Record<any, Record<any, SlotRecord<S, SystemStyleObject>>>\n\nexport type SlotRecipeVariantFn<S extends string, T extends RecipeVariantRecord> = (\n props?: RecipeSelection<T>,\n) => SlotRecord<S, string>\n\nexport interface SlotRecipeRuntimeFn<S extends string, T extends SlotRecipeVariantRecord<S>>\n extends SlotRecipeVariantFn<S, T> {\n raw: (props?: RecipeSelection<T>) => Record<S, SystemStyleObject>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n splitVariantProps<Props extends RecipeSelection<T>>(\n props: Props,\n ): [RecipeSelection<T>, Pretty<DistributiveOmit<Props, keyof T>>]\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\nexport type SlotRecipeCompoundVariant<S extends string, T> = T & {\n css: SlotRecord<S, SystemStyleObject>\n}\n\nexport interface SlotRecipeDefinition<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> {\n /**\n * An optional class name that can be used to target slots in the DOM.\n */\n className?: string\n /**\n * Whether the recipe is deprecated.\n */\n deprecated?: boolean | string\n /**\n * The parts/slots of the recipe.\n */\n slots: S[] | Readonly<S[]>\n /**\n * The base styles of the recipe.\n */\n base?: SlotRecord<S, SystemStyleObject>\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<SlotRecipeCompoundVariant<S, RecipeCompoundSelection<T>>>[]\n}\n\nexport type SlotRecipeCreatorFn = <S extends string, T extends SlotRecipeVariantRecord<S>>(\n config: SlotRecipeDefinition<S, T>,\n) => SlotRecipeRuntimeFn<S, T>\n\nexport type SlotRecipeConfig<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> = SlotRecipeDefinition<S, T> & RecipeConfigMeta\n"
3521
3526
  };
3522
3527
 
3523
3528
  // src/artifacts/generated/selectors.d.ts.json
@@ -3532,7 +3537,7 @@ var static_css_d_ts_default = {
3532
3537
 
3533
3538
  // src/artifacts/generated/system-types.d.ts.json
3534
3539
  var system_types_d_ts_default = {
3535
- content: "import type { ConditionalValue, Nested } from './conditions'\nimport type { PropertiesFallback } from './csstype'\nimport type { SystemProperties, CssVarProperties } from './style-props'\n\ntype String = string & {}\ntype Number = number & {}\n\nexport type Pretty<T> = { [K in keyof T]: T[K] } & {}\n\nexport type DistributiveOmit<T, K extends keyof any> = T extends unknown ? Omit<T, K> : never\n\nexport type DistributiveUnion<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] | T[K] : T[K]\n} & DistributiveOmit<U, keyof T>\n\nexport type Assign<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] : T[K]\n} & U\n\n/* -----------------------------------------------------------------------------\n * Native css properties\n * -----------------------------------------------------------------------------*/\n\nexport type CssProperty = keyof PropertiesFallback\n\nexport interface CssProperties extends PropertiesFallback<String | Number>, CssVarProperties {}\n\nexport interface CssKeyframes {\n [name: string]: {\n [time: string]: CssProperties\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Conditional css properties\n * -----------------------------------------------------------------------------*/\n\ninterface GenericProperties {\n [key: string]: ConditionalValue<String | Number | boolean>\n}\n\n/* -----------------------------------------------------------------------------\n * Native css props\n * -----------------------------------------------------------------------------*/\n\nexport type NestedCssProperties = Nested<CssProperties>\n\nexport type SystemStyleObject = Nested<SystemProperties & CssVarProperties>\n\nexport interface GlobalStyleObject {\n [selector: string]: SystemStyleObject\n}\nexport interface ExtendableGlobalStyleObject {\n [selector: string]: SystemStyleObject | undefined\n extend?: GlobalStyleObject | undefined\n}\n\ntype FilterStyleObject<P extends string> = {\n [K in P]?: K extends keyof SystemStyleObject ? SystemStyleObject[K] : unknown\n}\n\nexport type CompositionStyleObject<Property extends string> = Nested<FilterStyleObject<Property> & CssVarProperties>\n\n/* -----------------------------------------------------------------------------\n * Jsx style props\n * -----------------------------------------------------------------------------*/\ninterface WithCss {\n css?: SystemStyleObject\n}\ntype StyleProps = SystemStyleObject & WithCss\n\nexport type JsxStyleProps = StyleProps & WithCss\n\nexport interface PatchedHTMLProps {\n htmlWidth?: string | number\n htmlHeight?: string | number\n htmlTranslate?: 'yes' | 'no' | undefined\n htmlContent?: string\n}\n\nexport type OmittedHTMLProps = 'color' | 'translate' | 'transition' | 'width' | 'height' | 'content'\n\ntype WithHTMLProps<T> = DistributiveOmit<T, OmittedHTMLProps> & PatchedHTMLProps\n\nexport type JsxHTMLProps<T extends Record<string, any>, P extends Record<string, any> = {}> = Assign<\n WithHTMLProps<T>,\n P\n>\n"
3540
+ content: "import type { ConditionalValue, Nested } from './conditions'\nimport type { PropertiesFallback } from './csstype'\nimport type { SystemProperties, CssVarProperties } from './style-props'\n\ntype String = string & {}\ntype Number = number & {}\n\nexport type Pretty<T> = { [K in keyof T]: T[K] } & {}\n\nexport type DistributiveOmit<T, K extends keyof any> = T extends unknown ? Omit<T, K> : never\n\nexport type DistributiveUnion<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] | T[K] : T[K]\n} & DistributiveOmit<U, keyof T>\n\nexport type Assign<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] : T[K]\n} & U\n\n/* -----------------------------------------------------------------------------\n * Native css properties\n * -----------------------------------------------------------------------------*/\n\nexport type CssProperty = keyof PropertiesFallback\n\nexport interface CssProperties extends PropertiesFallback<String | Number>, CssVarProperties {}\n\nexport interface CssKeyframes {\n [name: string]: {\n [time: string]: CssProperties\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Conditional css properties\n * -----------------------------------------------------------------------------*/\n\ninterface GenericProperties {\n [key: string]: ConditionalValue<String | Number | boolean>\n}\n\n/* -----------------------------------------------------------------------------\n * Native css props\n * -----------------------------------------------------------------------------*/\n\nexport type NestedCssProperties = Nested<CssProperties>\n\nexport type SystemStyleObject = Nested<SystemProperties & CssVarProperties>\n\nexport interface GlobalStyleObject {\n [selector: string]: SystemStyleObject\n}\nexport interface ExtendableGlobalStyleObject {\n [selector: string]: SystemStyleObject | undefined\n extend?: GlobalStyleObject | undefined\n}\n\ntype FilterStyleObject<P extends string> = {\n [K in P]?: K extends keyof SystemStyleObject ? SystemStyleObject[K] : unknown\n}\n\nexport type CompositionStyleObject<Property extends string> = Nested<FilterStyleObject<Property> & CssVarProperties>\n\n/* -----------------------------------------------------------------------------\n * Jsx style props\n * -----------------------------------------------------------------------------*/\ninterface WithCss {\n css?: SystemStyleObject | SystemStyleObject[]\n}\ntype StyleProps = SystemStyleObject & WithCss\n\nexport type JsxStyleProps = StyleProps & WithCss\n\nexport interface PatchedHTMLProps {\n htmlWidth?: string | number\n htmlHeight?: string | number\n htmlTranslate?: 'yes' | 'no' | undefined\n htmlContent?: string\n}\n\nexport type OmittedHTMLProps = 'color' | 'translate' | 'transition' | 'width' | 'height' | 'content'\n\ntype WithHTMLProps<T> = DistributiveOmit<T, OmittedHTMLProps> & PatchedHTMLProps\n\nexport type JsxHTMLProps<T extends Record<string, any>, P extends Record<string, any> = {}> = Assign<\n WithHTMLProps<T>,\n P\n>\n"
3536
3541
  };
3537
3542
 
3538
3543
  // src/artifacts/types/generated.ts
@@ -3613,7 +3618,7 @@ function generatePropTypes(ctx) {
3613
3618
  const { utility } = ctx;
3614
3619
  const result = [
3615
3620
  import_outdent40.outdent`
3616
- ${ctx.file.importType("Conditional", "./conditions")}
3621
+ ${ctx.file.importType("ConditionalValue", "./conditions")}
3617
3622
  ${ctx.file.importType("CssProperties", "./system-types")}
3618
3623
  ${ctx.file.importType("Tokens", "../tokens/index")}
3619
3624
 
@@ -3632,7 +3637,7 @@ function generatePropTypes(ctx) {
3632
3637
  type ImportantMark = "!" | "!important"
3633
3638
  type WhitespaceImportant = \` \${ImportantMark}\`
3634
3639
  type Important = ImportantMark | WhitespaceImportant
3635
- type WithImportant<T> = T extends string ? \`\${T}\${Important}\${string}\` : T
3640
+ type WithImportant<T> = T extends string ? \`\${T}\${Important}\` & { __important?: true } : T;
3636
3641
 
3637
3642
  /**
3638
3643
  * Only relevant when using \`strictTokens\` or \`strictPropertyValues\` in your config.
@@ -3650,7 +3655,7 @@ function generatePropTypes(ctx) {
3650
3655
  * @see https://panda-css.com/docs/concepts/writing-styles#stricttokens
3651
3656
  * @see https://panda-css.com/docs/concepts/writing-styles#strictpropertyvalues
3652
3657
  */
3653
- export type WithEscapeHatch<T> = T | \`[\${string}]\` | (T extends string ? WithColorOpacityModifier<string> | WithImportant<T> : T)
3658
+ export type WithEscapeHatch<T> = T | \`[\${string}]\` | WithColorOpacityModifier<T> | WithImportant<T>
3654
3659
 
3655
3660
  /**
3656
3661
  * Will restrict the value of properties that have predefined values to those values only.
@@ -3714,7 +3719,10 @@ function generateStyleProps(ctx) {
3714
3719
  if (!filtered.length) {
3715
3720
  filtered.push("string | number");
3716
3721
  }
3717
- const comment = csstype_d_ts_default.comments?.[prop] || "";
3722
+ let comment = csstype_d_ts_default.comments?.[prop] || "";
3723
+ if (ctx.utility.isDeprecated(prop)) {
3724
+ comment = comment ? comment.replace("@see", "@deprecated\n@see") : "/** @deprecated */";
3725
+ }
3718
3726
  const value = filtered.filter(Boolean).join(" | ");
3719
3727
  const line = `${key}?: ${restrict(prop, value, ctx.config)}`;
3720
3728
  return " " + [comment, line].filter(Boolean).join("\n");
@@ -4575,7 +4583,7 @@ function generateResetCss(ctx, sheet) {
4575
4583
  selector = `&${scope}`;
4576
4584
  }
4577
4585
  const scoped = {
4578
- "*, ::before, ::after, ::backdrop, ::first-letter, ::file-selector-button": {
4586
+ "*, ::before, ::after, ::backdrop, ::file-selector-button": {
4579
4587
  margin: "0px",
4580
4588
  padding: "0px",
4581
4589
  boxSizing: "border-box",
@@ -4630,10 +4638,6 @@ function generateResetCss(ctx, sheet) {
4630
4638
  "--placeholder-fallback": "color-mix(in srgb, currentColor 50%, transparent)",
4631
4639
  color: "var(--global-color-placeholder, var(--placeholder-fallback))"
4632
4640
  },
4633
- "select, textarea, input:where(:not([type='button'], [type='reset'], [type='submit']))": {
4634
- borderWidth: "1px",
4635
- borderStyle: "solid"
4636
- },
4637
4641
  textarea: {
4638
4642
  resize: "vertical"
4639
4643
  },
package/dist/index.mjs CHANGED
@@ -508,7 +508,7 @@ function generatePattern(ctx, filters) {
508
508
  const details = ctx.patterns.filterDetails(filters);
509
509
  return details.map((pattern) => {
510
510
  const { baseName, config, dashName, upperName, styleFnName, blocklistType } = pattern;
511
- const { properties, transform, strict, description, defaultValues } = config;
511
+ const { properties, transform, strict, description, defaultValues, deprecated } = config;
512
512
  const patternConfigFn = stringify(compact({ transform, defaultValues })) ?? "";
513
513
  const helperImports = ["getPatternStyles, patternFns"];
514
514
  if (patternConfigFn.includes("__spreadValues")) {
@@ -553,7 +553,7 @@ function generatePattern(ctx, filters) {
553
553
  raw: (styles?: ${upperName}Styles) => SystemStyleObject
554
554
  }
555
555
 
556
- ${description ? `/** ${description} */` : ""}
556
+ ${ctx.file.jsDocComment(description, { deprecated })}
557
557
  export declare const ${baseName}: ${upperName}PatternFn;
558
558
  `}
559
559
 
@@ -686,11 +686,11 @@ function generateRecipes(ctx, filters) {
686
686
  const details = ctx.recipes.filterDetails(filters);
687
687
  return details.map((recipe) => {
688
688
  const { baseName, config, upperName, variantKeyMap, dashName } = recipe;
689
- const { description, defaultVariants, compoundVariants } = config;
689
+ const { description, defaultVariants, compoundVariants, deprecated } = config;
690
690
  const jsCode = match4(config).when(
691
691
  Recipes.isSlotRecipeConfig,
692
692
  (config2) => outdent11`
693
- ${ctx.file.import("getSlotCompoundVariant, memo, splitProps", "../helpers")}
693
+ ${ctx.file.import("compact, getSlotCompoundVariant, memo, splitProps", "../helpers")}
694
694
  ${ctx.file.import("createRecipe", "./create-recipe")}
695
695
 
696
696
  const ${baseName}DefaultVariants = ${stringify2(defaultVariants ?? {})}
@@ -704,6 +704,7 @@ function generateRecipes(ctx, filters) {
704
704
  })
705
705
 
706
706
  const ${baseName}VariantKeys = ${stringify2(Object.keys(variantKeyMap))}
707
+ const getVariantProps = (variants) => ({ ...${baseName}DefaultVariants, ...compact(variants) })
707
708
 
708
709
  export const ${baseName} = /* @__PURE__ */ Object.assign(${baseName}Fn, {
709
710
  __recipe__: false,
@@ -714,6 +715,7 @@ function generateRecipes(ctx, filters) {
714
715
  splitVariantProps(props) {
715
716
  return splitProps(props, ${baseName}VariantKeys)
716
717
  },
718
+ getVariantProps
717
719
  })
718
720
  `
719
721
  ).otherwise(
@@ -780,7 +782,7 @@ function generateRecipes(ctx, filters) {
780
782
  getVariantProps: (props?: ${upperName}VariantProps) => ${upperName}VariantProps
781
783
  }
782
784
 
783
- ${description ? `/** ${description} */` : ""}
785
+ ${ctx.file.jsDocComment(description, { deprecated })}
784
786
  export declare const ${baseName}: ${upperName}Recipe
785
787
  `
786
788
  };
@@ -792,7 +794,7 @@ import { outdent as outdent12 } from "outdent";
792
794
  function generateSvaFn(ctx) {
793
795
  return {
794
796
  js: outdent12`
795
- ${ctx.file.import("getSlotRecipes, memo, splitProps", "../helpers")}
797
+ ${ctx.file.import("compact, getSlotRecipes, memo, splitProps", "../helpers")}
796
798
  ${ctx.file.import("cva", "./cva")}
797
799
  ${ctx.file.import("cx", "./cx")}
798
800
 
@@ -800,6 +802,7 @@ function generateSvaFn(ctx) {
800
802
 
801
803
  export function sva(config) {
802
804
  const slots = Object.entries(getSlotRecipes(config)).map(([slot, slotCva]) => [slot, cva(slotCva)])
805
+ const defaultVariants = config.defaultVariants ?? {}
803
806
 
804
807
  function svaFn(props) {
805
808
  const result = slots.map(([slot, cvaFn]) => [slot, cx(cvaFn(props), config.className && slotClass(config.className, slot))])
@@ -817,6 +820,7 @@ function generateSvaFn(ctx) {
817
820
  function splitVariantProps(props) {
818
821
  return splitProps(props, variantKeys);
819
822
  }
823
+ const getVariantProps = (variants) => ({ ...(defaultVariants || {}), ...compact(variants) })
820
824
 
821
825
  const variantMap = Object.fromEntries(
822
826
  Object.entries(variants).map(([key, value]) => [key, Object.keys(value)])
@@ -828,6 +832,7 @@ function generateSvaFn(ctx) {
828
832
  variantMap,
829
833
  variantKeys,
830
834
  splitVariantProps,
835
+ getVariantProps,
831
836
  })
832
837
  }
833
838
  `,
@@ -922,13 +927,13 @@ function generatePreactJsxFactory(ctx) {
922
927
  function recipeClass() {
923
928
  const { css: cssStyles, ...propStyles } = styleProps
924
929
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps)
925
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.class, combinedProps.className)
930
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, combinedProps.className)
926
931
  }
927
932
 
928
933
  function cvaClass() {
929
934
  const { css: cssStyles, ...propStyles } = styleProps
930
935
  const cvaStyles = __cvaFn__.raw(variantProps)
931
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.class, combinedProps.className)
936
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, combinedProps.className)
932
937
  }
933
938
 
934
939
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -981,7 +986,7 @@ function generatePreactJsxPattern(ctx, filters) {
981
986
  const details = ctx.patterns.filterDetails(filters);
982
987
  return details.map((pattern) => {
983
988
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
984
- const { description, jsxElement = "div" } = pattern.config;
989
+ const { description, jsxElement = "div", deprecated } = pattern.config;
985
990
  return {
986
991
  name: dashName,
987
992
  js: outdent15`
@@ -1035,7 +1040,7 @@ function generatePreactJsxPattern(ctx, filters) {
1035
1040
 
1036
1041
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
1037
1042
 
1038
- ${description ? `/** ${description} */` : ""}
1043
+ ${ctx.file.jsDocComment(description, { deprecated })}
1039
1044
  export declare const ${jsxName}: FunctionComponent<${upperName}Props>
1040
1045
  `
1041
1046
  };
@@ -1250,13 +1255,13 @@ function generateQwikJsxFactory(ctx) {
1250
1255
  function recipeClass() {
1251
1256
  const { css: cssStyles, ...propStyles } = styleProps
1252
1257
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps);
1253
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.class, className)
1258
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, className)
1254
1259
  }
1255
1260
 
1256
1261
  function cvaClass() {
1257
1262
  const { css: cssStyles, ...propStyles } = styleProps
1258
1263
  const cvaStyles = __cvaFn__.raw(variantProps)
1259
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.class, className)
1264
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.class, className)
1260
1265
  }
1261
1266
 
1262
1267
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -1309,7 +1314,7 @@ function generateQwikJsxPattern(ctx, filters) {
1309
1314
  const details = ctx.patterns.filterDetails(filters);
1310
1315
  return details.map((pattern) => {
1311
1316
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
1312
- const { description, jsxElement = "div" } = pattern.config;
1317
+ const { description, jsxElement = "div", deprecated } = pattern.config;
1313
1318
  return {
1314
1319
  name: dashName,
1315
1320
  js: outdent20`
@@ -1362,7 +1367,7 @@ function generateQwikJsxPattern(ctx, filters) {
1362
1367
 
1363
1368
  export interface ${upperName}Props extends Assign<${typeName}<'${jsxElement}'>, DistributiveOmit<${upperName}Properties, ${blocklistType || '""'}>> {}
1364
1369
 
1365
- ${description ? `/** ${description} */` : ""}
1370
+ ${ctx.file.jsDocComment(description, { deprecated })}
1366
1371
  export declare const ${jsxName}: Component<${upperName}Props>
1367
1372
  `
1368
1373
  };
@@ -1583,13 +1588,13 @@ function generateReactJsxFactory(ctx) {
1583
1588
  function recipeClass() {
1584
1589
  const { css: cssStyles, ...propStyles } = styleProps
1585
1590
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps)
1586
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.className)
1591
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.className)
1587
1592
  }
1588
1593
 
1589
1594
  function cvaClass() {
1590
1595
  const { css: cssStyles, ...propStyles } = styleProps
1591
1596
  const cvaStyles = __cvaFn__.raw(variantProps)
1592
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.className)
1597
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.className)
1593
1598
  }
1594
1599
 
1595
1600
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -1643,7 +1648,7 @@ function generateReactJsxPattern(ctx, filters) {
1643
1648
  const details = ctx.patterns.filterDetails(filters);
1644
1649
  return details.map((pattern) => {
1645
1650
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
1646
- const { description, jsxElement = "div" } = pattern.config;
1651
+ const { description, jsxElement = "div", deprecated } = pattern.config;
1647
1652
  return {
1648
1653
  name: dashName,
1649
1654
  js: outdent25`
@@ -1696,7 +1701,7 @@ function generateReactJsxPattern(ctx, filters) {
1696
1701
 
1697
1702
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
1698
1703
 
1699
- ${description ? `/** ${description} */` : ""}
1704
+ ${ctx.file.jsDocComment(description, { deprecated })}
1700
1705
  export declare const ${jsxName}: FunctionComponent<${upperName}Props>
1701
1706
  `
1702
1707
  };
@@ -1946,7 +1951,7 @@ function generateSolidJsxFactory(ctx) {
1946
1951
  __cvaFn__.__getCompoundVariantCss__?.(variantProps)
1947
1952
  return cx(
1948
1953
  __cvaFn__(variantProps, false),
1949
- css(compoundVariantStyles, propStyles, cssStyles),
1954
+ css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])),
1950
1955
  localProps.class,
1951
1956
  localProps.className
1952
1957
  )
@@ -1956,7 +1961,7 @@ function generateSolidJsxFactory(ctx) {
1956
1961
  const { css: cssStyles, ...propStyles } = styleProps
1957
1962
  const cvaStyles = __cvaFn__.raw(variantProps)
1958
1963
  return cx(
1959
- css(cvaStyles, propStyles, cssStyles),
1964
+ css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])),
1960
1965
  localProps.class,
1961
1966
  localProps.className
1962
1967
  )
@@ -2020,7 +2025,7 @@ function generateSolidJsxPattern(ctx, filters) {
2020
2025
  const details = ctx.patterns.filterDetails(filters);
2021
2026
  return details.map((pattern) => {
2022
2027
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
2023
- const { description, jsxElement = "div" } = pattern.config;
2028
+ const { description, jsxElement = "div", deprecated } = pattern.config;
2024
2029
  return {
2025
2030
  name: dashName,
2026
2031
  js: outdent30`
@@ -2075,7 +2080,7 @@ function generateSolidJsxPattern(ctx, filters) {
2075
2080
 
2076
2081
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
2077
2082
 
2078
- ${description ? `/** ${description} */` : ""}
2083
+ ${ctx.file.jsDocComment(description, { deprecated })}
2079
2084
  export declare const ${jsxName}: Component<${upperName}Props>
2080
2085
  `
2081
2086
  };
@@ -2300,14 +2305,14 @@ function generateVueJsxFactory(ctx) {
2300
2305
  const [_htmlProps, _forwardedProps, variantProps, styleProps, _elementProps] = splittedProps.value
2301
2306
  const { css: cssStyles, ...propStyles } = styleProps
2302
2307
  const compoundVariantStyles = __cvaFn__.__getCompoundVariantCss__?.(variantProps);
2303
- return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, cssStyles), combinedProps.value.className, combinedProps.value.class)
2308
+ return cx(__cvaFn__(variantProps, false), css(compoundVariantStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.value.className, combinedProps.value.class)
2304
2309
  })
2305
2310
 
2306
2311
  const cvaClass = computed(() => {
2307
2312
  const [_htmlProps, _forwardedProps, variantProps, styleProps, _elementProps] = splittedProps.value
2308
2313
  const { css: cssStyles, ...propStyles } = styleProps
2309
2314
  const cvaStyles = __cvaFn__.raw(variantProps)
2310
- return cx(css(cvaStyles, propStyles, cssStyles), combinedProps.value.className, combinedProps.value.class)
2315
+ return cx(css(cvaStyles, propStyles, ...(Array.isArray(cssStyles) ? cssStyles : [cssStyles])), combinedProps.value.className, combinedProps.value.class)
2311
2316
  })
2312
2317
 
2313
2318
  const classes = configOrCva.__recipe__ ? recipeClass : cvaClass
@@ -2475,7 +2480,7 @@ function generateVueJsxPattern(ctx, filters) {
2475
2480
  const details = ctx.patterns.filterDetails(filters);
2476
2481
  return details.map((pattern) => {
2477
2482
  const { upperName, styleFnName, dashName, jsxName, props, blocklistType } = pattern;
2478
- const { description, jsxElement = "div" } = pattern.config;
2483
+ const { description, jsxElement = "div", deprecated } = pattern.config;
2479
2484
  return {
2480
2485
  name: dashName,
2481
2486
  js: outdent36`
@@ -2536,7 +2541,7 @@ function generateVueJsxPattern(ctx, filters) {
2536
2541
 
2537
2542
  export interface ${upperName}Props extends ${upperName}Properties, DistributiveOmit<${typeName}<'${jsxElement}'>, keyof ${upperName}Properties ${blocklistType}> {}
2538
2543
 
2539
- ${description ? `/** ${description} */` : ""}
2544
+ ${ctx.file.jsDocComment(description, { deprecated })}
2540
2545
  export declare const ${jsxName}: FunctionalComponent<${upperName}Props>
2541
2546
  `
2542
2547
  };
@@ -3476,12 +3481,12 @@ var parts_d_ts_default = {
3476
3481
 
3477
3482
  // src/artifacts/generated/pattern.d.ts.json
3478
3483
  var pattern_d_ts_default = {
3479
- content: "import type { CssProperty, SystemStyleObject } from './system-types'\nimport type { TokenCategory } from '../tokens'\n\ntype Primitive = string | number | boolean | null | undefined\ntype LiteralUnion<T, K extends Primitive = string> = T | (K & Record<never, never>)\n\nexport type PatternProperty =\n | { type: 'property'; value: CssProperty }\n | { type: 'enum'; value: string[] }\n | { type: 'token'; value: TokenCategory; property?: CssProperty }\n | { type: 'string' | 'boolean' | 'number' }\n\nexport interface PatternHelpers {\n map: (value: any, fn: (value: string) => string | undefined) => any\n isCssUnit: (value: any) => boolean\n isCssVar: (value: any) => boolean\n isCssFunction: (value: any) => boolean\n}\n\nexport interface PatternProperties {\n [key: string]: PatternProperty\n}\n\ntype InferProps<T> = Record<LiteralUnion<keyof T>, any>\n\nexport type PatternDefaultValue<T> = Partial<InferProps<T>>\n\nexport type PatternDefaultValueFn<T> = (props: InferProps<T>) => PatternDefaultValue<T>\n\nexport interface PatternConfig<T extends PatternProperties = PatternProperties> {\n /**\n * The description of the pattern. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The JSX element rendered by the pattern\n * @default 'div'\n */\n jsxElement?: string\n /**\n * The properties of the pattern.\n */\n properties?: T\n /**\n * The default values of the pattern.\n */\n defaultValues?: PatternDefaultValue<T> | PatternDefaultValueFn<T>\n /**\n * The css object this pattern will generate.\n */\n transform?: (props: InferProps<T>, helpers: PatternHelpers) => SystemStyleObject\n /**\n * The jsx element name this pattern will generate.\n */\n jsxName?: string\n /**\n * The jsx elements to track for this pattern. Can be string or Regexp.\n *\n * @default capitalize(pattern.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Whether to only generate types for the specified properties.\n * This will disallow css properties\n */\n strict?: boolean\n /**\n * @experimental\n * Disallow certain css properties for this pattern\n */\n blocklist?: LiteralUnion<CssProperty>[]\n}\n"
3484
+ content: "import type { CssProperty, SystemStyleObject } from './system-types'\nimport type { TokenCategory } from '../tokens'\n\ntype Primitive = string | number | boolean | null | undefined\ntype LiteralUnion<T, K extends Primitive = string> = T | (K & Record<never, never>)\n\nexport type PatternProperty =\n | { type: 'property'; value: CssProperty }\n | { type: 'enum'; value: string[] }\n | { type: 'token'; value: TokenCategory; property?: CssProperty }\n | { type: 'string' | 'boolean' | 'number' }\n\nexport interface PatternHelpers {\n map: (value: any, fn: (value: string) => string | undefined) => any\n isCssUnit: (value: any) => boolean\n isCssVar: (value: any) => boolean\n isCssFunction: (value: any) => boolean\n}\n\nexport interface PatternProperties {\n [key: string]: PatternProperty\n}\n\ntype InferProps<T> = Record<LiteralUnion<keyof T>, any>\n\nexport type PatternDefaultValue<T> = Partial<InferProps<T>>\n\nexport type PatternDefaultValueFn<T> = (props: InferProps<T>) => PatternDefaultValue<T>\n\nexport interface PatternConfig<T extends PatternProperties = PatternProperties> {\n /**\n * The description of the pattern. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The JSX element rendered by the pattern\n * @default 'div'\n */\n jsxElement?: string\n /**\n * The properties of the pattern.\n */\n properties?: T\n /**\n * The default values of the pattern.\n */\n defaultValues?: PatternDefaultValue<T> | PatternDefaultValueFn<T>\n /**\n * The css object this pattern will generate.\n */\n transform?: (props: InferProps<T>, helpers: PatternHelpers) => SystemStyleObject\n /**\n * Whether the pattern is deprecated.\n */\n deprecated?: boolean | string\n /**\n * The jsx element name this pattern will generate.\n */\n jsxName?: string\n /**\n * The jsx elements to track for this pattern. Can be string or Regexp.\n *\n * @default capitalize(pattern.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Whether to only generate types for the specified properties.\n * This will disallow css properties\n */\n strict?: boolean\n /**\n * @experimental\n * Disallow certain css properties for this pattern\n */\n blocklist?: LiteralUnion<CssProperty>[]\n}\n"
3480
3485
  };
3481
3486
 
3482
3487
  // src/artifacts/generated/recipe.d.ts.json
3483
3488
  var recipe_d_ts_default = {
3484
- content: "import type { RecipeRule } from './static-css'\nimport type { SystemStyleObject, DistributiveOmit, Pretty } from './system-types'\n\ntype StringToBoolean<T> = T extends 'true' | 'false' ? boolean : T\n\nexport type RecipeVariantRecord = Record<any, Record<any, SystemStyleObject>>\n\nexport type RecipeSelection<T extends RecipeVariantRecord> = keyof any extends keyof T\n ? {}\n : {\n [K in keyof T]?: StringToBoolean<keyof T[K]> | undefined\n }\n\nexport type RecipeVariantFn<T extends RecipeVariantRecord> = (props?: RecipeSelection<T>) => string\n\n/**\n * Extract the variant as optional props from a `cva` function.\n * Intended to be used with a JSX component, prefer `RecipeVariant` for a more strict type.\n */\nexport type RecipeVariantProps<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Pretty<Parameters<T>[0]>\n\n/**\n * Extract the variants from a `cva` function.\n */\nexport type RecipeVariant<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Exclude<Pretty<Required<RecipeVariantProps<T>>>, undefined>\n\ntype RecipeVariantMap<T extends RecipeVariantRecord> = {\n [K in keyof T]: Array<keyof T[K]>\n}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Standard\n * -----------------------------------------------------------------------------*/\n\nexport interface RecipeRuntimeFn<T extends RecipeVariantRecord> extends RecipeVariantFn<T> {\n __type: RecipeSelection<T>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n raw: (props?: RecipeSelection<T>) => SystemStyleObject\n config: RecipeConfig<T>\n splitVariantProps<Props extends RecipeSelection<T>>(\n props: Props,\n ): [RecipeSelection<T>, Pretty<DistributiveOmit<Props, keyof T>>]\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\ntype OneOrMore<T> = T | Array<T>\n\nexport type RecipeCompoundSelection<T> = {\n [K in keyof T]?: OneOrMore<StringToBoolean<keyof T[K]>> | undefined\n}\n\nexport type RecipeCompoundVariant<T> = T & {\n css: SystemStyleObject\n}\n\nexport interface RecipeDefinition<T extends RecipeVariantRecord = RecipeVariantRecord> {\n /**\n * The base styles of the recipe.\n */\n base?: SystemStyleObject\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<RecipeCompoundVariant<RecipeCompoundSelection<T>>>[]\n}\n\nexport type RecipeCreatorFn = <T extends RecipeVariantRecord>(config: RecipeDefinition<T>) => RecipeRuntimeFn<T>\n\ninterface RecipeConfigMeta {\n /**\n * The class name of the recipe.\n */\n className: string\n /**\n * The description of the recipe. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The jsx elements to track for this recipe. Can be string or Regexp.\n *\n * @default capitalize(recipe.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Variants to pre-generate, will be include in the final `config.staticCss`\n */\n staticCss?: RecipeRule[]\n}\n\nexport interface RecipeConfig<T extends RecipeVariantRecord = RecipeVariantRecord>\n extends RecipeDefinition<T>,\n RecipeConfigMeta {}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Slot\n * -----------------------------------------------------------------------------*/\n\ntype SlotRecord<S extends string, T> = Partial<Record<S, T>>\n\nexport type SlotRecipeVariantRecord<S extends string> = Record<any, Record<any, SlotRecord<S, SystemStyleObject>>>\n\nexport type SlotRecipeVariantFn<S extends string, T extends RecipeVariantRecord> = (\n props?: RecipeSelection<T>,\n) => SlotRecord<S, string>\n\nexport interface SlotRecipeRuntimeFn<S extends string, T extends SlotRecipeVariantRecord<S>>\n extends SlotRecipeVariantFn<S, T> {\n raw: (props?: RecipeSelection<T>) => Record<S, SystemStyleObject>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\nexport type SlotRecipeCompoundVariant<S extends string, T> = T & {\n css: SlotRecord<S, SystemStyleObject>\n}\n\nexport interface SlotRecipeDefinition<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> {\n /**\n * An optional class name that can be used to target slots in the DOM.\n */\n className?: string\n /**\n * The parts/slots of the recipe.\n */\n slots: S[] | Readonly<S[]>\n /**\n * The base styles of the recipe.\n */\n base?: SlotRecord<S, SystemStyleObject>\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<SlotRecipeCompoundVariant<S, RecipeCompoundSelection<T>>>[]\n}\n\nexport type SlotRecipeCreatorFn = <S extends string, T extends SlotRecipeVariantRecord<S>>(\n config: SlotRecipeDefinition<S, T>,\n) => SlotRecipeRuntimeFn<S, T>\n\nexport type SlotRecipeConfig<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> = SlotRecipeDefinition<S, T> & RecipeConfigMeta\n"
3489
+ content: "import type { RecipeRule } from './static-css'\nimport type { SystemStyleObject, DistributiveOmit, Pretty } from './system-types'\n\ntype StringToBoolean<T> = T extends 'true' | 'false' ? boolean : T\n\nexport type RecipeVariantRecord = Record<any, Record<any, SystemStyleObject>>\n\nexport type RecipeSelection<T extends RecipeVariantRecord> = keyof any extends keyof T\n ? {}\n : {\n [K in keyof T]?: StringToBoolean<keyof T[K]> | undefined\n }\n\nexport type RecipeVariantFn<T extends RecipeVariantRecord> = (props?: RecipeSelection<T>) => string\n\n/**\n * Extract the variant as optional props from a `cva` function.\n * Intended to be used with a JSX component, prefer `RecipeVariant` for a more strict type.\n */\nexport type RecipeVariantProps<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Pretty<Parameters<T>[0]>\n\n/**\n * Extract the variants from a `cva` function.\n */\nexport type RecipeVariant<\n T extends RecipeVariantFn<RecipeVariantRecord> | SlotRecipeVariantFn<string, SlotRecipeVariantRecord<string>>,\n> = Exclude<Pretty<Required<RecipeVariantProps<T>>>, undefined>\n\ntype RecipeVariantMap<T extends RecipeVariantRecord> = {\n [K in keyof T]: Array<keyof T[K]>\n}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Standard\n * -----------------------------------------------------------------------------*/\n\nexport interface RecipeRuntimeFn<T extends RecipeVariantRecord> extends RecipeVariantFn<T> {\n __type: RecipeSelection<T>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n raw: (props?: RecipeSelection<T>) => SystemStyleObject\n config: RecipeConfig<T>\n splitVariantProps<Props extends RecipeSelection<T>>(\n props: Props,\n ): [RecipeSelection<T>, Pretty<DistributiveOmit<Props, keyof T>>]\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\ntype OneOrMore<T> = T | Array<T>\n\nexport type RecipeCompoundSelection<T> = {\n [K in keyof T]?: OneOrMore<StringToBoolean<keyof T[K]>> | undefined\n}\n\nexport type RecipeCompoundVariant<T> = T & {\n css: SystemStyleObject\n}\n\nexport interface RecipeDefinition<T extends RecipeVariantRecord = RecipeVariantRecord> {\n /**\n * The base styles of the recipe.\n */\n base?: SystemStyleObject\n /**\n * Whether the recipe is deprecated.\n */\n deprecated?: boolean | string\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<RecipeCompoundVariant<RecipeCompoundSelection<T>>>[]\n}\n\nexport type RecipeCreatorFn = <T extends RecipeVariantRecord>(config: RecipeDefinition<T>) => RecipeRuntimeFn<T>\n\ninterface RecipeConfigMeta {\n /**\n * The class name of the recipe.\n */\n className: string\n /**\n * The description of the recipe. This will be used in the JSDoc comment.\n */\n description?: string\n /**\n * The jsx elements to track for this recipe. Can be string or Regexp.\n *\n * @default capitalize(recipe.name)\n * @example ['Button', 'Link', /Button$/]\n */\n jsx?: Array<string | RegExp>\n /**\n * Variants to pre-generate, will be include in the final `config.staticCss`\n */\n staticCss?: RecipeRule[]\n}\n\nexport interface RecipeConfig<T extends RecipeVariantRecord = RecipeVariantRecord>\n extends RecipeDefinition<T>,\n RecipeConfigMeta {}\n\n/* -----------------------------------------------------------------------------\n * Recipe / Slot\n * -----------------------------------------------------------------------------*/\n\ntype SlotRecord<S extends string, T> = Partial<Record<S, T>>\n\nexport type SlotRecipeVariantRecord<S extends string> = Record<any, Record<any, SlotRecord<S, SystemStyleObject>>>\n\nexport type SlotRecipeVariantFn<S extends string, T extends RecipeVariantRecord> = (\n props?: RecipeSelection<T>,\n) => SlotRecord<S, string>\n\nexport interface SlotRecipeRuntimeFn<S extends string, T extends SlotRecipeVariantRecord<S>>\n extends SlotRecipeVariantFn<S, T> {\n raw: (props?: RecipeSelection<T>) => Record<S, SystemStyleObject>\n variantKeys: (keyof T)[]\n variantMap: RecipeVariantMap<T>\n splitVariantProps<Props extends RecipeSelection<T>>(\n props: Props,\n ): [RecipeSelection<T>, Pretty<DistributiveOmit<Props, keyof T>>]\n getVariantProps: (props?: RecipeSelection<T>) => RecipeSelection<T>\n}\n\nexport type SlotRecipeCompoundVariant<S extends string, T> = T & {\n css: SlotRecord<S, SystemStyleObject>\n}\n\nexport interface SlotRecipeDefinition<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> {\n /**\n * An optional class name that can be used to target slots in the DOM.\n */\n className?: string\n /**\n * Whether the recipe is deprecated.\n */\n deprecated?: boolean | string\n /**\n * The parts/slots of the recipe.\n */\n slots: S[] | Readonly<S[]>\n /**\n * The base styles of the recipe.\n */\n base?: SlotRecord<S, SystemStyleObject>\n /**\n * The multi-variant styles of the recipe.\n */\n variants?: T\n /**\n * The default variants of the recipe.\n */\n defaultVariants?: RecipeSelection<T>\n /**\n * The styles to apply when a combination of variants is selected.\n */\n compoundVariants?: Pretty<SlotRecipeCompoundVariant<S, RecipeCompoundSelection<T>>>[]\n}\n\nexport type SlotRecipeCreatorFn = <S extends string, T extends SlotRecipeVariantRecord<S>>(\n config: SlotRecipeDefinition<S, T>,\n) => SlotRecipeRuntimeFn<S, T>\n\nexport type SlotRecipeConfig<\n S extends string = string,\n T extends SlotRecipeVariantRecord<S> = SlotRecipeVariantRecord<S>,\n> = SlotRecipeDefinition<S, T> & RecipeConfigMeta\n"
3485
3490
  };
3486
3491
 
3487
3492
  // src/artifacts/generated/selectors.d.ts.json
@@ -3496,7 +3501,7 @@ var static_css_d_ts_default = {
3496
3501
 
3497
3502
  // src/artifacts/generated/system-types.d.ts.json
3498
3503
  var system_types_d_ts_default = {
3499
- content: "import type { ConditionalValue, Nested } from './conditions'\nimport type { PropertiesFallback } from './csstype'\nimport type { SystemProperties, CssVarProperties } from './style-props'\n\ntype String = string & {}\ntype Number = number & {}\n\nexport type Pretty<T> = { [K in keyof T]: T[K] } & {}\n\nexport type DistributiveOmit<T, K extends keyof any> = T extends unknown ? Omit<T, K> : never\n\nexport type DistributiveUnion<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] | T[K] : T[K]\n} & DistributiveOmit<U, keyof T>\n\nexport type Assign<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] : T[K]\n} & U\n\n/* -----------------------------------------------------------------------------\n * Native css properties\n * -----------------------------------------------------------------------------*/\n\nexport type CssProperty = keyof PropertiesFallback\n\nexport interface CssProperties extends PropertiesFallback<String | Number>, CssVarProperties {}\n\nexport interface CssKeyframes {\n [name: string]: {\n [time: string]: CssProperties\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Conditional css properties\n * -----------------------------------------------------------------------------*/\n\ninterface GenericProperties {\n [key: string]: ConditionalValue<String | Number | boolean>\n}\n\n/* -----------------------------------------------------------------------------\n * Native css props\n * -----------------------------------------------------------------------------*/\n\nexport type NestedCssProperties = Nested<CssProperties>\n\nexport type SystemStyleObject = Nested<SystemProperties & CssVarProperties>\n\nexport interface GlobalStyleObject {\n [selector: string]: SystemStyleObject\n}\nexport interface ExtendableGlobalStyleObject {\n [selector: string]: SystemStyleObject | undefined\n extend?: GlobalStyleObject | undefined\n}\n\ntype FilterStyleObject<P extends string> = {\n [K in P]?: K extends keyof SystemStyleObject ? SystemStyleObject[K] : unknown\n}\n\nexport type CompositionStyleObject<Property extends string> = Nested<FilterStyleObject<Property> & CssVarProperties>\n\n/* -----------------------------------------------------------------------------\n * Jsx style props\n * -----------------------------------------------------------------------------*/\ninterface WithCss {\n css?: SystemStyleObject\n}\ntype StyleProps = SystemStyleObject & WithCss\n\nexport type JsxStyleProps = StyleProps & WithCss\n\nexport interface PatchedHTMLProps {\n htmlWidth?: string | number\n htmlHeight?: string | number\n htmlTranslate?: 'yes' | 'no' | undefined\n htmlContent?: string\n}\n\nexport type OmittedHTMLProps = 'color' | 'translate' | 'transition' | 'width' | 'height' | 'content'\n\ntype WithHTMLProps<T> = DistributiveOmit<T, OmittedHTMLProps> & PatchedHTMLProps\n\nexport type JsxHTMLProps<T extends Record<string, any>, P extends Record<string, any> = {}> = Assign<\n WithHTMLProps<T>,\n P\n>\n"
3504
+ content: "import type { ConditionalValue, Nested } from './conditions'\nimport type { PropertiesFallback } from './csstype'\nimport type { SystemProperties, CssVarProperties } from './style-props'\n\ntype String = string & {}\ntype Number = number & {}\n\nexport type Pretty<T> = { [K in keyof T]: T[K] } & {}\n\nexport type DistributiveOmit<T, K extends keyof any> = T extends unknown ? Omit<T, K> : never\n\nexport type DistributiveUnion<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] | T[K] : T[K]\n} & DistributiveOmit<U, keyof T>\n\nexport type Assign<T, U> = {\n [K in keyof T]: K extends keyof U ? U[K] : T[K]\n} & U\n\n/* -----------------------------------------------------------------------------\n * Native css properties\n * -----------------------------------------------------------------------------*/\n\nexport type CssProperty = keyof PropertiesFallback\n\nexport interface CssProperties extends PropertiesFallback<String | Number>, CssVarProperties {}\n\nexport interface CssKeyframes {\n [name: string]: {\n [time: string]: CssProperties\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Conditional css properties\n * -----------------------------------------------------------------------------*/\n\ninterface GenericProperties {\n [key: string]: ConditionalValue<String | Number | boolean>\n}\n\n/* -----------------------------------------------------------------------------\n * Native css props\n * -----------------------------------------------------------------------------*/\n\nexport type NestedCssProperties = Nested<CssProperties>\n\nexport type SystemStyleObject = Nested<SystemProperties & CssVarProperties>\n\nexport interface GlobalStyleObject {\n [selector: string]: SystemStyleObject\n}\nexport interface ExtendableGlobalStyleObject {\n [selector: string]: SystemStyleObject | undefined\n extend?: GlobalStyleObject | undefined\n}\n\ntype FilterStyleObject<P extends string> = {\n [K in P]?: K extends keyof SystemStyleObject ? SystemStyleObject[K] : unknown\n}\n\nexport type CompositionStyleObject<Property extends string> = Nested<FilterStyleObject<Property> & CssVarProperties>\n\n/* -----------------------------------------------------------------------------\n * Jsx style props\n * -----------------------------------------------------------------------------*/\ninterface WithCss {\n css?: SystemStyleObject | SystemStyleObject[]\n}\ntype StyleProps = SystemStyleObject & WithCss\n\nexport type JsxStyleProps = StyleProps & WithCss\n\nexport interface PatchedHTMLProps {\n htmlWidth?: string | number\n htmlHeight?: string | number\n htmlTranslate?: 'yes' | 'no' | undefined\n htmlContent?: string\n}\n\nexport type OmittedHTMLProps = 'color' | 'translate' | 'transition' | 'width' | 'height' | 'content'\n\ntype WithHTMLProps<T> = DistributiveOmit<T, OmittedHTMLProps> & PatchedHTMLProps\n\nexport type JsxHTMLProps<T extends Record<string, any>, P extends Record<string, any> = {}> = Assign<\n WithHTMLProps<T>,\n P\n>\n"
3500
3505
  };
3501
3506
 
3502
3507
  // src/artifacts/types/generated.ts
@@ -3577,7 +3582,7 @@ function generatePropTypes(ctx) {
3577
3582
  const { utility } = ctx;
3578
3583
  const result = [
3579
3584
  outdent40`
3580
- ${ctx.file.importType("Conditional", "./conditions")}
3585
+ ${ctx.file.importType("ConditionalValue", "./conditions")}
3581
3586
  ${ctx.file.importType("CssProperties", "./system-types")}
3582
3587
  ${ctx.file.importType("Tokens", "../tokens/index")}
3583
3588
 
@@ -3596,7 +3601,7 @@ function generatePropTypes(ctx) {
3596
3601
  type ImportantMark = "!" | "!important"
3597
3602
  type WhitespaceImportant = \` \${ImportantMark}\`
3598
3603
  type Important = ImportantMark | WhitespaceImportant
3599
- type WithImportant<T> = T extends string ? \`\${T}\${Important}\${string}\` : T
3604
+ type WithImportant<T> = T extends string ? \`\${T}\${Important}\` & { __important?: true } : T;
3600
3605
 
3601
3606
  /**
3602
3607
  * Only relevant when using \`strictTokens\` or \`strictPropertyValues\` in your config.
@@ -3614,7 +3619,7 @@ function generatePropTypes(ctx) {
3614
3619
  * @see https://panda-css.com/docs/concepts/writing-styles#stricttokens
3615
3620
  * @see https://panda-css.com/docs/concepts/writing-styles#strictpropertyvalues
3616
3621
  */
3617
- export type WithEscapeHatch<T> = T | \`[\${string}]\` | (T extends string ? WithColorOpacityModifier<string> | WithImportant<T> : T)
3622
+ export type WithEscapeHatch<T> = T | \`[\${string}]\` | WithColorOpacityModifier<T> | WithImportant<T>
3618
3623
 
3619
3624
  /**
3620
3625
  * Will restrict the value of properties that have predefined values to those values only.
@@ -3678,7 +3683,10 @@ function generateStyleProps(ctx) {
3678
3683
  if (!filtered.length) {
3679
3684
  filtered.push("string | number");
3680
3685
  }
3681
- const comment = csstype_d_ts_default.comments?.[prop] || "";
3686
+ let comment = csstype_d_ts_default.comments?.[prop] || "";
3687
+ if (ctx.utility.isDeprecated(prop)) {
3688
+ comment = comment ? comment.replace("@see", "@deprecated\n@see") : "/** @deprecated */";
3689
+ }
3682
3690
  const value = filtered.filter(Boolean).join(" | ");
3683
3691
  const line = `${key}?: ${restrict(prop, value, ctx.config)}`;
3684
3692
  return " " + [comment, line].filter(Boolean).join("\n");
@@ -4539,7 +4547,7 @@ function generateResetCss(ctx, sheet) {
4539
4547
  selector = `&${scope}`;
4540
4548
  }
4541
4549
  const scoped = {
4542
- "*, ::before, ::after, ::backdrop, ::first-letter, ::file-selector-button": {
4550
+ "*, ::before, ::after, ::backdrop, ::file-selector-button": {
4543
4551
  margin: "0px",
4544
4552
  padding: "0px",
4545
4553
  boxSizing: "border-box",
@@ -4594,10 +4602,6 @@ function generateResetCss(ctx, sheet) {
4594
4602
  "--placeholder-fallback": "color-mix(in srgb, currentColor 50%, transparent)",
4595
4603
  color: "var(--global-color-placeholder, var(--placeholder-fallback))"
4596
4604
  },
4597
- "select, textarea, input:where(:not([type='button'], [type='reset'], [type='submit']))": {
4598
- borderWidth: "1px",
4599
- borderStyle: "solid"
4600
- },
4601
4605
  textarea: {
4602
4606
  resize: "vertical"
4603
4607
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pandacss/generator",
3
- "version": "0.37.1",
3
+ "version": "0.38.0",
4
4
  "description": "The css generator for css panda",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -37,12 +37,12 @@
37
37
  "pluralize": "8.0.0",
38
38
  "postcss": "8.4.35",
39
39
  "ts-pattern": "5.0.8",
40
- "@pandacss/core": "0.37.1",
41
- "@pandacss/is-valid-prop": "^0.37.1",
42
- "@pandacss/logger": "0.37.1",
43
- "@pandacss/shared": "0.37.1",
44
- "@pandacss/token-dictionary": "0.37.1",
45
- "@pandacss/types": "0.37.1"
40
+ "@pandacss/core": "0.38.0",
41
+ "@pandacss/is-valid-prop": "^0.38.0",
42
+ "@pandacss/logger": "0.38.0",
43
+ "@pandacss/shared": "0.38.0",
44
+ "@pandacss/token-dictionary": "0.38.0",
45
+ "@pandacss/types": "0.38.0"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/pluralize": "0.0.33"