Skip to content
This repository was archived by the owner on Mar 15, 2025. It is now read-only.

Commit 57aaae1

Browse files
committed
created /blogs
1 parent 720e4f0 commit 57aaae1

File tree

126 files changed

+34183
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+34183
-0
lines changed

Diff for: panda/css/conditions.mjs

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { withoutSpace } from '../helpers.mjs';
2+
3+
const conditionsStr = "_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_default,_optional,_open,_closed,_fullscreen,_loading,_currentPage,_currentStep,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,sm,smOnly,smDown,md,mdOnly,mdDown,lg,lgOnly,lgDown,xl,xlOnly,xlDown,2xl,2xlOnly,2xlDown,smToMd,smToLg,smToXl,smTo2xl,mdToLg,mdToXl,mdTo2xl,lgToXl,lgTo2xl,xlTo2xl,@/xs,@/sm,@/md,@/lg,@/xl,@/2xl,@/3xl,@/4xl,@/5xl,@/6xl,@/7xl,@/8xl,base"
4+
const conditions = new Set(conditionsStr.split(','))
5+
6+
export function isCondition(value){
7+
return conditions.has(value) || /^@|&|&$/.test(value)
8+
}
9+
10+
const underscoreRegex = /^_/
11+
const conditionsSelectorRegex = /&|@/
12+
13+
export function finalizeConditions(paths){
14+
return paths.map((path) => {
15+
if (conditions.has(path)){
16+
return path.replace(underscoreRegex, '')
17+
}
18+
19+
if (conditionsSelectorRegex.test(path)){
20+
return `[${withoutSpace(path.trim())}]`
21+
}
22+
23+
return path
24+
})}
25+
26+
export function sortConditions(paths){
27+
return paths.sort((a, b) => {
28+
const aa = isCondition(a)
29+
const bb = isCondition(b)
30+
if (aa && !bb) return 1
31+
if (!aa && bb) return -1
32+
return 0
33+
})
34+
}

Diff for: panda/css/css.d.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/* eslint-disable */
2+
import type { SystemStyleObject } from '../types/index';
3+
4+
interface CssFunction {
5+
(...styles: Array<SystemStyleObject | undefined | null | false>): string
6+
raw: (...styles: Array<SystemStyleObject | undefined | null | false>) => SystemStyleObject
7+
}
8+
9+
export declare const css: CssFunction;

Diff for: panda/css/css.mjs

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { createCss, createMergeCss, hypenateProperty, withoutSpace } from '../helpers.mjs';
2+
import { sortConditions, finalizeConditions } from './conditions.mjs';
3+
4+
const utilities = "aspectRatio:aspect,boxDecorationBreak:decoration,zIndex:z,boxSizing:box,objectPosition:object,objectFit:object,overscrollBehavior:overscroll,overscrollBehaviorX:overscroll-x,overscrollBehaviorY:overscroll-y,position:pos/1,top:top,left:left,insetInline:inset-x/insetX,insetBlock:inset-y/insetY,inset:inset,insetBlockEnd:inset-b,insetBlockStart:inset-t,insetInlineEnd:end/insetEnd/1,insetInlineStart:start/insetStart/1,right:right,bottom:bottom,float:float,visibility:vis,display:d,hideFrom:hide,hideBelow:show,flexBasis:basis,flex:flex,flexDirection:flex/flexDir,flexGrow:grow,flexShrink:shrink,gridTemplateColumns:grid-cols,gridTemplateRows:grid-rows,gridColumn:col-span,gridRow:row-span,gridColumnStart:col-start,gridColumnEnd:col-end,gridAutoFlow:grid-flow,gridAutoColumns:auto-cols,gridAutoRows:auto-rows,gap:gap,gridGap:gap,gridRowGap:gap-x,gridColumnGap:gap-y,rowGap:gap-x,columnGap:gap-y,justifyContent:justify,alignContent:content,alignItems:items,alignSelf:self,padding:p/1,paddingLeft:pl/1,paddingRight:pr/1,paddingTop:pt/1,paddingBottom:pb/1,paddingBlock:py/1/paddingY,paddingBlockEnd:pb,paddingBlockStart:pt,paddingInline:px/paddingX/1,paddingInlineEnd:pe/1/paddingEnd,paddingInlineStart:ps/1/paddingStart,marginLeft:ml/1,marginRight:mr/1,marginTop:mt/1,marginBottom:mb/1,margin:m/1,marginBlock:my/1/marginY,marginBlockEnd:mb,marginBlockStart:mt,marginInline:mx/1/marginX,marginInlineEnd:me/1/marginEnd,marginInlineStart:ms/1/marginStart,outlineWidth:ring/ringWidth,outlineColor:ring/ringColor,outline:ring/1,outlineOffset:ring/ringOffset,divideX:divide-x,divideY:divide-y,divideColor:divide,divideStyle:divide,width:w/1,inlineSize:w,minWidth:min-w/minW,minInlineSize:min-w,maxWidth:max-w/maxW,maxInlineSize:max-w,height:h/1,blockSize:h,minHeight:min-h/minH,minBlockSize:min-h,maxHeight:max-h/maxH,maxBlockSize:max-b,color:text,fontFamily:font,fontSize:fs,fontWeight:font,fontSmoothing:smoothing,fontVariantNumeric:numeric,letterSpacing:tracking,lineHeight:leading,textAlign:text,textDecoration:text-decor,textDecorationColor:text-decor,textEmphasisColor:text-emphasis,textDecorationStyle:decoration,textDecorationThickness:decoration,textUnderlineOffset:underline-offset,textTransform:text,textIndent:indent,textShadow:text-shadow,textShadowColor:text-shadow/textShadowColor,textOverflow:text,verticalAlign:align,wordBreak:break,textWrap:text,truncate:truncate,lineClamp:clamp,listStyleType:list,listStylePosition:list,listStyleImage:list-img,backgroundPosition:bg/bgPosition,backgroundPositionX:bg-x/bgPositionX,backgroundPositionY:bg-y/bgPositionY,backgroundAttachment:bg/bgAttachment,backgroundClip:bg-clip/bgClip,background:bg/1,backgroundColor:bg/bgColor,backgroundOrigin:bg-origin/bgOrigin,backgroundImage:bg-img/bgImage,backgroundRepeat:bg-repeat/bgRepeat,backgroundBlendMode:bg-blend/bgBlendMode,backgroundSize:bg/bgSize,backgroundGradient:bg-gradient/bgGradient,textGradient:text-gradient,gradientFrom:from,gradientTo:to,gradientVia:via,borderRadius:rounded/1,borderTopLeftRadius:rounded-tl/roundedTopLeft,borderTopRightRadius:rounded-tr/roundedTopRight,borderBottomRightRadius:rounded-br/roundedBottomRight,borderBottomLeftRadius:rounded-bl/roundedBottomLeft,borderTopRadius:rounded-t/roundedTop,borderRightRadius:rounded-r/roundedRight,borderBottomRadius:rounded-b/roundedBottom,borderLeftRadius:rounded-l/roundedLeft,borderStartStartRadius:rounded-ss/roundedStartStart,borderStartEndRadius:rounded-se/roundedStartEnd,borderStartRadius:rounded-s/roundedStart,borderEndStartRadius:rounded-es/roundedEndStart,borderEndEndRadius:rounded-ee/roundedEndEnd,borderEndRadius:rounded-e/roundedEnd,border:border,borderWidth:border-w,borderTopWidth:border-tw,borderLeftWidth:border-lw,borderRightWidth:border-rw,borderBottomWidth:border-bw,borderColor:border,borderInline:border-x/borderX,borderInlineWidth:border-x/borderXWidth,borderInlineColor:border-x/borderXColor,borderBlock:border-y/borderY,borderBlockWidth:border-y/borderYWidth,borderBlockColor:border-y/borderYColor,borderLeft:border-l,borderLeftColor:border-l,borderInlineStart:border-s/borderStart,borderInlineStartWidth:border-s/borderStartWidth,borderInlineStartColor:border-s/borderStartColor,borderRight:border-r,borderRightColor:border-r,borderInlineEnd:border-e/borderEnd,borderInlineEndWidth:border-e/borderEndWidth,borderInlineEndColor:border-e/borderEndColor,borderTop:border-t,borderTopColor:border-t,borderBottom:border-b,borderBottomColor:border-b,borderBlockEnd:border-be,borderBlockEndColor:border-be,borderBlockStart:border-bs,borderBlockStartColor:border-bs,boxShadow:shadow/1,boxShadowColor:shadow/shadowColor,mixBlendMode:mix-blend,filter:filter,brightness:brightness,contrast:contrast,grayscale:grayscale,hueRotate:hue-rotate,invert:invert,saturate:saturate,sepia:sepia,dropShadow:drop-shadow,blur:blur,backdropFilter:backdrop,backdropBlur:backdrop-blur,backdropBrightness:backdrop-brightness,backdropContrast:backdrop-contrast,backdropGrayscale:backdrop-grayscale,backdropHueRotate:backdrop-hue-rotate,backdropInvert:backdrop-invert,backdropOpacity:backdrop-opacity,backdropSaturate:backdrop-saturate,backdropSepia:backdrop-sepia,borderCollapse:border,borderSpacing:border-spacing,borderSpacingX:border-spacing-x,borderSpacingY:border-spacing-y,tableLayout:table,transitionTimingFunction:ease,transitionDelay:delay,transitionDuration:duration,transitionProperty:transition-prop,transition:transition,animation:animation,animationName:animation-name,animationDelay:animation-delay,transformOrigin:origin,scale:scale,scaleX:scale-x,scaleY:scale-y,translate:translate,translateX:translate-x/x,translateY:translate-y/y,accentColor:accent,caretColor:caret,scrollBehavior:scroll,scrollbar:scrollbar,scrollMargin:scroll-m,scrollMarginLeft:scroll-ml,scrollMarginRight:scroll-mr,scrollMarginTop:scroll-mt,scrollMarginBottom:scroll-mb,scrollMarginBlock:scroll-my/scrollMarginY,scrollMarginBlockEnd:scroll-mb,scrollMarginBlockStart:scroll-mt,scrollMarginInline:scroll-mx/scrollMarginX,scrollMarginInlineEnd:scroll-me,scrollMarginInlineStart:scroll-ms,scrollPadding:scroll-p,scrollPaddingBlock:scroll-pb/scrollPaddingY,scrollPaddingBlockStart:scroll-pt,scrollPaddingBlockEnd:scroll-pb,scrollPaddingInline:scroll-px/scrollPaddingX,scrollPaddingInlineEnd:scroll-pe,scrollPaddingInlineStart:scroll-ps,scrollPaddingLeft:scroll-pl,scrollPaddingRight:scroll-pr,scrollPaddingTop:scroll-pt,scrollPaddingBottom:scroll-pb,scrollSnapAlign:snap,scrollSnapStop:snap,scrollSnapType:snap,scrollSnapStrictness:strictness,scrollSnapMargin:snap-m,scrollSnapMarginTop:snap-mt,scrollSnapMarginBottom:snap-mb,scrollSnapMarginLeft:snap-ml,scrollSnapMarginRight:snap-mr,touchAction:touch,userSelect:select,fill:fill,stroke:stroke,strokeWidth:stroke-w,srOnly:sr,debug:debug,appearance:appearance,backfaceVisibility:backface,clipPath:clip-path,hyphens:hyphens,mask:mask,maskImage:mask-image,maskSize:mask-size,textSizeAdjust:text-size-adjust,container:cq,containerName:cq-name,containerType:cq-type,textStyle:textStyle"
5+
6+
const classNameByProp = new Map()
7+
const shorthands = new Map()
8+
utilities.split(',').forEach((utility) => {
9+
const [prop, meta] = utility.split(':')
10+
const [className, ...shorthandList] = meta.split('/')
11+
classNameByProp.set(prop, className)
12+
if (shorthandList.length) {
13+
shorthandList.forEach((shorthand) => {
14+
shorthands.set(shorthand === '1' ? className : shorthand, prop)
15+
})
16+
}
17+
})
18+
19+
const resolveShorthand = (prop) => shorthands.get(prop) || prop
20+
21+
const context = {
22+
23+
conditions: {
24+
shift: sortConditions,
25+
finalize: finalizeConditions,
26+
breakpoints: { keys: ["base","sm","md","lg","xl","2xl"] }
27+
},
28+
utility: {
29+
30+
transform: (prop, value) => {
31+
const key = resolveShorthand(prop)
32+
const propKey = classNameByProp.get(key) || hypenateProperty(key)
33+
return { className: `${propKey}_${withoutSpace(value)}` }
34+
},
35+
hasShorthand: true,
36+
toHash: (path, hashFn) => hashFn(path.join(":")),
37+
resolveShorthand: resolveShorthand,
38+
}
39+
}
40+
41+
const cssFn = createCss(context)
42+
export const css = (...styles) => cssFn(mergeCss(...styles))
43+
css.raw = (...styles) => mergeCss(...styles)
44+
45+
export const { mergeCss, assignCss } = createMergeCss(context)

Diff for: panda/css/cva.d.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/* eslint-disable */
2+
import type { RecipeCreatorFn } from '../types/recipe';
3+
4+
export declare const cva: RecipeCreatorFn
5+
6+
export type { RecipeVariant, RecipeVariantProps } from '../types/recipe';

Diff for: panda/css/cva.mjs

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { compact, mergeProps, memo, splitProps, uniq } from '../helpers.mjs';
2+
import { css, mergeCss } from './css.mjs';
3+
4+
const defaults = (conf) => ({
5+
base: {},
6+
variants: {},
7+
defaultVariants: {},
8+
compoundVariants: [],
9+
...conf,
10+
})
11+
12+
export function cva(config) {
13+
const { base, variants, defaultVariants, compoundVariants } = defaults(config)
14+
15+
function resolve(props = {}) {
16+
const computedVariants = { ...defaultVariants, ...compact(props) }
17+
let variantCss = { ...base }
18+
for (const [key, value] of Object.entries(computedVariants)) {
19+
if (variants[key]?.[value]) {
20+
variantCss = mergeCss(variantCss, variants[key][value])
21+
}
22+
}
23+
const compoundVariantCss = getCompoundVariantCss(compoundVariants, computedVariants)
24+
return mergeCss(variantCss, compoundVariantCss)
25+
}
26+
27+
function merge(__cva) {
28+
const override = defaults(__cva.config)
29+
const variantKeys = uniq(__cva.variantKeys, Object.keys(variants))
30+
return cva({
31+
base: mergeCss(base, override.base),
32+
variants: Object.fromEntries(
33+
variantKeys.map((key) => [key, mergeCss(variants[key], override.variants[key])]),
34+
),
35+
defaultVariants: mergeProps(defaultVariants, override.defaultVariants),
36+
compoundVariants: [...compoundVariants, ...override.compoundVariants],
37+
})
38+
}
39+
40+
function cvaFn(props) {
41+
return css(resolve(props))
42+
}
43+
44+
const variantKeys = Object.keys(variants)
45+
46+
function splitVariantProps(props) {
47+
return splitProps(props, variantKeys)
48+
}
49+
50+
const variantMap = Object.fromEntries(Object.entries(variants).map(([key, value]) => [key, Object.keys(value)]))
51+
52+
return Object.assign(memo(cvaFn), {
53+
__cva__: true,
54+
variantMap,
55+
variantKeys,
56+
raw: resolve,
57+
config,
58+
merge,
59+
splitVariantProps,
60+
})
61+
}
62+
63+
export function getCompoundVariantCss(compoundVariants, variantMap) {
64+
let result = {}
65+
compoundVariants.forEach((compoundVariant) => {
66+
const isMatching = Object.entries(compoundVariant).every(([key, value]) => {
67+
if (key === 'css') return true
68+
69+
const values = Array.isArray(value) ? value : [value]
70+
return values.some((value) => variantMap[key] === value)
71+
})
72+
73+
if (isMatching) {
74+
result = mergeCss(result, compoundVariant.css)
75+
}
76+
})
77+
78+
return result
79+
}
80+
81+
export function assertCompoundVariant(name, compoundVariants, variants, prop) {
82+
if (compoundVariants.length > 0 && typeof variants?.[prop] === 'object') {
83+
throw new Error(`[recipe:${name}:${prop}] Conditions are not supported when using compound variants.`)
84+
}
85+
}

Diff for: panda/css/cx.d.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/* eslint-disable */
2+
type Argument = string | boolean | null | undefined
3+
4+
/** Conditionally join classNames into a single string */
5+
export declare function cx(...args: Argument[]): string

Diff for: panda/css/cx.mjs

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function cx() {
2+
let str = '',
3+
i = 0,
4+
arg
5+
6+
for (; i < arguments.length; ) {
7+
if ((arg = arguments[i++]) && typeof arg === 'string') {
8+
str && (str += ' ')
9+
str += arg
10+
}
11+
}
12+
return str
13+
}
14+
15+
export { cx }

Diff for: panda/css/index.d.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/* eslint-disable */
2+
export * from './css';
3+
export * from './cx';
4+
export * from './cva';
5+
export * from './sva';

Diff for: panda/css/index.mjs

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from './css.mjs';
2+
export * from './cx.mjs';
3+
export * from './cva.mjs';
4+
export * from './sva.mjs';

Diff for: panda/css/sva.d.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/* eslint-disable */
2+
import type { SlotRecipeCreatorFn } from '../types/recipe';
3+
4+
export declare const sva: SlotRecipeCreatorFn

Diff for: panda/css/sva.mjs

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { getSlotRecipes, memo, splitProps } from '../helpers.mjs';
2+
import { cva } from './cva.mjs';
3+
import { cx } from './cx.mjs';
4+
5+
const slotClass = (className, slot) => className + '__' + slot
6+
7+
export function sva(config) {
8+
const slots = Object.entries(getSlotRecipes(config)).map(([slot, slotCva]) => [slot, cva(slotCva)])
9+
10+
function svaFn(props) {
11+
const result = slots.map(([slot, cvaFn]) => [slot, cx(cvaFn(props), config.className && slotClass(config.className, slot))])
12+
return Object.fromEntries(result)
13+
}
14+
15+
function raw(props) {
16+
const result = slots.map(([slot, cvaFn]) => [slot, cvaFn.raw(props)])
17+
return Object.fromEntries(result)
18+
}
19+
20+
const variants = config.variants ?? {};
21+
const variantKeys = Object.keys(variants);
22+
23+
function splitVariantProps(props) {
24+
return splitProps(props, variantKeys);
25+
}
26+
27+
const variantMap = Object.fromEntries(
28+
Object.entries(variants).map(([key, value]) => [key, Object.keys(value)])
29+
);
30+
31+
return Object.assign(memo(svaFn), {
32+
__cva__: false,
33+
raw,
34+
variantMap,
35+
variantKeys,
36+
splitVariantProps,
37+
})
38+
}

0 commit comments

Comments
 (0)