@mochi-css/vanilla 2.0.1 → 2.1.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.d.mts CHANGED
@@ -648,24 +648,12 @@ declare class CSSObject<V extends AllVariants = DefaultVariants> {
648
648
  }
649
649
  //#endregion
650
650
  //#region src/css.d.ts
651
- /**
652
- * Runtime representation of a CSS style definition with variant support.
653
- * Holds generated class names and provides methods to compute the final
654
- * className string based on selected variants.
655
- *
656
- * @template V - The variant definitions type mapping variant names to their options
657
- *
658
- * @example
659
- * const styles = MochiCSS.from(new CSSObject({
660
- * color: 'blue',
661
- * variants: { size: { small: { fontSize: 12 }, large: { fontSize: 18 } } }
662
- * }))
663
- * styles.variant({ size: 'large' }) // Returns combined class names
664
- */
651
+ declare function isMochiCSS(value: unknown): value is MochiCSS;
665
652
  declare class MochiCSS<V extends AllVariants = DefaultVariants> {
666
653
  readonly classNames: string[];
667
654
  readonly variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } };
668
655
  readonly defaultVariants: Partial<RefineVariants<V>>;
656
+ readonly $$typeof: symbol;
669
657
  /**
670
658
  * Creates a new MochiCSS instance.
671
659
  * @param classNames - Base class names to always include
@@ -833,4 +821,4 @@ interface SupportsHelper {
833
821
  /** Helper for constructing `@supports` at-rule keys. */
834
822
  declare const supports: SupportsHelper;
835
823
  //#endregion
836
- export { AllVariants, type AtRuleKey, CSSObject, CompoundVariant, CssLike, CssLikeObject, CssObjectBlock, CssObjectSubBlock, CssVar, CssVarVal, DefaultVariants, GlobalCssObject, type GlobalCssStyles, type KeyframeStops, KeyframesObject, MergeCSSVariants, MochiCSS, MochiCSSProps, MochiKeyframes, MochiSelector, RefineVariants, type StyleProps, Token, VariantProps, container, createToken, css, cssFromProps, globalCss, isAtRuleKey, keyframes, media, mergeMochiCss, styled, supports };
824
+ export { AllVariants, type AtRuleKey, CSSObject, CompoundVariant, CssLike, CssLikeObject, CssObjectBlock, CssObjectSubBlock, CssVar, CssVarVal, DefaultVariants, GlobalCssObject, type GlobalCssStyles, type KeyframeStops, KeyframesObject, MergeCSSVariants, MochiCSS, MochiCSSProps, MochiKeyframes, MochiSelector, RefineVariants, type StyleProps, Token, VariantProps, container, createToken, css, cssFromProps, globalCss, isAtRuleKey, isMochiCSS, keyframes, media, mergeMochiCss, styled, supports };
package/dist/index.d.ts CHANGED
@@ -648,24 +648,12 @@ declare class CSSObject<V extends AllVariants = DefaultVariants> {
648
648
  }
649
649
  //#endregion
650
650
  //#region src/css.d.ts
651
- /**
652
- * Runtime representation of a CSS style definition with variant support.
653
- * Holds generated class names and provides methods to compute the final
654
- * className string based on selected variants.
655
- *
656
- * @template V - The variant definitions type mapping variant names to their options
657
- *
658
- * @example
659
- * const styles = MochiCSS.from(new CSSObject({
660
- * color: 'blue',
661
- * variants: { size: { small: { fontSize: 12 }, large: { fontSize: 18 } } }
662
- * }))
663
- * styles.variant({ size: 'large' }) // Returns combined class names
664
- */
651
+ declare function isMochiCSS(value: unknown): value is MochiCSS;
665
652
  declare class MochiCSS<V extends AllVariants = DefaultVariants> {
666
653
  readonly classNames: string[];
667
654
  readonly variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } };
668
655
  readonly defaultVariants: Partial<RefineVariants<V>>;
656
+ readonly $$typeof: symbol;
669
657
  /**
670
658
  * Creates a new MochiCSS instance.
671
659
  * @param classNames - Base class names to always include
@@ -833,5 +821,5 @@ interface SupportsHelper {
833
821
  /** Helper for constructing `@supports` at-rule keys. */
834
822
  declare const supports: SupportsHelper;
835
823
  //#endregion
836
- export { AllVariants, type AtRuleKey, CSSObject, CompoundVariant, CssLike, CssLikeObject, CssObjectBlock, CssObjectSubBlock, CssVar, CssVarVal, DefaultVariants, GlobalCssObject, type GlobalCssStyles, type KeyframeStops, KeyframesObject, MergeCSSVariants, MochiCSS, MochiCSSProps, MochiKeyframes, MochiSelector, RefineVariants, type StyleProps, Token, VariantProps, container, createToken, css, cssFromProps, globalCss, isAtRuleKey, keyframes, media, mergeMochiCss, styled, supports };
824
+ export { AllVariants, type AtRuleKey, CSSObject, CompoundVariant, CssLike, CssLikeObject, CssObjectBlock, CssObjectSubBlock, CssVar, CssVarVal, DefaultVariants, GlobalCssObject, type GlobalCssStyles, type KeyframeStops, KeyframesObject, MergeCSSVariants, MochiCSS, MochiCSSProps, MochiKeyframes, MochiSelector, RefineVariants, type StyleProps, Token, VariantProps, container, createToken, css, cssFromProps, globalCss, isAtRuleKey, isMochiCSS, keyframes, media, mergeMochiCss, styled, supports };
837
825
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1607,7 +1607,12 @@ var CSSObject = class {
1607
1607
  * }))
1608
1608
  * styles.variant({ size: 'large' }) // Returns combined class names
1609
1609
  */
1610
+ const MOCHI_CSS_TYPEOF = Symbol.for("mochi-css.MochiCSS");
1611
+ function isMochiCSS(value) {
1612
+ return typeof value === "object" && value !== null && value["$$typeof"] === MOCHI_CSS_TYPEOF;
1613
+ }
1610
1614
  var MochiCSS = class MochiCSS {
1615
+ $$typeof = MOCHI_CSS_TYPEOF;
1611
1616
  /**
1612
1617
  * Creates a new MochiCSS instance.
1613
1618
  * @param classNames - Base class names to always include
@@ -1905,6 +1910,7 @@ exports.css = css;
1905
1910
  exports.cssFromProps = cssFromProps;
1906
1911
  exports.globalCss = globalCss;
1907
1912
  exports.isAtRuleKey = isAtRuleKey;
1913
+ exports.isMochiCSS = isMochiCSS;
1908
1914
  exports.keyframes = keyframes;
1909
1915
  exports.media = media;
1910
1916
  exports.mergeMochiCss = mergeMochiCss;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["name: string","knownPropertyNames: ReadonlySet<string>","cssSelectors: string[]","atRules: string[]","cssProps: Record<string, string>","selector: MochiSelector","propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[]","props","selector","selectorParts: string[]","classNames: string[]","variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } }","defaultVariants: Partial<RefineVariants<V>>","cssToMerge: MochiCSS<AllVariants>[]","name: string"],"sources":["../src/token.ts","../src/propertyUnits.generated.ts","../src/knownProperties.generated.ts","../src/props.ts","../src/selector.ts","../src/hash.ts","../src/compare.ts","../src/cssObject.ts","../src/css.ts","../src/styled.ts","../src/keyframesObject.ts","../src/keyframes.ts","../src/globalCssObject.ts","../src/globalCss.ts","../src/query.ts"],"sourcesContent":["/**\n * CSS custom property (design token) utilities.\n * Provides type-safe access to CSS variables with proper `var()` syntax.\n * @module token\n */\n\nimport { CssVar, CssVarVal } from \"@/values\"\n\n/**\n * Represents a CSS custom property (design token) with type information.\n * Provides convenient access to both the variable name and its `var()` reference.\n * @template T - The expected value type of the token (for type checking)\n * @example\n * const primaryColor = new Token<string>('primary-color')\n * primaryColor.variable // '--primary-color'\n * primaryColor.value // 'var(--primary-color)'\n */\nexport class Token {\n /**\n * Creates a new CSS token.\n * @param name - The token name (without the `--` prefix)\n */\n constructor(public readonly name: string) {}\n\n /**\n * Gets the CSS custom property name (with `--` prefix).\n * Use this when defining the variable.\n */\n get variable(): CssVar {\n return `--${this.name}`\n }\n\n /**\n * Gets the CSS `var()` reference to this token.\n * Use this when consuming the variable value.\n */\n get value(): CssVarVal {\n return `var(${this.variable})`\n }\n\n /**\n * Returns the variable name for string coercion.\n */\n toString(): CssVar {\n return this.variable\n }\n}\n\n/**\n * Creates a new CSS design token.\n * @template T - The expected value type of the token\n * @param name - The token name (without the `--` prefix)\n * @returns A new Token instance\n * @example\n * const spacing = createToken<number>('spacing-md')\n * // Use in styles: { gap: spacing.value }\n */\nexport function createToken(name: string): Token {\n return new Token(name)\n}\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const propertyUnits = {\n animation: \"ms\",\n animationDelay: \"ms\",\n animationDuration: \"ms\",\n animationRange: \"px\",\n animationRangeCenter: \"px\",\n animationRangeEnd: \"px\",\n animationRangeStart: \"px\",\n background: \"px\",\n backgroundPosition: \"px\",\n backgroundPositionBlock: \"px\",\n backgroundPositionInline: \"px\",\n backgroundPositionX: \"px\",\n backgroundPositionY: \"px\",\n backgroundSize: \"px\",\n backgroundTbd: \"px\",\n baselineShift: \"px\",\n blockSize: \"px\",\n blockStep: \"px\",\n blockStepSize: \"px\",\n border: \"px\",\n borderBlock: \"px\",\n borderBlockClip: \"px\",\n borderBlockEnd: \"px\",\n borderBlockEndClip: \"px\",\n borderBlockEndRadius: \"px\",\n borderBlockEndWidth: \"px\",\n borderBlockStart: \"px\",\n borderBlockStartClip: \"px\",\n borderBlockStartRadius: \"px\",\n borderBlockStartWidth: \"px\",\n borderBlockWidth: \"px\",\n borderBottom: \"px\",\n borderBottomClip: \"px\",\n borderBottomLeftRadius: \"px\",\n borderBottomRadius: \"px\",\n borderBottomRightRadius: \"px\",\n borderBottomWidth: \"px\",\n borderClip: \"px\",\n borderEndEndRadius: \"px\",\n borderEndStartRadius: \"px\",\n borderImage: \"%\",\n borderImageOutset: \"px\",\n borderImageSlice: \"%\",\n borderImageWidth: \"px\",\n borderInline: \"px\",\n borderInlineClip: \"px\",\n borderInlineEnd: \"px\",\n borderInlineEndClip: \"px\",\n borderInlineEndRadius: \"px\",\n borderInlineEndWidth: \"px\",\n borderInlineStart: \"px\",\n borderInlineStartClip: \"px\",\n borderInlineStartRadius: \"px\",\n borderInlineStartWidth: \"px\",\n borderInlineWidth: \"px\",\n borderLeft: \"px\",\n borderLeftClip: \"px\",\n borderLeftRadius: \"px\",\n borderLeftWidth: \"px\",\n borderLimit: \"px\",\n borderRadius: \"px\",\n borderRight: \"px\",\n borderRightClip: \"px\",\n borderRightRadius: \"px\",\n borderRightWidth: \"px\",\n borderSpacing: \"px\",\n borderStartEndRadius: \"px\",\n borderStartStartRadius: \"px\",\n borderTop: \"px\",\n borderTopClip: \"px\",\n borderTopLeftRadius: \"px\",\n borderTopRadius: \"px\",\n borderTopRightRadius: \"px\",\n borderTopWidth: \"px\",\n borderWidth: \"px\",\n bottom: \"px\",\n boxShadow: \"px\",\n boxShadowBlur: \"px\",\n boxShadowOffset: \"px\",\n boxShadowSpread: \"px\",\n columnGap: \"px\",\n columnHeight: \"px\",\n columnRule: \"px\",\n columnRuleEdgeInset: \"px\",\n columnRuleEdgeInsetEnd: \"px\",\n columnRuleEdgeInsetStart: \"px\",\n columnRuleInset: \"px\",\n columnRuleInsetEnd: \"px\",\n columnRuleInsetStart: \"px\",\n columnRuleInteriorInset: \"px\",\n columnRuleInteriorInsetEnd: \"px\",\n columnRuleInteriorInsetStart: \"px\",\n columnRuleWidth: \"px\",\n columns: \"px\",\n columnWidth: \"px\",\n containIntrinsicBlockSize: \"px\",\n containIntrinsicHeight: \"px\",\n containIntrinsicInlineSize: \"px\",\n containIntrinsicSize: \"px\",\n containIntrinsicWidth: \"px\",\n corner: \"px\",\n cornerBlockEnd: \"px\",\n cornerBlockStart: \"px\",\n cornerBottom: \"px\",\n cornerBottomLeft: \"px\",\n cornerBottomRight: \"px\",\n cornerEndEnd: \"px\",\n cornerEndStart: \"px\",\n cornerInlineEnd: \"px\",\n cornerInlineStart: \"px\",\n cornerLeft: \"px\",\n cornerRight: \"px\",\n cornerStartEnd: \"px\",\n cornerStartStart: \"px\",\n cornerTop: \"px\",\n cornerTopLeft: \"px\",\n cornerTopRight: \"px\",\n cx: \"px\",\n cy: \"px\",\n fillOpacity: \"%\",\n fillPosition: \"px\",\n fillSize: \"px\",\n flex: \"px\",\n flexBasis: \"px\",\n floatOffset: \"px\",\n floodOpacity: \"%\",\n flowTolerance: \"px\",\n font: \"deg\",\n fontSize: \"px\",\n fontStretch: \"%\",\n fontStyle: \"deg\",\n fontWidth: \"%\",\n gap: \"px\",\n grid: \"px\",\n gridAutoColumns: \"px\",\n gridAutoRows: \"px\",\n gridColumnGap: \"px\",\n gridGap: \"px\",\n gridRowGap: \"px\",\n gridTemplate: \"px\",\n gridTemplateColumns: \"px\",\n gridTemplateRows: \"px\",\n height: \"px\",\n hyphenateLimitZone: \"px\",\n imageOrientation: \"deg\",\n imageResolution: \"dppx\",\n initialLetterWrap: \"px\",\n inlineSize: \"px\",\n inset: \"px\",\n insetBlock: \"px\",\n insetBlockEnd: \"px\",\n insetBlockStart: \"px\",\n insetInline: \"px\",\n insetInlineEnd: \"px\",\n insetInlineStart: \"px\",\n interestDelay: \"ms\",\n interestDelayEnd: \"ms\",\n interestDelayStart: \"ms\",\n itemFlow: \"px\",\n left: \"px\",\n letterSpacing: \"px\",\n lineHeight: \"px\",\n lineHeightStep: \"px\",\n linePadding: \"px\",\n margin: \"px\",\n marginBlock: \"px\",\n marginBlockEnd: \"px\",\n marginBlockStart: \"px\",\n marginBottom: \"px\",\n marginInline: \"px\",\n marginInlineEnd: \"px\",\n marginInlineStart: \"px\",\n marginLeft: \"px\",\n marginRight: \"px\",\n marginTop: \"px\",\n mask: \"px\",\n maskBorder: \"%\",\n maskBorderOutset: \"px\",\n maskBorderSlice: \"%\",\n maskBorderWidth: \"px\",\n maskPosition: \"px\",\n maskSize: \"px\",\n maxBlockSize: \"px\",\n maxHeight: \"px\",\n maxInlineSize: \"px\",\n maxWidth: \"px\",\n minBlockSize: \"px\",\n minHeight: \"px\",\n minInlineSize: \"px\",\n minWidth: \"px\",\n objectPosition: \"px\",\n offset: \"px\",\n offsetAnchor: \"px\",\n offsetDistance: \"px\",\n offsetPosition: \"px\",\n offsetRotate: \"deg\",\n opacity: \"%\",\n outline: \"px\",\n outlineOffset: \"px\",\n outlineWidth: \"px\",\n overflowClipMargin: \"px\",\n overflowClipMarginBlock: \"px\",\n overflowClipMarginBlockEnd: \"px\",\n overflowClipMarginBlockStart: \"px\",\n overflowClipMarginBottom: \"px\",\n overflowClipMarginInline: \"px\",\n overflowClipMarginInlineEnd: \"px\",\n overflowClipMarginInlineStart: \"px\",\n overflowClipMarginLeft: \"px\",\n overflowClipMarginRight: \"px\",\n overflowClipMarginTop: \"px\",\n padding: \"px\",\n paddingBlock: \"px\",\n paddingBlockEnd: \"px\",\n paddingBlockStart: \"px\",\n paddingBottom: \"px\",\n paddingInline: \"px\",\n paddingInlineEnd: \"px\",\n paddingInlineStart: \"px\",\n paddingLeft: \"px\",\n paddingRight: \"px\",\n paddingTop: \"px\",\n pause: \"ms\",\n pauseAfter: \"ms\",\n pauseBefore: \"ms\",\n perspective: \"px\",\n perspectiveOrigin: \"px\",\n r: \"px\",\n rest: \"ms\",\n restAfter: \"ms\",\n restBefore: \"ms\",\n right: \"px\",\n rotate: \"deg\",\n rowGap: \"px\",\n rowRule: \"px\",\n rowRuleEdgeInset: \"px\",\n rowRuleEdgeInsetEnd: \"px\",\n rowRuleEdgeInsetStart: \"px\",\n rowRuleInset: \"px\",\n rowRuleInsetEnd: \"px\",\n rowRuleInsetStart: \"px\",\n rowRuleInteriorInset: \"px\",\n rowRuleInteriorInsetEnd: \"px\",\n rowRuleInteriorInsetStart: \"px\",\n rowRuleWidth: \"px\",\n rule: \"px\",\n ruleEdgeInset: \"px\",\n ruleInset: \"px\",\n ruleInsetEnd: \"px\",\n ruleInsetStart: \"px\",\n ruleInteriorInset: \"px\",\n ruleWidth: \"px\",\n rx: \"px\",\n ry: \"px\",\n scale: \"%\",\n scrollMargin: \"px\",\n scrollMarginBlock: \"px\",\n scrollMarginBlockEnd: \"px\",\n scrollMarginBlockStart: \"px\",\n scrollMarginBottom: \"px\",\n scrollMarginInline: \"px\",\n scrollMarginInlineEnd: \"px\",\n scrollMarginInlineStart: \"px\",\n scrollMarginLeft: \"px\",\n scrollMarginRight: \"px\",\n scrollMarginTop: \"px\",\n scrollPadding: \"px\",\n scrollPaddingBlock: \"px\",\n scrollPaddingBlockEnd: \"px\",\n scrollPaddingBlockStart: \"px\",\n scrollPaddingBottom: \"px\",\n scrollPaddingInline: \"px\",\n scrollPaddingInlineEnd: \"px\",\n scrollPaddingInlineStart: \"px\",\n scrollPaddingLeft: \"px\",\n scrollPaddingRight: \"px\",\n scrollPaddingTop: \"px\",\n shapeImageThreshold: \"%\",\n shapeMargin: \"px\",\n shapePadding: \"px\",\n stopOpacity: \"%\",\n strokeDasharray: \"px\",\n strokeDashcorner: \"px\",\n strokeDashCorner: \"px\",\n strokeDashoffset: \"px\",\n strokeOpacity: \"%\",\n strokePosition: \"px\",\n strokeSize: \"px\",\n strokeWidth: \"px\",\n tabSize: \"px\",\n textDecoration: \"px\",\n textDecorationInset: \"px\",\n textDecorationThickness: \"px\",\n textIndent: \"px\",\n textShadow: \"px\",\n textSizeAdjust: \"%\",\n textUnderlineOffset: \"px\",\n timelineTrigger: \"px\",\n timelineTriggerExitRange: \"px\",\n timelineTriggerExitRangeEnd: \"px\",\n timelineTriggerExitRangeStart: \"px\",\n timelineTriggerRange: \"px\",\n timelineTriggerRangeEnd: \"px\",\n timelineTriggerRangeStart: \"px\",\n top: \"px\",\n transformOrigin: \"px\",\n transition: \"ms\",\n transitionDelay: \"ms\",\n transitionDuration: \"ms\",\n translate: \"px\",\n verticalAlign: \"px\",\n viewTimeline: \"px\",\n viewTimelineInset: \"px\",\n voiceDuration: \"ms\",\n voicePitch: \"Hz\",\n voiceRange: \"Hz\",\n voiceRate: \"%\",\n width: \"px\",\n wordSpacing: \"px\",\n x: \"px\",\n y: \"px\",\n zoom: \"%\",\n} as const\n\nexport type PropertyWithUnit = keyof typeof propertyUnits\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const knownPropertyNames: ReadonlySet<string> = new Set([\n \"accentColor\",\n \"alignContent\",\n \"alignItems\",\n \"alignSelf\",\n \"alignmentBaseline\",\n \"all\",\n \"anchorName\",\n \"anchorScope\",\n \"animation\",\n \"animationComposition\",\n \"animationDelay\",\n \"animationDirection\",\n \"animationDuration\",\n \"animationFillMode\",\n \"animationIterationCount\",\n \"animationName\",\n \"animationPlayState\",\n \"animationRange\",\n \"animationRangeCenter\",\n \"animationRangeEnd\",\n \"animationRangeStart\",\n \"animationTimeline\",\n \"animationTimingFunction\",\n \"animationTrigger\",\n \"appearance\",\n \"aspectRatio\",\n \"backdropFilter\",\n \"backfaceVisibility\",\n \"background\",\n \"backgroundAttachment\",\n \"backgroundBlendMode\",\n \"backgroundClip\",\n \"backgroundColor\",\n \"backgroundImage\",\n \"backgroundOrigin\",\n \"backgroundPosition\",\n \"backgroundPositionBlock\",\n \"backgroundPositionInline\",\n \"backgroundPositionX\",\n \"backgroundPositionY\",\n \"backgroundRepeat\",\n \"backgroundRepeatBlock\",\n \"backgroundRepeatInline\",\n \"backgroundRepeatX\",\n \"backgroundRepeatY\",\n \"backgroundSize\",\n \"backgroundTbd\",\n \"baselineShift\",\n \"baselineSource\",\n \"blockEllipsis\",\n \"blockSize\",\n \"blockStep\",\n \"blockStepAlign\",\n \"blockStepInsert\",\n \"blockStepRound\",\n \"blockStepSize\",\n \"bookmarkLabel\",\n \"bookmarkLevel\",\n \"bookmarkState\",\n \"border\",\n \"borderBlock\",\n \"borderBlockClip\",\n \"borderBlockColor\",\n \"borderBlockEnd\",\n \"borderBlockEndClip\",\n \"borderBlockEndColor\",\n \"borderBlockEndRadius\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\",\n \"borderBlockStart\",\n \"borderBlockStartClip\",\n \"borderBlockStartColor\",\n \"borderBlockStartRadius\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\",\n \"borderBlockStyle\",\n \"borderBlockWidth\",\n \"borderBottom\",\n \"borderBottomClip\",\n \"borderBottomColor\",\n \"borderBottomLeftRadius\",\n \"borderBottomRadius\",\n \"borderBottomRightRadius\",\n \"borderBottomStyle\",\n \"borderBottomWidth\",\n \"borderBoundary\",\n \"borderClip\",\n \"borderCollapse\",\n \"borderColor\",\n \"borderEndEndRadius\",\n \"borderEndStartRadius\",\n \"borderImage\",\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\",\n \"borderInline\",\n \"borderInlineClip\",\n \"borderInlineColor\",\n \"borderInlineEnd\",\n \"borderInlineEndClip\",\n \"borderInlineEndColor\",\n \"borderInlineEndRadius\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\",\n \"borderInlineStart\",\n \"borderInlineStartClip\",\n \"borderInlineStartColor\",\n \"borderInlineStartRadius\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\",\n \"borderInlineStyle\",\n \"borderInlineWidth\",\n \"borderLeft\",\n \"borderLeftClip\",\n \"borderLeftColor\",\n \"borderLeftRadius\",\n \"borderLeftStyle\",\n \"borderLeftWidth\",\n \"borderLimit\",\n \"borderRadius\",\n \"borderRight\",\n \"borderRightClip\",\n \"borderRightColor\",\n \"borderRightRadius\",\n \"borderRightStyle\",\n \"borderRightWidth\",\n \"borderShape\",\n \"borderSpacing\",\n \"borderStartEndRadius\",\n \"borderStartStartRadius\",\n \"borderStyle\",\n \"borderTop\",\n \"borderTopClip\",\n \"borderTopColor\",\n \"borderTopLeftRadius\",\n \"borderTopRadius\",\n \"borderTopRightRadius\",\n \"borderTopStyle\",\n \"borderTopWidth\",\n \"borderWidth\",\n \"bottom\",\n \"boxDecorationBreak\",\n \"boxShadow\",\n \"boxShadowBlur\",\n \"boxShadowColor\",\n \"boxShadowOffset\",\n \"boxShadowPosition\",\n \"boxShadowSpread\",\n \"boxSizing\",\n \"boxSnap\",\n \"breakAfter\",\n \"breakBefore\",\n \"breakInside\",\n \"captionSide\",\n \"caret\",\n \"caretAnimation\",\n \"caretColor\",\n \"caretShape\",\n \"clear\",\n \"clip\",\n \"clipPath\",\n \"clipRule\",\n \"color\",\n \"colorAdjust\",\n \"colorInterpolation\",\n \"colorInterpolationFilters\",\n \"colorScheme\",\n \"columnCount\",\n \"columnFill\",\n \"columnGap\",\n \"columnHeight\",\n \"columnRule\",\n \"columnRuleBreak\",\n \"columnRuleColor\",\n \"columnRuleEdgeInset\",\n \"columnRuleEdgeInsetEnd\",\n \"columnRuleEdgeInsetStart\",\n \"columnRuleInset\",\n \"columnRuleInsetEnd\",\n \"columnRuleInsetStart\",\n \"columnRuleInteriorInset\",\n \"columnRuleInteriorInsetEnd\",\n \"columnRuleInteriorInsetStart\",\n \"columnRuleStyle\",\n \"columnRuleWidth\",\n \"columnSpan\",\n \"columnWidth\",\n \"columnWrap\",\n \"columns\",\n \"contain\",\n \"containIntrinsicBlockSize\",\n \"containIntrinsicHeight\",\n \"containIntrinsicInlineSize\",\n \"containIntrinsicSize\",\n \"containIntrinsicWidth\",\n \"container\",\n \"containerName\",\n \"containerType\",\n \"content\",\n \"contentVisibility\",\n \"continue\",\n \"copyInto\",\n \"corner\",\n \"cornerBlockEnd\",\n \"cornerBlockEndShape\",\n \"cornerBlockStart\",\n \"cornerBlockStartShape\",\n \"cornerBottom\",\n \"cornerBottomLeft\",\n \"cornerBottomLeftShape\",\n \"cornerBottomRight\",\n \"cornerBottomRightShape\",\n \"cornerBottomShape\",\n \"cornerEndEnd\",\n \"cornerEndEndShape\",\n \"cornerEndStart\",\n \"cornerEndStartShape\",\n \"cornerInlineEnd\",\n \"cornerInlineEndShape\",\n \"cornerInlineStart\",\n \"cornerInlineStartShape\",\n \"cornerLeft\",\n \"cornerLeftShape\",\n \"cornerRight\",\n \"cornerRightShape\",\n \"cornerShape\",\n \"cornerStartEnd\",\n \"cornerStartEndShape\",\n \"cornerStartStart\",\n \"cornerStartStartShape\",\n \"cornerTop\",\n \"cornerTopLeft\",\n \"cornerTopLeftShape\",\n \"cornerTopRight\",\n \"cornerTopRightShape\",\n \"cornerTopShape\",\n \"counterIncrement\",\n \"counterReset\",\n \"counterSet\",\n \"cue\",\n \"cueAfter\",\n \"cueBefore\",\n \"cursor\",\n \"cx\",\n \"cy\",\n \"d\",\n \"direction\",\n \"display\",\n \"dominantBaseline\",\n \"dynamicRangeLimit\",\n \"emptyCells\",\n \"eventTrigger\",\n \"eventTriggerName\",\n \"eventTriggerSource\",\n \"fieldSizing\",\n \"fill\",\n \"fillBreak\",\n \"fillColor\",\n \"fillImage\",\n \"fillOpacity\",\n \"fillOrigin\",\n \"fillPosition\",\n \"fillRepeat\",\n \"fillRule\",\n \"fillSize\",\n \"filter\",\n \"flex\",\n \"flexBasis\",\n \"flexDirection\",\n \"flexFlow\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexWrap\",\n \"float\",\n \"floatDefer\",\n \"floatOffset\",\n \"floatReference\",\n \"floodColor\",\n \"floodOpacity\",\n \"flowFrom\",\n \"flowInto\",\n \"flowTolerance\",\n \"font\",\n \"fontFamily\",\n \"fontFeatureSettings\",\n \"fontKerning\",\n \"fontLanguageOverride\",\n \"fontOpticalSizing\",\n \"fontPalette\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"fontStretch\",\n \"fontStyle\",\n \"fontSynthesis\",\n \"fontSynthesisPosition\",\n \"fontSynthesisSmallCaps\",\n \"fontSynthesisStyle\",\n \"fontSynthesisWeight\",\n \"fontVariant\",\n \"fontVariantAlternates\",\n \"fontVariantCaps\",\n \"fontVariantEastAsian\",\n \"fontVariantEmoji\",\n \"fontVariantLigatures\",\n \"fontVariantNumeric\",\n \"fontVariantPosition\",\n \"fontVariationSettings\",\n \"fontWeight\",\n \"fontWidth\",\n \"footnoteDisplay\",\n \"footnotePolicy\",\n \"forcedColorAdjust\",\n \"gap\",\n \"glyphOrientationVertical\",\n \"grid\",\n \"gridArea\",\n \"gridAutoColumns\",\n \"gridAutoFlow\",\n \"gridAutoRows\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnGap\",\n \"gridColumnStart\",\n \"gridGap\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowGap\",\n \"gridRowStart\",\n \"gridTemplate\",\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n \"hangingPunctuation\",\n \"height\",\n \"hyphenateCharacter\",\n \"hyphenateLimitChars\",\n \"hyphenateLimitLast\",\n \"hyphenateLimitLines\",\n \"hyphenateLimitZone\",\n \"hyphens\",\n \"imageOrientation\",\n \"imageRendering\",\n \"imageResolution\",\n \"initialLetter\",\n \"initialLetterAlign\",\n \"initialLetterWrap\",\n \"inlineSize\",\n \"inlineSizing\",\n \"inputSecurity\",\n \"inset\",\n \"insetBlock\",\n \"insetBlockEnd\",\n \"insetBlockStart\",\n \"insetInline\",\n \"insetInlineEnd\",\n \"insetInlineStart\",\n \"interactivity\",\n \"interestDelay\",\n \"interestDelayEnd\",\n \"interestDelayStart\",\n \"interpolateSize\",\n \"isolation\",\n \"itemCross\",\n \"itemDirection\",\n \"itemFlow\",\n \"itemPack\",\n \"itemTrack\",\n \"itemWrap\",\n \"justifyContent\",\n \"justifyItems\",\n \"justifySelf\",\n \"left\",\n \"letterSpacing\",\n \"lightingColor\",\n \"lineBreak\",\n \"lineClamp\",\n \"lineFitEdge\",\n \"lineGrid\",\n \"lineHeight\",\n \"lineHeightStep\",\n \"linePadding\",\n \"lineSnap\",\n \"linkParameters\",\n \"listStyle\",\n \"listStyleImage\",\n \"listStylePosition\",\n \"listStyleType\",\n \"margin\",\n \"marginBlock\",\n \"marginBlockEnd\",\n \"marginBlockStart\",\n \"marginBottom\",\n \"marginBreak\",\n \"marginInline\",\n \"marginInlineEnd\",\n \"marginInlineStart\",\n \"marginLeft\",\n \"marginRight\",\n \"marginTop\",\n \"marginTrim\",\n \"marker\",\n \"markerEnd\",\n \"markerMid\",\n \"markerSide\",\n \"markerStart\",\n \"mask\",\n \"maskBorder\",\n \"maskBorderMode\",\n \"maskBorderOutset\",\n \"maskBorderRepeat\",\n \"maskBorderSlice\",\n \"maskBorderSource\",\n \"maskBorderWidth\",\n \"maskClip\",\n \"maskComposite\",\n \"maskImage\",\n \"maskMode\",\n \"maskOrigin\",\n \"maskPosition\",\n \"maskRepeat\",\n \"maskSize\",\n \"maskType\",\n \"mathDepth\",\n \"mathShift\",\n \"mathStyle\",\n \"maxBlockSize\",\n \"maxHeight\",\n \"maxInlineSize\",\n \"maxLines\",\n \"maxWidth\",\n \"minBlockSize\",\n \"minHeight\",\n \"minInlineSize\",\n \"minIntrinsicSizing\",\n \"minWidth\",\n \"mixBlendMode\",\n \"navDown\",\n \"navLeft\",\n \"navRight\",\n \"navUp\",\n \"objectFit\",\n \"objectPosition\",\n \"objectViewBox\",\n \"offset\",\n \"offsetAnchor\",\n \"offsetDistance\",\n \"offsetPath\",\n \"offsetPosition\",\n \"offsetRotate\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"outline\",\n \"outlineColor\",\n \"outlineOffset\",\n \"outlineStyle\",\n \"outlineWidth\",\n \"overflow\",\n \"overflowAnchor\",\n \"overflowBlock\",\n \"overflowClipMargin\",\n \"overflowClipMarginBlock\",\n \"overflowClipMarginBlockEnd\",\n \"overflowClipMarginBlockStart\",\n \"overflowClipMarginBottom\",\n \"overflowClipMarginInline\",\n \"overflowClipMarginInlineEnd\",\n \"overflowClipMarginInlineStart\",\n \"overflowClipMarginLeft\",\n \"overflowClipMarginRight\",\n \"overflowClipMarginTop\",\n \"overflowInline\",\n \"overflowWrap\",\n \"overflowX\",\n \"overflowY\",\n \"overlay\",\n \"overscrollBehavior\",\n \"overscrollBehaviorBlock\",\n \"overscrollBehaviorInline\",\n \"overscrollBehaviorX\",\n \"overscrollBehaviorY\",\n \"padding\",\n \"paddingBlock\",\n \"paddingBlockEnd\",\n \"paddingBlockStart\",\n \"paddingBottom\",\n \"paddingInline\",\n \"paddingInlineEnd\",\n \"paddingInlineStart\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingTop\",\n \"page\",\n \"pageBreakAfter\",\n \"pageBreakBefore\",\n \"pageBreakInside\",\n \"paintOrder\",\n \"pause\",\n \"pauseAfter\",\n \"pauseBefore\",\n \"perspective\",\n \"perspectiveOrigin\",\n \"placeContent\",\n \"placeItems\",\n \"placeSelf\",\n \"pointerEvents\",\n \"pointerTimeline\",\n \"pointerTimelineAxis\",\n \"pointerTimelineName\",\n \"position\",\n \"positionAnchor\",\n \"positionArea\",\n \"positionTry\",\n \"positionTryFallbacks\",\n \"positionTryOrder\",\n \"positionVisibility\",\n \"printColorAdjust\",\n \"quotes\",\n \"r\",\n \"readingFlow\",\n \"readingOrder\",\n \"regionFragment\",\n \"resize\",\n \"rest\",\n \"restAfter\",\n \"restBefore\",\n \"right\",\n \"rotate\",\n \"rowGap\",\n \"rowRule\",\n \"rowRuleBreak\",\n \"rowRuleColor\",\n \"rowRuleEdgeInset\",\n \"rowRuleEdgeInsetEnd\",\n \"rowRuleEdgeInsetStart\",\n \"rowRuleInset\",\n \"rowRuleInsetEnd\",\n \"rowRuleInsetStart\",\n \"rowRuleInteriorInset\",\n \"rowRuleInteriorInsetEnd\",\n \"rowRuleInteriorInsetStart\",\n \"rowRuleStyle\",\n \"rowRuleWidth\",\n \"rubyAlign\",\n \"rubyMerge\",\n \"rubyOverhang\",\n \"rubyPosition\",\n \"rule\",\n \"ruleBreak\",\n \"ruleColor\",\n \"ruleEdgeInset\",\n \"ruleInset\",\n \"ruleInsetEnd\",\n \"ruleInsetStart\",\n \"ruleInteriorInset\",\n \"ruleOverlap\",\n \"ruleStyle\",\n \"ruleWidth\",\n \"rx\",\n \"ry\",\n \"scale\",\n \"scrollBehavior\",\n \"scrollInitialTarget\",\n \"scrollMargin\",\n \"scrollMarginBlock\",\n \"scrollMarginBlockEnd\",\n \"scrollMarginBlockStart\",\n \"scrollMarginBottom\",\n \"scrollMarginInline\",\n \"scrollMarginInlineEnd\",\n \"scrollMarginInlineStart\",\n \"scrollMarginLeft\",\n \"scrollMarginRight\",\n \"scrollMarginTop\",\n \"scrollMarkerGroup\",\n \"scrollPadding\",\n \"scrollPaddingBlock\",\n \"scrollPaddingBlockEnd\",\n \"scrollPaddingBlockStart\",\n \"scrollPaddingBottom\",\n \"scrollPaddingInline\",\n \"scrollPaddingInlineEnd\",\n \"scrollPaddingInlineStart\",\n \"scrollPaddingLeft\",\n \"scrollPaddingRight\",\n \"scrollPaddingTop\",\n \"scrollSnapAlign\",\n \"scrollSnapStop\",\n \"scrollSnapType\",\n \"scrollTargetGroup\",\n \"scrollTimeline\",\n \"scrollTimelineAxis\",\n \"scrollTimelineName\",\n \"scrollbarColor\",\n \"scrollbarGutter\",\n \"scrollbarWidth\",\n \"shapeImageThreshold\",\n \"shapeInside\",\n \"shapeMargin\",\n \"shapeOutside\",\n \"shapePadding\",\n \"shapeRendering\",\n \"shapeSubtract\",\n \"sliderOrientation\",\n \"spatialNavigationAction\",\n \"spatialNavigationContain\",\n \"spatialNavigationFunction\",\n \"speak\",\n \"speakAs\",\n \"stopColor\",\n \"stopOpacity\",\n \"stringSet\",\n \"stroke\",\n \"strokeAlign\",\n \"strokeAlignment\",\n \"strokeBreak\",\n \"strokeColor\",\n \"strokeDashCorner\",\n \"strokeDashJustify\",\n \"strokeDashadjust\",\n \"strokeDasharray\",\n \"strokeDashcorner\",\n \"strokeDashoffset\",\n \"strokeImage\",\n \"strokeLinecap\",\n \"strokeLinejoin\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeOrigin\",\n \"strokePosition\",\n \"strokeRepeat\",\n \"strokeSize\",\n \"strokeWidth\",\n \"tabSize\",\n \"tableLayout\",\n \"textAlign\",\n \"textAlignAll\",\n \"textAlignLast\",\n \"textAnchor\",\n \"textAutospace\",\n \"textBox\",\n \"textBoxEdge\",\n \"textBoxTrim\",\n \"textCombineUpright\",\n \"textDecoration\",\n \"textDecorationColor\",\n \"textDecorationInset\",\n \"textDecorationLine\",\n \"textDecorationSkip\",\n \"textDecorationSkipBox\",\n \"textDecorationSkipInk\",\n \"textDecorationSkipSelf\",\n \"textDecorationSkipSpaces\",\n \"textDecorationStyle\",\n \"textDecorationThickness\",\n \"textEmphasis\",\n \"textEmphasisColor\",\n \"textEmphasisPosition\",\n \"textEmphasisSkip\",\n \"textEmphasisStyle\",\n \"textGroupAlign\",\n \"textIndent\",\n \"textJustify\",\n \"textOrientation\",\n \"textOverflow\",\n \"textRendering\",\n \"textShadow\",\n \"textSizeAdjust\",\n \"textSpacing\",\n \"textSpacingTrim\",\n \"textTransform\",\n \"textUnderlineOffset\",\n \"textUnderlinePosition\",\n \"textWrap\",\n \"textWrapMode\",\n \"textWrapStyle\",\n \"timelineScope\",\n \"timelineTrigger\",\n \"timelineTriggerExitRange\",\n \"timelineTriggerExitRangeEnd\",\n \"timelineTriggerExitRangeStart\",\n \"timelineTriggerName\",\n \"timelineTriggerRange\",\n \"timelineTriggerRangeEnd\",\n \"timelineTriggerRangeStart\",\n \"timelineTriggerSource\",\n \"top\",\n \"touchAction\",\n \"transform\",\n \"transformBox\",\n \"transformOrigin\",\n \"transformStyle\",\n \"transition\",\n \"transitionBehavior\",\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\",\n \"translate\",\n \"triggerScope\",\n \"unicodeBidi\",\n \"userSelect\",\n \"vectorEffect\",\n \"verticalAlign\",\n \"viewTimeline\",\n \"viewTimelineAxis\",\n \"viewTimelineInset\",\n \"viewTimelineName\",\n \"viewTransitionClass\",\n \"viewTransitionGroup\",\n \"viewTransitionName\",\n \"viewTransitionScope\",\n \"visibility\",\n \"voiceBalance\",\n \"voiceDuration\",\n \"voiceFamily\",\n \"voicePitch\",\n \"voiceRange\",\n \"voiceRate\",\n \"voiceStress\",\n \"voiceVolume\",\n \"whiteSpace\",\n \"whiteSpaceCollapse\",\n \"whiteSpaceTrim\",\n \"widows\",\n \"width\",\n \"willChange\",\n \"wordBreak\",\n \"wordSpaceTransform\",\n \"wordSpacing\",\n \"wordWrap\",\n \"wrapAfter\",\n \"wrapBefore\",\n \"wrapFlow\",\n \"wrapInside\",\n \"wrapThrough\",\n \"writingMode\",\n \"x\",\n \"y\",\n \"zIndex\",\n \"zoom\",\n])\n","/**\n * CSS property handling and type definitions.\n * Provides type-safe mappings from JavaScript objects to CSS properties,\n * with automatic unit conversion and value formatting.\n * @module props\n */\n\nimport { Properties, ObsoleteProperties } from \"csstype\"\nimport { CssLike, CssVar } from \"@/values\"\nimport { propertyUnits, type PropertyWithUnit } from \"./propertyUnits.generated\"\nimport { knownPropertyNames } from \"./knownProperties.generated\"\n\n/** All non-obsolete CSS properties from csstype */\ntype Props = Required<Omit<Properties, keyof ObsoleteProperties>>\n\n/** Properties that have default units and are valid CSS properties */\ntype PropsWithUnit = PropertyWithUnit & keyof Props\n\n/**\n * Converts a kebab-case string to camelCase.\n */\nexport function kebabToCamel(str: string): string {\n return str.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())\n}\n\n/**\n * Converts a camelCase string to kebab-case.\n */\nexport function camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase())\n}\n\nfunction getUnitForProperty(propertyName: string): string | undefined {\n return propertyName in propertyUnits ? propertyUnits[propertyName as PropertyWithUnit] : undefined\n}\n\n/**\n * Converts a CSS-like value to its string representation.\n * For properties with known units, numbers are automatically suffixed.\n */\nfunction formatValue(value: CssLike<string | number>, propertyName: string, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") {\n const unit = getUnitForProperty(propertyName)\n if (unit === \"%\") return `${value * 100}${unit}`\n if (value === 0) return \"0\"\n return unit ? `${value}${unit}` : value.toString()\n }\n return formatValue(value.value, propertyName, maxDepth - 1)\n}\n\n/**\n * Checks if a property name is a CSS custom property (variable).\n */\nexport function isCssVariableName(key: string): key is CssVar {\n return key.startsWith(\"--\")\n}\n\n/**\n * Converts a CSS-like value to a string for use as a CSS variable value.\n * @param value - The value to convert (string, number, or wrapped value)\n * @param maxDepth - Maximum recursion depth for evaluating the value\n * @returns The string representation\n */\nexport function asVar(value: CssLike<string | number>, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n switch (typeof value) {\n case \"string\":\n return value\n case \"number\":\n return value.toString()\n default:\n return asVar(value.value, maxDepth - 1)\n }\n}\n\n/**\n * Checks if a property name is a known CSS property.\n */\nexport function isKnownPropertyName(key: string): key is keyof Props {\n return knownPropertyNames.has(key)\n}\n\n/**\n * Converts a value to a CSS property string.\n * Automatically appends units to numeric values for properties that require them.\n * @param value - The value to convert\n * @param key - The CSS property name\n * @returns The formatted CSS value string\n */\nexport function asKnownProp(value: unknown, key: keyof Props): string {\n return formatValue(value as CssLike<string | number>, key)\n}\n\n/**\n * Checks if a key represents a nested CSS selector.\n */\n//TODO: make better validation, provide human readable errors\nexport function isNestedSelector(key: string): key is NestedCssSelector {\n return key.includes(\"&\")\n}\n\n/** Known at-rule prefixes that mochi-css recognizes */\nconst AT_RULE_PREFIXES = [\"@media \", \"@container \", \"@supports \", \"@layer \"] as const\n\n/**\n * Checks if a key represents a CSS at-rule (media, container, supports, layer).\n */\nexport function isAtRuleKey(key: string): key is AtRuleKey {\n return AT_RULE_PREFIXES.some((p) => key.startsWith(p))\n}\n\n/** A nested CSS selector pattern containing the parent reference `&` */\nexport type NestedCssSelector = `${string}&${string}`\n\n/** A CSS at-rule key for media, container, supports, or layer queries */\nexport type AtRuleKey = `@media ${string}` | `@container ${string}` | `@supports ${string}` | `@layer ${string}`\n\ntype NestedStyleKeys = AtRuleKey | NestedCssSelector\n\n/**\n * Style properties without nesting support.\n * Includes all standard CSS properties with type-safe value converters,\n * plus CSS custom properties (variables).\n *\n * Properties with known units (e.g., width, height, padding) accept numbers\n * that are automatically converted with their default unit (e.g., px, ms).\n */\nexport type SimpleStyleProps = { [K in PropsWithUnit]?: CssLike<number | Props[K]> } & {\n [K in Exclude<keyof Props, PropsWithUnit>]?: CssLike<Props[K]>\n}\n\n/**\n * Full style properties type with support for nested selectors and media queries.\n * Extends SimpleStyleProps to allow recursive style definitions.\n *\n * @example\n * const styles: StyleProps = {\n * color: 'blue',\n * padding: 16,\n * '&:hover': { color: 'red' },\n * '@media (min-width: 768px)': { padding: 24 }\n * }\n */\nexport type StyleProps = SimpleStyleProps & { [K in NestedStyleKeys]?: StyleProps | CssLike<string | number> } & Record<\n string,\n unknown\n >\n\n/**\n * Converts a SimpleStyleProps object to a CSS properties record.\n * Transforms camelCase property names to kebab-case and applies value converters.\n * @param props - The style properties object\n * @returns A record of CSS property names (kebab-case) to string values\n * @example\n * cssFromProps({ backgroundColor: 'blue', padding: 16 })\n * // { 'background-color': 'blue', 'padding': '16px' }\n */\nexport function cssFromProps(\n props: SimpleStyleProps & Partial<Record<CssVar, CssLike<number | string>>>,\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(props)\n .map(([key, value]): [string, string] | undefined => {\n if (value === undefined) return undefined\n // transform variable\n if (isCssVariableName(key)) return [key, asVar(value as CssLike<string | number>)]\n // transform CSS prop\n if (isKnownPropertyName(key)) return [camelToKebab(key), asKnownProp(value, key)]\n return undefined\n })\n .filter((v) => v !== undefined),\n )\n}\n","/**\n * CSS selector building and manipulation utilities.\n * Handles nested selectors (using `&` placeholder) and CSS at-rules.\n * @module selector\n */\n\nimport { isAtRuleKey, isNestedSelector } from \"@/props\"\n\n/**\n * Immutable CSS selector builder that handles nested selectors and CSS at-rules.\n * Uses the `&` character as a placeholder for parent selector substitution.\n *\n * @example\n * const selector = new MochiSelector(['.button'])\n * selector.extend('&:hover').cssSelector // '.button:hover'\n * selector.wrap('@media (min-width: 768px)').atRules // ['@media (min-width: 768px)']\n */\nexport class MochiSelector {\n /**\n * Creates a new MochiSelector instance.\n * @param cssSelectors - Array of CSS selectors (may contain `&` placeholders)\n * @param atRules - Array of full CSS at-rule strings e.g. `\"@media (min-width: 768px)\"`\n */\n constructor(\n private readonly cssSelectors: string[] = [],\n public readonly atRules: string[] = [],\n ) {}\n\n /**\n * Gets the combined CSS selector string.\n * Multiple selectors are joined with commas.\n * @returns The CSS selector, or \"*\" if no selectors are defined\n */\n get cssSelector(): string {\n if (this.cssSelectors.length === 0) return \"*\"\n return this.cssSelectors.join(\", \")\n }\n\n /**\n * Substitutes all `&` placeholders with the given root selector.\n * @param root - The selector to replace `&` with\n * @returns A new MochiSelector with substituted selectors\n */\n substitute(root: string): MochiSelector {\n return new MochiSelector(\n this.cssSelectors.map((selector) => selector.replace(/&/g, root)),\n this.atRules,\n )\n }\n\n /**\n * Extends this selector by nesting a child selector.\n * The `&` in the child selector is replaced with each parent selector.\n * @param child - The child selector pattern (must contain `&`)\n * @returns A new MochiSelector with the extended selectors\n * @example\n * new MochiSelector(['.btn']).extend('&:hover') // '.btn:hover'\n * new MochiSelector(['.btn']).extend('& .icon') // '.btn .icon'\n */\n extend(child: string): MochiSelector {\n if (!isNestedSelector(child)) return this\n const children = MochiSelector.split(child)\n const selectors = this.cssSelectors.flatMap((parentSelector) =>\n children.map((childSelector) => {\n return childSelector.replace(/&/g, parentSelector)\n }),\n )\n return new MochiSelector(selectors, this.atRules)\n }\n\n /**\n * Wraps this selector with a CSS at-rule.\n * @param atRule - The full at-rule string (e.g. `\"@media (min-width: 768px)\"`)\n * @returns A new MochiSelector with the added at-rule, or unchanged if not a known at-rule\n * @example\n * selector.wrap('@media (min-width: 768px)') // Adds media query\n * selector.wrap('@container sidebar (min-width: 300px)') // Adds container query\n */\n wrap(atRule: string): MochiSelector {\n if (!isAtRuleKey(atRule)) return this\n return new MochiSelector(this.cssSelectors, [...this.atRules, atRule])\n }\n\n /**\n * Splits a comma-separated selector string into individual selectors.\n * @param selector - The selector string to split\n * @returns Array of individual selector strings\n */\n private static split(selector: string): string[] {\n return [selector]\n }\n}\n","/**\n * Hashing utilities for generating short, deterministic class names.\n * Uses djb2 algorithm for fast string hashing.\n * @module hash\n */\n\n/** Characters used for base-62 encoding (css-name safe variant of base-64) */\nconst hashBase = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\"\nconst base = hashBase.length\n\n/**\n * Converts a number to a base-62 string representation.\n * @param num - The number to convert\n * @param maxLength - Optional maximum length of the output string\n * @returns Base-62 encoded string representation of the number\n */\nexport function numberToBase62(num: number, maxLength?: number): string {\n let out = \"\"\n while (num > 0 && out.length < (maxLength ?? Infinity)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n out = hashBase[num % base]! + out\n num = Math.floor(num / base)\n }\n return out.length > 0 ? out : \"0\"\n}\n\n/**\n * Generates a short hash string from input using the djb2 algorithm.\n * Used to create unique, deterministic CSS class names from style content.\n * @param input - The string to hash\n * @param length - Maximum length of the hash output (default: 8)\n * @returns A short, css-safe hash string\n * @example\n * shortHash(\"color: red;\") // Returns something like \"A1b2C3d4\"\n */\nexport function shortHash(input: string, length = 8): string {\n // fast 32-bit integer hash (djb2 variant)\n let h = 5381\n for (let i = 0; i < input.length; i++) {\n h = (h * 33) ^ input.charCodeAt(i)\n }\n // force unsigned\n h >>>= 0\n\n return numberToBase62(h, length)\n}\n","/**\n * String comparison utilities for deterministic sorting.\n * Used internally to ensure consistent CSS output order.\n * @module compare\n */\n\n/**\n * Compares two strings lexicographically.\n */\nexport function compareString<T extends string>(a: T, b: T) {\n return a < b ? -1 : a === b ? 0 : 1\n}\n\n/**\n * Compares two tuples by their first element (string key).\n * Useful for sorting Object.entries() results.\n */\nexport function compareStringKey<T extends [string, unknown]>(a: T, b: T) {\n return compareString(a[0], b[0])\n}\n\n/**\n * Creates a comparator function for objects with a specific string property.\n * @param name - The property name to compare by\n * @returns A comparator function that compares objects by the specified property\n * @example\n * const items = [{ key: 'b' }, { key: 'a' }]\n * items.sort(stringPropComparator('key')) // [{ key: 'a' }, { key: 'b' }]\n */\nexport function stringPropComparator<N extends string>(name: N) {\n return <T extends Record<N, string>>(a: T, b: T) => compareString(a[name], b[name])\n}\n","/**\n * CSS object model for representing and serializing styles.\n * Converts JavaScript style objects into CSS blocks with proper\n * selector handling, nesting support, and deterministic output.\n * @module cssObject\n */\n\nimport {\n asKnownProp,\n asVar,\n camelToKebab,\n isCssVariableName,\n isKnownPropertyName,\n isAtRuleKey,\n isNestedSelector,\n StyleProps,\n} from \"@/props\"\nimport { shortHash } from \"@/hash\"\nimport { MochiSelector } from \"@/selector\"\nimport { compareStringKey, stringPropComparator } from \"@/compare\"\nimport { CssLike } from \"@/values\"\n\n/**\n * Represents a single CSS rule block with properties and a selector.\n * Handles conversion to CSS string format and hash generation.\n */\nexport class CssObjectSubBlock {\n /**\n * Creates a new CSS sub-block.\n * @param cssProps - Map of CSS property names (kebab-case) to values\n * @param selector - The selector this block applies to\n */\n constructor(\n public readonly cssProps: Record<string, string>,\n public readonly selector: MochiSelector,\n ) {}\n\n /**\n * Computes a deterministic hash of this block's CSS content.\n * Used for generating unique class names.\n */\n get hash(): string {\n const str = this.asCssString(\"&\")\n return shortHash(str)\n }\n\n /**\n * Converts this block to a CSS string.\n * Handles at-rule wrapping (media, container, supports, layer) if present.\n * Multiple at-rules are nested in order.\n * @param root - The root selector to substitute for `&`\n * @returns Formatted CSS string\n */\n asCssString(root: string): string {\n const selector = this.selector.substitute(root)\n const atRules = selector.atRules\n const innerIndent = \" \".repeat(atRules.length)\n\n const props = Object.entries(this.cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => `${innerIndent} ${k}: ${v};\\n`)\n .join(\"\")\n\n let result = `${innerIndent}${selector.cssSelector} {\\n${props}${innerIndent}}`\n\n for (let i = atRules.length - 1; i >= 0; i--) {\n const outerIndent = \" \".repeat(i)\n result = `${outerIndent}${atRules[i]} {\\n${result}\\n${outerIndent}}`\n }\n\n return result\n }\n\n /**\n * Parses StyleProps into an array of CSS sub-blocks.\n * Recursively processes nested selectors and media queries.\n * Output order is deterministic for consistent hash generation.\n *\n * @param props - The style properties to parse\n * @param selector - The parent selector context (defaults to `&`)\n * @returns Non-empty array of sub-blocks (main block first, then nested)\n */\n static fromProps(props: StyleProps, selector?: MochiSelector): [CssObjectSubBlock, ...CssObjectSubBlock[]] {\n selector ??= new MochiSelector([\"&\"])\n\n const cssProps: Record<string, string> = {}\n const propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[] = []\n\n for (const [key, value] of Object.entries(props)) {\n // skip undefined value\n if (value === undefined) continue\n\n // transform variable\n if (isCssVariableName(key)) {\n cssProps[key] = asVar(value as CssLike<string | number>)\n continue\n }\n\n // transform known CSS prop\n if (isKnownPropertyName(key)) {\n cssProps[camelToKebab(key)] = asKnownProp(value, key)\n continue\n }\n\n // transform nested and media selectors\n if (isNestedSelector(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.extend(key),\n })\n continue\n }\n\n // transform at-rule selector (media, container, supports, layer)\n if (isAtRuleKey(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.wrap(key),\n })\n continue\n }\n\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n console.warn(`[mochi-css] Unknown style property \"${key}\" will be ignored`)\n }\n }\n\n return [\n new CssObjectSubBlock(cssProps, selector),\n ...propsToProcess\n .toSorted(stringPropComparator(\"key\"))\n .flatMap(({ props, selector }) => CssObjectSubBlock.fromProps(props, selector)),\n ] as const\n }\n}\n\n/**\n * Represents an abstract CSS block definition.\n * Contains one or more sub-blocks for nested selectors and media queries.\n */\nexport class CssObjectBlock {\n /** The generated unique class name for this block */\n public readonly className: string\n /** All sub-blocks (main styles and nested/media rules) */\n public readonly subBlocks: CssObjectSubBlock[] = []\n\n /**\n * Creates a new CSS block from style properties.\n * Generates a unique class name based on the content hash.\n * @param styles - The style properties to compile\n */\n constructor(styles: StyleProps) {\n const blocks = CssObjectSubBlock.fromProps(styles)\n\n this.className = \"c\" + shortHash(blocks.map((b) => b.hash).join(\"+\"))\n this.subBlocks = blocks\n }\n\n /**\n * Gets the CSS class selector for this block.\n */\n get selector(): string {\n return `.${this.className}`\n }\n\n /**\n * Converts style block to a CSS string.\n * @param root - The root selector to scope styles to\n * @returns Complete CSS string for this block\n */\n asCssString(root: string): string {\n return this.subBlocks\n .map((b) => b.asCssString(new MochiSelector([root]).extend(`&.${this.className}`).cssSelector))\n .join(\"\\n\\n\")\n }\n}\n\nexport type AllVariants = Record<string, Record<string, StyleProps>>\nexport type DefaultVariants = Record<never, Record<string, StyleProps>>\n\n/**\n * A compound variant entry that applies styles when multiple variant conditions match.\n * Each entry specifies a set of variant conditions and a `css` property with styles\n * that apply only when all conditions are satisfied simultaneously.\n *\n * @template V - The variant definitions type\n *\n * @example\n * { color: 'red', size: 'large', css: { fontWeight: 'bold' } }\n */\nexport type CompoundVariant<V extends AllVariants> = {\n [K in keyof V]?: keyof V[K]\n} & { css: StyleProps }\n\n/**\n * Refines string literal types to their proper runtime types.\n * Converts \"true\"/\"false\" strings to boolean literals.\n */\ntype RefineVariantType<T extends string> = T extends \"true\"\n ? true\n : T extends \"false\"\n ? false\n : T extends string\n ? T\n : string\n\n/**\n * Props for defining variants in a style object.\n * @template V - The variant definitions type\n */\nexport type VariantProps<V extends AllVariants> = {\n /** Variant definitions mapping names to options to styles */\n variants?: V\n /** Default variant selections for when not explicitly provided */\n defaultVariants?: { [K in keyof V]?: keyof V[K] extends string ? RefineVariantType<keyof V[K] & string> : never }\n /** Compound variant definitions that apply when multiple variant conditions match */\n compoundVariants?: CompoundVariant<V>[]\n}\n\n/** Combined type for style props with optional variants */\nexport type MochiCSSProps<V extends AllVariants> = Omit<\n StyleProps,\n \"variants\" | \"compoundVariants\" | \"defaultVariants\"\n> &\n VariantProps<V>\n\n/** Utility type to override properties of A with properties of B */\ntype Override<A extends object, B extends object> = B & Omit<A, keyof B>\n\n/** Recursively merges variant types from a tuple, with later types overriding earlier */\nexport type MergeCSSVariants<V extends AllVariants[]> = V extends [\n infer V1 extends AllVariants,\n ...infer VRest extends AllVariants[],\n]\n ? Override<V1, MergeCSSVariants<VRest>>\n : DefaultVariants\n\n/** Refines all values in a string record to their proper variant types */\ntype RefineVariantTypes<V extends Record<string, string>> = { [K in keyof V]: RefineVariantType<V[K]> }\n\n/** Extracts and refines variant option types from a DefaultVariants definition */\nexport type RefineVariants<T extends AllVariants> = RefineVariantTypes<{ [K in keyof T]: keyof T[K] & string }>\n\n/**\n * Complete CSS object representation with main and variant styles.\n *\n * @template V - The variant definitions type\n *\n * @example\n * const obj = new CSSObject({\n * color: 'blue',\n * variants: {\n * size: {\n * small: { fontSize: 12 },\n * large: { fontSize: 18 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * obj.asCssString() // Returns complete CSS with all variants\n */\nexport class CSSObject<V extends AllVariants = DefaultVariants> {\n /** The main style block (non-variant styles) */\n public readonly mainBlock: CssObjectBlock\n /** Compiled blocks for each variant option */\n public readonly variantBlocks: { [K in keyof V & string]: Record<keyof V[K] & string, CssObjectBlock> }\n /** Default variant selections */\n public readonly variantDefaults: Partial<RefineVariants<V>>\n /** Compound variant conditions and their parsed sub-blocks */\n public readonly compoundVariants: { conditions: Record<string, string>; subBlocks: CssObjectSubBlock[] }[]\n\n /**\n * Creates a new CSSObject from style props.\n * Compiles main styles and all variant options into CSS blocks.\n */\n public constructor({ variants, defaultVariants, compoundVariants, ...props }: MochiCSSProps<V>) {\n this.mainBlock = new CssObjectBlock(props as StyleProps)\n this.variantBlocks = {} as typeof this.variantBlocks\n this.variantDefaults = defaultVariants ?? {}\n this.compoundVariants = []\n\n if (variants) {\n for (const variantGroupName in variants) {\n this.variantBlocks[variantGroupName] =\n {} as (typeof this.variantBlocks)[keyof typeof this.variantBlocks]\n const variantGroup = variants[variantGroupName]\n for (const variantItemName in variantGroup) {\n this.variantBlocks[variantGroupName][variantItemName] = new CssObjectBlock(\n variantGroup[variantItemName] ?? {},\n )\n }\n }\n }\n\n if (compoundVariants) {\n for (const compound of compoundVariants) {\n const { css: styles, ...conditions } = compound\n this.compoundVariants.push({\n conditions: conditions as Record<string, string>,\n subBlocks: CssObjectSubBlock.fromProps(styles),\n })\n }\n }\n }\n\n /**\n * Serializes the entire CSS object to a CSS string.\n * Outputs main block first, then all variant blocks in sorted order.\n * @returns Complete CSS string ready for injection into a stylesheet\n */\n public asCssString(): string {\n return [\n this.mainBlock.asCssString(this.mainBlock.selector),\n ...Object.entries(this.variantBlocks)\n .toSorted(compareStringKey)\n .flatMap(([_, b]) => Object.entries(b).toSorted(compareStringKey))\n .map(([_, b]) => b.asCssString(this.mainBlock.selector)),\n ...this.compoundVariants.flatMap(({ conditions, subBlocks }) => {\n const selectorParts: string[] = []\n for (const [variantName, optionName] of Object.entries(conditions).toSorted(compareStringKey)) {\n const selector = this.variantBlocks[variantName]?.[optionName]?.selector\n if (selector === undefined) return []\n selectorParts.push(selector)\n }\n const combinedSelector = `${this.mainBlock.selector}${selectorParts.join(\"\")}`\n return subBlocks.map((b) => b.asCssString(combinedSelector))\n }),\n ].join(\"\\n\\n\")\n }\n}\n","/**\n * Core CSS-in-JS runtime for generating and applying styles.\n * Provides the main `css` function and `MochiCSS` class for style management.\n * @module css\n */\n\nimport clsx from \"clsx\"\nimport { CSSObject, AllVariants, DefaultVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/**\n * Runtime representation of a CSS style definition with variant support.\n * Holds generated class names and provides methods to compute the final\n * className string based on selected variants.\n *\n * @template V - The variant definitions type mapping variant names to their options\n *\n * @example\n * const styles = MochiCSS.from(new CSSObject({\n * color: 'blue',\n * variants: { size: { small: { fontSize: 12 }, large: { fontSize: 18 } } }\n * }))\n * styles.variant({ size: 'large' }) // Returns combined class names\n */\nexport class MochiCSS<V extends AllVariants = DefaultVariants> {\n /**\n * Creates a new MochiCSS instance.\n * @param classNames - Base class names to always include\n * @param variantClassNames - Mapping of variant names to option class names\n * @param defaultVariants - Default variant selections when not specified\n */\n constructor(\n public readonly classNames: string[],\n public readonly variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } },\n public readonly defaultVariants: Partial<RefineVariants<V>>,\n ) {}\n\n /**\n * Computes the final className string based on variant selections.\n * Compound variants are handled purely via CSS combined selectors,\n * so no runtime matching is needed here.\n * @param props - Variant selections\n * @returns Combined className string for use in components\n */\n variant(props: Partial<RefineVariants<V>>): string {\n const keys = new Set<keyof V & string>(\n [...Object.keys(props), ...Object.keys(this.defaultVariants)].filter((k) => k in this.variantClassNames),\n )\n\n return clsx(\n this.classNames,\n ...keys.values().map((k) => {\n const variantGroup = this.variantClassNames[k]\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!variantGroup) return false\n\n const variantKey = ((k in props ? props[k] : undefined) ?? this.defaultVariants[k])?.toString()\n if (variantKey == null) return false\n\n const selectedClassname = variantGroup[variantKey]\n if (selectedClassname !== undefined) return selectedClassname\n\n const defaultKey = this.defaultVariants[k]\n if (defaultKey == null) return false\n\n return variantGroup[defaultKey.toString()]\n }),\n )\n }\n\n /**\n * Creates a MochiCSS instance from a CSSObject.\n * Extracts class names from the compiled CSS blocks.\n * @template V - The variant definitions type\n * @param object - The compiled CSSObject to extract from\n * @returns A new MochiCSS instance with the extracted class names\n */\n static from<V extends AllVariants = DefaultVariants>(object: CSSObject<V>): MochiCSS<V> {\n return new MochiCSS<V>(\n [object.mainBlock.className],\n Object.fromEntries(\n Object.entries(object.variantBlocks).map(([key, variantOptions]) => {\n return [\n key,\n Object.fromEntries(\n Object.entries(variantOptions).map(([optionKey, block]) => {\n return [optionKey, block.className]\n }),\n ),\n ]\n }),\n ) as { [K in keyof V]: { [P in keyof V[K]]: string } },\n object.variantDefaults,\n )\n }\n}\n\n/**\n * Creates a CSS style definition.\n * The primary API for defining styles in Mochi-CSS.\n *\n * @template V - Tuple of variant definition types\n * @param props - One or more style objects or existing MochiCSS instances to merge\n * @returns A MochiCSS instance with all styles and variants combined\n *\n * @example\n * // Simple usage\n * const button = css({ padding: 8, borderRadius: 4 })\n *\n * @example\n * // With variants\n * const button = css({\n * padding: 8,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * button.variant({ size: 'large' }) // Get class names for large size\n *\n * @example\n * // Merging multiple styles\n * const combined = css(baseStyles, additionalStyles)\n */\nconst emptyMochiCSS = new MochiCSS<AllVariants>([], {}, {})\n\n/**\n * Merges multiple MochiCSS instances into a single one, combining their\n * class names, variant class names, and default variants.\n * @param instances - The MochiCSS instances to merge\n * @returns A new MochiCSS instance with all styles combined\n */\nexport function mergeMochiCss<V extends AllVariants[]>(\n instances: MochiCSS<AllVariants>[],\n): MochiCSS<MergeCSSVariants<V>> {\n if (instances.length === 0) return emptyMochiCSS as MochiCSS<MergeCSSVariants<V>>\n\n return new MochiCSS<AllVariants>(\n instances.flatMap((c) => c.classNames),\n instances.reduce((a, b) => Object.assign(a, b.variantClassNames), {}),\n instances.reduce((a, b) => Object.assign(a, b.defaultVariants), {}),\n ) as MochiCSS<MergeCSSVariants<V>>\n}\n\nexport function css<V extends AllVariants[]>(\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> | MochiCSS }\n): MochiCSS<MergeCSSVariants<V>> {\n const cssToMerge: MochiCSS<AllVariants>[] = []\n for (const p of props) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (p == null || typeof p !== \"object\") continue\n if (p instanceof MochiCSS) {\n cssToMerge.push(p)\n } else {\n cssToMerge.push(MochiCSS.from(new CSSObject<AllVariants>(p)))\n }\n }\n\n return mergeMochiCss(cssToMerge)\n}\n","/**\n * React styled component utilities.\n * Creates styled components with CSS-in-JS support and variant props.\n * @module styled\n */\n\nimport { ComponentProps, ComponentType, createElement, FC, HTMLElementType } from \"react\"\nimport { css } from \"@/css\"\nimport clsx from \"clsx\"\nimport { AllVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/** Props added by MochiCSS to styled components */\ntype MochiProps<V extends AllVariants[]> = {\n className?: string\n} & Partial<RefineVariants<MergeCSSVariants<V>>>\n\n/** Minimal interface for components that accept className */\ntype Cls = { className?: string }\n\n/**\n * Creates a styled React component with CSS-in-JS support and variant props.\n * Similar to styled-components or Stitches, but with zero runtime overhead.\n *\n * @template T - The base element type or component type\n * @template V - The variant definitions tuple type\n * @param target - The HTML element tag name or React component to style\n * @param props - One or more style objects with optional variants\n * @returns A React functional component with merged props and variant support\n *\n * @example\n * const Button = styled('button', {\n * padding: 8,\n * borderRadius: 4,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * },\n * variant: {\n * primary: { backgroundColor: 'blue' },\n * secondary: { backgroundColor: 'gray' }\n * }\n * }\n * })\n *\n * // Usage: <Button size=\"large\" variant=\"primary\">Click me</Button>\n */\n//TODO: Move to dedicated \"styled\" package\nexport function styled<T extends HTMLElementType | ComponentType<Cls>, V extends AllVariants[]>(\n target: T,\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> }\n): FC<Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>> {\n const styles = css<V>(...props)\n return ({ className, ...p }: Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>) =>\n //TODO: pick only variant props from p\n //TODO: omit variant props in p\n createElement(target, {\n className: clsx(styles.variant(p as unknown as Parameters<typeof styles.variant>[0]), className),\n ...p,\n })\n}\n","import { shortHash } from \"@/hash\"\nimport { cssFromProps, SimpleStyleProps } from \"@/props\"\nimport { compareStringKey } from \"@/compare\"\n\nexport type KeyframeStops = Record<string, SimpleStyleProps>\n\nexport class KeyframesObject {\n public readonly name: string\n private readonly body: string\n\n constructor(stops: KeyframeStops) {\n this.body = KeyframesObject.generateBody(stops)\n this.name = \"kf\" + shortHash(this.body)\n }\n\n asCssString(): string {\n return `@keyframes ${this.name} {\\n${this.body}\\n}`\n }\n\n private static generateBody(stops: KeyframeStops): string {\n return Object.entries(stops)\n .toSorted(compareStringKey)\n .map(([stopKey, props]) => {\n const cssProps = cssFromProps(props)\n const propsStr = Object.entries(cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => ` ${k}: ${v};`)\n .join(\"\\n\")\n return ` ${stopKey} {\\n${propsStr}\\n }`\n })\n .join(\"\\n\\n\")\n }\n}\n","import { KeyframesObject, type KeyframeStops } from \"@/keyframesObject\"\nexport type { KeyframeStops } from \"@/keyframesObject\"\n\nexport class MochiKeyframes {\n constructor(public readonly name: string) {}\n\n toString(): string {\n return this.name\n }\n\n get value(): string {\n return this.name\n }\n\n static from(object: KeyframesObject): MochiKeyframes {\n return new MochiKeyframes(object.name)\n }\n}\n\nexport function keyframes(stops: KeyframeStops): MochiKeyframes {\n return MochiKeyframes.from(new KeyframesObject(stops))\n}\n","import { CssObjectSubBlock } from \"@/cssObject\"\nimport { compareStringKey } from \"@/compare\"\nimport { StyleProps } from \"@/props\"\n\nexport type GlobalCssStyles = Record<string, StyleProps>\n\n/**\n * CSS object model for global (non-scoped) styles.\n * Accepts a map of CSS selectors to style objects and serializes them\n * as plain CSS rules without class name scoping.\n *\n * @example\n * const obj = new GlobalCssObject({\n * body: { margin: 0 },\n * 'h1': { fontSize: 32 },\n * })\n * obj.asCssString() // \"body {\\n margin: 0;\\n}\\n\\nh1 {\\n font-size: 32px;\\n}\"\n */\nexport class GlobalCssObject {\n private readonly rules: { selector: string; subBlocks: CssObjectSubBlock[] }[]\n\n constructor(styles: GlobalCssStyles) {\n this.rules = Object.entries(styles)\n .toSorted(compareStringKey)\n .map(([selector, props]) => ({\n selector,\n subBlocks: [...CssObjectSubBlock.fromProps(props)],\n }))\n }\n\n asCssString(): string {\n return this.rules\n .flatMap(({ selector, subBlocks }) => subBlocks.map((b) => b.asCssString(selector)))\n .join(\"\\n\\n\")\n }\n}\n","import type { GlobalCssStyles } from \"@/globalCssObject\"\nexport type { GlobalCssStyles } from \"@/globalCssObject\"\n\n/**\n * Creates a global CSS definition.\n * Styles are not scoped to any class — they apply to all matching elements.\n *\n * @param styles - Map of CSS selectors to style objects\n *\n * @example\n * globalCss({\n * 'body': { margin: 0, padding: 0 },\n * '*, *::before, *::after': { boxSizing: 'border-box' },\n * })\n */\nexport function globalCss(styles: GlobalCssStyles): void {\n void styles // mark as used\n}\n","/**\n * Helper builders for CSS at-rule keys.\n * Provides a typed, ergonomic API for constructing @media, @container, and @supports rules.\n * @module query\n */\n\nimport type { AtRuleKey } from \"@/props\"\n\n/**\n * Wraps a condition in parentheses if not already wrapped.\n */\nfunction wrapParens(condition: string): string {\n const trimmed = condition.trim()\n if (trimmed.startsWith(\"(\") && trimmed.endsWith(\")\")) return trimmed\n return `(${trimmed})`\n}\n\n// ─── @media ──────────────────────────────────────────────────────────────────\n\ninterface MediaHelper {\n /** `@media (condition)` */\n (condition: string): AtRuleKey & `@media ${string}`\n /** `@media (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (a), (b), …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: dark)` */\n readonly dark: AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: light)` */\n readonly light: AtRuleKey & `@media ${string}`\n /** `@media (prefers-reduced-motion: no-preference)` */\n readonly motion: AtRuleKey & `@media ${string}`\n /** `@media print` */\n readonly print: AtRuleKey & `@media ${string}`\n}\n\nfunction mediaFn(condition: string): AtRuleKey & `@media ${string}` {\n return `@media ${wrapParens(condition)}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\", \")}` as AtRuleKey & `@media ${string}`\n}\n\nObject.defineProperties(mediaFn, {\n dark: { get: () => \"@media (prefers-color-scheme: dark)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n light: { get: () => \"@media (prefers-color-scheme: light)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n motion: {\n get: () => \"@media (prefers-reduced-motion: no-preference)\" as AtRuleKey & `@media ${string}`,\n enumerable: true,\n },\n print: { get: () => \"@media print\" as AtRuleKey & `@media ${string}`, enumerable: true },\n})\n\n/** Helper for constructing `@media` at-rule keys. */\nexport const media = mediaFn as MediaHelper\n\n// ─── @container ──────────────────────────────────────────────────────────────\n\ninterface ContainerHelper {\n /** `@container (condition)` — anonymous container */\n (condition: string): AtRuleKey & `@container ${string}`\n /** `@container name (condition)` — named container */\n named(name: string, condition: string): AtRuleKey & `@container ${string}`\n}\n\nfunction containerFn(condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\ncontainerFn.named = function (name: string, condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${name} ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\n/** Helper for constructing `@container` at-rule keys. */\nexport const container = containerFn as ContainerHelper\n\n// ─── @supports ───────────────────────────────────────────────────────────────\n\ninterface SupportsHelper {\n /** `@supports (declaration)` */\n (condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports not (declaration)` */\n not(condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n /** `@supports (a) or (b) or …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n}\n\nfunction supportsFn(condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.not = function (condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports not ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" or \")}` as AtRuleKey & `@supports ${string}`\n}\n\n/** Helper for constructing `@supports` at-rule keys. */\nexport const supports = supportsFn as SupportsHelper\n"],"mappings":"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ClB,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,SAAS;CACT,gBAAgB;CAChB,qBAAqB;CACrB,yBAAyB;CACzB,YAAY;CACZ,YAAY;CACZ,gBAAgB;CAChB,qBAAqB;CACrB,iBAAiB;CACjB,0BAA0B;CAC1B,6BAA6B;CAC7B,+BAA+B;CAC/B,sBAAsB;CACtB,yBAAyB;CACzB,2BAA2B;CAC3B,KAAK;CACL,iBAAiB;CACjB,YAAY;CACZ,iBAAiB;CACjB,oBAAoB;CACpB,WAAW;CACX,eAAe;CACf,cAAc;CACd,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,OAAO;CACP,aAAa;CACb,GAAG;CACH,GAAG;CACH,MAAM;CACT;;;;ACnUD,MAAaC,qBAA0C,IAAI,IAAI;CAC3D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH,CAAC;;;;;;;AC/sBF,SAAgB,aAAa,KAAqB;AAC9C,QAAO,IAAI,QAAQ,WAAW,MAAM,MAAM,EAAE,aAAa,CAAC;;AAG9D,SAAS,mBAAmB,cAA0C;AAClE,QAAO,gBAAgB,gBAAgB,cAAc,gBAAoC;;;;;;AAO7F,SAAS,YAAY,OAAiC,cAAsB,WAAW,IAAY;AAC/F,KAAI,YAAY,EAAG,QAAO;AAC1B,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,UAAU;EAC3B,MAAM,OAAO,mBAAmB,aAAa;AAC7C,MAAI,SAAS,IAAK,QAAO,GAAG,QAAQ,MAAM;AAC1C,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,OAAO,GAAG,QAAQ,SAAS,MAAM,UAAU;;AAEtD,QAAO,YAAY,MAAM,OAAO,cAAc,WAAW,EAAE;;;;;AAM/D,SAAgB,kBAAkB,KAA4B;AAC1D,QAAO,IAAI,WAAW,KAAK;;;;;;;;AAS/B,SAAgB,MAAM,OAAiC,WAAW,IAAY;AAC1E,KAAI,YAAY,EAAG,QAAO;AAC1B,SAAQ,OAAO,OAAf;EACI,KAAK,SACD,QAAO;EACX,KAAK,SACD,QAAO,MAAM,UAAU;EAC3B,QACI,QAAO,MAAM,MAAM,OAAO,WAAW,EAAE;;;;;;AAOnD,SAAgB,oBAAoB,KAAiC;AACjE,QAAO,mBAAmB,IAAI,IAAI;;;;;;;;;AAUtC,SAAgB,YAAY,OAAgB,KAA0B;AAClE,QAAO,YAAY,OAAmC,IAAI;;;;;AAO9D,SAAgB,iBAAiB,KAAuC;AACpE,QAAO,IAAI,SAAS,IAAI;;;AAI5B,MAAM,mBAAmB;CAAC;CAAW;CAAe;CAAc;CAAU;;;;AAK5E,SAAgB,YAAY,KAA+B;AACvD,QAAO,iBAAiB,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;;;;;;;;;;;AAiD1D,SAAgB,aACZ,OACsB;AACtB,QAAO,OAAO,YACV,OAAO,QAAQ,MAAM,CAChB,KAAK,CAAC,KAAK,WAAyC;AACjD,MAAI,UAAU,OAAW,QAAO;AAEhC,MAAI,kBAAkB,IAAI,CAAE,QAAO,CAAC,KAAK,MAAM,MAAkC,CAAC;AAElF,MAAI,oBAAoB,IAAI,CAAE,QAAO,CAAC,aAAa,IAAI,EAAE,YAAY,OAAO,IAAI,CAAC;GAEnF,CACD,QAAQ,MAAM,MAAM,OAAU,CACtC;;;;;;;;;;;;;;AC5JL,IAAa,gBAAb,MAAa,cAAc;;;;;;CAMvB,YACI,AAAiBC,eAAyB,EAAE,EAC5C,AAAgBC,UAAoB,EAAE,EACxC;EAFmB;EACD;;;;;;;CAQpB,IAAI,cAAsB;AACtB,MAAI,KAAK,aAAa,WAAW,EAAG,QAAO;AAC3C,SAAO,KAAK,aAAa,KAAK,KAAK;;;;;;;CAQvC,WAAW,MAA6B;AACpC,SAAO,IAAI,cACP,KAAK,aAAa,KAAK,aAAa,SAAS,QAAQ,MAAM,KAAK,CAAC,EACjE,KAAK,QACR;;;;;;;;;;;CAYL,OAAO,OAA8B;AACjC,MAAI,CAAC,iBAAiB,MAAM,CAAE,QAAO;EACrC,MAAM,WAAW,cAAc,MAAM,MAAM;AAM3C,SAAO,IAAI,cALO,KAAK,aAAa,SAAS,mBACzC,SAAS,KAAK,kBAAkB;AAC5B,UAAO,cAAc,QAAQ,MAAM,eAAe;IACpD,CACL,EACmC,KAAK,QAAQ;;;;;;;;;;CAWrD,KAAK,QAA+B;AAChC,MAAI,CAAC,YAAY,OAAO,CAAE,QAAO;AACjC,SAAO,IAAI,cAAc,KAAK,cAAc,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;;;;;;;CAQ1E,OAAe,MAAM,UAA4B;AAC7C,SAAO,CAAC,SAAS;;;;;;;;;;;;AClFzB,MAAM,WAAW;AACjB,MAAM,OAAO;;;;;;;AAQb,SAAgB,eAAe,KAAa,WAA4B;CACpE,IAAI,MAAM;AACV,QAAO,MAAM,KAAK,IAAI,UAAU,aAAa,WAAW;AAEpD,QAAM,SAAS,MAAM,QAAS;AAC9B,QAAM,KAAK,MAAM,MAAM,KAAK;;AAEhC,QAAO,IAAI,SAAS,IAAI,MAAM;;;;;;;;;;;AAYlC,SAAgB,UAAU,OAAe,SAAS,GAAW;CAEzD,IAAI,IAAI;AACR,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAC9B,KAAK,IAAI,KAAM,MAAM,WAAW,EAAE;AAGtC,QAAO;AAEP,QAAO,eAAe,GAAG,OAAO;;;;;;;;;;;;;ACnCpC,SAAgB,cAAgC,GAAM,GAAM;AACxD,QAAO,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI;;;;;;AAOtC,SAAgB,iBAA8C,GAAM,GAAM;AACtE,QAAO,cAAc,EAAE,IAAI,EAAE,GAAG;;;;;;;;;;AAWpC,SAAgB,qBAAuC,MAAS;AAC5D,SAAqC,GAAM,MAAS,cAAc,EAAE,OAAO,EAAE,MAAM;;;;;;;;;ACJvF,IAAa,oBAAb,MAAa,kBAAkB;;;;;;CAM3B,YACI,AAAgBC,UAChB,AAAgBC,UAClB;EAFkB;EACA;;;;;;CAOpB,IAAI,OAAe;AAEf,SAAO,UADK,KAAK,YAAY,IAAI,CACZ;;;;;;;;;CAUzB,YAAY,MAAsB;EAC9B,MAAM,WAAW,KAAK,SAAS,WAAW,KAAK;EAC/C,MAAM,UAAU,SAAS;EACzB,MAAM,cAAc,OAAO,OAAO,QAAQ,OAAO;EAEjD,MAAM,QAAQ,OAAO,QAAQ,KAAK,SAAS,CACtC,SAAS,iBAAiB,CAC1B,KAAK,CAAC,GAAG,OAAO,GAAG,YAAY,MAAM,EAAE,IAAI,EAAE,KAAK,CAClD,KAAK,GAAG;EAEb,IAAI,SAAS,GAAG,cAAc,SAAS,YAAY,MAAM,QAAQ,YAAY;AAE7E,OAAK,IAAI,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;GAC1C,MAAM,cAAc,OAAO,OAAO,EAAE;AACpC,YAAS,GAAG,cAAc,QAAQ,GAAG,MAAM,OAAO,IAAI,YAAY;;AAGtE,SAAO;;;;;;;;;;;CAYX,OAAO,UAAU,OAAmB,UAAuE;AACvG,eAAa,IAAI,cAAc,CAAC,IAAI,CAAC;EAErC,MAAMD,WAAmC,EAAE;EAC3C,MAAME,iBAAgF,EAAE;AAExF,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE;AAE9C,OAAI,UAAU,OAAW;AAGzB,OAAI,kBAAkB,IAAI,EAAE;AACxB,aAAS,OAAO,MAAM,MAAkC;AACxD;;AAIJ,OAAI,oBAAoB,IAAI,EAAE;AAC1B,aAAS,aAAa,IAAI,IAAI,YAAY,OAAO,IAAI;AACrD;;AAIJ,OAAI,iBAAiB,IAAI,EAAE;AACvB,mBAAe,KAAK;KAChB;KACA,OAAO;KACP,UAAU,SAAS,OAAO,IAAI;KACjC,CAAC;AACF;;AAIJ,OAAI,YAAY,IAAI,EAAE;AAClB,mBAAe,KAAK;KAChB;KACA,OAAO;KACP,UAAU,SAAS,KAAK,IAAI;KAC/B,CAAC;AACF;;AAGJ,OAAI,QAAQ,IAAI,gBAAgB,aAC5B,SAAQ,KAAK,uCAAuC,IAAI,mBAAmB;;AAInF,SAAO,CACH,IAAI,kBAAkB,UAAU,SAAS,EACzC,GAAG,eACE,SAAS,qBAAqB,MAAM,CAAC,CACrC,SAAS,EAAE,gBAAO,2BAAe,kBAAkB,UAAUC,SAAOC,WAAS,CAAC,CACtF;;;;;;;AAQT,IAAa,iBAAb,MAA4B;;CAExB,AAAgB;;CAEhB,AAAgB,YAAiC,EAAE;;;;;;CAOnD,YAAY,QAAoB;EAC5B,MAAM,SAAS,kBAAkB,UAAU,OAAO;AAElD,OAAK,YAAY,MAAM,UAAU,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;AACrE,OAAK,YAAY;;;;;CAMrB,IAAI,WAAmB;AACnB,SAAO,IAAI,KAAK;;;;;;;CAQpB,YAAY,MAAsB;AAC9B,SAAO,KAAK,UACP,KAAK,MAAM,EAAE,YAAY,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,CAC9F,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;AAwFzB,IAAa,YAAb,MAAgE;;CAE5D,AAAgB;;CAEhB,AAAgB;;CAEhB,AAAgB;;CAEhB,AAAgB;;;;;CAMhB,AAAO,YAAY,EAAE,UAAU,iBAAiB,iBAAkB,GAAG,SAA2B;AAC5F,OAAK,YAAY,IAAI,eAAe,MAAoB;AACxD,OAAK,gBAAgB,EAAE;AACvB,OAAK,kBAAkB,mBAAmB,EAAE;AAC5C,OAAK,mBAAmB,EAAE;AAE1B,MAAI,SACA,MAAK,MAAM,oBAAoB,UAAU;AACrC,QAAK,cAAc,oBACf,EAAE;GACN,MAAM,eAAe,SAAS;AAC9B,QAAK,MAAM,mBAAmB,aAC1B,MAAK,cAAc,kBAAkB,mBAAmB,IAAI,eACxD,aAAa,oBAAoB,EAAE,CACtC;;AAKb,MAAI,iBACA,MAAK,MAAM,YAAY,kBAAkB;GACrC,MAAM,EAAE,KAAK,OAAQ,GAAG,eAAe;AACvC,QAAK,iBAAiB,KAAK;IACX;IACZ,WAAW,kBAAkB,UAAU,OAAO;IACjD,CAAC;;;;;;;;CAUd,AAAO,cAAsB;AACzB,SAAO;GACH,KAAK,UAAU,YAAY,KAAK,UAAU,SAAS;GACnD,GAAG,OAAO,QAAQ,KAAK,cAAc,CAChC,SAAS,iBAAiB,CAC1B,SAAS,CAAC,GAAG,OAAO,OAAO,QAAQ,EAAE,CAAC,SAAS,iBAAiB,CAAC,CACjE,KAAK,CAAC,GAAG,OAAO,EAAE,YAAY,KAAK,UAAU,SAAS,CAAC;GAC5D,GAAG,KAAK,iBAAiB,SAAS,EAAE,YAAY,gBAAgB;IAC5D,MAAMC,gBAA0B,EAAE;AAClC,SAAK,MAAM,CAAC,aAAa,eAAe,OAAO,QAAQ,WAAW,CAAC,SAAS,iBAAiB,EAAE;KAC3F,MAAM,WAAW,KAAK,cAAc,eAAe,aAAa;AAChE,SAAI,aAAa,OAAW,QAAO,EAAE;AACrC,mBAAc,KAAK,SAAS;;IAEhC,MAAM,mBAAmB,GAAG,KAAK,UAAU,WAAW,cAAc,KAAK,GAAG;AAC5E,WAAO,UAAU,KAAK,MAAM,EAAE,YAAY,iBAAiB,CAAC;KAC9D;GACL,CAAC,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;AClTtB,IAAa,WAAb,MAAa,SAAkD;;;;;;;CAO3D,YACI,AAAgBC,YAChB,AAAgBC,mBAChB,AAAgBC,iBAClB;EAHkB;EACA;EACA;;;;;;;;;CAUpB,QAAQ,OAA2C;EAC/C,MAAM,OAAO,IAAI,IACb,CAAC,GAAG,OAAO,KAAK,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,gBAAgB,CAAC,CAAC,QAAQ,MAAM,KAAK,KAAK,kBAAkB,CAC3G;AAED,2BACI,KAAK,YACL,GAAG,KAAK,QAAQ,CAAC,KAAK,MAAM;GACxB,MAAM,eAAe,KAAK,kBAAkB;AAE5C,OAAI,CAAC,aAAc,QAAO;GAE1B,MAAM,eAAe,KAAK,QAAQ,MAAM,KAAK,WAAc,KAAK,gBAAgB,KAAK,UAAU;AAC/F,OAAI,cAAc,KAAM,QAAO;GAE/B,MAAM,oBAAoB,aAAa;AACvC,OAAI,sBAAsB,OAAW,QAAO;GAE5C,MAAM,aAAa,KAAK,gBAAgB;AACxC,OAAI,cAAc,KAAM,QAAO;AAE/B,UAAO,aAAa,WAAW,UAAU;IAC3C,CACL;;;;;;;;;CAUL,OAAO,KAA8C,QAAmC;AACpF,SAAO,IAAI,SACP,CAAC,OAAO,UAAU,UAAU,EAC5B,OAAO,YACH,OAAO,QAAQ,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,oBAAoB;AAChE,UAAO,CACH,KACA,OAAO,YACH,OAAO,QAAQ,eAAe,CAAC,KAAK,CAAC,WAAW,WAAW;AACvD,WAAO,CAAC,WAAW,MAAM,UAAU;KACrC,CACL,CACJ;IACH,CACL,EACD,OAAO,gBACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,MAAM,gBAAgB,IAAI,SAAsB,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;;;;;;;AAQ3D,SAAgB,cACZ,WAC6B;AAC7B,KAAI,UAAU,WAAW,EAAG,QAAO;AAEnC,QAAO,IAAI,SACP,UAAU,SAAS,MAAM,EAAE,WAAW,EACtC,UAAU,QAAQ,GAAG,MAAM,OAAO,OAAO,GAAG,EAAE,kBAAkB,EAAE,EAAE,CAAC,EACrE,UAAU,QAAQ,GAAG,MAAM,OAAO,OAAO,GAAG,EAAE,gBAAgB,EAAE,EAAE,CAAC,CACtE;;AAGL,SAAgB,IACZ,GAAG,OAC0B;CAC7B,MAAMC,aAAsC,EAAE;AAC9C,MAAK,MAAM,KAAK,OAAO;AAEnB,MAAI,KAAK,QAAQ,OAAO,MAAM,SAAU;AACxC,MAAI,aAAa,SACb,YAAW,KAAK,EAAE;MAElB,YAAW,KAAK,SAAS,KAAK,IAAI,UAAuB,EAAE,CAAC,CAAC;;AAIrE,QAAO,cAAc,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChHpC,SAAgB,OACZ,QACA,GAAG,OAC6D;CAChE,MAAM,SAAS,IAAO,GAAG,MAAM;AAC/B,SAAQ,EAAE,UAAW,GAAG,iCAGN,QAAQ;EAClB,6BAAgB,OAAO,QAAQ,EAAqD,EAAE,UAAU;EAChG,GAAG;EACN,CAAC;;;;;ACrDV,IAAa,kBAAb,MAAa,gBAAgB;CACzB,AAAgB;CAChB,AAAiB;CAEjB,YAAY,OAAsB;AAC9B,OAAK,OAAO,gBAAgB,aAAa,MAAM;AAC/C,OAAK,OAAO,OAAO,UAAU,KAAK,KAAK;;CAG3C,cAAsB;AAClB,SAAO,cAAc,KAAK,KAAK,MAAM,KAAK,KAAK;;CAGnD,OAAe,aAAa,OAA8B;AACtD,SAAO,OAAO,QAAQ,MAAM,CACvB,SAAS,iBAAiB,CAC1B,KAAK,CAAC,SAAS,WAAW;GACvB,MAAM,WAAW,aAAa,MAAM;AAKpC,UAAO,OAAO,QAAQ,MAJL,OAAO,QAAQ,SAAS,CACpC,SAAS,iBAAiB,CAC1B,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE,IAAI,EAAE,GAAG,CACtC,KAAK,KAAK,CACsB;IACvC,CACD,KAAK,OAAO;;;;;;AC3BzB,IAAa,iBAAb,MAAa,eAAe;CACxB,YAAY,AAAgBC,MAAc;EAAd;;CAE5B,WAAmB;AACf,SAAO,KAAK;;CAGhB,IAAI,QAAgB;AAChB,SAAO,KAAK;;CAGhB,OAAO,KAAK,QAAyC;AACjD,SAAO,IAAI,eAAe,OAAO,KAAK;;;AAI9C,SAAgB,UAAU,OAAsC;AAC5D,QAAO,eAAe,KAAK,IAAI,gBAAgB,MAAM,CAAC;;;;;;;;;;;;;;;;;ACF1D,IAAa,kBAAb,MAA6B;CACzB,AAAiB;CAEjB,YAAY,QAAyB;AACjC,OAAK,QAAQ,OAAO,QAAQ,OAAO,CAC9B,SAAS,iBAAiB,CAC1B,KAAK,CAAC,UAAU,YAAY;GACzB;GACA,WAAW,CAAC,GAAG,kBAAkB,UAAU,MAAM,CAAC;GACrD,EAAE;;CAGX,cAAsB;AAClB,SAAO,KAAK,MACP,SAAS,EAAE,UAAU,gBAAgB,UAAU,KAAK,MAAM,EAAE,YAAY,SAAS,CAAC,CAAC,CACnF,KAAK,OAAO;;;;;;;;;;;;;;;;;;AClBzB,SAAgB,UAAU,QAA+B;;;;;;;ACJzD,SAAS,WAAW,WAA2B;CAC3C,MAAM,UAAU,UAAU,MAAM;AAChC,KAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,IAAI,CAAE,QAAO;AAC7D,QAAO,IAAI,QAAQ;;AAsBvB,SAAS,QAAQ,WAAmD;AAChE,QAAO,UAAU,WAAW,UAAU;;AAG1C,QAAQ,MAAM,SAAU,GAAG,YAA2E;AAClG,QAAO,UAAU,WAAW,IAAI,WAAW,CAAC,KAAK,QAAQ;;AAG7D,QAAQ,KAAK,SAAU,GAAG,YAA2E;AACjG,QAAO,UAAU,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK;;AAG1D,OAAO,iBAAiB,SAAS;CAC7B,MAAM;EAAE,WAAW;EAAyE,YAAY;EAAM;CAC9G,OAAO;EAAE,WAAW;EAA0E,YAAY;EAAM;CAChH,QAAQ;EACJ,WAAW;EACX,YAAY;EACf;CACD,OAAO;EAAE,WAAW;EAAkD,YAAY;EAAM;CAC3F,CAAC;;AAGF,MAAa,QAAQ;AAWrB,SAAS,YAAY,WAAuD;AACxE,QAAO,cAAc,WAAW,UAAU;;AAG9C,YAAY,QAAQ,SAAU,MAAc,WAAuD;AAC/F,QAAO,cAAc,KAAK,GAAG,WAAW,UAAU;;;AAItD,MAAa,YAAY;AAezB,SAAS,WAAW,WAAsD;AACtE,QAAO,aAAa,WAAW,UAAU;;AAG7C,WAAW,MAAM,SAAU,WAAsD;AAC7E,QAAO,iBAAiB,WAAW,UAAU;;AAGjD,WAAW,MAAM,SAAU,GAAG,YAA8E;AACxG,QAAO,aAAa,WAAW,IAAI,WAAW,CAAC,KAAK,QAAQ;;AAGhE,WAAW,KAAK,SAAU,GAAG,YAA8E;AACvG,QAAO,aAAa,WAAW,IAAI,WAAW,CAAC,KAAK,OAAO;;;AAI/D,MAAa,WAAW"}
1
+ {"version":3,"file":"index.js","names":["name: string","knownPropertyNames: ReadonlySet<string>","cssSelectors: string[]","atRules: string[]","cssProps: Record<string, string>","selector: MochiSelector","propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[]","props","selector","selectorParts: string[]","classNames: string[]","variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } }","defaultVariants: Partial<RefineVariants<V>>","cssToMerge: MochiCSS<AllVariants>[]","name: string"],"sources":["../src/token.ts","../src/propertyUnits.generated.ts","../src/knownProperties.generated.ts","../src/props.ts","../src/selector.ts","../src/hash.ts","../src/compare.ts","../src/cssObject.ts","../src/css.ts","../src/styled.ts","../src/keyframesObject.ts","../src/keyframes.ts","../src/globalCssObject.ts","../src/globalCss.ts","../src/query.ts"],"sourcesContent":["/**\n * CSS custom property (design token) utilities.\n * Provides type-safe access to CSS variables with proper `var()` syntax.\n * @module token\n */\n\nimport { CssVar, CssVarVal } from \"@/values\"\n\n/**\n * Represents a CSS custom property (design token) with type information.\n * Provides convenient access to both the variable name and its `var()` reference.\n * @template T - The expected value type of the token (for type checking)\n * @example\n * const primaryColor = new Token<string>('primary-color')\n * primaryColor.variable // '--primary-color'\n * primaryColor.value // 'var(--primary-color)'\n */\nexport class Token {\n /**\n * Creates a new CSS token.\n * @param name - The token name (without the `--` prefix)\n */\n constructor(public readonly name: string) {}\n\n /**\n * Gets the CSS custom property name (with `--` prefix).\n * Use this when defining the variable.\n */\n get variable(): CssVar {\n return `--${this.name}`\n }\n\n /**\n * Gets the CSS `var()` reference to this token.\n * Use this when consuming the variable value.\n */\n get value(): CssVarVal {\n return `var(${this.variable})`\n }\n\n /**\n * Returns the variable name for string coercion.\n */\n toString(): CssVar {\n return this.variable\n }\n}\n\n/**\n * Creates a new CSS design token.\n * @template T - The expected value type of the token\n * @param name - The token name (without the `--` prefix)\n * @returns A new Token instance\n * @example\n * const spacing = createToken<number>('spacing-md')\n * // Use in styles: { gap: spacing.value }\n */\nexport function createToken(name: string): Token {\n return new Token(name)\n}\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const propertyUnits = {\n animation: \"ms\",\n animationDelay: \"ms\",\n animationDuration: \"ms\",\n animationRange: \"px\",\n animationRangeCenter: \"px\",\n animationRangeEnd: \"px\",\n animationRangeStart: \"px\",\n background: \"px\",\n backgroundPosition: \"px\",\n backgroundPositionBlock: \"px\",\n backgroundPositionInline: \"px\",\n backgroundPositionX: \"px\",\n backgroundPositionY: \"px\",\n backgroundSize: \"px\",\n backgroundTbd: \"px\",\n baselineShift: \"px\",\n blockSize: \"px\",\n blockStep: \"px\",\n blockStepSize: \"px\",\n border: \"px\",\n borderBlock: \"px\",\n borderBlockClip: \"px\",\n borderBlockEnd: \"px\",\n borderBlockEndClip: \"px\",\n borderBlockEndRadius: \"px\",\n borderBlockEndWidth: \"px\",\n borderBlockStart: \"px\",\n borderBlockStartClip: \"px\",\n borderBlockStartRadius: \"px\",\n borderBlockStartWidth: \"px\",\n borderBlockWidth: \"px\",\n borderBottom: \"px\",\n borderBottomClip: \"px\",\n borderBottomLeftRadius: \"px\",\n borderBottomRadius: \"px\",\n borderBottomRightRadius: \"px\",\n borderBottomWidth: \"px\",\n borderClip: \"px\",\n borderEndEndRadius: \"px\",\n borderEndStartRadius: \"px\",\n borderImage: \"%\",\n borderImageOutset: \"px\",\n borderImageSlice: \"%\",\n borderImageWidth: \"px\",\n borderInline: \"px\",\n borderInlineClip: \"px\",\n borderInlineEnd: \"px\",\n borderInlineEndClip: \"px\",\n borderInlineEndRadius: \"px\",\n borderInlineEndWidth: \"px\",\n borderInlineStart: \"px\",\n borderInlineStartClip: \"px\",\n borderInlineStartRadius: \"px\",\n borderInlineStartWidth: \"px\",\n borderInlineWidth: \"px\",\n borderLeft: \"px\",\n borderLeftClip: \"px\",\n borderLeftRadius: \"px\",\n borderLeftWidth: \"px\",\n borderLimit: \"px\",\n borderRadius: \"px\",\n borderRight: \"px\",\n borderRightClip: \"px\",\n borderRightRadius: \"px\",\n borderRightWidth: \"px\",\n borderSpacing: \"px\",\n borderStartEndRadius: \"px\",\n borderStartStartRadius: \"px\",\n borderTop: \"px\",\n borderTopClip: \"px\",\n borderTopLeftRadius: \"px\",\n borderTopRadius: \"px\",\n borderTopRightRadius: \"px\",\n borderTopWidth: \"px\",\n borderWidth: \"px\",\n bottom: \"px\",\n boxShadow: \"px\",\n boxShadowBlur: \"px\",\n boxShadowOffset: \"px\",\n boxShadowSpread: \"px\",\n columnGap: \"px\",\n columnHeight: \"px\",\n columnRule: \"px\",\n columnRuleEdgeInset: \"px\",\n columnRuleEdgeInsetEnd: \"px\",\n columnRuleEdgeInsetStart: \"px\",\n columnRuleInset: \"px\",\n columnRuleInsetEnd: \"px\",\n columnRuleInsetStart: \"px\",\n columnRuleInteriorInset: \"px\",\n columnRuleInteriorInsetEnd: \"px\",\n columnRuleInteriorInsetStart: \"px\",\n columnRuleWidth: \"px\",\n columns: \"px\",\n columnWidth: \"px\",\n containIntrinsicBlockSize: \"px\",\n containIntrinsicHeight: \"px\",\n containIntrinsicInlineSize: \"px\",\n containIntrinsicSize: \"px\",\n containIntrinsicWidth: \"px\",\n corner: \"px\",\n cornerBlockEnd: \"px\",\n cornerBlockStart: \"px\",\n cornerBottom: \"px\",\n cornerBottomLeft: \"px\",\n cornerBottomRight: \"px\",\n cornerEndEnd: \"px\",\n cornerEndStart: \"px\",\n cornerInlineEnd: \"px\",\n cornerInlineStart: \"px\",\n cornerLeft: \"px\",\n cornerRight: \"px\",\n cornerStartEnd: \"px\",\n cornerStartStart: \"px\",\n cornerTop: \"px\",\n cornerTopLeft: \"px\",\n cornerTopRight: \"px\",\n cx: \"px\",\n cy: \"px\",\n fillOpacity: \"%\",\n fillPosition: \"px\",\n fillSize: \"px\",\n flex: \"px\",\n flexBasis: \"px\",\n floatOffset: \"px\",\n floodOpacity: \"%\",\n flowTolerance: \"px\",\n font: \"deg\",\n fontSize: \"px\",\n fontStretch: \"%\",\n fontStyle: \"deg\",\n fontWidth: \"%\",\n gap: \"px\",\n grid: \"px\",\n gridAutoColumns: \"px\",\n gridAutoRows: \"px\",\n gridColumnGap: \"px\",\n gridGap: \"px\",\n gridRowGap: \"px\",\n gridTemplate: \"px\",\n gridTemplateColumns: \"px\",\n gridTemplateRows: \"px\",\n height: \"px\",\n hyphenateLimitZone: \"px\",\n imageOrientation: \"deg\",\n imageResolution: \"dppx\",\n initialLetterWrap: \"px\",\n inlineSize: \"px\",\n inset: \"px\",\n insetBlock: \"px\",\n insetBlockEnd: \"px\",\n insetBlockStart: \"px\",\n insetInline: \"px\",\n insetInlineEnd: \"px\",\n insetInlineStart: \"px\",\n interestDelay: \"ms\",\n interestDelayEnd: \"ms\",\n interestDelayStart: \"ms\",\n itemFlow: \"px\",\n left: \"px\",\n letterSpacing: \"px\",\n lineHeight: \"px\",\n lineHeightStep: \"px\",\n linePadding: \"px\",\n margin: \"px\",\n marginBlock: \"px\",\n marginBlockEnd: \"px\",\n marginBlockStart: \"px\",\n marginBottom: \"px\",\n marginInline: \"px\",\n marginInlineEnd: \"px\",\n marginInlineStart: \"px\",\n marginLeft: \"px\",\n marginRight: \"px\",\n marginTop: \"px\",\n mask: \"px\",\n maskBorder: \"%\",\n maskBorderOutset: \"px\",\n maskBorderSlice: \"%\",\n maskBorderWidth: \"px\",\n maskPosition: \"px\",\n maskSize: \"px\",\n maxBlockSize: \"px\",\n maxHeight: \"px\",\n maxInlineSize: \"px\",\n maxWidth: \"px\",\n minBlockSize: \"px\",\n minHeight: \"px\",\n minInlineSize: \"px\",\n minWidth: \"px\",\n objectPosition: \"px\",\n offset: \"px\",\n offsetAnchor: \"px\",\n offsetDistance: \"px\",\n offsetPosition: \"px\",\n offsetRotate: \"deg\",\n opacity: \"%\",\n outline: \"px\",\n outlineOffset: \"px\",\n outlineWidth: \"px\",\n overflowClipMargin: \"px\",\n overflowClipMarginBlock: \"px\",\n overflowClipMarginBlockEnd: \"px\",\n overflowClipMarginBlockStart: \"px\",\n overflowClipMarginBottom: \"px\",\n overflowClipMarginInline: \"px\",\n overflowClipMarginInlineEnd: \"px\",\n overflowClipMarginInlineStart: \"px\",\n overflowClipMarginLeft: \"px\",\n overflowClipMarginRight: \"px\",\n overflowClipMarginTop: \"px\",\n padding: \"px\",\n paddingBlock: \"px\",\n paddingBlockEnd: \"px\",\n paddingBlockStart: \"px\",\n paddingBottom: \"px\",\n paddingInline: \"px\",\n paddingInlineEnd: \"px\",\n paddingInlineStart: \"px\",\n paddingLeft: \"px\",\n paddingRight: \"px\",\n paddingTop: \"px\",\n pause: \"ms\",\n pauseAfter: \"ms\",\n pauseBefore: \"ms\",\n perspective: \"px\",\n perspectiveOrigin: \"px\",\n r: \"px\",\n rest: \"ms\",\n restAfter: \"ms\",\n restBefore: \"ms\",\n right: \"px\",\n rotate: \"deg\",\n rowGap: \"px\",\n rowRule: \"px\",\n rowRuleEdgeInset: \"px\",\n rowRuleEdgeInsetEnd: \"px\",\n rowRuleEdgeInsetStart: \"px\",\n rowRuleInset: \"px\",\n rowRuleInsetEnd: \"px\",\n rowRuleInsetStart: \"px\",\n rowRuleInteriorInset: \"px\",\n rowRuleInteriorInsetEnd: \"px\",\n rowRuleInteriorInsetStart: \"px\",\n rowRuleWidth: \"px\",\n rule: \"px\",\n ruleEdgeInset: \"px\",\n ruleInset: \"px\",\n ruleInsetEnd: \"px\",\n ruleInsetStart: \"px\",\n ruleInteriorInset: \"px\",\n ruleWidth: \"px\",\n rx: \"px\",\n ry: \"px\",\n scale: \"%\",\n scrollMargin: \"px\",\n scrollMarginBlock: \"px\",\n scrollMarginBlockEnd: \"px\",\n scrollMarginBlockStart: \"px\",\n scrollMarginBottom: \"px\",\n scrollMarginInline: \"px\",\n scrollMarginInlineEnd: \"px\",\n scrollMarginInlineStart: \"px\",\n scrollMarginLeft: \"px\",\n scrollMarginRight: \"px\",\n scrollMarginTop: \"px\",\n scrollPadding: \"px\",\n scrollPaddingBlock: \"px\",\n scrollPaddingBlockEnd: \"px\",\n scrollPaddingBlockStart: \"px\",\n scrollPaddingBottom: \"px\",\n scrollPaddingInline: \"px\",\n scrollPaddingInlineEnd: \"px\",\n scrollPaddingInlineStart: \"px\",\n scrollPaddingLeft: \"px\",\n scrollPaddingRight: \"px\",\n scrollPaddingTop: \"px\",\n shapeImageThreshold: \"%\",\n shapeMargin: \"px\",\n shapePadding: \"px\",\n stopOpacity: \"%\",\n strokeDasharray: \"px\",\n strokeDashcorner: \"px\",\n strokeDashCorner: \"px\",\n strokeDashoffset: \"px\",\n strokeOpacity: \"%\",\n strokePosition: \"px\",\n strokeSize: \"px\",\n strokeWidth: \"px\",\n tabSize: \"px\",\n textDecoration: \"px\",\n textDecorationInset: \"px\",\n textDecorationThickness: \"px\",\n textIndent: \"px\",\n textShadow: \"px\",\n textSizeAdjust: \"%\",\n textUnderlineOffset: \"px\",\n timelineTrigger: \"px\",\n timelineTriggerExitRange: \"px\",\n timelineTriggerExitRangeEnd: \"px\",\n timelineTriggerExitRangeStart: \"px\",\n timelineTriggerRange: \"px\",\n timelineTriggerRangeEnd: \"px\",\n timelineTriggerRangeStart: \"px\",\n top: \"px\",\n transformOrigin: \"px\",\n transition: \"ms\",\n transitionDelay: \"ms\",\n transitionDuration: \"ms\",\n translate: \"px\",\n verticalAlign: \"px\",\n viewTimeline: \"px\",\n viewTimelineInset: \"px\",\n voiceDuration: \"ms\",\n voicePitch: \"Hz\",\n voiceRange: \"Hz\",\n voiceRate: \"%\",\n width: \"px\",\n wordSpacing: \"px\",\n x: \"px\",\n y: \"px\",\n zoom: \"%\",\n} as const\n\nexport type PropertyWithUnit = keyof typeof propertyUnits\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const knownPropertyNames: ReadonlySet<string> = new Set([\n \"accentColor\",\n \"alignContent\",\n \"alignItems\",\n \"alignSelf\",\n \"alignmentBaseline\",\n \"all\",\n \"anchorName\",\n \"anchorScope\",\n \"animation\",\n \"animationComposition\",\n \"animationDelay\",\n \"animationDirection\",\n \"animationDuration\",\n \"animationFillMode\",\n \"animationIterationCount\",\n \"animationName\",\n \"animationPlayState\",\n \"animationRange\",\n \"animationRangeCenter\",\n \"animationRangeEnd\",\n \"animationRangeStart\",\n \"animationTimeline\",\n \"animationTimingFunction\",\n \"animationTrigger\",\n \"appearance\",\n \"aspectRatio\",\n \"backdropFilter\",\n \"backfaceVisibility\",\n \"background\",\n \"backgroundAttachment\",\n \"backgroundBlendMode\",\n \"backgroundClip\",\n \"backgroundColor\",\n \"backgroundImage\",\n \"backgroundOrigin\",\n \"backgroundPosition\",\n \"backgroundPositionBlock\",\n \"backgroundPositionInline\",\n \"backgroundPositionX\",\n \"backgroundPositionY\",\n \"backgroundRepeat\",\n \"backgroundRepeatBlock\",\n \"backgroundRepeatInline\",\n \"backgroundRepeatX\",\n \"backgroundRepeatY\",\n \"backgroundSize\",\n \"backgroundTbd\",\n \"baselineShift\",\n \"baselineSource\",\n \"blockEllipsis\",\n \"blockSize\",\n \"blockStep\",\n \"blockStepAlign\",\n \"blockStepInsert\",\n \"blockStepRound\",\n \"blockStepSize\",\n \"bookmarkLabel\",\n \"bookmarkLevel\",\n \"bookmarkState\",\n \"border\",\n \"borderBlock\",\n \"borderBlockClip\",\n \"borderBlockColor\",\n \"borderBlockEnd\",\n \"borderBlockEndClip\",\n \"borderBlockEndColor\",\n \"borderBlockEndRadius\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\",\n \"borderBlockStart\",\n \"borderBlockStartClip\",\n \"borderBlockStartColor\",\n \"borderBlockStartRadius\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\",\n \"borderBlockStyle\",\n \"borderBlockWidth\",\n \"borderBottom\",\n \"borderBottomClip\",\n \"borderBottomColor\",\n \"borderBottomLeftRadius\",\n \"borderBottomRadius\",\n \"borderBottomRightRadius\",\n \"borderBottomStyle\",\n \"borderBottomWidth\",\n \"borderBoundary\",\n \"borderClip\",\n \"borderCollapse\",\n \"borderColor\",\n \"borderEndEndRadius\",\n \"borderEndStartRadius\",\n \"borderImage\",\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\",\n \"borderInline\",\n \"borderInlineClip\",\n \"borderInlineColor\",\n \"borderInlineEnd\",\n \"borderInlineEndClip\",\n \"borderInlineEndColor\",\n \"borderInlineEndRadius\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\",\n \"borderInlineStart\",\n \"borderInlineStartClip\",\n \"borderInlineStartColor\",\n \"borderInlineStartRadius\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\",\n \"borderInlineStyle\",\n \"borderInlineWidth\",\n \"borderLeft\",\n \"borderLeftClip\",\n \"borderLeftColor\",\n \"borderLeftRadius\",\n \"borderLeftStyle\",\n \"borderLeftWidth\",\n \"borderLimit\",\n \"borderRadius\",\n \"borderRight\",\n \"borderRightClip\",\n \"borderRightColor\",\n \"borderRightRadius\",\n \"borderRightStyle\",\n \"borderRightWidth\",\n \"borderShape\",\n \"borderSpacing\",\n \"borderStartEndRadius\",\n \"borderStartStartRadius\",\n \"borderStyle\",\n \"borderTop\",\n \"borderTopClip\",\n \"borderTopColor\",\n \"borderTopLeftRadius\",\n \"borderTopRadius\",\n \"borderTopRightRadius\",\n \"borderTopStyle\",\n \"borderTopWidth\",\n \"borderWidth\",\n \"bottom\",\n \"boxDecorationBreak\",\n \"boxShadow\",\n \"boxShadowBlur\",\n \"boxShadowColor\",\n \"boxShadowOffset\",\n \"boxShadowPosition\",\n \"boxShadowSpread\",\n \"boxSizing\",\n \"boxSnap\",\n \"breakAfter\",\n \"breakBefore\",\n \"breakInside\",\n \"captionSide\",\n \"caret\",\n \"caretAnimation\",\n \"caretColor\",\n \"caretShape\",\n \"clear\",\n \"clip\",\n \"clipPath\",\n \"clipRule\",\n \"color\",\n \"colorAdjust\",\n \"colorInterpolation\",\n \"colorInterpolationFilters\",\n \"colorScheme\",\n \"columnCount\",\n \"columnFill\",\n \"columnGap\",\n \"columnHeight\",\n \"columnRule\",\n \"columnRuleBreak\",\n \"columnRuleColor\",\n \"columnRuleEdgeInset\",\n \"columnRuleEdgeInsetEnd\",\n \"columnRuleEdgeInsetStart\",\n \"columnRuleInset\",\n \"columnRuleInsetEnd\",\n \"columnRuleInsetStart\",\n \"columnRuleInteriorInset\",\n \"columnRuleInteriorInsetEnd\",\n \"columnRuleInteriorInsetStart\",\n \"columnRuleStyle\",\n \"columnRuleWidth\",\n \"columnSpan\",\n \"columnWidth\",\n \"columnWrap\",\n \"columns\",\n \"contain\",\n \"containIntrinsicBlockSize\",\n \"containIntrinsicHeight\",\n \"containIntrinsicInlineSize\",\n \"containIntrinsicSize\",\n \"containIntrinsicWidth\",\n \"container\",\n \"containerName\",\n \"containerType\",\n \"content\",\n \"contentVisibility\",\n \"continue\",\n \"copyInto\",\n \"corner\",\n \"cornerBlockEnd\",\n \"cornerBlockEndShape\",\n \"cornerBlockStart\",\n \"cornerBlockStartShape\",\n \"cornerBottom\",\n \"cornerBottomLeft\",\n \"cornerBottomLeftShape\",\n \"cornerBottomRight\",\n \"cornerBottomRightShape\",\n \"cornerBottomShape\",\n \"cornerEndEnd\",\n \"cornerEndEndShape\",\n \"cornerEndStart\",\n \"cornerEndStartShape\",\n \"cornerInlineEnd\",\n \"cornerInlineEndShape\",\n \"cornerInlineStart\",\n \"cornerInlineStartShape\",\n \"cornerLeft\",\n \"cornerLeftShape\",\n \"cornerRight\",\n \"cornerRightShape\",\n \"cornerShape\",\n \"cornerStartEnd\",\n \"cornerStartEndShape\",\n \"cornerStartStart\",\n \"cornerStartStartShape\",\n \"cornerTop\",\n \"cornerTopLeft\",\n \"cornerTopLeftShape\",\n \"cornerTopRight\",\n \"cornerTopRightShape\",\n \"cornerTopShape\",\n \"counterIncrement\",\n \"counterReset\",\n \"counterSet\",\n \"cue\",\n \"cueAfter\",\n \"cueBefore\",\n \"cursor\",\n \"cx\",\n \"cy\",\n \"d\",\n \"direction\",\n \"display\",\n \"dominantBaseline\",\n \"dynamicRangeLimit\",\n \"emptyCells\",\n \"eventTrigger\",\n \"eventTriggerName\",\n \"eventTriggerSource\",\n \"fieldSizing\",\n \"fill\",\n \"fillBreak\",\n \"fillColor\",\n \"fillImage\",\n \"fillOpacity\",\n \"fillOrigin\",\n \"fillPosition\",\n \"fillRepeat\",\n \"fillRule\",\n \"fillSize\",\n \"filter\",\n \"flex\",\n \"flexBasis\",\n \"flexDirection\",\n \"flexFlow\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexWrap\",\n \"float\",\n \"floatDefer\",\n \"floatOffset\",\n \"floatReference\",\n \"floodColor\",\n \"floodOpacity\",\n \"flowFrom\",\n \"flowInto\",\n \"flowTolerance\",\n \"font\",\n \"fontFamily\",\n \"fontFeatureSettings\",\n \"fontKerning\",\n \"fontLanguageOverride\",\n \"fontOpticalSizing\",\n \"fontPalette\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"fontStretch\",\n \"fontStyle\",\n \"fontSynthesis\",\n \"fontSynthesisPosition\",\n \"fontSynthesisSmallCaps\",\n \"fontSynthesisStyle\",\n \"fontSynthesisWeight\",\n \"fontVariant\",\n \"fontVariantAlternates\",\n \"fontVariantCaps\",\n \"fontVariantEastAsian\",\n \"fontVariantEmoji\",\n \"fontVariantLigatures\",\n \"fontVariantNumeric\",\n \"fontVariantPosition\",\n \"fontVariationSettings\",\n \"fontWeight\",\n \"fontWidth\",\n \"footnoteDisplay\",\n \"footnotePolicy\",\n \"forcedColorAdjust\",\n \"gap\",\n \"glyphOrientationVertical\",\n \"grid\",\n \"gridArea\",\n \"gridAutoColumns\",\n \"gridAutoFlow\",\n \"gridAutoRows\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnGap\",\n \"gridColumnStart\",\n \"gridGap\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowGap\",\n \"gridRowStart\",\n \"gridTemplate\",\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n \"hangingPunctuation\",\n \"height\",\n \"hyphenateCharacter\",\n \"hyphenateLimitChars\",\n \"hyphenateLimitLast\",\n \"hyphenateLimitLines\",\n \"hyphenateLimitZone\",\n \"hyphens\",\n \"imageOrientation\",\n \"imageRendering\",\n \"imageResolution\",\n \"initialLetter\",\n \"initialLetterAlign\",\n \"initialLetterWrap\",\n \"inlineSize\",\n \"inlineSizing\",\n \"inputSecurity\",\n \"inset\",\n \"insetBlock\",\n \"insetBlockEnd\",\n \"insetBlockStart\",\n \"insetInline\",\n \"insetInlineEnd\",\n \"insetInlineStart\",\n \"interactivity\",\n \"interestDelay\",\n \"interestDelayEnd\",\n \"interestDelayStart\",\n \"interpolateSize\",\n \"isolation\",\n \"itemCross\",\n \"itemDirection\",\n \"itemFlow\",\n \"itemPack\",\n \"itemTrack\",\n \"itemWrap\",\n \"justifyContent\",\n \"justifyItems\",\n \"justifySelf\",\n \"left\",\n \"letterSpacing\",\n \"lightingColor\",\n \"lineBreak\",\n \"lineClamp\",\n \"lineFitEdge\",\n \"lineGrid\",\n \"lineHeight\",\n \"lineHeightStep\",\n \"linePadding\",\n \"lineSnap\",\n \"linkParameters\",\n \"listStyle\",\n \"listStyleImage\",\n \"listStylePosition\",\n \"listStyleType\",\n \"margin\",\n \"marginBlock\",\n \"marginBlockEnd\",\n \"marginBlockStart\",\n \"marginBottom\",\n \"marginBreak\",\n \"marginInline\",\n \"marginInlineEnd\",\n \"marginInlineStart\",\n \"marginLeft\",\n \"marginRight\",\n \"marginTop\",\n \"marginTrim\",\n \"marker\",\n \"markerEnd\",\n \"markerMid\",\n \"markerSide\",\n \"markerStart\",\n \"mask\",\n \"maskBorder\",\n \"maskBorderMode\",\n \"maskBorderOutset\",\n \"maskBorderRepeat\",\n \"maskBorderSlice\",\n \"maskBorderSource\",\n \"maskBorderWidth\",\n \"maskClip\",\n \"maskComposite\",\n \"maskImage\",\n \"maskMode\",\n \"maskOrigin\",\n \"maskPosition\",\n \"maskRepeat\",\n \"maskSize\",\n \"maskType\",\n \"mathDepth\",\n \"mathShift\",\n \"mathStyle\",\n \"maxBlockSize\",\n \"maxHeight\",\n \"maxInlineSize\",\n \"maxLines\",\n \"maxWidth\",\n \"minBlockSize\",\n \"minHeight\",\n \"minInlineSize\",\n \"minIntrinsicSizing\",\n \"minWidth\",\n \"mixBlendMode\",\n \"navDown\",\n \"navLeft\",\n \"navRight\",\n \"navUp\",\n \"objectFit\",\n \"objectPosition\",\n \"objectViewBox\",\n \"offset\",\n \"offsetAnchor\",\n \"offsetDistance\",\n \"offsetPath\",\n \"offsetPosition\",\n \"offsetRotate\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"outline\",\n \"outlineColor\",\n \"outlineOffset\",\n \"outlineStyle\",\n \"outlineWidth\",\n \"overflow\",\n \"overflowAnchor\",\n \"overflowBlock\",\n \"overflowClipMargin\",\n \"overflowClipMarginBlock\",\n \"overflowClipMarginBlockEnd\",\n \"overflowClipMarginBlockStart\",\n \"overflowClipMarginBottom\",\n \"overflowClipMarginInline\",\n \"overflowClipMarginInlineEnd\",\n \"overflowClipMarginInlineStart\",\n \"overflowClipMarginLeft\",\n \"overflowClipMarginRight\",\n \"overflowClipMarginTop\",\n \"overflowInline\",\n \"overflowWrap\",\n \"overflowX\",\n \"overflowY\",\n \"overlay\",\n \"overscrollBehavior\",\n \"overscrollBehaviorBlock\",\n \"overscrollBehaviorInline\",\n \"overscrollBehaviorX\",\n \"overscrollBehaviorY\",\n \"padding\",\n \"paddingBlock\",\n \"paddingBlockEnd\",\n \"paddingBlockStart\",\n \"paddingBottom\",\n \"paddingInline\",\n \"paddingInlineEnd\",\n \"paddingInlineStart\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingTop\",\n \"page\",\n \"pageBreakAfter\",\n \"pageBreakBefore\",\n \"pageBreakInside\",\n \"paintOrder\",\n \"pause\",\n \"pauseAfter\",\n \"pauseBefore\",\n \"perspective\",\n \"perspectiveOrigin\",\n \"placeContent\",\n \"placeItems\",\n \"placeSelf\",\n \"pointerEvents\",\n \"pointerTimeline\",\n \"pointerTimelineAxis\",\n \"pointerTimelineName\",\n \"position\",\n \"positionAnchor\",\n \"positionArea\",\n \"positionTry\",\n \"positionTryFallbacks\",\n \"positionTryOrder\",\n \"positionVisibility\",\n \"printColorAdjust\",\n \"quotes\",\n \"r\",\n \"readingFlow\",\n \"readingOrder\",\n \"regionFragment\",\n \"resize\",\n \"rest\",\n \"restAfter\",\n \"restBefore\",\n \"right\",\n \"rotate\",\n \"rowGap\",\n \"rowRule\",\n \"rowRuleBreak\",\n \"rowRuleColor\",\n \"rowRuleEdgeInset\",\n \"rowRuleEdgeInsetEnd\",\n \"rowRuleEdgeInsetStart\",\n \"rowRuleInset\",\n \"rowRuleInsetEnd\",\n \"rowRuleInsetStart\",\n \"rowRuleInteriorInset\",\n \"rowRuleInteriorInsetEnd\",\n \"rowRuleInteriorInsetStart\",\n \"rowRuleStyle\",\n \"rowRuleWidth\",\n \"rubyAlign\",\n \"rubyMerge\",\n \"rubyOverhang\",\n \"rubyPosition\",\n \"rule\",\n \"ruleBreak\",\n \"ruleColor\",\n \"ruleEdgeInset\",\n \"ruleInset\",\n \"ruleInsetEnd\",\n \"ruleInsetStart\",\n \"ruleInteriorInset\",\n \"ruleOverlap\",\n \"ruleStyle\",\n \"ruleWidth\",\n \"rx\",\n \"ry\",\n \"scale\",\n \"scrollBehavior\",\n \"scrollInitialTarget\",\n \"scrollMargin\",\n \"scrollMarginBlock\",\n \"scrollMarginBlockEnd\",\n \"scrollMarginBlockStart\",\n \"scrollMarginBottom\",\n \"scrollMarginInline\",\n \"scrollMarginInlineEnd\",\n \"scrollMarginInlineStart\",\n \"scrollMarginLeft\",\n \"scrollMarginRight\",\n \"scrollMarginTop\",\n \"scrollMarkerGroup\",\n \"scrollPadding\",\n \"scrollPaddingBlock\",\n \"scrollPaddingBlockEnd\",\n \"scrollPaddingBlockStart\",\n \"scrollPaddingBottom\",\n \"scrollPaddingInline\",\n \"scrollPaddingInlineEnd\",\n \"scrollPaddingInlineStart\",\n \"scrollPaddingLeft\",\n \"scrollPaddingRight\",\n \"scrollPaddingTop\",\n \"scrollSnapAlign\",\n \"scrollSnapStop\",\n \"scrollSnapType\",\n \"scrollTargetGroup\",\n \"scrollTimeline\",\n \"scrollTimelineAxis\",\n \"scrollTimelineName\",\n \"scrollbarColor\",\n \"scrollbarGutter\",\n \"scrollbarWidth\",\n \"shapeImageThreshold\",\n \"shapeInside\",\n \"shapeMargin\",\n \"shapeOutside\",\n \"shapePadding\",\n \"shapeRendering\",\n \"shapeSubtract\",\n \"sliderOrientation\",\n \"spatialNavigationAction\",\n \"spatialNavigationContain\",\n \"spatialNavigationFunction\",\n \"speak\",\n \"speakAs\",\n \"stopColor\",\n \"stopOpacity\",\n \"stringSet\",\n \"stroke\",\n \"strokeAlign\",\n \"strokeAlignment\",\n \"strokeBreak\",\n \"strokeColor\",\n \"strokeDashCorner\",\n \"strokeDashJustify\",\n \"strokeDashadjust\",\n \"strokeDasharray\",\n \"strokeDashcorner\",\n \"strokeDashoffset\",\n \"strokeImage\",\n \"strokeLinecap\",\n \"strokeLinejoin\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeOrigin\",\n \"strokePosition\",\n \"strokeRepeat\",\n \"strokeSize\",\n \"strokeWidth\",\n \"tabSize\",\n \"tableLayout\",\n \"textAlign\",\n \"textAlignAll\",\n \"textAlignLast\",\n \"textAnchor\",\n \"textAutospace\",\n \"textBox\",\n \"textBoxEdge\",\n \"textBoxTrim\",\n \"textCombineUpright\",\n \"textDecoration\",\n \"textDecorationColor\",\n \"textDecorationInset\",\n \"textDecorationLine\",\n \"textDecorationSkip\",\n \"textDecorationSkipBox\",\n \"textDecorationSkipInk\",\n \"textDecorationSkipSelf\",\n \"textDecorationSkipSpaces\",\n \"textDecorationStyle\",\n \"textDecorationThickness\",\n \"textEmphasis\",\n \"textEmphasisColor\",\n \"textEmphasisPosition\",\n \"textEmphasisSkip\",\n \"textEmphasisStyle\",\n \"textGroupAlign\",\n \"textIndent\",\n \"textJustify\",\n \"textOrientation\",\n \"textOverflow\",\n \"textRendering\",\n \"textShadow\",\n \"textSizeAdjust\",\n \"textSpacing\",\n \"textSpacingTrim\",\n \"textTransform\",\n \"textUnderlineOffset\",\n \"textUnderlinePosition\",\n \"textWrap\",\n \"textWrapMode\",\n \"textWrapStyle\",\n \"timelineScope\",\n \"timelineTrigger\",\n \"timelineTriggerExitRange\",\n \"timelineTriggerExitRangeEnd\",\n \"timelineTriggerExitRangeStart\",\n \"timelineTriggerName\",\n \"timelineTriggerRange\",\n \"timelineTriggerRangeEnd\",\n \"timelineTriggerRangeStart\",\n \"timelineTriggerSource\",\n \"top\",\n \"touchAction\",\n \"transform\",\n \"transformBox\",\n \"transformOrigin\",\n \"transformStyle\",\n \"transition\",\n \"transitionBehavior\",\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\",\n \"translate\",\n \"triggerScope\",\n \"unicodeBidi\",\n \"userSelect\",\n \"vectorEffect\",\n \"verticalAlign\",\n \"viewTimeline\",\n \"viewTimelineAxis\",\n \"viewTimelineInset\",\n \"viewTimelineName\",\n \"viewTransitionClass\",\n \"viewTransitionGroup\",\n \"viewTransitionName\",\n \"viewTransitionScope\",\n \"visibility\",\n \"voiceBalance\",\n \"voiceDuration\",\n \"voiceFamily\",\n \"voicePitch\",\n \"voiceRange\",\n \"voiceRate\",\n \"voiceStress\",\n \"voiceVolume\",\n \"whiteSpace\",\n \"whiteSpaceCollapse\",\n \"whiteSpaceTrim\",\n \"widows\",\n \"width\",\n \"willChange\",\n \"wordBreak\",\n \"wordSpaceTransform\",\n \"wordSpacing\",\n \"wordWrap\",\n \"wrapAfter\",\n \"wrapBefore\",\n \"wrapFlow\",\n \"wrapInside\",\n \"wrapThrough\",\n \"writingMode\",\n \"x\",\n \"y\",\n \"zIndex\",\n \"zoom\",\n])\n","/**\n * CSS property handling and type definitions.\n * Provides type-safe mappings from JavaScript objects to CSS properties,\n * with automatic unit conversion and value formatting.\n * @module props\n */\n\nimport { Properties, ObsoleteProperties } from \"csstype\"\nimport { CssLike, CssVar } from \"@/values\"\nimport { propertyUnits, type PropertyWithUnit } from \"./propertyUnits.generated\"\nimport { knownPropertyNames } from \"./knownProperties.generated\"\n\n/** All non-obsolete CSS properties from csstype */\ntype Props = Required<Omit<Properties, keyof ObsoleteProperties>>\n\n/** Properties that have default units and are valid CSS properties */\ntype PropsWithUnit = PropertyWithUnit & keyof Props\n\n/**\n * Converts a kebab-case string to camelCase.\n */\nexport function kebabToCamel(str: string): string {\n return str.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())\n}\n\n/**\n * Converts a camelCase string to kebab-case.\n */\nexport function camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase())\n}\n\nfunction getUnitForProperty(propertyName: string): string | undefined {\n return propertyName in propertyUnits ? propertyUnits[propertyName as PropertyWithUnit] : undefined\n}\n\n/**\n * Converts a CSS-like value to its string representation.\n * For properties with known units, numbers are automatically suffixed.\n */\nfunction formatValue(value: CssLike<string | number>, propertyName: string, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") {\n const unit = getUnitForProperty(propertyName)\n if (unit === \"%\") return `${value * 100}${unit}`\n if (value === 0) return \"0\"\n return unit ? `${value}${unit}` : value.toString()\n }\n return formatValue(value.value, propertyName, maxDepth - 1)\n}\n\n/**\n * Checks if a property name is a CSS custom property (variable).\n */\nexport function isCssVariableName(key: string): key is CssVar {\n return key.startsWith(\"--\")\n}\n\n/**\n * Converts a CSS-like value to a string for use as a CSS variable value.\n * @param value - The value to convert (string, number, or wrapped value)\n * @param maxDepth - Maximum recursion depth for evaluating the value\n * @returns The string representation\n */\nexport function asVar(value: CssLike<string | number>, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n switch (typeof value) {\n case \"string\":\n return value\n case \"number\":\n return value.toString()\n default:\n return asVar(value.value, maxDepth - 1)\n }\n}\n\n/**\n * Checks if a property name is a known CSS property.\n */\nexport function isKnownPropertyName(key: string): key is keyof Props {\n return knownPropertyNames.has(key)\n}\n\n/**\n * Converts a value to a CSS property string.\n * Automatically appends units to numeric values for properties that require them.\n * @param value - The value to convert\n * @param key - The CSS property name\n * @returns The formatted CSS value string\n */\nexport function asKnownProp(value: unknown, key: keyof Props): string {\n return formatValue(value as CssLike<string | number>, key)\n}\n\n/**\n * Checks if a key represents a nested CSS selector.\n */\n//TODO: make better validation, provide human readable errors\nexport function isNestedSelector(key: string): key is NestedCssSelector {\n return key.includes(\"&\")\n}\n\n/** Known at-rule prefixes that mochi-css recognizes */\nconst AT_RULE_PREFIXES = [\"@media \", \"@container \", \"@supports \", \"@layer \"] as const\n\n/**\n * Checks if a key represents a CSS at-rule (media, container, supports, layer).\n */\nexport function isAtRuleKey(key: string): key is AtRuleKey {\n return AT_RULE_PREFIXES.some((p) => key.startsWith(p))\n}\n\n/** A nested CSS selector pattern containing the parent reference `&` */\nexport type NestedCssSelector = `${string}&${string}`\n\n/** A CSS at-rule key for media, container, supports, or layer queries */\nexport type AtRuleKey = `@media ${string}` | `@container ${string}` | `@supports ${string}` | `@layer ${string}`\n\ntype NestedStyleKeys = AtRuleKey | NestedCssSelector\n\n/**\n * Style properties without nesting support.\n * Includes all standard CSS properties with type-safe value converters,\n * plus CSS custom properties (variables).\n *\n * Properties with known units (e.g., width, height, padding) accept numbers\n * that are automatically converted with their default unit (e.g., px, ms).\n */\nexport type SimpleStyleProps = { [K in PropsWithUnit]?: CssLike<number | Props[K]> } & {\n [K in Exclude<keyof Props, PropsWithUnit>]?: CssLike<Props[K]>\n}\n\n/**\n * Full style properties type with support for nested selectors and media queries.\n * Extends SimpleStyleProps to allow recursive style definitions.\n *\n * @example\n * const styles: StyleProps = {\n * color: 'blue',\n * padding: 16,\n * '&:hover': { color: 'red' },\n * '@media (min-width: 768px)': { padding: 24 }\n * }\n */\nexport type StyleProps = SimpleStyleProps & { [K in NestedStyleKeys]?: StyleProps | CssLike<string | number> } & Record<\n string,\n unknown\n >\n\n/**\n * Converts a SimpleStyleProps object to a CSS properties record.\n * Transforms camelCase property names to kebab-case and applies value converters.\n * @param props - The style properties object\n * @returns A record of CSS property names (kebab-case) to string values\n * @example\n * cssFromProps({ backgroundColor: 'blue', padding: 16 })\n * // { 'background-color': 'blue', 'padding': '16px' }\n */\nexport function cssFromProps(\n props: SimpleStyleProps & Partial<Record<CssVar, CssLike<number | string>>>,\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(props)\n .map(([key, value]): [string, string] | undefined => {\n if (value === undefined) return undefined\n // transform variable\n if (isCssVariableName(key)) return [key, asVar(value as CssLike<string | number>)]\n // transform CSS prop\n if (isKnownPropertyName(key)) return [camelToKebab(key), asKnownProp(value, key)]\n return undefined\n })\n .filter((v) => v !== undefined),\n )\n}\n","/**\n * CSS selector building and manipulation utilities.\n * Handles nested selectors (using `&` placeholder) and CSS at-rules.\n * @module selector\n */\n\nimport { isAtRuleKey, isNestedSelector } from \"@/props\"\n\n/**\n * Immutable CSS selector builder that handles nested selectors and CSS at-rules.\n * Uses the `&` character as a placeholder for parent selector substitution.\n *\n * @example\n * const selector = new MochiSelector(['.button'])\n * selector.extend('&:hover').cssSelector // '.button:hover'\n * selector.wrap('@media (min-width: 768px)').atRules // ['@media (min-width: 768px)']\n */\nexport class MochiSelector {\n /**\n * Creates a new MochiSelector instance.\n * @param cssSelectors - Array of CSS selectors (may contain `&` placeholders)\n * @param atRules - Array of full CSS at-rule strings e.g. `\"@media (min-width: 768px)\"`\n */\n constructor(\n private readonly cssSelectors: string[] = [],\n public readonly atRules: string[] = [],\n ) {}\n\n /**\n * Gets the combined CSS selector string.\n * Multiple selectors are joined with commas.\n * @returns The CSS selector, or \"*\" if no selectors are defined\n */\n get cssSelector(): string {\n if (this.cssSelectors.length === 0) return \"*\"\n return this.cssSelectors.join(\", \")\n }\n\n /**\n * Substitutes all `&` placeholders with the given root selector.\n * @param root - The selector to replace `&` with\n * @returns A new MochiSelector with substituted selectors\n */\n substitute(root: string): MochiSelector {\n return new MochiSelector(\n this.cssSelectors.map((selector) => selector.replace(/&/g, root)),\n this.atRules,\n )\n }\n\n /**\n * Extends this selector by nesting a child selector.\n * The `&` in the child selector is replaced with each parent selector.\n * @param child - The child selector pattern (must contain `&`)\n * @returns A new MochiSelector with the extended selectors\n * @example\n * new MochiSelector(['.btn']).extend('&:hover') // '.btn:hover'\n * new MochiSelector(['.btn']).extend('& .icon') // '.btn .icon'\n */\n extend(child: string): MochiSelector {\n if (!isNestedSelector(child)) return this\n const children = MochiSelector.split(child)\n const selectors = this.cssSelectors.flatMap((parentSelector) =>\n children.map((childSelector) => {\n return childSelector.replace(/&/g, parentSelector)\n }),\n )\n return new MochiSelector(selectors, this.atRules)\n }\n\n /**\n * Wraps this selector with a CSS at-rule.\n * @param atRule - The full at-rule string (e.g. `\"@media (min-width: 768px)\"`)\n * @returns A new MochiSelector with the added at-rule, or unchanged if not a known at-rule\n * @example\n * selector.wrap('@media (min-width: 768px)') // Adds media query\n * selector.wrap('@container sidebar (min-width: 300px)') // Adds container query\n */\n wrap(atRule: string): MochiSelector {\n if (!isAtRuleKey(atRule)) return this\n return new MochiSelector(this.cssSelectors, [...this.atRules, atRule])\n }\n\n /**\n * Splits a comma-separated selector string into individual selectors.\n * @param selector - The selector string to split\n * @returns Array of individual selector strings\n */\n private static split(selector: string): string[] {\n return [selector]\n }\n}\n","/**\n * Hashing utilities for generating short, deterministic class names.\n * Uses djb2 algorithm for fast string hashing.\n * @module hash\n */\n\n/** Characters used for base-62 encoding (css-name safe variant of base-64) */\nconst hashBase = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\"\nconst base = hashBase.length\n\n/**\n * Converts a number to a base-62 string representation.\n * @param num - The number to convert\n * @param maxLength - Optional maximum length of the output string\n * @returns Base-62 encoded string representation of the number\n */\nexport function numberToBase62(num: number, maxLength?: number): string {\n let out = \"\"\n while (num > 0 && out.length < (maxLength ?? Infinity)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n out = hashBase[num % base]! + out\n num = Math.floor(num / base)\n }\n return out.length > 0 ? out : \"0\"\n}\n\n/**\n * Generates a short hash string from input using the djb2 algorithm.\n * Used to create unique, deterministic CSS class names from style content.\n * @param input - The string to hash\n * @param length - Maximum length of the hash output (default: 8)\n * @returns A short, css-safe hash string\n * @example\n * shortHash(\"color: red;\") // Returns something like \"A1b2C3d4\"\n */\nexport function shortHash(input: string, length = 8): string {\n // fast 32-bit integer hash (djb2 variant)\n let h = 5381\n for (let i = 0; i < input.length; i++) {\n h = (h * 33) ^ input.charCodeAt(i)\n }\n // force unsigned\n h >>>= 0\n\n return numberToBase62(h, length)\n}\n","/**\n * String comparison utilities for deterministic sorting.\n * Used internally to ensure consistent CSS output order.\n * @module compare\n */\n\n/**\n * Compares two strings lexicographically.\n */\nexport function compareString<T extends string>(a: T, b: T) {\n return a < b ? -1 : a === b ? 0 : 1\n}\n\n/**\n * Compares two tuples by their first element (string key).\n * Useful for sorting Object.entries() results.\n */\nexport function compareStringKey<T extends [string, unknown]>(a: T, b: T) {\n return compareString(a[0], b[0])\n}\n\n/**\n * Creates a comparator function for objects with a specific string property.\n * @param name - The property name to compare by\n * @returns A comparator function that compares objects by the specified property\n * @example\n * const items = [{ key: 'b' }, { key: 'a' }]\n * items.sort(stringPropComparator('key')) // [{ key: 'a' }, { key: 'b' }]\n */\nexport function stringPropComparator<N extends string>(name: N) {\n return <T extends Record<N, string>>(a: T, b: T) => compareString(a[name], b[name])\n}\n","/**\n * CSS object model for representing and serializing styles.\n * Converts JavaScript style objects into CSS blocks with proper\n * selector handling, nesting support, and deterministic output.\n * @module cssObject\n */\n\nimport {\n asKnownProp,\n asVar,\n camelToKebab,\n isCssVariableName,\n isKnownPropertyName,\n isAtRuleKey,\n isNestedSelector,\n StyleProps,\n} from \"@/props\"\nimport { shortHash } from \"@/hash\"\nimport { MochiSelector } from \"@/selector\"\nimport { compareStringKey, stringPropComparator } from \"@/compare\"\nimport { CssLike } from \"@/values\"\n\n/**\n * Represents a single CSS rule block with properties and a selector.\n * Handles conversion to CSS string format and hash generation.\n */\nexport class CssObjectSubBlock {\n /**\n * Creates a new CSS sub-block.\n * @param cssProps - Map of CSS property names (kebab-case) to values\n * @param selector - The selector this block applies to\n */\n constructor(\n public readonly cssProps: Record<string, string>,\n public readonly selector: MochiSelector,\n ) {}\n\n /**\n * Computes a deterministic hash of this block's CSS content.\n * Used for generating unique class names.\n */\n get hash(): string {\n const str = this.asCssString(\"&\")\n return shortHash(str)\n }\n\n /**\n * Converts this block to a CSS string.\n * Handles at-rule wrapping (media, container, supports, layer) if present.\n * Multiple at-rules are nested in order.\n * @param root - The root selector to substitute for `&`\n * @returns Formatted CSS string\n */\n asCssString(root: string): string {\n const selector = this.selector.substitute(root)\n const atRules = selector.atRules\n const innerIndent = \" \".repeat(atRules.length)\n\n const props = Object.entries(this.cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => `${innerIndent} ${k}: ${v};\\n`)\n .join(\"\")\n\n let result = `${innerIndent}${selector.cssSelector} {\\n${props}${innerIndent}}`\n\n for (let i = atRules.length - 1; i >= 0; i--) {\n const outerIndent = \" \".repeat(i)\n result = `${outerIndent}${atRules[i]} {\\n${result}\\n${outerIndent}}`\n }\n\n return result\n }\n\n /**\n * Parses StyleProps into an array of CSS sub-blocks.\n * Recursively processes nested selectors and media queries.\n * Output order is deterministic for consistent hash generation.\n *\n * @param props - The style properties to parse\n * @param selector - The parent selector context (defaults to `&`)\n * @returns Non-empty array of sub-blocks (main block first, then nested)\n */\n static fromProps(props: StyleProps, selector?: MochiSelector): [CssObjectSubBlock, ...CssObjectSubBlock[]] {\n selector ??= new MochiSelector([\"&\"])\n\n const cssProps: Record<string, string> = {}\n const propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[] = []\n\n for (const [key, value] of Object.entries(props)) {\n // skip undefined value\n if (value === undefined) continue\n\n // transform variable\n if (isCssVariableName(key)) {\n cssProps[key] = asVar(value as CssLike<string | number>)\n continue\n }\n\n // transform known CSS prop\n if (isKnownPropertyName(key)) {\n cssProps[camelToKebab(key)] = asKnownProp(value, key)\n continue\n }\n\n // transform nested and media selectors\n if (isNestedSelector(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.extend(key),\n })\n continue\n }\n\n // transform at-rule selector (media, container, supports, layer)\n if (isAtRuleKey(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.wrap(key),\n })\n continue\n }\n\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n console.warn(`[mochi-css] Unknown style property \"${key}\" will be ignored`)\n }\n }\n\n return [\n new CssObjectSubBlock(cssProps, selector),\n ...propsToProcess\n .toSorted(stringPropComparator(\"key\"))\n .flatMap(({ props, selector }) => CssObjectSubBlock.fromProps(props, selector)),\n ] as const\n }\n}\n\n/**\n * Represents an abstract CSS block definition.\n * Contains one or more sub-blocks for nested selectors and media queries.\n */\nexport class CssObjectBlock {\n /** The generated unique class name for this block */\n public readonly className: string\n /** All sub-blocks (main styles and nested/media rules) */\n public readonly subBlocks: CssObjectSubBlock[] = []\n\n /**\n * Creates a new CSS block from style properties.\n * Generates a unique class name based on the content hash.\n * @param styles - The style properties to compile\n */\n constructor(styles: StyleProps) {\n const blocks = CssObjectSubBlock.fromProps(styles)\n\n this.className = \"c\" + shortHash(blocks.map((b) => b.hash).join(\"+\"))\n this.subBlocks = blocks\n }\n\n /**\n * Gets the CSS class selector for this block.\n */\n get selector(): string {\n return `.${this.className}`\n }\n\n /**\n * Converts style block to a CSS string.\n * @param root - The root selector to scope styles to\n * @returns Complete CSS string for this block\n */\n asCssString(root: string): string {\n return this.subBlocks\n .map((b) => b.asCssString(new MochiSelector([root]).extend(`&.${this.className}`).cssSelector))\n .join(\"\\n\\n\")\n }\n}\n\nexport type AllVariants = Record<string, Record<string, StyleProps>>\nexport type DefaultVariants = Record<never, Record<string, StyleProps>>\n\n/**\n * A compound variant entry that applies styles when multiple variant conditions match.\n * Each entry specifies a set of variant conditions and a `css` property with styles\n * that apply only when all conditions are satisfied simultaneously.\n *\n * @template V - The variant definitions type\n *\n * @example\n * { color: 'red', size: 'large', css: { fontWeight: 'bold' } }\n */\nexport type CompoundVariant<V extends AllVariants> = {\n [K in keyof V]?: keyof V[K]\n} & { css: StyleProps }\n\n/**\n * Refines string literal types to their proper runtime types.\n * Converts \"true\"/\"false\" strings to boolean literals.\n */\ntype RefineVariantType<T extends string> = T extends \"true\"\n ? true\n : T extends \"false\"\n ? false\n : T extends string\n ? T\n : string\n\n/**\n * Props for defining variants in a style object.\n * @template V - The variant definitions type\n */\nexport type VariantProps<V extends AllVariants> = {\n /** Variant definitions mapping names to options to styles */\n variants?: V\n /** Default variant selections for when not explicitly provided */\n defaultVariants?: { [K in keyof V]?: keyof V[K] extends string ? RefineVariantType<keyof V[K] & string> : never }\n /** Compound variant definitions that apply when multiple variant conditions match */\n compoundVariants?: CompoundVariant<V>[]\n}\n\n/** Combined type for style props with optional variants */\nexport type MochiCSSProps<V extends AllVariants> = Omit<\n StyleProps,\n \"variants\" | \"compoundVariants\" | \"defaultVariants\"\n> &\n VariantProps<V>\n\n/** Utility type to override properties of A with properties of B */\ntype Override<A extends object, B extends object> = B & Omit<A, keyof B>\n\n/** Recursively merges variant types from a tuple, with later types overriding earlier */\nexport type MergeCSSVariants<V extends AllVariants[]> = V extends [\n infer V1 extends AllVariants,\n ...infer VRest extends AllVariants[],\n]\n ? Override<V1, MergeCSSVariants<VRest>>\n : DefaultVariants\n\n/** Refines all values in a string record to their proper variant types */\ntype RefineVariantTypes<V extends Record<string, string>> = { [K in keyof V]: RefineVariantType<V[K]> }\n\n/** Extracts and refines variant option types from a DefaultVariants definition */\nexport type RefineVariants<T extends AllVariants> = RefineVariantTypes<{ [K in keyof T]: keyof T[K] & string }>\n\n/**\n * Complete CSS object representation with main and variant styles.\n *\n * @template V - The variant definitions type\n *\n * @example\n * const obj = new CSSObject({\n * color: 'blue',\n * variants: {\n * size: {\n * small: { fontSize: 12 },\n * large: { fontSize: 18 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * obj.asCssString() // Returns complete CSS with all variants\n */\nexport class CSSObject<V extends AllVariants = DefaultVariants> {\n /** The main style block (non-variant styles) */\n public readonly mainBlock: CssObjectBlock\n /** Compiled blocks for each variant option */\n public readonly variantBlocks: { [K in keyof V & string]: Record<keyof V[K] & string, CssObjectBlock> }\n /** Default variant selections */\n public readonly variantDefaults: Partial<RefineVariants<V>>\n /** Compound variant conditions and their parsed sub-blocks */\n public readonly compoundVariants: { conditions: Record<string, string>; subBlocks: CssObjectSubBlock[] }[]\n\n /**\n * Creates a new CSSObject from style props.\n * Compiles main styles and all variant options into CSS blocks.\n */\n public constructor({ variants, defaultVariants, compoundVariants, ...props }: MochiCSSProps<V>) {\n this.mainBlock = new CssObjectBlock(props as StyleProps)\n this.variantBlocks = {} as typeof this.variantBlocks\n this.variantDefaults = defaultVariants ?? {}\n this.compoundVariants = []\n\n if (variants) {\n for (const variantGroupName in variants) {\n this.variantBlocks[variantGroupName] =\n {} as (typeof this.variantBlocks)[keyof typeof this.variantBlocks]\n const variantGroup = variants[variantGroupName]\n for (const variantItemName in variantGroup) {\n this.variantBlocks[variantGroupName][variantItemName] = new CssObjectBlock(\n variantGroup[variantItemName] ?? {},\n )\n }\n }\n }\n\n if (compoundVariants) {\n for (const compound of compoundVariants) {\n const { css: styles, ...conditions } = compound\n this.compoundVariants.push({\n conditions: conditions as Record<string, string>,\n subBlocks: CssObjectSubBlock.fromProps(styles),\n })\n }\n }\n }\n\n /**\n * Serializes the entire CSS object to a CSS string.\n * Outputs main block first, then all variant blocks in sorted order.\n * @returns Complete CSS string ready for injection into a stylesheet\n */\n public asCssString(): string {\n return [\n this.mainBlock.asCssString(this.mainBlock.selector),\n ...Object.entries(this.variantBlocks)\n .toSorted(compareStringKey)\n .flatMap(([_, b]) => Object.entries(b).toSorted(compareStringKey))\n .map(([_, b]) => b.asCssString(this.mainBlock.selector)),\n ...this.compoundVariants.flatMap(({ conditions, subBlocks }) => {\n const selectorParts: string[] = []\n for (const [variantName, optionName] of Object.entries(conditions).toSorted(compareStringKey)) {\n const selector = this.variantBlocks[variantName]?.[optionName]?.selector\n if (selector === undefined) return []\n selectorParts.push(selector)\n }\n const combinedSelector = `${this.mainBlock.selector}${selectorParts.join(\"\")}`\n return subBlocks.map((b) => b.asCssString(combinedSelector))\n }),\n ].join(\"\\n\\n\")\n }\n}\n","/**\n * Core CSS-in-JS runtime for generating and applying styles.\n * Provides the main `css` function and `MochiCSS` class for style management.\n * @module css\n */\n\nimport clsx from \"clsx\"\nimport { CSSObject, AllVariants, DefaultVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/**\n * Runtime representation of a CSS style definition with variant support.\n * Holds generated class names and provides methods to compute the final\n * className string based on selected variants.\n *\n * @template V - The variant definitions type mapping variant names to their options\n *\n * @example\n * const styles = MochiCSS.from(new CSSObject({\n * color: 'blue',\n * variants: { size: { small: { fontSize: 12 }, large: { fontSize: 18 } } }\n * }))\n * styles.variant({ size: 'large' }) // Returns combined class names\n */\nconst MOCHI_CSS_TYPEOF = Symbol.for(\"mochi-css.MochiCSS\")\n\nexport function isMochiCSS(value: unknown): value is MochiCSS {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)[\"$$typeof\"] === MOCHI_CSS_TYPEOF\n )\n}\n\nexport class MochiCSS<V extends AllVariants = DefaultVariants> {\n readonly $$typeof = MOCHI_CSS_TYPEOF\n\n /**\n * Creates a new MochiCSS instance.\n * @param classNames - Base class names to always include\n * @param variantClassNames - Mapping of variant names to option class names\n * @param defaultVariants - Default variant selections when not specified\n */\n constructor(\n public readonly classNames: string[],\n public readonly variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } },\n public readonly defaultVariants: Partial<RefineVariants<V>>,\n ) {}\n\n /**\n * Computes the final className string based on variant selections.\n * Compound variants are handled purely via CSS combined selectors,\n * so no runtime matching is needed here.\n * @param props - Variant selections\n * @returns Combined className string for use in components\n */\n variant(props: Partial<RefineVariants<V>>): string {\n const keys = new Set<keyof V & string>(\n [...Object.keys(props), ...Object.keys(this.defaultVariants)].filter((k) => k in this.variantClassNames),\n )\n\n return clsx(\n this.classNames,\n ...keys.values().map((k) => {\n const variantGroup = this.variantClassNames[k]\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!variantGroup) return false\n\n const variantKey = ((k in props ? props[k] : undefined) ?? this.defaultVariants[k])?.toString()\n if (variantKey == null) return false\n\n const selectedClassname = variantGroup[variantKey]\n if (selectedClassname !== undefined) return selectedClassname\n\n const defaultKey = this.defaultVariants[k]\n if (defaultKey == null) return false\n\n return variantGroup[defaultKey.toString()]\n }),\n )\n }\n\n /**\n * Creates a MochiCSS instance from a CSSObject.\n * Extracts class names from the compiled CSS blocks.\n * @template V - The variant definitions type\n * @param object - The compiled CSSObject to extract from\n * @returns A new MochiCSS instance with the extracted class names\n */\n static from<V extends AllVariants = DefaultVariants>(object: CSSObject<V>): MochiCSS<V> {\n return new MochiCSS<V>(\n [object.mainBlock.className],\n Object.fromEntries(\n Object.entries(object.variantBlocks).map(([key, variantOptions]) => {\n return [\n key,\n Object.fromEntries(\n Object.entries(variantOptions).map(([optionKey, block]) => {\n return [optionKey, block.className]\n }),\n ),\n ]\n }),\n ) as { [K in keyof V]: { [P in keyof V[K]]: string } },\n object.variantDefaults,\n )\n }\n}\n\n/**\n * Creates a CSS style definition.\n * The primary API for defining styles in Mochi-CSS.\n *\n * @template V - Tuple of variant definition types\n * @param props - One or more style objects or existing MochiCSS instances to merge\n * @returns A MochiCSS instance with all styles and variants combined\n *\n * @example\n * // Simple usage\n * const button = css({ padding: 8, borderRadius: 4 })\n *\n * @example\n * // With variants\n * const button = css({\n * padding: 8,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * button.variant({ size: 'large' }) // Get class names for large size\n *\n * @example\n * // Merging multiple styles\n * const combined = css(baseStyles, additionalStyles)\n */\nconst emptyMochiCSS = new MochiCSS<AllVariants>([], {}, {})\n\n/**\n * Merges multiple MochiCSS instances into a single one, combining their\n * class names, variant class names, and default variants.\n * @param instances - The MochiCSS instances to merge\n * @returns A new MochiCSS instance with all styles combined\n */\nexport function mergeMochiCss<V extends AllVariants[]>(\n instances: MochiCSS<AllVariants>[],\n): MochiCSS<MergeCSSVariants<V>> {\n if (instances.length === 0) return emptyMochiCSS as MochiCSS<MergeCSSVariants<V>>\n\n return new MochiCSS<AllVariants>(\n instances.flatMap((c) => c.classNames),\n instances.reduce((a, b) => Object.assign(a, b.variantClassNames), {}),\n instances.reduce((a, b) => Object.assign(a, b.defaultVariants), {}),\n ) as MochiCSS<MergeCSSVariants<V>>\n}\n\nexport function css<V extends AllVariants[]>(\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> | MochiCSS }\n): MochiCSS<MergeCSSVariants<V>> {\n const cssToMerge: MochiCSS<AllVariants>[] = []\n for (const p of props) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (p == null || typeof p !== \"object\") continue\n if (p instanceof MochiCSS) {\n cssToMerge.push(p)\n } else {\n cssToMerge.push(MochiCSS.from(new CSSObject<AllVariants>(p)))\n }\n }\n\n return mergeMochiCss(cssToMerge)\n}\n","/**\n * React styled component utilities.\n * Creates styled components with CSS-in-JS support and variant props.\n * @module styled\n */\n\nimport { ComponentProps, ComponentType, createElement, FC, HTMLElementType } from \"react\"\nimport { css } from \"@/css\"\nimport clsx from \"clsx\"\nimport { AllVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/** Props added by MochiCSS to styled components */\ntype MochiProps<V extends AllVariants[]> = {\n className?: string\n} & Partial<RefineVariants<MergeCSSVariants<V>>>\n\n/** Minimal interface for components that accept className */\ntype Cls = { className?: string }\n\n/**\n * Creates a styled React component with CSS-in-JS support and variant props.\n * Similar to styled-components or Stitches, but with zero runtime overhead.\n *\n * @template T - The base element type or component type\n * @template V - The variant definitions tuple type\n * @param target - The HTML element tag name or React component to style\n * @param props - One or more style objects with optional variants\n * @returns A React functional component with merged props and variant support\n *\n * @example\n * const Button = styled('button', {\n * padding: 8,\n * borderRadius: 4,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * },\n * variant: {\n * primary: { backgroundColor: 'blue' },\n * secondary: { backgroundColor: 'gray' }\n * }\n * }\n * })\n *\n * // Usage: <Button size=\"large\" variant=\"primary\">Click me</Button>\n */\n//TODO: Move to dedicated \"styled\" package\nexport function styled<T extends HTMLElementType | ComponentType<Cls>, V extends AllVariants[]>(\n target: T,\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> }\n): FC<Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>> {\n const styles = css<V>(...props)\n return ({ className, ...p }: Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>) =>\n //TODO: pick only variant props from p\n //TODO: omit variant props in p\n createElement(target, {\n className: clsx(styles.variant(p as unknown as Parameters<typeof styles.variant>[0]), className),\n ...p,\n })\n}\n","import { shortHash } from \"@/hash\"\nimport { cssFromProps, SimpleStyleProps } from \"@/props\"\nimport { compareStringKey } from \"@/compare\"\n\nexport type KeyframeStops = Record<string, SimpleStyleProps>\n\nexport class KeyframesObject {\n public readonly name: string\n private readonly body: string\n\n constructor(stops: KeyframeStops) {\n this.body = KeyframesObject.generateBody(stops)\n this.name = \"kf\" + shortHash(this.body)\n }\n\n asCssString(): string {\n return `@keyframes ${this.name} {\\n${this.body}\\n}`\n }\n\n private static generateBody(stops: KeyframeStops): string {\n return Object.entries(stops)\n .toSorted(compareStringKey)\n .map(([stopKey, props]) => {\n const cssProps = cssFromProps(props)\n const propsStr = Object.entries(cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => ` ${k}: ${v};`)\n .join(\"\\n\")\n return ` ${stopKey} {\\n${propsStr}\\n }`\n })\n .join(\"\\n\\n\")\n }\n}\n","import { KeyframesObject, type KeyframeStops } from \"@/keyframesObject\"\nexport type { KeyframeStops } from \"@/keyframesObject\"\n\nexport class MochiKeyframes {\n constructor(public readonly name: string) {}\n\n toString(): string {\n return this.name\n }\n\n get value(): string {\n return this.name\n }\n\n static from(object: KeyframesObject): MochiKeyframes {\n return new MochiKeyframes(object.name)\n }\n}\n\nexport function keyframes(stops: KeyframeStops): MochiKeyframes {\n return MochiKeyframes.from(new KeyframesObject(stops))\n}\n","import { CssObjectSubBlock } from \"@/cssObject\"\nimport { compareStringKey } from \"@/compare\"\nimport { StyleProps } from \"@/props\"\n\nexport type GlobalCssStyles = Record<string, StyleProps>\n\n/**\n * CSS object model for global (non-scoped) styles.\n * Accepts a map of CSS selectors to style objects and serializes them\n * as plain CSS rules without class name scoping.\n *\n * @example\n * const obj = new GlobalCssObject({\n * body: { margin: 0 },\n * 'h1': { fontSize: 32 },\n * })\n * obj.asCssString() // \"body {\\n margin: 0;\\n}\\n\\nh1 {\\n font-size: 32px;\\n}\"\n */\nexport class GlobalCssObject {\n private readonly rules: { selector: string; subBlocks: CssObjectSubBlock[] }[]\n\n constructor(styles: GlobalCssStyles) {\n this.rules = Object.entries(styles)\n .toSorted(compareStringKey)\n .map(([selector, props]) => ({\n selector,\n subBlocks: [...CssObjectSubBlock.fromProps(props)],\n }))\n }\n\n asCssString(): string {\n return this.rules\n .flatMap(({ selector, subBlocks }) => subBlocks.map((b) => b.asCssString(selector)))\n .join(\"\\n\\n\")\n }\n}\n","import type { GlobalCssStyles } from \"@/globalCssObject\"\nexport type { GlobalCssStyles } from \"@/globalCssObject\"\n\n/**\n * Creates a global CSS definition.\n * Styles are not scoped to any class — they apply to all matching elements.\n *\n * @param styles - Map of CSS selectors to style objects\n *\n * @example\n * globalCss({\n * 'body': { margin: 0, padding: 0 },\n * '*, *::before, *::after': { boxSizing: 'border-box' },\n * })\n */\nexport function globalCss(styles: GlobalCssStyles): void {\n void styles // mark as used\n}\n","/**\n * Helper builders for CSS at-rule keys.\n * Provides a typed, ergonomic API for constructing @media, @container, and @supports rules.\n * @module query\n */\n\nimport type { AtRuleKey } from \"@/props\"\n\n/**\n * Wraps a condition in parentheses if not already wrapped.\n */\nfunction wrapParens(condition: string): string {\n const trimmed = condition.trim()\n if (trimmed.startsWith(\"(\") && trimmed.endsWith(\")\")) return trimmed\n return `(${trimmed})`\n}\n\n// ─── @media ──────────────────────────────────────────────────────────────────\n\ninterface MediaHelper {\n /** `@media (condition)` */\n (condition: string): AtRuleKey & `@media ${string}`\n /** `@media (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (a), (b), …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: dark)` */\n readonly dark: AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: light)` */\n readonly light: AtRuleKey & `@media ${string}`\n /** `@media (prefers-reduced-motion: no-preference)` */\n readonly motion: AtRuleKey & `@media ${string}`\n /** `@media print` */\n readonly print: AtRuleKey & `@media ${string}`\n}\n\nfunction mediaFn(condition: string): AtRuleKey & `@media ${string}` {\n return `@media ${wrapParens(condition)}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\", \")}` as AtRuleKey & `@media ${string}`\n}\n\nObject.defineProperties(mediaFn, {\n dark: { get: () => \"@media (prefers-color-scheme: dark)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n light: { get: () => \"@media (prefers-color-scheme: light)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n motion: {\n get: () => \"@media (prefers-reduced-motion: no-preference)\" as AtRuleKey & `@media ${string}`,\n enumerable: true,\n },\n print: { get: () => \"@media print\" as AtRuleKey & `@media ${string}`, enumerable: true },\n})\n\n/** Helper for constructing `@media` at-rule keys. */\nexport const media = mediaFn as MediaHelper\n\n// ─── @container ──────────────────────────────────────────────────────────────\n\ninterface ContainerHelper {\n /** `@container (condition)` — anonymous container */\n (condition: string): AtRuleKey & `@container ${string}`\n /** `@container name (condition)` — named container */\n named(name: string, condition: string): AtRuleKey & `@container ${string}`\n}\n\nfunction containerFn(condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\ncontainerFn.named = function (name: string, condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${name} ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\n/** Helper for constructing `@container` at-rule keys. */\nexport const container = containerFn as ContainerHelper\n\n// ─── @supports ───────────────────────────────────────────────────────────────\n\ninterface SupportsHelper {\n /** `@supports (declaration)` */\n (condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports not (declaration)` */\n not(condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n /** `@supports (a) or (b) or …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n}\n\nfunction supportsFn(condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.not = function (condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports not ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" or \")}` as AtRuleKey & `@supports ${string}`\n}\n\n/** Helper for constructing `@supports` at-rule keys. */\nexport const supports = supportsFn as SupportsHelper\n"],"mappings":"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ClB,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,SAAS;CACT,gBAAgB;CAChB,qBAAqB;CACrB,yBAAyB;CACzB,YAAY;CACZ,YAAY;CACZ,gBAAgB;CAChB,qBAAqB;CACrB,iBAAiB;CACjB,0BAA0B;CAC1B,6BAA6B;CAC7B,+BAA+B;CAC/B,sBAAsB;CACtB,yBAAyB;CACzB,2BAA2B;CAC3B,KAAK;CACL,iBAAiB;CACjB,YAAY;CACZ,iBAAiB;CACjB,oBAAoB;CACpB,WAAW;CACX,eAAe;CACf,cAAc;CACd,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,OAAO;CACP,aAAa;CACb,GAAG;CACH,GAAG;CACH,MAAM;CACT;;;;ACnUD,MAAaC,qBAA0C,IAAI,IAAI;CAC3D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH,CAAC;;;;;;;AC/sBF,SAAgB,aAAa,KAAqB;AAC9C,QAAO,IAAI,QAAQ,WAAW,MAAM,MAAM,EAAE,aAAa,CAAC;;AAG9D,SAAS,mBAAmB,cAA0C;AAClE,QAAO,gBAAgB,gBAAgB,cAAc,gBAAoC;;;;;;AAO7F,SAAS,YAAY,OAAiC,cAAsB,WAAW,IAAY;AAC/F,KAAI,YAAY,EAAG,QAAO;AAC1B,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,UAAU;EAC3B,MAAM,OAAO,mBAAmB,aAAa;AAC7C,MAAI,SAAS,IAAK,QAAO,GAAG,QAAQ,MAAM;AAC1C,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,OAAO,GAAG,QAAQ,SAAS,MAAM,UAAU;;AAEtD,QAAO,YAAY,MAAM,OAAO,cAAc,WAAW,EAAE;;;;;AAM/D,SAAgB,kBAAkB,KAA4B;AAC1D,QAAO,IAAI,WAAW,KAAK;;;;;;;;AAS/B,SAAgB,MAAM,OAAiC,WAAW,IAAY;AAC1E,KAAI,YAAY,EAAG,QAAO;AAC1B,SAAQ,OAAO,OAAf;EACI,KAAK,SACD,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"}
package/dist/index.mjs CHANGED
@@ -1582,7 +1582,12 @@ var CSSObject = class {
1582
1582
  * }))
1583
1583
  * styles.variant({ size: 'large' }) // Returns combined class names
1584
1584
  */
1585
+ const MOCHI_CSS_TYPEOF = Symbol.for("mochi-css.MochiCSS");
1586
+ function isMochiCSS(value) {
1587
+ return typeof value === "object" && value !== null && value["$$typeof"] === MOCHI_CSS_TYPEOF;
1588
+ }
1585
1589
  var MochiCSS = class MochiCSS {
1590
+ $$typeof = MOCHI_CSS_TYPEOF;
1586
1591
  /**
1587
1592
  * Creates a new MochiCSS instance.
1588
1593
  * @param classNames - Base class names to always include
@@ -1865,4 +1870,4 @@ supportsFn.or = function(...conditions) {
1865
1870
  const supports = supportsFn;
1866
1871
 
1867
1872
  //#endregion
1868
- export { CSSObject, CssObjectBlock, CssObjectSubBlock, GlobalCssObject, KeyframesObject, MochiCSS, MochiKeyframes, MochiSelector, Token, container, createToken, css, cssFromProps, globalCss, isAtRuleKey, keyframes, media, mergeMochiCss, styled, supports };
1873
+ export { CSSObject, CssObjectBlock, CssObjectSubBlock, GlobalCssObject, KeyframesObject, MochiCSS, MochiKeyframes, MochiSelector, Token, container, createToken, css, cssFromProps, globalCss, isAtRuleKey, isMochiCSS, keyframes, media, mergeMochiCss, styled, supports };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["name: string","knownPropertyNames: ReadonlySet<string>","cssSelectors: string[]","atRules: string[]","cssProps: Record<string, string>","selector: MochiSelector","propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[]","props","selector","selectorParts: string[]","classNames: string[]","variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } }","defaultVariants: Partial<RefineVariants<V>>","cssToMerge: MochiCSS<AllVariants>[]","name: string"],"sources":["../src/token.ts","../src/propertyUnits.generated.ts","../src/knownProperties.generated.ts","../src/props.ts","../src/selector.ts","../src/hash.ts","../src/compare.ts","../src/cssObject.ts","../src/css.ts","../src/styled.ts","../src/keyframesObject.ts","../src/keyframes.ts","../src/globalCssObject.ts","../src/globalCss.ts","../src/query.ts"],"sourcesContent":["/**\n * CSS custom property (design token) utilities.\n * Provides type-safe access to CSS variables with proper `var()` syntax.\n * @module token\n */\n\nimport { CssVar, CssVarVal } from \"@/values\"\n\n/**\n * Represents a CSS custom property (design token) with type information.\n * Provides convenient access to both the variable name and its `var()` reference.\n * @template T - The expected value type of the token (for type checking)\n * @example\n * const primaryColor = new Token<string>('primary-color')\n * primaryColor.variable // '--primary-color'\n * primaryColor.value // 'var(--primary-color)'\n */\nexport class Token {\n /**\n * Creates a new CSS token.\n * @param name - The token name (without the `--` prefix)\n */\n constructor(public readonly name: string) {}\n\n /**\n * Gets the CSS custom property name (with `--` prefix).\n * Use this when defining the variable.\n */\n get variable(): CssVar {\n return `--${this.name}`\n }\n\n /**\n * Gets the CSS `var()` reference to this token.\n * Use this when consuming the variable value.\n */\n get value(): CssVarVal {\n return `var(${this.variable})`\n }\n\n /**\n * Returns the variable name for string coercion.\n */\n toString(): CssVar {\n return this.variable\n }\n}\n\n/**\n * Creates a new CSS design token.\n * @template T - The expected value type of the token\n * @param name - The token name (without the `--` prefix)\n * @returns A new Token instance\n * @example\n * const spacing = createToken<number>('spacing-md')\n * // Use in styles: { gap: spacing.value }\n */\nexport function createToken(name: string): Token {\n return new Token(name)\n}\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const propertyUnits = {\n animation: \"ms\",\n animationDelay: \"ms\",\n animationDuration: \"ms\",\n animationRange: \"px\",\n animationRangeCenter: \"px\",\n animationRangeEnd: \"px\",\n animationRangeStart: \"px\",\n background: \"px\",\n backgroundPosition: \"px\",\n backgroundPositionBlock: \"px\",\n backgroundPositionInline: \"px\",\n backgroundPositionX: \"px\",\n backgroundPositionY: \"px\",\n backgroundSize: \"px\",\n backgroundTbd: \"px\",\n baselineShift: \"px\",\n blockSize: \"px\",\n blockStep: \"px\",\n blockStepSize: \"px\",\n border: \"px\",\n borderBlock: \"px\",\n borderBlockClip: \"px\",\n borderBlockEnd: \"px\",\n borderBlockEndClip: \"px\",\n borderBlockEndRadius: \"px\",\n borderBlockEndWidth: \"px\",\n borderBlockStart: \"px\",\n borderBlockStartClip: \"px\",\n borderBlockStartRadius: \"px\",\n borderBlockStartWidth: \"px\",\n borderBlockWidth: \"px\",\n borderBottom: \"px\",\n borderBottomClip: \"px\",\n borderBottomLeftRadius: \"px\",\n borderBottomRadius: \"px\",\n borderBottomRightRadius: \"px\",\n borderBottomWidth: \"px\",\n borderClip: \"px\",\n borderEndEndRadius: \"px\",\n borderEndStartRadius: \"px\",\n borderImage: \"%\",\n borderImageOutset: \"px\",\n borderImageSlice: \"%\",\n borderImageWidth: \"px\",\n borderInline: \"px\",\n borderInlineClip: \"px\",\n borderInlineEnd: \"px\",\n borderInlineEndClip: \"px\",\n borderInlineEndRadius: \"px\",\n borderInlineEndWidth: \"px\",\n borderInlineStart: \"px\",\n borderInlineStartClip: \"px\",\n borderInlineStartRadius: \"px\",\n borderInlineStartWidth: \"px\",\n borderInlineWidth: \"px\",\n borderLeft: \"px\",\n borderLeftClip: \"px\",\n borderLeftRadius: \"px\",\n borderLeftWidth: \"px\",\n borderLimit: \"px\",\n borderRadius: \"px\",\n borderRight: \"px\",\n borderRightClip: \"px\",\n borderRightRadius: \"px\",\n borderRightWidth: \"px\",\n borderSpacing: \"px\",\n borderStartEndRadius: \"px\",\n borderStartStartRadius: \"px\",\n borderTop: \"px\",\n borderTopClip: \"px\",\n borderTopLeftRadius: \"px\",\n borderTopRadius: \"px\",\n borderTopRightRadius: \"px\",\n borderTopWidth: \"px\",\n borderWidth: \"px\",\n bottom: \"px\",\n boxShadow: \"px\",\n boxShadowBlur: \"px\",\n boxShadowOffset: \"px\",\n boxShadowSpread: \"px\",\n columnGap: \"px\",\n columnHeight: \"px\",\n columnRule: \"px\",\n columnRuleEdgeInset: \"px\",\n columnRuleEdgeInsetEnd: \"px\",\n columnRuleEdgeInsetStart: \"px\",\n columnRuleInset: \"px\",\n columnRuleInsetEnd: \"px\",\n columnRuleInsetStart: \"px\",\n columnRuleInteriorInset: \"px\",\n columnRuleInteriorInsetEnd: \"px\",\n columnRuleInteriorInsetStart: \"px\",\n columnRuleWidth: \"px\",\n columns: \"px\",\n columnWidth: \"px\",\n containIntrinsicBlockSize: \"px\",\n containIntrinsicHeight: \"px\",\n containIntrinsicInlineSize: \"px\",\n containIntrinsicSize: \"px\",\n containIntrinsicWidth: \"px\",\n corner: \"px\",\n cornerBlockEnd: \"px\",\n cornerBlockStart: \"px\",\n cornerBottom: \"px\",\n cornerBottomLeft: \"px\",\n cornerBottomRight: \"px\",\n cornerEndEnd: \"px\",\n cornerEndStart: \"px\",\n cornerInlineEnd: \"px\",\n cornerInlineStart: \"px\",\n cornerLeft: \"px\",\n cornerRight: \"px\",\n cornerStartEnd: \"px\",\n cornerStartStart: \"px\",\n cornerTop: \"px\",\n cornerTopLeft: \"px\",\n cornerTopRight: \"px\",\n cx: \"px\",\n cy: \"px\",\n fillOpacity: \"%\",\n fillPosition: \"px\",\n fillSize: \"px\",\n flex: \"px\",\n flexBasis: \"px\",\n floatOffset: \"px\",\n floodOpacity: \"%\",\n flowTolerance: \"px\",\n font: \"deg\",\n fontSize: \"px\",\n fontStretch: \"%\",\n fontStyle: \"deg\",\n fontWidth: \"%\",\n gap: \"px\",\n grid: \"px\",\n gridAutoColumns: \"px\",\n gridAutoRows: \"px\",\n gridColumnGap: \"px\",\n gridGap: \"px\",\n gridRowGap: \"px\",\n gridTemplate: \"px\",\n gridTemplateColumns: \"px\",\n gridTemplateRows: \"px\",\n height: \"px\",\n hyphenateLimitZone: \"px\",\n imageOrientation: \"deg\",\n imageResolution: \"dppx\",\n initialLetterWrap: \"px\",\n inlineSize: \"px\",\n inset: \"px\",\n insetBlock: \"px\",\n insetBlockEnd: \"px\",\n insetBlockStart: \"px\",\n insetInline: \"px\",\n insetInlineEnd: \"px\",\n insetInlineStart: \"px\",\n interestDelay: \"ms\",\n interestDelayEnd: \"ms\",\n interestDelayStart: \"ms\",\n itemFlow: \"px\",\n left: \"px\",\n letterSpacing: \"px\",\n lineHeight: \"px\",\n lineHeightStep: \"px\",\n linePadding: \"px\",\n margin: \"px\",\n marginBlock: \"px\",\n marginBlockEnd: \"px\",\n marginBlockStart: \"px\",\n marginBottom: \"px\",\n marginInline: \"px\",\n marginInlineEnd: \"px\",\n marginInlineStart: \"px\",\n marginLeft: \"px\",\n marginRight: \"px\",\n marginTop: \"px\",\n mask: \"px\",\n maskBorder: \"%\",\n maskBorderOutset: \"px\",\n maskBorderSlice: \"%\",\n maskBorderWidth: \"px\",\n maskPosition: \"px\",\n maskSize: \"px\",\n maxBlockSize: \"px\",\n maxHeight: \"px\",\n maxInlineSize: \"px\",\n maxWidth: \"px\",\n minBlockSize: \"px\",\n minHeight: \"px\",\n minInlineSize: \"px\",\n minWidth: \"px\",\n objectPosition: \"px\",\n offset: \"px\",\n offsetAnchor: \"px\",\n offsetDistance: \"px\",\n offsetPosition: \"px\",\n offsetRotate: \"deg\",\n opacity: \"%\",\n outline: \"px\",\n outlineOffset: \"px\",\n outlineWidth: \"px\",\n overflowClipMargin: \"px\",\n overflowClipMarginBlock: \"px\",\n overflowClipMarginBlockEnd: \"px\",\n overflowClipMarginBlockStart: \"px\",\n overflowClipMarginBottom: \"px\",\n overflowClipMarginInline: \"px\",\n overflowClipMarginInlineEnd: \"px\",\n overflowClipMarginInlineStart: \"px\",\n overflowClipMarginLeft: \"px\",\n overflowClipMarginRight: \"px\",\n overflowClipMarginTop: \"px\",\n padding: \"px\",\n paddingBlock: \"px\",\n paddingBlockEnd: \"px\",\n paddingBlockStart: \"px\",\n paddingBottom: \"px\",\n paddingInline: \"px\",\n paddingInlineEnd: \"px\",\n paddingInlineStart: \"px\",\n paddingLeft: \"px\",\n paddingRight: \"px\",\n paddingTop: \"px\",\n pause: \"ms\",\n pauseAfter: \"ms\",\n pauseBefore: \"ms\",\n perspective: \"px\",\n perspectiveOrigin: \"px\",\n r: \"px\",\n rest: \"ms\",\n restAfter: \"ms\",\n restBefore: \"ms\",\n right: \"px\",\n rotate: \"deg\",\n rowGap: \"px\",\n rowRule: \"px\",\n rowRuleEdgeInset: \"px\",\n rowRuleEdgeInsetEnd: \"px\",\n rowRuleEdgeInsetStart: \"px\",\n rowRuleInset: \"px\",\n rowRuleInsetEnd: \"px\",\n rowRuleInsetStart: \"px\",\n rowRuleInteriorInset: \"px\",\n rowRuleInteriorInsetEnd: \"px\",\n rowRuleInteriorInsetStart: \"px\",\n rowRuleWidth: \"px\",\n rule: \"px\",\n ruleEdgeInset: \"px\",\n ruleInset: \"px\",\n ruleInsetEnd: \"px\",\n ruleInsetStart: \"px\",\n ruleInteriorInset: \"px\",\n ruleWidth: \"px\",\n rx: \"px\",\n ry: \"px\",\n scale: \"%\",\n scrollMargin: \"px\",\n scrollMarginBlock: \"px\",\n scrollMarginBlockEnd: \"px\",\n scrollMarginBlockStart: \"px\",\n scrollMarginBottom: \"px\",\n scrollMarginInline: \"px\",\n scrollMarginInlineEnd: \"px\",\n scrollMarginInlineStart: \"px\",\n scrollMarginLeft: \"px\",\n scrollMarginRight: \"px\",\n scrollMarginTop: \"px\",\n scrollPadding: \"px\",\n scrollPaddingBlock: \"px\",\n scrollPaddingBlockEnd: \"px\",\n scrollPaddingBlockStart: \"px\",\n scrollPaddingBottom: \"px\",\n scrollPaddingInline: \"px\",\n scrollPaddingInlineEnd: \"px\",\n scrollPaddingInlineStart: \"px\",\n scrollPaddingLeft: \"px\",\n scrollPaddingRight: \"px\",\n scrollPaddingTop: \"px\",\n shapeImageThreshold: \"%\",\n shapeMargin: \"px\",\n shapePadding: \"px\",\n stopOpacity: \"%\",\n strokeDasharray: \"px\",\n strokeDashcorner: \"px\",\n strokeDashCorner: \"px\",\n strokeDashoffset: \"px\",\n strokeOpacity: \"%\",\n strokePosition: \"px\",\n strokeSize: \"px\",\n strokeWidth: \"px\",\n tabSize: \"px\",\n textDecoration: \"px\",\n textDecorationInset: \"px\",\n textDecorationThickness: \"px\",\n textIndent: \"px\",\n textShadow: \"px\",\n textSizeAdjust: \"%\",\n textUnderlineOffset: \"px\",\n timelineTrigger: \"px\",\n timelineTriggerExitRange: \"px\",\n timelineTriggerExitRangeEnd: \"px\",\n timelineTriggerExitRangeStart: \"px\",\n timelineTriggerRange: \"px\",\n timelineTriggerRangeEnd: \"px\",\n timelineTriggerRangeStart: \"px\",\n top: \"px\",\n transformOrigin: \"px\",\n transition: \"ms\",\n transitionDelay: \"ms\",\n transitionDuration: \"ms\",\n translate: \"px\",\n verticalAlign: \"px\",\n viewTimeline: \"px\",\n viewTimelineInset: \"px\",\n voiceDuration: \"ms\",\n voicePitch: \"Hz\",\n voiceRange: \"Hz\",\n voiceRate: \"%\",\n width: \"px\",\n wordSpacing: \"px\",\n x: \"px\",\n y: \"px\",\n zoom: \"%\",\n} as const\n\nexport type PropertyWithUnit = keyof typeof propertyUnits\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const knownPropertyNames: ReadonlySet<string> = new Set([\n \"accentColor\",\n \"alignContent\",\n \"alignItems\",\n \"alignSelf\",\n \"alignmentBaseline\",\n \"all\",\n \"anchorName\",\n \"anchorScope\",\n \"animation\",\n \"animationComposition\",\n \"animationDelay\",\n \"animationDirection\",\n \"animationDuration\",\n \"animationFillMode\",\n \"animationIterationCount\",\n \"animationName\",\n \"animationPlayState\",\n \"animationRange\",\n \"animationRangeCenter\",\n \"animationRangeEnd\",\n \"animationRangeStart\",\n \"animationTimeline\",\n \"animationTimingFunction\",\n \"animationTrigger\",\n \"appearance\",\n \"aspectRatio\",\n \"backdropFilter\",\n \"backfaceVisibility\",\n \"background\",\n \"backgroundAttachment\",\n \"backgroundBlendMode\",\n \"backgroundClip\",\n \"backgroundColor\",\n \"backgroundImage\",\n \"backgroundOrigin\",\n \"backgroundPosition\",\n \"backgroundPositionBlock\",\n \"backgroundPositionInline\",\n \"backgroundPositionX\",\n \"backgroundPositionY\",\n \"backgroundRepeat\",\n \"backgroundRepeatBlock\",\n \"backgroundRepeatInline\",\n \"backgroundRepeatX\",\n \"backgroundRepeatY\",\n \"backgroundSize\",\n \"backgroundTbd\",\n \"baselineShift\",\n \"baselineSource\",\n \"blockEllipsis\",\n \"blockSize\",\n \"blockStep\",\n \"blockStepAlign\",\n \"blockStepInsert\",\n \"blockStepRound\",\n \"blockStepSize\",\n \"bookmarkLabel\",\n \"bookmarkLevel\",\n \"bookmarkState\",\n \"border\",\n \"borderBlock\",\n \"borderBlockClip\",\n \"borderBlockColor\",\n \"borderBlockEnd\",\n \"borderBlockEndClip\",\n \"borderBlockEndColor\",\n \"borderBlockEndRadius\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\",\n \"borderBlockStart\",\n \"borderBlockStartClip\",\n \"borderBlockStartColor\",\n \"borderBlockStartRadius\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\",\n \"borderBlockStyle\",\n \"borderBlockWidth\",\n \"borderBottom\",\n \"borderBottomClip\",\n \"borderBottomColor\",\n \"borderBottomLeftRadius\",\n \"borderBottomRadius\",\n \"borderBottomRightRadius\",\n \"borderBottomStyle\",\n \"borderBottomWidth\",\n \"borderBoundary\",\n \"borderClip\",\n \"borderCollapse\",\n \"borderColor\",\n \"borderEndEndRadius\",\n \"borderEndStartRadius\",\n \"borderImage\",\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\",\n \"borderInline\",\n \"borderInlineClip\",\n \"borderInlineColor\",\n \"borderInlineEnd\",\n \"borderInlineEndClip\",\n \"borderInlineEndColor\",\n \"borderInlineEndRadius\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\",\n \"borderInlineStart\",\n \"borderInlineStartClip\",\n \"borderInlineStartColor\",\n \"borderInlineStartRadius\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\",\n \"borderInlineStyle\",\n \"borderInlineWidth\",\n \"borderLeft\",\n \"borderLeftClip\",\n \"borderLeftColor\",\n \"borderLeftRadius\",\n \"borderLeftStyle\",\n \"borderLeftWidth\",\n \"borderLimit\",\n \"borderRadius\",\n \"borderRight\",\n \"borderRightClip\",\n \"borderRightColor\",\n \"borderRightRadius\",\n \"borderRightStyle\",\n \"borderRightWidth\",\n \"borderShape\",\n \"borderSpacing\",\n \"borderStartEndRadius\",\n \"borderStartStartRadius\",\n \"borderStyle\",\n \"borderTop\",\n \"borderTopClip\",\n \"borderTopColor\",\n \"borderTopLeftRadius\",\n \"borderTopRadius\",\n \"borderTopRightRadius\",\n \"borderTopStyle\",\n \"borderTopWidth\",\n \"borderWidth\",\n \"bottom\",\n \"boxDecorationBreak\",\n \"boxShadow\",\n \"boxShadowBlur\",\n \"boxShadowColor\",\n \"boxShadowOffset\",\n \"boxShadowPosition\",\n \"boxShadowSpread\",\n \"boxSizing\",\n \"boxSnap\",\n \"breakAfter\",\n \"breakBefore\",\n \"breakInside\",\n \"captionSide\",\n \"caret\",\n \"caretAnimation\",\n \"caretColor\",\n \"caretShape\",\n \"clear\",\n \"clip\",\n \"clipPath\",\n \"clipRule\",\n \"color\",\n \"colorAdjust\",\n \"colorInterpolation\",\n \"colorInterpolationFilters\",\n \"colorScheme\",\n \"columnCount\",\n \"columnFill\",\n \"columnGap\",\n \"columnHeight\",\n \"columnRule\",\n \"columnRuleBreak\",\n \"columnRuleColor\",\n \"columnRuleEdgeInset\",\n \"columnRuleEdgeInsetEnd\",\n \"columnRuleEdgeInsetStart\",\n \"columnRuleInset\",\n \"columnRuleInsetEnd\",\n \"columnRuleInsetStart\",\n \"columnRuleInteriorInset\",\n \"columnRuleInteriorInsetEnd\",\n \"columnRuleInteriorInsetStart\",\n \"columnRuleStyle\",\n \"columnRuleWidth\",\n \"columnSpan\",\n \"columnWidth\",\n \"columnWrap\",\n \"columns\",\n \"contain\",\n \"containIntrinsicBlockSize\",\n \"containIntrinsicHeight\",\n \"containIntrinsicInlineSize\",\n \"containIntrinsicSize\",\n \"containIntrinsicWidth\",\n \"container\",\n \"containerName\",\n \"containerType\",\n \"content\",\n \"contentVisibility\",\n \"continue\",\n \"copyInto\",\n \"corner\",\n \"cornerBlockEnd\",\n \"cornerBlockEndShape\",\n \"cornerBlockStart\",\n \"cornerBlockStartShape\",\n \"cornerBottom\",\n \"cornerBottomLeft\",\n \"cornerBottomLeftShape\",\n \"cornerBottomRight\",\n \"cornerBottomRightShape\",\n \"cornerBottomShape\",\n \"cornerEndEnd\",\n \"cornerEndEndShape\",\n \"cornerEndStart\",\n \"cornerEndStartShape\",\n \"cornerInlineEnd\",\n \"cornerInlineEndShape\",\n \"cornerInlineStart\",\n \"cornerInlineStartShape\",\n \"cornerLeft\",\n \"cornerLeftShape\",\n \"cornerRight\",\n \"cornerRightShape\",\n \"cornerShape\",\n \"cornerStartEnd\",\n \"cornerStartEndShape\",\n \"cornerStartStart\",\n \"cornerStartStartShape\",\n \"cornerTop\",\n \"cornerTopLeft\",\n \"cornerTopLeftShape\",\n \"cornerTopRight\",\n \"cornerTopRightShape\",\n \"cornerTopShape\",\n \"counterIncrement\",\n \"counterReset\",\n \"counterSet\",\n \"cue\",\n \"cueAfter\",\n \"cueBefore\",\n \"cursor\",\n \"cx\",\n \"cy\",\n \"d\",\n \"direction\",\n \"display\",\n \"dominantBaseline\",\n \"dynamicRangeLimit\",\n \"emptyCells\",\n \"eventTrigger\",\n \"eventTriggerName\",\n \"eventTriggerSource\",\n \"fieldSizing\",\n \"fill\",\n \"fillBreak\",\n \"fillColor\",\n \"fillImage\",\n \"fillOpacity\",\n \"fillOrigin\",\n \"fillPosition\",\n \"fillRepeat\",\n \"fillRule\",\n \"fillSize\",\n \"filter\",\n \"flex\",\n \"flexBasis\",\n \"flexDirection\",\n \"flexFlow\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexWrap\",\n \"float\",\n \"floatDefer\",\n \"floatOffset\",\n \"floatReference\",\n \"floodColor\",\n \"floodOpacity\",\n \"flowFrom\",\n \"flowInto\",\n \"flowTolerance\",\n \"font\",\n \"fontFamily\",\n \"fontFeatureSettings\",\n \"fontKerning\",\n \"fontLanguageOverride\",\n \"fontOpticalSizing\",\n \"fontPalette\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"fontStretch\",\n \"fontStyle\",\n \"fontSynthesis\",\n \"fontSynthesisPosition\",\n \"fontSynthesisSmallCaps\",\n \"fontSynthesisStyle\",\n \"fontSynthesisWeight\",\n \"fontVariant\",\n \"fontVariantAlternates\",\n \"fontVariantCaps\",\n \"fontVariantEastAsian\",\n \"fontVariantEmoji\",\n \"fontVariantLigatures\",\n \"fontVariantNumeric\",\n \"fontVariantPosition\",\n \"fontVariationSettings\",\n \"fontWeight\",\n \"fontWidth\",\n \"footnoteDisplay\",\n \"footnotePolicy\",\n \"forcedColorAdjust\",\n \"gap\",\n \"glyphOrientationVertical\",\n \"grid\",\n \"gridArea\",\n \"gridAutoColumns\",\n \"gridAutoFlow\",\n \"gridAutoRows\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnGap\",\n \"gridColumnStart\",\n \"gridGap\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowGap\",\n \"gridRowStart\",\n \"gridTemplate\",\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n \"hangingPunctuation\",\n \"height\",\n \"hyphenateCharacter\",\n \"hyphenateLimitChars\",\n \"hyphenateLimitLast\",\n \"hyphenateLimitLines\",\n \"hyphenateLimitZone\",\n \"hyphens\",\n \"imageOrientation\",\n \"imageRendering\",\n \"imageResolution\",\n \"initialLetter\",\n \"initialLetterAlign\",\n \"initialLetterWrap\",\n \"inlineSize\",\n \"inlineSizing\",\n \"inputSecurity\",\n \"inset\",\n \"insetBlock\",\n \"insetBlockEnd\",\n \"insetBlockStart\",\n \"insetInline\",\n \"insetInlineEnd\",\n \"insetInlineStart\",\n \"interactivity\",\n \"interestDelay\",\n \"interestDelayEnd\",\n \"interestDelayStart\",\n \"interpolateSize\",\n \"isolation\",\n \"itemCross\",\n \"itemDirection\",\n \"itemFlow\",\n \"itemPack\",\n \"itemTrack\",\n \"itemWrap\",\n \"justifyContent\",\n \"justifyItems\",\n \"justifySelf\",\n \"left\",\n \"letterSpacing\",\n \"lightingColor\",\n \"lineBreak\",\n \"lineClamp\",\n \"lineFitEdge\",\n \"lineGrid\",\n \"lineHeight\",\n \"lineHeightStep\",\n \"linePadding\",\n \"lineSnap\",\n \"linkParameters\",\n \"listStyle\",\n \"listStyleImage\",\n \"listStylePosition\",\n \"listStyleType\",\n \"margin\",\n \"marginBlock\",\n \"marginBlockEnd\",\n \"marginBlockStart\",\n \"marginBottom\",\n \"marginBreak\",\n \"marginInline\",\n \"marginInlineEnd\",\n \"marginInlineStart\",\n \"marginLeft\",\n \"marginRight\",\n \"marginTop\",\n \"marginTrim\",\n \"marker\",\n \"markerEnd\",\n \"markerMid\",\n \"markerSide\",\n \"markerStart\",\n \"mask\",\n \"maskBorder\",\n \"maskBorderMode\",\n \"maskBorderOutset\",\n \"maskBorderRepeat\",\n \"maskBorderSlice\",\n \"maskBorderSource\",\n \"maskBorderWidth\",\n \"maskClip\",\n \"maskComposite\",\n \"maskImage\",\n \"maskMode\",\n \"maskOrigin\",\n \"maskPosition\",\n \"maskRepeat\",\n \"maskSize\",\n \"maskType\",\n \"mathDepth\",\n \"mathShift\",\n \"mathStyle\",\n \"maxBlockSize\",\n \"maxHeight\",\n \"maxInlineSize\",\n \"maxLines\",\n \"maxWidth\",\n \"minBlockSize\",\n \"minHeight\",\n \"minInlineSize\",\n \"minIntrinsicSizing\",\n \"minWidth\",\n \"mixBlendMode\",\n \"navDown\",\n \"navLeft\",\n \"navRight\",\n \"navUp\",\n \"objectFit\",\n \"objectPosition\",\n \"objectViewBox\",\n \"offset\",\n \"offsetAnchor\",\n \"offsetDistance\",\n \"offsetPath\",\n \"offsetPosition\",\n \"offsetRotate\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"outline\",\n \"outlineColor\",\n \"outlineOffset\",\n \"outlineStyle\",\n \"outlineWidth\",\n \"overflow\",\n \"overflowAnchor\",\n \"overflowBlock\",\n \"overflowClipMargin\",\n \"overflowClipMarginBlock\",\n \"overflowClipMarginBlockEnd\",\n \"overflowClipMarginBlockStart\",\n \"overflowClipMarginBottom\",\n \"overflowClipMarginInline\",\n \"overflowClipMarginInlineEnd\",\n \"overflowClipMarginInlineStart\",\n \"overflowClipMarginLeft\",\n \"overflowClipMarginRight\",\n \"overflowClipMarginTop\",\n \"overflowInline\",\n \"overflowWrap\",\n \"overflowX\",\n \"overflowY\",\n \"overlay\",\n \"overscrollBehavior\",\n \"overscrollBehaviorBlock\",\n \"overscrollBehaviorInline\",\n \"overscrollBehaviorX\",\n \"overscrollBehaviorY\",\n \"padding\",\n \"paddingBlock\",\n \"paddingBlockEnd\",\n \"paddingBlockStart\",\n \"paddingBottom\",\n \"paddingInline\",\n \"paddingInlineEnd\",\n \"paddingInlineStart\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingTop\",\n \"page\",\n \"pageBreakAfter\",\n \"pageBreakBefore\",\n \"pageBreakInside\",\n \"paintOrder\",\n \"pause\",\n \"pauseAfter\",\n \"pauseBefore\",\n \"perspective\",\n \"perspectiveOrigin\",\n \"placeContent\",\n \"placeItems\",\n \"placeSelf\",\n \"pointerEvents\",\n \"pointerTimeline\",\n \"pointerTimelineAxis\",\n \"pointerTimelineName\",\n \"position\",\n \"positionAnchor\",\n \"positionArea\",\n \"positionTry\",\n \"positionTryFallbacks\",\n \"positionTryOrder\",\n \"positionVisibility\",\n \"printColorAdjust\",\n \"quotes\",\n \"r\",\n \"readingFlow\",\n \"readingOrder\",\n \"regionFragment\",\n \"resize\",\n \"rest\",\n \"restAfter\",\n \"restBefore\",\n \"right\",\n \"rotate\",\n \"rowGap\",\n \"rowRule\",\n \"rowRuleBreak\",\n \"rowRuleColor\",\n \"rowRuleEdgeInset\",\n \"rowRuleEdgeInsetEnd\",\n \"rowRuleEdgeInsetStart\",\n \"rowRuleInset\",\n \"rowRuleInsetEnd\",\n \"rowRuleInsetStart\",\n \"rowRuleInteriorInset\",\n \"rowRuleInteriorInsetEnd\",\n \"rowRuleInteriorInsetStart\",\n \"rowRuleStyle\",\n \"rowRuleWidth\",\n \"rubyAlign\",\n \"rubyMerge\",\n \"rubyOverhang\",\n \"rubyPosition\",\n \"rule\",\n \"ruleBreak\",\n \"ruleColor\",\n \"ruleEdgeInset\",\n \"ruleInset\",\n \"ruleInsetEnd\",\n \"ruleInsetStart\",\n \"ruleInteriorInset\",\n \"ruleOverlap\",\n \"ruleStyle\",\n \"ruleWidth\",\n \"rx\",\n \"ry\",\n \"scale\",\n \"scrollBehavior\",\n \"scrollInitialTarget\",\n \"scrollMargin\",\n \"scrollMarginBlock\",\n \"scrollMarginBlockEnd\",\n \"scrollMarginBlockStart\",\n \"scrollMarginBottom\",\n \"scrollMarginInline\",\n \"scrollMarginInlineEnd\",\n \"scrollMarginInlineStart\",\n \"scrollMarginLeft\",\n \"scrollMarginRight\",\n \"scrollMarginTop\",\n \"scrollMarkerGroup\",\n \"scrollPadding\",\n \"scrollPaddingBlock\",\n \"scrollPaddingBlockEnd\",\n \"scrollPaddingBlockStart\",\n \"scrollPaddingBottom\",\n \"scrollPaddingInline\",\n \"scrollPaddingInlineEnd\",\n \"scrollPaddingInlineStart\",\n \"scrollPaddingLeft\",\n \"scrollPaddingRight\",\n \"scrollPaddingTop\",\n \"scrollSnapAlign\",\n \"scrollSnapStop\",\n \"scrollSnapType\",\n \"scrollTargetGroup\",\n \"scrollTimeline\",\n \"scrollTimelineAxis\",\n \"scrollTimelineName\",\n \"scrollbarColor\",\n \"scrollbarGutter\",\n \"scrollbarWidth\",\n \"shapeImageThreshold\",\n \"shapeInside\",\n \"shapeMargin\",\n \"shapeOutside\",\n \"shapePadding\",\n \"shapeRendering\",\n \"shapeSubtract\",\n \"sliderOrientation\",\n \"spatialNavigationAction\",\n \"spatialNavigationContain\",\n \"spatialNavigationFunction\",\n \"speak\",\n \"speakAs\",\n \"stopColor\",\n \"stopOpacity\",\n \"stringSet\",\n \"stroke\",\n \"strokeAlign\",\n \"strokeAlignment\",\n \"strokeBreak\",\n \"strokeColor\",\n \"strokeDashCorner\",\n \"strokeDashJustify\",\n \"strokeDashadjust\",\n \"strokeDasharray\",\n \"strokeDashcorner\",\n \"strokeDashoffset\",\n \"strokeImage\",\n \"strokeLinecap\",\n \"strokeLinejoin\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeOrigin\",\n \"strokePosition\",\n \"strokeRepeat\",\n \"strokeSize\",\n \"strokeWidth\",\n \"tabSize\",\n \"tableLayout\",\n \"textAlign\",\n \"textAlignAll\",\n \"textAlignLast\",\n \"textAnchor\",\n \"textAutospace\",\n \"textBox\",\n \"textBoxEdge\",\n \"textBoxTrim\",\n \"textCombineUpright\",\n \"textDecoration\",\n \"textDecorationColor\",\n \"textDecorationInset\",\n \"textDecorationLine\",\n \"textDecorationSkip\",\n \"textDecorationSkipBox\",\n \"textDecorationSkipInk\",\n \"textDecorationSkipSelf\",\n \"textDecorationSkipSpaces\",\n \"textDecorationStyle\",\n \"textDecorationThickness\",\n \"textEmphasis\",\n \"textEmphasisColor\",\n \"textEmphasisPosition\",\n \"textEmphasisSkip\",\n \"textEmphasisStyle\",\n \"textGroupAlign\",\n \"textIndent\",\n \"textJustify\",\n \"textOrientation\",\n \"textOverflow\",\n \"textRendering\",\n \"textShadow\",\n \"textSizeAdjust\",\n \"textSpacing\",\n \"textSpacingTrim\",\n \"textTransform\",\n \"textUnderlineOffset\",\n \"textUnderlinePosition\",\n \"textWrap\",\n \"textWrapMode\",\n \"textWrapStyle\",\n \"timelineScope\",\n \"timelineTrigger\",\n \"timelineTriggerExitRange\",\n \"timelineTriggerExitRangeEnd\",\n \"timelineTriggerExitRangeStart\",\n \"timelineTriggerName\",\n \"timelineTriggerRange\",\n \"timelineTriggerRangeEnd\",\n \"timelineTriggerRangeStart\",\n \"timelineTriggerSource\",\n \"top\",\n \"touchAction\",\n \"transform\",\n \"transformBox\",\n \"transformOrigin\",\n \"transformStyle\",\n \"transition\",\n \"transitionBehavior\",\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\",\n \"translate\",\n \"triggerScope\",\n \"unicodeBidi\",\n \"userSelect\",\n \"vectorEffect\",\n \"verticalAlign\",\n \"viewTimeline\",\n \"viewTimelineAxis\",\n \"viewTimelineInset\",\n \"viewTimelineName\",\n \"viewTransitionClass\",\n \"viewTransitionGroup\",\n \"viewTransitionName\",\n \"viewTransitionScope\",\n \"visibility\",\n \"voiceBalance\",\n \"voiceDuration\",\n \"voiceFamily\",\n \"voicePitch\",\n \"voiceRange\",\n \"voiceRate\",\n \"voiceStress\",\n \"voiceVolume\",\n \"whiteSpace\",\n \"whiteSpaceCollapse\",\n \"whiteSpaceTrim\",\n \"widows\",\n \"width\",\n \"willChange\",\n \"wordBreak\",\n \"wordSpaceTransform\",\n \"wordSpacing\",\n \"wordWrap\",\n \"wrapAfter\",\n \"wrapBefore\",\n \"wrapFlow\",\n \"wrapInside\",\n \"wrapThrough\",\n \"writingMode\",\n \"x\",\n \"y\",\n \"zIndex\",\n \"zoom\",\n])\n","/**\n * CSS property handling and type definitions.\n * Provides type-safe mappings from JavaScript objects to CSS properties,\n * with automatic unit conversion and value formatting.\n * @module props\n */\n\nimport { Properties, ObsoleteProperties } from \"csstype\"\nimport { CssLike, CssVar } from \"@/values\"\nimport { propertyUnits, type PropertyWithUnit } from \"./propertyUnits.generated\"\nimport { knownPropertyNames } from \"./knownProperties.generated\"\n\n/** All non-obsolete CSS properties from csstype */\ntype Props = Required<Omit<Properties, keyof ObsoleteProperties>>\n\n/** Properties that have default units and are valid CSS properties */\ntype PropsWithUnit = PropertyWithUnit & keyof Props\n\n/**\n * Converts a kebab-case string to camelCase.\n */\nexport function kebabToCamel(str: string): string {\n return str.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())\n}\n\n/**\n * Converts a camelCase string to kebab-case.\n */\nexport function camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase())\n}\n\nfunction getUnitForProperty(propertyName: string): string | undefined {\n return propertyName in propertyUnits ? propertyUnits[propertyName as PropertyWithUnit] : undefined\n}\n\n/**\n * Converts a CSS-like value to its string representation.\n * For properties with known units, numbers are automatically suffixed.\n */\nfunction formatValue(value: CssLike<string | number>, propertyName: string, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") {\n const unit = getUnitForProperty(propertyName)\n if (unit === \"%\") return `${value * 100}${unit}`\n if (value === 0) return \"0\"\n return unit ? `${value}${unit}` : value.toString()\n }\n return formatValue(value.value, propertyName, maxDepth - 1)\n}\n\n/**\n * Checks if a property name is a CSS custom property (variable).\n */\nexport function isCssVariableName(key: string): key is CssVar {\n return key.startsWith(\"--\")\n}\n\n/**\n * Converts a CSS-like value to a string for use as a CSS variable value.\n * @param value - The value to convert (string, number, or wrapped value)\n * @param maxDepth - Maximum recursion depth for evaluating the value\n * @returns The string representation\n */\nexport function asVar(value: CssLike<string | number>, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n switch (typeof value) {\n case \"string\":\n return value\n case \"number\":\n return value.toString()\n default:\n return asVar(value.value, maxDepth - 1)\n }\n}\n\n/**\n * Checks if a property name is a known CSS property.\n */\nexport function isKnownPropertyName(key: string): key is keyof Props {\n return knownPropertyNames.has(key)\n}\n\n/**\n * Converts a value to a CSS property string.\n * Automatically appends units to numeric values for properties that require them.\n * @param value - The value to convert\n * @param key - The CSS property name\n * @returns The formatted CSS value string\n */\nexport function asKnownProp(value: unknown, key: keyof Props): string {\n return formatValue(value as CssLike<string | number>, key)\n}\n\n/**\n * Checks if a key represents a nested CSS selector.\n */\n//TODO: make better validation, provide human readable errors\nexport function isNestedSelector(key: string): key is NestedCssSelector {\n return key.includes(\"&\")\n}\n\n/** Known at-rule prefixes that mochi-css recognizes */\nconst AT_RULE_PREFIXES = [\"@media \", \"@container \", \"@supports \", \"@layer \"] as const\n\n/**\n * Checks if a key represents a CSS at-rule (media, container, supports, layer).\n */\nexport function isAtRuleKey(key: string): key is AtRuleKey {\n return AT_RULE_PREFIXES.some((p) => key.startsWith(p))\n}\n\n/** A nested CSS selector pattern containing the parent reference `&` */\nexport type NestedCssSelector = `${string}&${string}`\n\n/** A CSS at-rule key for media, container, supports, or layer queries */\nexport type AtRuleKey = `@media ${string}` | `@container ${string}` | `@supports ${string}` | `@layer ${string}`\n\ntype NestedStyleKeys = AtRuleKey | NestedCssSelector\n\n/**\n * Style properties without nesting support.\n * Includes all standard CSS properties with type-safe value converters,\n * plus CSS custom properties (variables).\n *\n * Properties with known units (e.g., width, height, padding) accept numbers\n * that are automatically converted with their default unit (e.g., px, ms).\n */\nexport type SimpleStyleProps = { [K in PropsWithUnit]?: CssLike<number | Props[K]> } & {\n [K in Exclude<keyof Props, PropsWithUnit>]?: CssLike<Props[K]>\n}\n\n/**\n * Full style properties type with support for nested selectors and media queries.\n * Extends SimpleStyleProps to allow recursive style definitions.\n *\n * @example\n * const styles: StyleProps = {\n * color: 'blue',\n * padding: 16,\n * '&:hover': { color: 'red' },\n * '@media (min-width: 768px)': { padding: 24 }\n * }\n */\nexport type StyleProps = SimpleStyleProps & { [K in NestedStyleKeys]?: StyleProps | CssLike<string | number> } & Record<\n string,\n unknown\n >\n\n/**\n * Converts a SimpleStyleProps object to a CSS properties record.\n * Transforms camelCase property names to kebab-case and applies value converters.\n * @param props - The style properties object\n * @returns A record of CSS property names (kebab-case) to string values\n * @example\n * cssFromProps({ backgroundColor: 'blue', padding: 16 })\n * // { 'background-color': 'blue', 'padding': '16px' }\n */\nexport function cssFromProps(\n props: SimpleStyleProps & Partial<Record<CssVar, CssLike<number | string>>>,\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(props)\n .map(([key, value]): [string, string] | undefined => {\n if (value === undefined) return undefined\n // transform variable\n if (isCssVariableName(key)) return [key, asVar(value as CssLike<string | number>)]\n // transform CSS prop\n if (isKnownPropertyName(key)) return [camelToKebab(key), asKnownProp(value, key)]\n return undefined\n })\n .filter((v) => v !== undefined),\n )\n}\n","/**\n * CSS selector building and manipulation utilities.\n * Handles nested selectors (using `&` placeholder) and CSS at-rules.\n * @module selector\n */\n\nimport { isAtRuleKey, isNestedSelector } from \"@/props\"\n\n/**\n * Immutable CSS selector builder that handles nested selectors and CSS at-rules.\n * Uses the `&` character as a placeholder for parent selector substitution.\n *\n * @example\n * const selector = new MochiSelector(['.button'])\n * selector.extend('&:hover').cssSelector // '.button:hover'\n * selector.wrap('@media (min-width: 768px)').atRules // ['@media (min-width: 768px)']\n */\nexport class MochiSelector {\n /**\n * Creates a new MochiSelector instance.\n * @param cssSelectors - Array of CSS selectors (may contain `&` placeholders)\n * @param atRules - Array of full CSS at-rule strings e.g. `\"@media (min-width: 768px)\"`\n */\n constructor(\n private readonly cssSelectors: string[] = [],\n public readonly atRules: string[] = [],\n ) {}\n\n /**\n * Gets the combined CSS selector string.\n * Multiple selectors are joined with commas.\n * @returns The CSS selector, or \"*\" if no selectors are defined\n */\n get cssSelector(): string {\n if (this.cssSelectors.length === 0) return \"*\"\n return this.cssSelectors.join(\", \")\n }\n\n /**\n * Substitutes all `&` placeholders with the given root selector.\n * @param root - The selector to replace `&` with\n * @returns A new MochiSelector with substituted selectors\n */\n substitute(root: string): MochiSelector {\n return new MochiSelector(\n this.cssSelectors.map((selector) => selector.replace(/&/g, root)),\n this.atRules,\n )\n }\n\n /**\n * Extends this selector by nesting a child selector.\n * The `&` in the child selector is replaced with each parent selector.\n * @param child - The child selector pattern (must contain `&`)\n * @returns A new MochiSelector with the extended selectors\n * @example\n * new MochiSelector(['.btn']).extend('&:hover') // '.btn:hover'\n * new MochiSelector(['.btn']).extend('& .icon') // '.btn .icon'\n */\n extend(child: string): MochiSelector {\n if (!isNestedSelector(child)) return this\n const children = MochiSelector.split(child)\n const selectors = this.cssSelectors.flatMap((parentSelector) =>\n children.map((childSelector) => {\n return childSelector.replace(/&/g, parentSelector)\n }),\n )\n return new MochiSelector(selectors, this.atRules)\n }\n\n /**\n * Wraps this selector with a CSS at-rule.\n * @param atRule - The full at-rule string (e.g. `\"@media (min-width: 768px)\"`)\n * @returns A new MochiSelector with the added at-rule, or unchanged if not a known at-rule\n * @example\n * selector.wrap('@media (min-width: 768px)') // Adds media query\n * selector.wrap('@container sidebar (min-width: 300px)') // Adds container query\n */\n wrap(atRule: string): MochiSelector {\n if (!isAtRuleKey(atRule)) return this\n return new MochiSelector(this.cssSelectors, [...this.atRules, atRule])\n }\n\n /**\n * Splits a comma-separated selector string into individual selectors.\n * @param selector - The selector string to split\n * @returns Array of individual selector strings\n */\n private static split(selector: string): string[] {\n return [selector]\n }\n}\n","/**\n * Hashing utilities for generating short, deterministic class names.\n * Uses djb2 algorithm for fast string hashing.\n * @module hash\n */\n\n/** Characters used for base-62 encoding (css-name safe variant of base-64) */\nconst hashBase = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\"\nconst base = hashBase.length\n\n/**\n * Converts a number to a base-62 string representation.\n * @param num - The number to convert\n * @param maxLength - Optional maximum length of the output string\n * @returns Base-62 encoded string representation of the number\n */\nexport function numberToBase62(num: number, maxLength?: number): string {\n let out = \"\"\n while (num > 0 && out.length < (maxLength ?? Infinity)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n out = hashBase[num % base]! + out\n num = Math.floor(num / base)\n }\n return out.length > 0 ? out : \"0\"\n}\n\n/**\n * Generates a short hash string from input using the djb2 algorithm.\n * Used to create unique, deterministic CSS class names from style content.\n * @param input - The string to hash\n * @param length - Maximum length of the hash output (default: 8)\n * @returns A short, css-safe hash string\n * @example\n * shortHash(\"color: red;\") // Returns something like \"A1b2C3d4\"\n */\nexport function shortHash(input: string, length = 8): string {\n // fast 32-bit integer hash (djb2 variant)\n let h = 5381\n for (let i = 0; i < input.length; i++) {\n h = (h * 33) ^ input.charCodeAt(i)\n }\n // force unsigned\n h >>>= 0\n\n return numberToBase62(h, length)\n}\n","/**\n * String comparison utilities for deterministic sorting.\n * Used internally to ensure consistent CSS output order.\n * @module compare\n */\n\n/**\n * Compares two strings lexicographically.\n */\nexport function compareString<T extends string>(a: T, b: T) {\n return a < b ? -1 : a === b ? 0 : 1\n}\n\n/**\n * Compares two tuples by their first element (string key).\n * Useful for sorting Object.entries() results.\n */\nexport function compareStringKey<T extends [string, unknown]>(a: T, b: T) {\n return compareString(a[0], b[0])\n}\n\n/**\n * Creates a comparator function for objects with a specific string property.\n * @param name - The property name to compare by\n * @returns A comparator function that compares objects by the specified property\n * @example\n * const items = [{ key: 'b' }, { key: 'a' }]\n * items.sort(stringPropComparator('key')) // [{ key: 'a' }, { key: 'b' }]\n */\nexport function stringPropComparator<N extends string>(name: N) {\n return <T extends Record<N, string>>(a: T, b: T) => compareString(a[name], b[name])\n}\n","/**\n * CSS object model for representing and serializing styles.\n * Converts JavaScript style objects into CSS blocks with proper\n * selector handling, nesting support, and deterministic output.\n * @module cssObject\n */\n\nimport {\n asKnownProp,\n asVar,\n camelToKebab,\n isCssVariableName,\n isKnownPropertyName,\n isAtRuleKey,\n isNestedSelector,\n StyleProps,\n} from \"@/props\"\nimport { shortHash } from \"@/hash\"\nimport { MochiSelector } from \"@/selector\"\nimport { compareStringKey, stringPropComparator } from \"@/compare\"\nimport { CssLike } from \"@/values\"\n\n/**\n * Represents a single CSS rule block with properties and a selector.\n * Handles conversion to CSS string format and hash generation.\n */\nexport class CssObjectSubBlock {\n /**\n * Creates a new CSS sub-block.\n * @param cssProps - Map of CSS property names (kebab-case) to values\n * @param selector - The selector this block applies to\n */\n constructor(\n public readonly cssProps: Record<string, string>,\n public readonly selector: MochiSelector,\n ) {}\n\n /**\n * Computes a deterministic hash of this block's CSS content.\n * Used for generating unique class names.\n */\n get hash(): string {\n const str = this.asCssString(\"&\")\n return shortHash(str)\n }\n\n /**\n * Converts this block to a CSS string.\n * Handles at-rule wrapping (media, container, supports, layer) if present.\n * Multiple at-rules are nested in order.\n * @param root - The root selector to substitute for `&`\n * @returns Formatted CSS string\n */\n asCssString(root: string): string {\n const selector = this.selector.substitute(root)\n const atRules = selector.atRules\n const innerIndent = \" \".repeat(atRules.length)\n\n const props = Object.entries(this.cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => `${innerIndent} ${k}: ${v};\\n`)\n .join(\"\")\n\n let result = `${innerIndent}${selector.cssSelector} {\\n${props}${innerIndent}}`\n\n for (let i = atRules.length - 1; i >= 0; i--) {\n const outerIndent = \" \".repeat(i)\n result = `${outerIndent}${atRules[i]} {\\n${result}\\n${outerIndent}}`\n }\n\n return result\n }\n\n /**\n * Parses StyleProps into an array of CSS sub-blocks.\n * Recursively processes nested selectors and media queries.\n * Output order is deterministic for consistent hash generation.\n *\n * @param props - The style properties to parse\n * @param selector - The parent selector context (defaults to `&`)\n * @returns Non-empty array of sub-blocks (main block first, then nested)\n */\n static fromProps(props: StyleProps, selector?: MochiSelector): [CssObjectSubBlock, ...CssObjectSubBlock[]] {\n selector ??= new MochiSelector([\"&\"])\n\n const cssProps: Record<string, string> = {}\n const propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[] = []\n\n for (const [key, value] of Object.entries(props)) {\n // skip undefined value\n if (value === undefined) continue\n\n // transform variable\n if (isCssVariableName(key)) {\n cssProps[key] = asVar(value as CssLike<string | number>)\n continue\n }\n\n // transform known CSS prop\n if (isKnownPropertyName(key)) {\n cssProps[camelToKebab(key)] = asKnownProp(value, key)\n continue\n }\n\n // transform nested and media selectors\n if (isNestedSelector(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.extend(key),\n })\n continue\n }\n\n // transform at-rule selector (media, container, supports, layer)\n if (isAtRuleKey(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.wrap(key),\n })\n continue\n }\n\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n console.warn(`[mochi-css] Unknown style property \"${key}\" will be ignored`)\n }\n }\n\n return [\n new CssObjectSubBlock(cssProps, selector),\n ...propsToProcess\n .toSorted(stringPropComparator(\"key\"))\n .flatMap(({ props, selector }) => CssObjectSubBlock.fromProps(props, selector)),\n ] as const\n }\n}\n\n/**\n * Represents an abstract CSS block definition.\n * Contains one or more sub-blocks for nested selectors and media queries.\n */\nexport class CssObjectBlock {\n /** The generated unique class name for this block */\n public readonly className: string\n /** All sub-blocks (main styles and nested/media rules) */\n public readonly subBlocks: CssObjectSubBlock[] = []\n\n /**\n * Creates a new CSS block from style properties.\n * Generates a unique class name based on the content hash.\n * @param styles - The style properties to compile\n */\n constructor(styles: StyleProps) {\n const blocks = CssObjectSubBlock.fromProps(styles)\n\n this.className = \"c\" + shortHash(blocks.map((b) => b.hash).join(\"+\"))\n this.subBlocks = blocks\n }\n\n /**\n * Gets the CSS class selector for this block.\n */\n get selector(): string {\n return `.${this.className}`\n }\n\n /**\n * Converts style block to a CSS string.\n * @param root - The root selector to scope styles to\n * @returns Complete CSS string for this block\n */\n asCssString(root: string): string {\n return this.subBlocks\n .map((b) => b.asCssString(new MochiSelector([root]).extend(`&.${this.className}`).cssSelector))\n .join(\"\\n\\n\")\n }\n}\n\nexport type AllVariants = Record<string, Record<string, StyleProps>>\nexport type DefaultVariants = Record<never, Record<string, StyleProps>>\n\n/**\n * A compound variant entry that applies styles when multiple variant conditions match.\n * Each entry specifies a set of variant conditions and a `css` property with styles\n * that apply only when all conditions are satisfied simultaneously.\n *\n * @template V - The variant definitions type\n *\n * @example\n * { color: 'red', size: 'large', css: { fontWeight: 'bold' } }\n */\nexport type CompoundVariant<V extends AllVariants> = {\n [K in keyof V]?: keyof V[K]\n} & { css: StyleProps }\n\n/**\n * Refines string literal types to their proper runtime types.\n * Converts \"true\"/\"false\" strings to boolean literals.\n */\ntype RefineVariantType<T extends string> = T extends \"true\"\n ? true\n : T extends \"false\"\n ? false\n : T extends string\n ? T\n : string\n\n/**\n * Props for defining variants in a style object.\n * @template V - The variant definitions type\n */\nexport type VariantProps<V extends AllVariants> = {\n /** Variant definitions mapping names to options to styles */\n variants?: V\n /** Default variant selections for when not explicitly provided */\n defaultVariants?: { [K in keyof V]?: keyof V[K] extends string ? RefineVariantType<keyof V[K] & string> : never }\n /** Compound variant definitions that apply when multiple variant conditions match */\n compoundVariants?: CompoundVariant<V>[]\n}\n\n/** Combined type for style props with optional variants */\nexport type MochiCSSProps<V extends AllVariants> = Omit<\n StyleProps,\n \"variants\" | \"compoundVariants\" | \"defaultVariants\"\n> &\n VariantProps<V>\n\n/** Utility type to override properties of A with properties of B */\ntype Override<A extends object, B extends object> = B & Omit<A, keyof B>\n\n/** Recursively merges variant types from a tuple, with later types overriding earlier */\nexport type MergeCSSVariants<V extends AllVariants[]> = V extends [\n infer V1 extends AllVariants,\n ...infer VRest extends AllVariants[],\n]\n ? Override<V1, MergeCSSVariants<VRest>>\n : DefaultVariants\n\n/** Refines all values in a string record to their proper variant types */\ntype RefineVariantTypes<V extends Record<string, string>> = { [K in keyof V]: RefineVariantType<V[K]> }\n\n/** Extracts and refines variant option types from a DefaultVariants definition */\nexport type RefineVariants<T extends AllVariants> = RefineVariantTypes<{ [K in keyof T]: keyof T[K] & string }>\n\n/**\n * Complete CSS object representation with main and variant styles.\n *\n * @template V - The variant definitions type\n *\n * @example\n * const obj = new CSSObject({\n * color: 'blue',\n * variants: {\n * size: {\n * small: { fontSize: 12 },\n * large: { fontSize: 18 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * obj.asCssString() // Returns complete CSS with all variants\n */\nexport class CSSObject<V extends AllVariants = DefaultVariants> {\n /** The main style block (non-variant styles) */\n public readonly mainBlock: CssObjectBlock\n /** Compiled blocks for each variant option */\n public readonly variantBlocks: { [K in keyof V & string]: Record<keyof V[K] & string, CssObjectBlock> }\n /** Default variant selections */\n public readonly variantDefaults: Partial<RefineVariants<V>>\n /** Compound variant conditions and their parsed sub-blocks */\n public readonly compoundVariants: { conditions: Record<string, string>; subBlocks: CssObjectSubBlock[] }[]\n\n /**\n * Creates a new CSSObject from style props.\n * Compiles main styles and all variant options into CSS blocks.\n */\n public constructor({ variants, defaultVariants, compoundVariants, ...props }: MochiCSSProps<V>) {\n this.mainBlock = new CssObjectBlock(props as StyleProps)\n this.variantBlocks = {} as typeof this.variantBlocks\n this.variantDefaults = defaultVariants ?? {}\n this.compoundVariants = []\n\n if (variants) {\n for (const variantGroupName in variants) {\n this.variantBlocks[variantGroupName] =\n {} as (typeof this.variantBlocks)[keyof typeof this.variantBlocks]\n const variantGroup = variants[variantGroupName]\n for (const variantItemName in variantGroup) {\n this.variantBlocks[variantGroupName][variantItemName] = new CssObjectBlock(\n variantGroup[variantItemName] ?? {},\n )\n }\n }\n }\n\n if (compoundVariants) {\n for (const compound of compoundVariants) {\n const { css: styles, ...conditions } = compound\n this.compoundVariants.push({\n conditions: conditions as Record<string, string>,\n subBlocks: CssObjectSubBlock.fromProps(styles),\n })\n }\n }\n }\n\n /**\n * Serializes the entire CSS object to a CSS string.\n * Outputs main block first, then all variant blocks in sorted order.\n * @returns Complete CSS string ready for injection into a stylesheet\n */\n public asCssString(): string {\n return [\n this.mainBlock.asCssString(this.mainBlock.selector),\n ...Object.entries(this.variantBlocks)\n .toSorted(compareStringKey)\n .flatMap(([_, b]) => Object.entries(b).toSorted(compareStringKey))\n .map(([_, b]) => b.asCssString(this.mainBlock.selector)),\n ...this.compoundVariants.flatMap(({ conditions, subBlocks }) => {\n const selectorParts: string[] = []\n for (const [variantName, optionName] of Object.entries(conditions).toSorted(compareStringKey)) {\n const selector = this.variantBlocks[variantName]?.[optionName]?.selector\n if (selector === undefined) return []\n selectorParts.push(selector)\n }\n const combinedSelector = `${this.mainBlock.selector}${selectorParts.join(\"\")}`\n return subBlocks.map((b) => b.asCssString(combinedSelector))\n }),\n ].join(\"\\n\\n\")\n }\n}\n","/**\n * Core CSS-in-JS runtime for generating and applying styles.\n * Provides the main `css` function and `MochiCSS` class for style management.\n * @module css\n */\n\nimport clsx from \"clsx\"\nimport { CSSObject, AllVariants, DefaultVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/**\n * Runtime representation of a CSS style definition with variant support.\n * Holds generated class names and provides methods to compute the final\n * className string based on selected variants.\n *\n * @template V - The variant definitions type mapping variant names to their options\n *\n * @example\n * const styles = MochiCSS.from(new CSSObject({\n * color: 'blue',\n * variants: { size: { small: { fontSize: 12 }, large: { fontSize: 18 } } }\n * }))\n * styles.variant({ size: 'large' }) // Returns combined class names\n */\nexport class MochiCSS<V extends AllVariants = DefaultVariants> {\n /**\n * Creates a new MochiCSS instance.\n * @param classNames - Base class names to always include\n * @param variantClassNames - Mapping of variant names to option class names\n * @param defaultVariants - Default variant selections when not specified\n */\n constructor(\n public readonly classNames: string[],\n public readonly variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } },\n public readonly defaultVariants: Partial<RefineVariants<V>>,\n ) {}\n\n /**\n * Computes the final className string based on variant selections.\n * Compound variants are handled purely via CSS combined selectors,\n * so no runtime matching is needed here.\n * @param props - Variant selections\n * @returns Combined className string for use in components\n */\n variant(props: Partial<RefineVariants<V>>): string {\n const keys = new Set<keyof V & string>(\n [...Object.keys(props), ...Object.keys(this.defaultVariants)].filter((k) => k in this.variantClassNames),\n )\n\n return clsx(\n this.classNames,\n ...keys.values().map((k) => {\n const variantGroup = this.variantClassNames[k]\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!variantGroup) return false\n\n const variantKey = ((k in props ? props[k] : undefined) ?? this.defaultVariants[k])?.toString()\n if (variantKey == null) return false\n\n const selectedClassname = variantGroup[variantKey]\n if (selectedClassname !== undefined) return selectedClassname\n\n const defaultKey = this.defaultVariants[k]\n if (defaultKey == null) return false\n\n return variantGroup[defaultKey.toString()]\n }),\n )\n }\n\n /**\n * Creates a MochiCSS instance from a CSSObject.\n * Extracts class names from the compiled CSS blocks.\n * @template V - The variant definitions type\n * @param object - The compiled CSSObject to extract from\n * @returns A new MochiCSS instance with the extracted class names\n */\n static from<V extends AllVariants = DefaultVariants>(object: CSSObject<V>): MochiCSS<V> {\n return new MochiCSS<V>(\n [object.mainBlock.className],\n Object.fromEntries(\n Object.entries(object.variantBlocks).map(([key, variantOptions]) => {\n return [\n key,\n Object.fromEntries(\n Object.entries(variantOptions).map(([optionKey, block]) => {\n return [optionKey, block.className]\n }),\n ),\n ]\n }),\n ) as { [K in keyof V]: { [P in keyof V[K]]: string } },\n object.variantDefaults,\n )\n }\n}\n\n/**\n * Creates a CSS style definition.\n * The primary API for defining styles in Mochi-CSS.\n *\n * @template V - Tuple of variant definition types\n * @param props - One or more style objects or existing MochiCSS instances to merge\n * @returns A MochiCSS instance with all styles and variants combined\n *\n * @example\n * // Simple usage\n * const button = css({ padding: 8, borderRadius: 4 })\n *\n * @example\n * // With variants\n * const button = css({\n * padding: 8,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * button.variant({ size: 'large' }) // Get class names for large size\n *\n * @example\n * // Merging multiple styles\n * const combined = css(baseStyles, additionalStyles)\n */\nconst emptyMochiCSS = new MochiCSS<AllVariants>([], {}, {})\n\n/**\n * Merges multiple MochiCSS instances into a single one, combining their\n * class names, variant class names, and default variants.\n * @param instances - The MochiCSS instances to merge\n * @returns A new MochiCSS instance with all styles combined\n */\nexport function mergeMochiCss<V extends AllVariants[]>(\n instances: MochiCSS<AllVariants>[],\n): MochiCSS<MergeCSSVariants<V>> {\n if (instances.length === 0) return emptyMochiCSS as MochiCSS<MergeCSSVariants<V>>\n\n return new MochiCSS<AllVariants>(\n instances.flatMap((c) => c.classNames),\n instances.reduce((a, b) => Object.assign(a, b.variantClassNames), {}),\n instances.reduce((a, b) => Object.assign(a, b.defaultVariants), {}),\n ) as MochiCSS<MergeCSSVariants<V>>\n}\n\nexport function css<V extends AllVariants[]>(\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> | MochiCSS }\n): MochiCSS<MergeCSSVariants<V>> {\n const cssToMerge: MochiCSS<AllVariants>[] = []\n for (const p of props) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (p == null || typeof p !== \"object\") continue\n if (p instanceof MochiCSS) {\n cssToMerge.push(p)\n } else {\n cssToMerge.push(MochiCSS.from(new CSSObject<AllVariants>(p)))\n }\n }\n\n return mergeMochiCss(cssToMerge)\n}\n","/**\n * React styled component utilities.\n * Creates styled components with CSS-in-JS support and variant props.\n * @module styled\n */\n\nimport { ComponentProps, ComponentType, createElement, FC, HTMLElementType } from \"react\"\nimport { css } from \"@/css\"\nimport clsx from \"clsx\"\nimport { AllVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/** Props added by MochiCSS to styled components */\ntype MochiProps<V extends AllVariants[]> = {\n className?: string\n} & Partial<RefineVariants<MergeCSSVariants<V>>>\n\n/** Minimal interface for components that accept className */\ntype Cls = { className?: string }\n\n/**\n * Creates a styled React component with CSS-in-JS support and variant props.\n * Similar to styled-components or Stitches, but with zero runtime overhead.\n *\n * @template T - The base element type or component type\n * @template V - The variant definitions tuple type\n * @param target - The HTML element tag name or React component to style\n * @param props - One or more style objects with optional variants\n * @returns A React functional component with merged props and variant support\n *\n * @example\n * const Button = styled('button', {\n * padding: 8,\n * borderRadius: 4,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * },\n * variant: {\n * primary: { backgroundColor: 'blue' },\n * secondary: { backgroundColor: 'gray' }\n * }\n * }\n * })\n *\n * // Usage: <Button size=\"large\" variant=\"primary\">Click me</Button>\n */\n//TODO: Move to dedicated \"styled\" package\nexport function styled<T extends HTMLElementType | ComponentType<Cls>, V extends AllVariants[]>(\n target: T,\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> }\n): FC<Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>> {\n const styles = css<V>(...props)\n return ({ className, ...p }: Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>) =>\n //TODO: pick only variant props from p\n //TODO: omit variant props in p\n createElement(target, {\n className: clsx(styles.variant(p as unknown as Parameters<typeof styles.variant>[0]), className),\n ...p,\n })\n}\n","import { shortHash } from \"@/hash\"\nimport { cssFromProps, SimpleStyleProps } from \"@/props\"\nimport { compareStringKey } from \"@/compare\"\n\nexport type KeyframeStops = Record<string, SimpleStyleProps>\n\nexport class KeyframesObject {\n public readonly name: string\n private readonly body: string\n\n constructor(stops: KeyframeStops) {\n this.body = KeyframesObject.generateBody(stops)\n this.name = \"kf\" + shortHash(this.body)\n }\n\n asCssString(): string {\n return `@keyframes ${this.name} {\\n${this.body}\\n}`\n }\n\n private static generateBody(stops: KeyframeStops): string {\n return Object.entries(stops)\n .toSorted(compareStringKey)\n .map(([stopKey, props]) => {\n const cssProps = cssFromProps(props)\n const propsStr = Object.entries(cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => ` ${k}: ${v};`)\n .join(\"\\n\")\n return ` ${stopKey} {\\n${propsStr}\\n }`\n })\n .join(\"\\n\\n\")\n }\n}\n","import { KeyframesObject, type KeyframeStops } from \"@/keyframesObject\"\nexport type { KeyframeStops } from \"@/keyframesObject\"\n\nexport class MochiKeyframes {\n constructor(public readonly name: string) {}\n\n toString(): string {\n return this.name\n }\n\n get value(): string {\n return this.name\n }\n\n static from(object: KeyframesObject): MochiKeyframes {\n return new MochiKeyframes(object.name)\n }\n}\n\nexport function keyframes(stops: KeyframeStops): MochiKeyframes {\n return MochiKeyframes.from(new KeyframesObject(stops))\n}\n","import { CssObjectSubBlock } from \"@/cssObject\"\nimport { compareStringKey } from \"@/compare\"\nimport { StyleProps } from \"@/props\"\n\nexport type GlobalCssStyles = Record<string, StyleProps>\n\n/**\n * CSS object model for global (non-scoped) styles.\n * Accepts a map of CSS selectors to style objects and serializes them\n * as plain CSS rules without class name scoping.\n *\n * @example\n * const obj = new GlobalCssObject({\n * body: { margin: 0 },\n * 'h1': { fontSize: 32 },\n * })\n * obj.asCssString() // \"body {\\n margin: 0;\\n}\\n\\nh1 {\\n font-size: 32px;\\n}\"\n */\nexport class GlobalCssObject {\n private readonly rules: { selector: string; subBlocks: CssObjectSubBlock[] }[]\n\n constructor(styles: GlobalCssStyles) {\n this.rules = Object.entries(styles)\n .toSorted(compareStringKey)\n .map(([selector, props]) => ({\n selector,\n subBlocks: [...CssObjectSubBlock.fromProps(props)],\n }))\n }\n\n asCssString(): string {\n return this.rules\n .flatMap(({ selector, subBlocks }) => subBlocks.map((b) => b.asCssString(selector)))\n .join(\"\\n\\n\")\n }\n}\n","import type { GlobalCssStyles } from \"@/globalCssObject\"\nexport type { GlobalCssStyles } from \"@/globalCssObject\"\n\n/**\n * Creates a global CSS definition.\n * Styles are not scoped to any class — they apply to all matching elements.\n *\n * @param styles - Map of CSS selectors to style objects\n *\n * @example\n * globalCss({\n * 'body': { margin: 0, padding: 0 },\n * '*, *::before, *::after': { boxSizing: 'border-box' },\n * })\n */\nexport function globalCss(styles: GlobalCssStyles): void {\n void styles // mark as used\n}\n","/**\n * Helper builders for CSS at-rule keys.\n * Provides a typed, ergonomic API for constructing @media, @container, and @supports rules.\n * @module query\n */\n\nimport type { AtRuleKey } from \"@/props\"\n\n/**\n * Wraps a condition in parentheses if not already wrapped.\n */\nfunction wrapParens(condition: string): string {\n const trimmed = condition.trim()\n if (trimmed.startsWith(\"(\") && trimmed.endsWith(\")\")) return trimmed\n return `(${trimmed})`\n}\n\n// ─── @media ──────────────────────────────────────────────────────────────────\n\ninterface MediaHelper {\n /** `@media (condition)` */\n (condition: string): AtRuleKey & `@media ${string}`\n /** `@media (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (a), (b), …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: dark)` */\n readonly dark: AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: light)` */\n readonly light: AtRuleKey & `@media ${string}`\n /** `@media (prefers-reduced-motion: no-preference)` */\n readonly motion: AtRuleKey & `@media ${string}`\n /** `@media print` */\n readonly print: AtRuleKey & `@media ${string}`\n}\n\nfunction mediaFn(condition: string): AtRuleKey & `@media ${string}` {\n return `@media ${wrapParens(condition)}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\", \")}` as AtRuleKey & `@media ${string}`\n}\n\nObject.defineProperties(mediaFn, {\n dark: { get: () => \"@media (prefers-color-scheme: dark)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n light: { get: () => \"@media (prefers-color-scheme: light)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n motion: {\n get: () => \"@media (prefers-reduced-motion: no-preference)\" as AtRuleKey & `@media ${string}`,\n enumerable: true,\n },\n print: { get: () => \"@media print\" as AtRuleKey & `@media ${string}`, enumerable: true },\n})\n\n/** Helper for constructing `@media` at-rule keys. */\nexport const media = mediaFn as MediaHelper\n\n// ─── @container ──────────────────────────────────────────────────────────────\n\ninterface ContainerHelper {\n /** `@container (condition)` — anonymous container */\n (condition: string): AtRuleKey & `@container ${string}`\n /** `@container name (condition)` — named container */\n named(name: string, condition: string): AtRuleKey & `@container ${string}`\n}\n\nfunction containerFn(condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\ncontainerFn.named = function (name: string, condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${name} ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\n/** Helper for constructing `@container` at-rule keys. */\nexport const container = containerFn as ContainerHelper\n\n// ─── @supports ───────────────────────────────────────────────────────────────\n\ninterface SupportsHelper {\n /** `@supports (declaration)` */\n (condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports not (declaration)` */\n not(condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n /** `@supports (a) or (b) or …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n}\n\nfunction supportsFn(condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.not = function (condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports not ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" or \")}` as AtRuleKey & `@supports ${string}`\n}\n\n/** Helper for constructing `@supports` at-rule keys. */\nexport const supports = supportsFn as SupportsHelper\n"],"mappings":";;;;;;;;;;;;;AAiBA,IAAa,QAAb,MAAmB;;;;;CAKf,YAAY,AAAgBA,MAAc;EAAd;;;;;;CAM5B,IAAI,WAAmB;AACnB,SAAO,KAAK,KAAK;;;;;;CAOrB,IAAI,QAAmB;AACnB,SAAO,OAAO,KAAK,SAAS;;;;;CAMhC,WAAmB;AACf,SAAO,KAAK;;;;;;;;;;;;AAapB,SAAgB,YAAY,MAAqB;AAC7C,QAAO,IAAI,MAAM,KAAK;;;;;ACvD1B,MAAa,gBAAgB;CACzB,WAAW;CACX,gBAAgB;CAChB,mBAAmB;CACnB,gBAAgB;CAChB,sBAAsB;CACtB,mBAAmB;CACnB,qBAAqB;CACrB,YAAY;CACZ,oBAAoB;CACpB,yBAAyB;CACzB,0BAA0B;CAC1B,qBAAqB;CACrB,qBAAqB;CACrB,gBAAgB;CAChB,eAAe;CACf,eAAe;CACf,WAAW;CACX,WAAW;CACX,eAAe;CACf,QAAQ;CACR,aAAa;CACb,iBAAiB;CACjB,gBAAgB;CAChB,oBAAoB;CACpB,sBAAsB;CACtB,qBAAqB;CACrB,kBAAkB;CAClB,sBAAsB;CACtB,wBAAwB;CACxB,uBAAuB;CACvB,kBAAkB;CAClB,cAAc;CACd,kBAAkB;CAClB,wBAAwB;CACxB,oBAAoB;CACpB,yBAAyB;CACzB,mBAAmB;CACnB,YAAY;CACZ,oBAAoB;CACpB,sBAAsB;CACtB,aAAa;CACb,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB,cAAc;CACd,kBAAkB;CAClB,iBAAiB;CACjB,qBAAqB;CACrB,uBAAuB;CACvB,sBAAsB;CACtB,mBAAmB;CACnB,uBAAuB;CACvB,yBAAyB;CACzB,wBAAwB;CACxB,mBAAmB;CACnB,YAAY;CACZ,gBAAgB;CAChB,kBAAkB;CAClB,iBAAiB;CACjB,aAAa;CACb,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,mBAAmB;CACnB,kBAAkB;CAClB,eAAe;CACf,sBAAsB;CACtB,wBAAwB;CACxB,WAAW;CACX,eAAe;CACf,qBAAqB;CACrB,iBAAiB;CACjB,sBAAsB;CACtB,gBAAgB;CAChB,aAAa;CACb,QAAQ;CACR,WAAW;CACX,eAAe;CACf,iBAAiB;CACjB,iBAAiB;CACjB,WAAW;CACX,cAAc;CACd,YAAY;CACZ,qBAAqB;CACrB,wBAAwB;CACxB,0BAA0B;CAC1B,iBAAiB;CACjB,oBAAoB;CACpB,sBAAsB;CACtB,yBAAyB;CACzB,4BAA4B;CAC5B,8BAA8B;CAC9B,iBAAiB;CACjB,SAAS;CACT,aAAa;CACb,2BAA2B;CAC3B,wBAAwB;CACxB,4BAA4B;CAC5B,sBAAsB;CACtB,uBAAuB;CACvB,QAAQ;CACR,gBAAgB;CAChB,kBAAkB;CAClB,cAAc;CACd,kBAAkB;CAClB,mBAAmB;CACnB,cAAc;CACd,gBAAgB;CAChB,iBAAiB;CACjB,mBAAmB;CACnB,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB,kBAAkB;CAClB,WAAW;CACX,eAAe;CACf,gBAAgB;CAChB,IAAI;CACJ,IAAI;CACJ,aAAa;CACb,cAAc;CACd,UAAU;CACV,MAAM;CACN,WAAW;CACX,aAAa;CACb,cAAc;CACd,eAAe;CACf,MAAM;CACN,UAAU;CACV,aAAa;CACb,WAAW;CACX,WAAW;CACX,KAAK;CACL,MAAM;CACN,iBAAiB;CACjB,cAAc;CACd,eAAe;CACf,SAAS;CACT,YAAY;CACZ,cAAc;CACd,qBAAqB;CACrB,kBAAkB;CAClB,QAAQ;CACR,oBAAoB;CACpB,kBAAkB;CAClB,iBAAiB;CACjB,mBAAmB;CACnB,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,eAAe;CACf,iBAAiB;CACjB,aAAa;CACb,gBAAgB;CAChB,kBAAkB;CAClB,eAAe;CACf,kBAAkB;CAClB,oBAAoB;CACpB,UAAU;CACV,MAAM;CACN,eAAe;CACf,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,QAAQ;CACR,aAAa;CACb,gBAAgB;CAChB,kBAAkB;CAClB,cAAc;CACd,cAAc;CACd,iBAAiB;CACjB,mBAAmB;CACnB,YAAY;CACZ,aAAa;CACb,WAAW;CACX,MAAM;CACN,YAAY;CACZ,kBAAkB;CAClB,iBAAiB;CACjB,iBAAiB;CACjB,cAAc;CACd,UAAU;CACV,cAAc;CACd,WAAW;CACX,eAAe;CACf,UAAU;CACV,cAAc;CACd,WAAW;CACX,eAAe;CACf,UAAU;CACV,gBAAgB;CAChB,QAAQ;CACR,cAAc;CACd,gBAAgB;CAChB,gBAAgB;CAChB,cAAc;CACd,SAAS;CACT,SAAS;CACT,eAAe;CACf,cAAc;CACd,oBAAoB;CACpB,yBAAyB;CACzB,4BAA4B;CAC5B,8BAA8B;CAC9B,0BAA0B;CAC1B,0BAA0B;CAC1B,6BAA6B;CAC7B,+BAA+B;CAC/B,wBAAwB;CACxB,yBAAyB;CACzB,uBAAuB;CACvB,SAAS;CACT,cAAc;CACd,iBAAiB;CACjB,mBAAmB;CACnB,eAAe;CACf,eAAe;CACf,kBAAkB;CAClB,oBAAoB;CACpB,aAAa;CACb,cAAc;CACd,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,GAAG;CACH,MAAM;CACN,WAAW;CACX,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,kBAAkB;CAClB,qBAAqB;CACrB,uBAAuB;CACvB,cAAc;CACd,iBAAiB;CACjB,mBAAmB;CACnB,sBAAsB;CACtB,yBAAyB;CACzB,2BAA2B;CAC3B,cAAc;CACd,MAAM;CACN,eAAe;CACf,WAAW;CACX,cAAc;CACd,gBAAgB;CAChB,mBAAmB;CACnB,WAAW;CACX,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,cAAc;CACd,mBAAmB;CACnB,sBAAsB;CACtB,wBAAwB;CACxB,oBAAoB;CACpB,oBAAoB;CACpB,uBAAuB;CACvB,yBAAyB;CACzB,kBAAkB;CAClB,mBAAmB;CACnB,iBAAiB;CACjB,eAAe;CACf,oBAAoB;CACpB,uBAAuB;CACvB,yBAAyB;CACzB,qBAAqB;CACrB,qBAAqB;CACrB,wBAAwB;CACxB,0BAA0B;CAC1B,mBAAmB;CACnB,oBAAoB;CACpB,kBAAkB;CAClB,qBAAqB;CACrB,aAAa;CACb,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,SAAS;CACT,gBAAgB;CAChB,qBAAqB;CACrB,yBAAyB;CACzB,YAAY;CACZ,YAAY;CACZ,gBAAgB;CAChB,qBAAqB;CACrB,iBAAiB;CACjB,0BAA0B;CAC1B,6BAA6B;CAC7B,+BAA+B;CAC/B,sBAAsB;CACtB,yBAAyB;CACzB,2BAA2B;CAC3B,KAAK;CACL,iBAAiB;CACjB,YAAY;CACZ,iBAAiB;CACjB,oBAAoB;CACpB,WAAW;CACX,eAAe;CACf,cAAc;CACd,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,OAAO;CACP,aAAa;CACb,GAAG;CACH,GAAG;CACH,MAAM;CACT;;;;ACnUD,MAAaC,qBAA0C,IAAI,IAAI;CAC3D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH,CAAC;;;;;;;AC/sBF,SAAgB,aAAa,KAAqB;AAC9C,QAAO,IAAI,QAAQ,WAAW,MAAM,MAAM,EAAE,aAAa,CAAC;;AAG9D,SAAS,mBAAmB,cAA0C;AAClE,QAAO,gBAAgB,gBAAgB,cAAc,gBAAoC;;;;;;AAO7F,SAAS,YAAY,OAAiC,cAAsB,WAAW,IAAY;AAC/F,KAAI,YAAY,EAAG,QAAO;AAC1B,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,UAAU;EAC3B,MAAM,OAAO,mBAAmB,aAAa;AAC7C,MAAI,SAAS,IAAK,QAAO,GAAG,QAAQ,MAAM;AAC1C,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,OAAO,GAAG,QAAQ,SAAS,MAAM,UAAU;;AAEtD,QAAO,YAAY,MAAM,OAAO,cAAc,WAAW,EAAE;;;;;AAM/D,SAAgB,kBAAkB,KAA4B;AAC1D,QAAO,IAAI,WAAW,KAAK;;;;;;;;AAS/B,SAAgB,MAAM,OAAiC,WAAW,IAAY;AAC1E,KAAI,YAAY,EAAG,QAAO;AAC1B,SAAQ,OAAO,OAAf;EACI,KAAK,SACD,QAAO;EACX,KAAK,SACD,QAAO,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"}
1
+ {"version":3,"file":"index.mjs","names":["name: string","knownPropertyNames: ReadonlySet<string>","cssSelectors: string[]","atRules: string[]","cssProps: Record<string, string>","selector: MochiSelector","propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[]","props","selector","selectorParts: string[]","classNames: string[]","variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } }","defaultVariants: Partial<RefineVariants<V>>","cssToMerge: MochiCSS<AllVariants>[]","name: string"],"sources":["../src/token.ts","../src/propertyUnits.generated.ts","../src/knownProperties.generated.ts","../src/props.ts","../src/selector.ts","../src/hash.ts","../src/compare.ts","../src/cssObject.ts","../src/css.ts","../src/styled.ts","../src/keyframesObject.ts","../src/keyframes.ts","../src/globalCssObject.ts","../src/globalCss.ts","../src/query.ts"],"sourcesContent":["/**\n * CSS custom property (design token) utilities.\n * Provides type-safe access to CSS variables with proper `var()` syntax.\n * @module token\n */\n\nimport { CssVar, CssVarVal } from \"@/values\"\n\n/**\n * Represents a CSS custom property (design token) with type information.\n * Provides convenient access to both the variable name and its `var()` reference.\n * @template T - The expected value type of the token (for type checking)\n * @example\n * const primaryColor = new Token<string>('primary-color')\n * primaryColor.variable // '--primary-color'\n * primaryColor.value // 'var(--primary-color)'\n */\nexport class Token {\n /**\n * Creates a new CSS token.\n * @param name - The token name (without the `--` prefix)\n */\n constructor(public readonly name: string) {}\n\n /**\n * Gets the CSS custom property name (with `--` prefix).\n * Use this when defining the variable.\n */\n get variable(): CssVar {\n return `--${this.name}`\n }\n\n /**\n * Gets the CSS `var()` reference to this token.\n * Use this when consuming the variable value.\n */\n get value(): CssVarVal {\n return `var(${this.variable})`\n }\n\n /**\n * Returns the variable name for string coercion.\n */\n toString(): CssVar {\n return this.variable\n }\n}\n\n/**\n * Creates a new CSS design token.\n * @template T - The expected value type of the token\n * @param name - The token name (without the `--` prefix)\n * @returns A new Token instance\n * @example\n * const spacing = createToken<number>('spacing-md')\n * // Use in styles: { gap: spacing.value }\n */\nexport function createToken(name: string): Token {\n return new Token(name)\n}\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const propertyUnits = {\n animation: \"ms\",\n animationDelay: \"ms\",\n animationDuration: \"ms\",\n animationRange: \"px\",\n animationRangeCenter: \"px\",\n animationRangeEnd: \"px\",\n animationRangeStart: \"px\",\n background: \"px\",\n backgroundPosition: \"px\",\n backgroundPositionBlock: \"px\",\n backgroundPositionInline: \"px\",\n backgroundPositionX: \"px\",\n backgroundPositionY: \"px\",\n backgroundSize: \"px\",\n backgroundTbd: \"px\",\n baselineShift: \"px\",\n blockSize: \"px\",\n blockStep: \"px\",\n blockStepSize: \"px\",\n border: \"px\",\n borderBlock: \"px\",\n borderBlockClip: \"px\",\n borderBlockEnd: \"px\",\n borderBlockEndClip: \"px\",\n borderBlockEndRadius: \"px\",\n borderBlockEndWidth: \"px\",\n borderBlockStart: \"px\",\n borderBlockStartClip: \"px\",\n borderBlockStartRadius: \"px\",\n borderBlockStartWidth: \"px\",\n borderBlockWidth: \"px\",\n borderBottom: \"px\",\n borderBottomClip: \"px\",\n borderBottomLeftRadius: \"px\",\n borderBottomRadius: \"px\",\n borderBottomRightRadius: \"px\",\n borderBottomWidth: \"px\",\n borderClip: \"px\",\n borderEndEndRadius: \"px\",\n borderEndStartRadius: \"px\",\n borderImage: \"%\",\n borderImageOutset: \"px\",\n borderImageSlice: \"%\",\n borderImageWidth: \"px\",\n borderInline: \"px\",\n borderInlineClip: \"px\",\n borderInlineEnd: \"px\",\n borderInlineEndClip: \"px\",\n borderInlineEndRadius: \"px\",\n borderInlineEndWidth: \"px\",\n borderInlineStart: \"px\",\n borderInlineStartClip: \"px\",\n borderInlineStartRadius: \"px\",\n borderInlineStartWidth: \"px\",\n borderInlineWidth: \"px\",\n borderLeft: \"px\",\n borderLeftClip: \"px\",\n borderLeftRadius: \"px\",\n borderLeftWidth: \"px\",\n borderLimit: \"px\",\n borderRadius: \"px\",\n borderRight: \"px\",\n borderRightClip: \"px\",\n borderRightRadius: \"px\",\n borderRightWidth: \"px\",\n borderSpacing: \"px\",\n borderStartEndRadius: \"px\",\n borderStartStartRadius: \"px\",\n borderTop: \"px\",\n borderTopClip: \"px\",\n borderTopLeftRadius: \"px\",\n borderTopRadius: \"px\",\n borderTopRightRadius: \"px\",\n borderTopWidth: \"px\",\n borderWidth: \"px\",\n bottom: \"px\",\n boxShadow: \"px\",\n boxShadowBlur: \"px\",\n boxShadowOffset: \"px\",\n boxShadowSpread: \"px\",\n columnGap: \"px\",\n columnHeight: \"px\",\n columnRule: \"px\",\n columnRuleEdgeInset: \"px\",\n columnRuleEdgeInsetEnd: \"px\",\n columnRuleEdgeInsetStart: \"px\",\n columnRuleInset: \"px\",\n columnRuleInsetEnd: \"px\",\n columnRuleInsetStart: \"px\",\n columnRuleInteriorInset: \"px\",\n columnRuleInteriorInsetEnd: \"px\",\n columnRuleInteriorInsetStart: \"px\",\n columnRuleWidth: \"px\",\n columns: \"px\",\n columnWidth: \"px\",\n containIntrinsicBlockSize: \"px\",\n containIntrinsicHeight: \"px\",\n containIntrinsicInlineSize: \"px\",\n containIntrinsicSize: \"px\",\n containIntrinsicWidth: \"px\",\n corner: \"px\",\n cornerBlockEnd: \"px\",\n cornerBlockStart: \"px\",\n cornerBottom: \"px\",\n cornerBottomLeft: \"px\",\n cornerBottomRight: \"px\",\n cornerEndEnd: \"px\",\n cornerEndStart: \"px\",\n cornerInlineEnd: \"px\",\n cornerInlineStart: \"px\",\n cornerLeft: \"px\",\n cornerRight: \"px\",\n cornerStartEnd: \"px\",\n cornerStartStart: \"px\",\n cornerTop: \"px\",\n cornerTopLeft: \"px\",\n cornerTopRight: \"px\",\n cx: \"px\",\n cy: \"px\",\n fillOpacity: \"%\",\n fillPosition: \"px\",\n fillSize: \"px\",\n flex: \"px\",\n flexBasis: \"px\",\n floatOffset: \"px\",\n floodOpacity: \"%\",\n flowTolerance: \"px\",\n font: \"deg\",\n fontSize: \"px\",\n fontStretch: \"%\",\n fontStyle: \"deg\",\n fontWidth: \"%\",\n gap: \"px\",\n grid: \"px\",\n gridAutoColumns: \"px\",\n gridAutoRows: \"px\",\n gridColumnGap: \"px\",\n gridGap: \"px\",\n gridRowGap: \"px\",\n gridTemplate: \"px\",\n gridTemplateColumns: \"px\",\n gridTemplateRows: \"px\",\n height: \"px\",\n hyphenateLimitZone: \"px\",\n imageOrientation: \"deg\",\n imageResolution: \"dppx\",\n initialLetterWrap: \"px\",\n inlineSize: \"px\",\n inset: \"px\",\n insetBlock: \"px\",\n insetBlockEnd: \"px\",\n insetBlockStart: \"px\",\n insetInline: \"px\",\n insetInlineEnd: \"px\",\n insetInlineStart: \"px\",\n interestDelay: \"ms\",\n interestDelayEnd: \"ms\",\n interestDelayStart: \"ms\",\n itemFlow: \"px\",\n left: \"px\",\n letterSpacing: \"px\",\n lineHeight: \"px\",\n lineHeightStep: \"px\",\n linePadding: \"px\",\n margin: \"px\",\n marginBlock: \"px\",\n marginBlockEnd: \"px\",\n marginBlockStart: \"px\",\n marginBottom: \"px\",\n marginInline: \"px\",\n marginInlineEnd: \"px\",\n marginInlineStart: \"px\",\n marginLeft: \"px\",\n marginRight: \"px\",\n marginTop: \"px\",\n mask: \"px\",\n maskBorder: \"%\",\n maskBorderOutset: \"px\",\n maskBorderSlice: \"%\",\n maskBorderWidth: \"px\",\n maskPosition: \"px\",\n maskSize: \"px\",\n maxBlockSize: \"px\",\n maxHeight: \"px\",\n maxInlineSize: \"px\",\n maxWidth: \"px\",\n minBlockSize: \"px\",\n minHeight: \"px\",\n minInlineSize: \"px\",\n minWidth: \"px\",\n objectPosition: \"px\",\n offset: \"px\",\n offsetAnchor: \"px\",\n offsetDistance: \"px\",\n offsetPosition: \"px\",\n offsetRotate: \"deg\",\n opacity: \"%\",\n outline: \"px\",\n outlineOffset: \"px\",\n outlineWidth: \"px\",\n overflowClipMargin: \"px\",\n overflowClipMarginBlock: \"px\",\n overflowClipMarginBlockEnd: \"px\",\n overflowClipMarginBlockStart: \"px\",\n overflowClipMarginBottom: \"px\",\n overflowClipMarginInline: \"px\",\n overflowClipMarginInlineEnd: \"px\",\n overflowClipMarginInlineStart: \"px\",\n overflowClipMarginLeft: \"px\",\n overflowClipMarginRight: \"px\",\n overflowClipMarginTop: \"px\",\n padding: \"px\",\n paddingBlock: \"px\",\n paddingBlockEnd: \"px\",\n paddingBlockStart: \"px\",\n paddingBottom: \"px\",\n paddingInline: \"px\",\n paddingInlineEnd: \"px\",\n paddingInlineStart: \"px\",\n paddingLeft: \"px\",\n paddingRight: \"px\",\n paddingTop: \"px\",\n pause: \"ms\",\n pauseAfter: \"ms\",\n pauseBefore: \"ms\",\n perspective: \"px\",\n perspectiveOrigin: \"px\",\n r: \"px\",\n rest: \"ms\",\n restAfter: \"ms\",\n restBefore: \"ms\",\n right: \"px\",\n rotate: \"deg\",\n rowGap: \"px\",\n rowRule: \"px\",\n rowRuleEdgeInset: \"px\",\n rowRuleEdgeInsetEnd: \"px\",\n rowRuleEdgeInsetStart: \"px\",\n rowRuleInset: \"px\",\n rowRuleInsetEnd: \"px\",\n rowRuleInsetStart: \"px\",\n rowRuleInteriorInset: \"px\",\n rowRuleInteriorInsetEnd: \"px\",\n rowRuleInteriorInsetStart: \"px\",\n rowRuleWidth: \"px\",\n rule: \"px\",\n ruleEdgeInset: \"px\",\n ruleInset: \"px\",\n ruleInsetEnd: \"px\",\n ruleInsetStart: \"px\",\n ruleInteriorInset: \"px\",\n ruleWidth: \"px\",\n rx: \"px\",\n ry: \"px\",\n scale: \"%\",\n scrollMargin: \"px\",\n scrollMarginBlock: \"px\",\n scrollMarginBlockEnd: \"px\",\n scrollMarginBlockStart: \"px\",\n scrollMarginBottom: \"px\",\n scrollMarginInline: \"px\",\n scrollMarginInlineEnd: \"px\",\n scrollMarginInlineStart: \"px\",\n scrollMarginLeft: \"px\",\n scrollMarginRight: \"px\",\n scrollMarginTop: \"px\",\n scrollPadding: \"px\",\n scrollPaddingBlock: \"px\",\n scrollPaddingBlockEnd: \"px\",\n scrollPaddingBlockStart: \"px\",\n scrollPaddingBottom: \"px\",\n scrollPaddingInline: \"px\",\n scrollPaddingInlineEnd: \"px\",\n scrollPaddingInlineStart: \"px\",\n scrollPaddingLeft: \"px\",\n scrollPaddingRight: \"px\",\n scrollPaddingTop: \"px\",\n shapeImageThreshold: \"%\",\n shapeMargin: \"px\",\n shapePadding: \"px\",\n stopOpacity: \"%\",\n strokeDasharray: \"px\",\n strokeDashcorner: \"px\",\n strokeDashCorner: \"px\",\n strokeDashoffset: \"px\",\n strokeOpacity: \"%\",\n strokePosition: \"px\",\n strokeSize: \"px\",\n strokeWidth: \"px\",\n tabSize: \"px\",\n textDecoration: \"px\",\n textDecorationInset: \"px\",\n textDecorationThickness: \"px\",\n textIndent: \"px\",\n textShadow: \"px\",\n textSizeAdjust: \"%\",\n textUnderlineOffset: \"px\",\n timelineTrigger: \"px\",\n timelineTriggerExitRange: \"px\",\n timelineTriggerExitRangeEnd: \"px\",\n timelineTriggerExitRangeStart: \"px\",\n timelineTriggerRange: \"px\",\n timelineTriggerRangeEnd: \"px\",\n timelineTriggerRangeStart: \"px\",\n top: \"px\",\n transformOrigin: \"px\",\n transition: \"ms\",\n transitionDelay: \"ms\",\n transitionDuration: \"ms\",\n translate: \"px\",\n verticalAlign: \"px\",\n viewTimeline: \"px\",\n viewTimelineInset: \"px\",\n voiceDuration: \"ms\",\n voicePitch: \"Hz\",\n voiceRange: \"Hz\",\n voiceRate: \"%\",\n width: \"px\",\n wordSpacing: \"px\",\n x: \"px\",\n y: \"px\",\n zoom: \"%\",\n} as const\n\nexport type PropertyWithUnit = keyof typeof propertyUnits\n","// Auto-generated from @webref/css - do not edit manually\n// Run \"yarn build\" to regenerate\n\nexport const knownPropertyNames: ReadonlySet<string> = new Set([\n \"accentColor\",\n \"alignContent\",\n \"alignItems\",\n \"alignSelf\",\n \"alignmentBaseline\",\n \"all\",\n \"anchorName\",\n \"anchorScope\",\n \"animation\",\n \"animationComposition\",\n \"animationDelay\",\n \"animationDirection\",\n \"animationDuration\",\n \"animationFillMode\",\n \"animationIterationCount\",\n \"animationName\",\n \"animationPlayState\",\n \"animationRange\",\n \"animationRangeCenter\",\n \"animationRangeEnd\",\n \"animationRangeStart\",\n \"animationTimeline\",\n \"animationTimingFunction\",\n \"animationTrigger\",\n \"appearance\",\n \"aspectRatio\",\n \"backdropFilter\",\n \"backfaceVisibility\",\n \"background\",\n \"backgroundAttachment\",\n \"backgroundBlendMode\",\n \"backgroundClip\",\n \"backgroundColor\",\n \"backgroundImage\",\n \"backgroundOrigin\",\n \"backgroundPosition\",\n \"backgroundPositionBlock\",\n \"backgroundPositionInline\",\n \"backgroundPositionX\",\n \"backgroundPositionY\",\n \"backgroundRepeat\",\n \"backgroundRepeatBlock\",\n \"backgroundRepeatInline\",\n \"backgroundRepeatX\",\n \"backgroundRepeatY\",\n \"backgroundSize\",\n \"backgroundTbd\",\n \"baselineShift\",\n \"baselineSource\",\n \"blockEllipsis\",\n \"blockSize\",\n \"blockStep\",\n \"blockStepAlign\",\n \"blockStepInsert\",\n \"blockStepRound\",\n \"blockStepSize\",\n \"bookmarkLabel\",\n \"bookmarkLevel\",\n \"bookmarkState\",\n \"border\",\n \"borderBlock\",\n \"borderBlockClip\",\n \"borderBlockColor\",\n \"borderBlockEnd\",\n \"borderBlockEndClip\",\n \"borderBlockEndColor\",\n \"borderBlockEndRadius\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\",\n \"borderBlockStart\",\n \"borderBlockStartClip\",\n \"borderBlockStartColor\",\n \"borderBlockStartRadius\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\",\n \"borderBlockStyle\",\n \"borderBlockWidth\",\n \"borderBottom\",\n \"borderBottomClip\",\n \"borderBottomColor\",\n \"borderBottomLeftRadius\",\n \"borderBottomRadius\",\n \"borderBottomRightRadius\",\n \"borderBottomStyle\",\n \"borderBottomWidth\",\n \"borderBoundary\",\n \"borderClip\",\n \"borderCollapse\",\n \"borderColor\",\n \"borderEndEndRadius\",\n \"borderEndStartRadius\",\n \"borderImage\",\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\",\n \"borderInline\",\n \"borderInlineClip\",\n \"borderInlineColor\",\n \"borderInlineEnd\",\n \"borderInlineEndClip\",\n \"borderInlineEndColor\",\n \"borderInlineEndRadius\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\",\n \"borderInlineStart\",\n \"borderInlineStartClip\",\n \"borderInlineStartColor\",\n \"borderInlineStartRadius\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\",\n \"borderInlineStyle\",\n \"borderInlineWidth\",\n \"borderLeft\",\n \"borderLeftClip\",\n \"borderLeftColor\",\n \"borderLeftRadius\",\n \"borderLeftStyle\",\n \"borderLeftWidth\",\n \"borderLimit\",\n \"borderRadius\",\n \"borderRight\",\n \"borderRightClip\",\n \"borderRightColor\",\n \"borderRightRadius\",\n \"borderRightStyle\",\n \"borderRightWidth\",\n \"borderShape\",\n \"borderSpacing\",\n \"borderStartEndRadius\",\n \"borderStartStartRadius\",\n \"borderStyle\",\n \"borderTop\",\n \"borderTopClip\",\n \"borderTopColor\",\n \"borderTopLeftRadius\",\n \"borderTopRadius\",\n \"borderTopRightRadius\",\n \"borderTopStyle\",\n \"borderTopWidth\",\n \"borderWidth\",\n \"bottom\",\n \"boxDecorationBreak\",\n \"boxShadow\",\n \"boxShadowBlur\",\n \"boxShadowColor\",\n \"boxShadowOffset\",\n \"boxShadowPosition\",\n \"boxShadowSpread\",\n \"boxSizing\",\n \"boxSnap\",\n \"breakAfter\",\n \"breakBefore\",\n \"breakInside\",\n \"captionSide\",\n \"caret\",\n \"caretAnimation\",\n \"caretColor\",\n \"caretShape\",\n \"clear\",\n \"clip\",\n \"clipPath\",\n \"clipRule\",\n \"color\",\n \"colorAdjust\",\n \"colorInterpolation\",\n \"colorInterpolationFilters\",\n \"colorScheme\",\n \"columnCount\",\n \"columnFill\",\n \"columnGap\",\n \"columnHeight\",\n \"columnRule\",\n \"columnRuleBreak\",\n \"columnRuleColor\",\n \"columnRuleEdgeInset\",\n \"columnRuleEdgeInsetEnd\",\n \"columnRuleEdgeInsetStart\",\n \"columnRuleInset\",\n \"columnRuleInsetEnd\",\n \"columnRuleInsetStart\",\n \"columnRuleInteriorInset\",\n \"columnRuleInteriorInsetEnd\",\n \"columnRuleInteriorInsetStart\",\n \"columnRuleStyle\",\n \"columnRuleWidth\",\n \"columnSpan\",\n \"columnWidth\",\n \"columnWrap\",\n \"columns\",\n \"contain\",\n \"containIntrinsicBlockSize\",\n \"containIntrinsicHeight\",\n \"containIntrinsicInlineSize\",\n \"containIntrinsicSize\",\n \"containIntrinsicWidth\",\n \"container\",\n \"containerName\",\n \"containerType\",\n \"content\",\n \"contentVisibility\",\n \"continue\",\n \"copyInto\",\n \"corner\",\n \"cornerBlockEnd\",\n \"cornerBlockEndShape\",\n \"cornerBlockStart\",\n \"cornerBlockStartShape\",\n \"cornerBottom\",\n \"cornerBottomLeft\",\n \"cornerBottomLeftShape\",\n \"cornerBottomRight\",\n \"cornerBottomRightShape\",\n \"cornerBottomShape\",\n \"cornerEndEnd\",\n \"cornerEndEndShape\",\n \"cornerEndStart\",\n \"cornerEndStartShape\",\n \"cornerInlineEnd\",\n \"cornerInlineEndShape\",\n \"cornerInlineStart\",\n \"cornerInlineStartShape\",\n \"cornerLeft\",\n \"cornerLeftShape\",\n \"cornerRight\",\n \"cornerRightShape\",\n \"cornerShape\",\n \"cornerStartEnd\",\n \"cornerStartEndShape\",\n \"cornerStartStart\",\n \"cornerStartStartShape\",\n \"cornerTop\",\n \"cornerTopLeft\",\n \"cornerTopLeftShape\",\n \"cornerTopRight\",\n \"cornerTopRightShape\",\n \"cornerTopShape\",\n \"counterIncrement\",\n \"counterReset\",\n \"counterSet\",\n \"cue\",\n \"cueAfter\",\n \"cueBefore\",\n \"cursor\",\n \"cx\",\n \"cy\",\n \"d\",\n \"direction\",\n \"display\",\n \"dominantBaseline\",\n \"dynamicRangeLimit\",\n \"emptyCells\",\n \"eventTrigger\",\n \"eventTriggerName\",\n \"eventTriggerSource\",\n \"fieldSizing\",\n \"fill\",\n \"fillBreak\",\n \"fillColor\",\n \"fillImage\",\n \"fillOpacity\",\n \"fillOrigin\",\n \"fillPosition\",\n \"fillRepeat\",\n \"fillRule\",\n \"fillSize\",\n \"filter\",\n \"flex\",\n \"flexBasis\",\n \"flexDirection\",\n \"flexFlow\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexWrap\",\n \"float\",\n \"floatDefer\",\n \"floatOffset\",\n \"floatReference\",\n \"floodColor\",\n \"floodOpacity\",\n \"flowFrom\",\n \"flowInto\",\n \"flowTolerance\",\n \"font\",\n \"fontFamily\",\n \"fontFeatureSettings\",\n \"fontKerning\",\n \"fontLanguageOverride\",\n \"fontOpticalSizing\",\n \"fontPalette\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"fontStretch\",\n \"fontStyle\",\n \"fontSynthesis\",\n \"fontSynthesisPosition\",\n \"fontSynthesisSmallCaps\",\n \"fontSynthesisStyle\",\n \"fontSynthesisWeight\",\n \"fontVariant\",\n \"fontVariantAlternates\",\n \"fontVariantCaps\",\n \"fontVariantEastAsian\",\n \"fontVariantEmoji\",\n \"fontVariantLigatures\",\n \"fontVariantNumeric\",\n \"fontVariantPosition\",\n \"fontVariationSettings\",\n \"fontWeight\",\n \"fontWidth\",\n \"footnoteDisplay\",\n \"footnotePolicy\",\n \"forcedColorAdjust\",\n \"gap\",\n \"glyphOrientationVertical\",\n \"grid\",\n \"gridArea\",\n \"gridAutoColumns\",\n \"gridAutoFlow\",\n \"gridAutoRows\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnGap\",\n \"gridColumnStart\",\n \"gridGap\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowGap\",\n \"gridRowStart\",\n \"gridTemplate\",\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n \"hangingPunctuation\",\n \"height\",\n \"hyphenateCharacter\",\n \"hyphenateLimitChars\",\n \"hyphenateLimitLast\",\n \"hyphenateLimitLines\",\n \"hyphenateLimitZone\",\n \"hyphens\",\n \"imageOrientation\",\n \"imageRendering\",\n \"imageResolution\",\n \"initialLetter\",\n \"initialLetterAlign\",\n \"initialLetterWrap\",\n \"inlineSize\",\n \"inlineSizing\",\n \"inputSecurity\",\n \"inset\",\n \"insetBlock\",\n \"insetBlockEnd\",\n \"insetBlockStart\",\n \"insetInline\",\n \"insetInlineEnd\",\n \"insetInlineStart\",\n \"interactivity\",\n \"interestDelay\",\n \"interestDelayEnd\",\n \"interestDelayStart\",\n \"interpolateSize\",\n \"isolation\",\n \"itemCross\",\n \"itemDirection\",\n \"itemFlow\",\n \"itemPack\",\n \"itemTrack\",\n \"itemWrap\",\n \"justifyContent\",\n \"justifyItems\",\n \"justifySelf\",\n \"left\",\n \"letterSpacing\",\n \"lightingColor\",\n \"lineBreak\",\n \"lineClamp\",\n \"lineFitEdge\",\n \"lineGrid\",\n \"lineHeight\",\n \"lineHeightStep\",\n \"linePadding\",\n \"lineSnap\",\n \"linkParameters\",\n \"listStyle\",\n \"listStyleImage\",\n \"listStylePosition\",\n \"listStyleType\",\n \"margin\",\n \"marginBlock\",\n \"marginBlockEnd\",\n \"marginBlockStart\",\n \"marginBottom\",\n \"marginBreak\",\n \"marginInline\",\n \"marginInlineEnd\",\n \"marginInlineStart\",\n \"marginLeft\",\n \"marginRight\",\n \"marginTop\",\n \"marginTrim\",\n \"marker\",\n \"markerEnd\",\n \"markerMid\",\n \"markerSide\",\n \"markerStart\",\n \"mask\",\n \"maskBorder\",\n \"maskBorderMode\",\n \"maskBorderOutset\",\n \"maskBorderRepeat\",\n \"maskBorderSlice\",\n \"maskBorderSource\",\n \"maskBorderWidth\",\n \"maskClip\",\n \"maskComposite\",\n \"maskImage\",\n \"maskMode\",\n \"maskOrigin\",\n \"maskPosition\",\n \"maskRepeat\",\n \"maskSize\",\n \"maskType\",\n \"mathDepth\",\n \"mathShift\",\n \"mathStyle\",\n \"maxBlockSize\",\n \"maxHeight\",\n \"maxInlineSize\",\n \"maxLines\",\n \"maxWidth\",\n \"minBlockSize\",\n \"minHeight\",\n \"minInlineSize\",\n \"minIntrinsicSizing\",\n \"minWidth\",\n \"mixBlendMode\",\n \"navDown\",\n \"navLeft\",\n \"navRight\",\n \"navUp\",\n \"objectFit\",\n \"objectPosition\",\n \"objectViewBox\",\n \"offset\",\n \"offsetAnchor\",\n \"offsetDistance\",\n \"offsetPath\",\n \"offsetPosition\",\n \"offsetRotate\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"outline\",\n \"outlineColor\",\n \"outlineOffset\",\n \"outlineStyle\",\n \"outlineWidth\",\n \"overflow\",\n \"overflowAnchor\",\n \"overflowBlock\",\n \"overflowClipMargin\",\n \"overflowClipMarginBlock\",\n \"overflowClipMarginBlockEnd\",\n \"overflowClipMarginBlockStart\",\n \"overflowClipMarginBottom\",\n \"overflowClipMarginInline\",\n \"overflowClipMarginInlineEnd\",\n \"overflowClipMarginInlineStart\",\n \"overflowClipMarginLeft\",\n \"overflowClipMarginRight\",\n \"overflowClipMarginTop\",\n \"overflowInline\",\n \"overflowWrap\",\n \"overflowX\",\n \"overflowY\",\n \"overlay\",\n \"overscrollBehavior\",\n \"overscrollBehaviorBlock\",\n \"overscrollBehaviorInline\",\n \"overscrollBehaviorX\",\n \"overscrollBehaviorY\",\n \"padding\",\n \"paddingBlock\",\n \"paddingBlockEnd\",\n \"paddingBlockStart\",\n \"paddingBottom\",\n \"paddingInline\",\n \"paddingInlineEnd\",\n \"paddingInlineStart\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingTop\",\n \"page\",\n \"pageBreakAfter\",\n \"pageBreakBefore\",\n \"pageBreakInside\",\n \"paintOrder\",\n \"pause\",\n \"pauseAfter\",\n \"pauseBefore\",\n \"perspective\",\n \"perspectiveOrigin\",\n \"placeContent\",\n \"placeItems\",\n \"placeSelf\",\n \"pointerEvents\",\n \"pointerTimeline\",\n \"pointerTimelineAxis\",\n \"pointerTimelineName\",\n \"position\",\n \"positionAnchor\",\n \"positionArea\",\n \"positionTry\",\n \"positionTryFallbacks\",\n \"positionTryOrder\",\n \"positionVisibility\",\n \"printColorAdjust\",\n \"quotes\",\n \"r\",\n \"readingFlow\",\n \"readingOrder\",\n \"regionFragment\",\n \"resize\",\n \"rest\",\n \"restAfter\",\n \"restBefore\",\n \"right\",\n \"rotate\",\n \"rowGap\",\n \"rowRule\",\n \"rowRuleBreak\",\n \"rowRuleColor\",\n \"rowRuleEdgeInset\",\n \"rowRuleEdgeInsetEnd\",\n \"rowRuleEdgeInsetStart\",\n \"rowRuleInset\",\n \"rowRuleInsetEnd\",\n \"rowRuleInsetStart\",\n \"rowRuleInteriorInset\",\n \"rowRuleInteriorInsetEnd\",\n \"rowRuleInteriorInsetStart\",\n \"rowRuleStyle\",\n \"rowRuleWidth\",\n \"rubyAlign\",\n \"rubyMerge\",\n \"rubyOverhang\",\n \"rubyPosition\",\n \"rule\",\n \"ruleBreak\",\n \"ruleColor\",\n \"ruleEdgeInset\",\n \"ruleInset\",\n \"ruleInsetEnd\",\n \"ruleInsetStart\",\n \"ruleInteriorInset\",\n \"ruleOverlap\",\n \"ruleStyle\",\n \"ruleWidth\",\n \"rx\",\n \"ry\",\n \"scale\",\n \"scrollBehavior\",\n \"scrollInitialTarget\",\n \"scrollMargin\",\n \"scrollMarginBlock\",\n \"scrollMarginBlockEnd\",\n \"scrollMarginBlockStart\",\n \"scrollMarginBottom\",\n \"scrollMarginInline\",\n \"scrollMarginInlineEnd\",\n \"scrollMarginInlineStart\",\n \"scrollMarginLeft\",\n \"scrollMarginRight\",\n \"scrollMarginTop\",\n \"scrollMarkerGroup\",\n \"scrollPadding\",\n \"scrollPaddingBlock\",\n \"scrollPaddingBlockEnd\",\n \"scrollPaddingBlockStart\",\n \"scrollPaddingBottom\",\n \"scrollPaddingInline\",\n \"scrollPaddingInlineEnd\",\n \"scrollPaddingInlineStart\",\n \"scrollPaddingLeft\",\n \"scrollPaddingRight\",\n \"scrollPaddingTop\",\n \"scrollSnapAlign\",\n \"scrollSnapStop\",\n \"scrollSnapType\",\n \"scrollTargetGroup\",\n \"scrollTimeline\",\n \"scrollTimelineAxis\",\n \"scrollTimelineName\",\n \"scrollbarColor\",\n \"scrollbarGutter\",\n \"scrollbarWidth\",\n \"shapeImageThreshold\",\n \"shapeInside\",\n \"shapeMargin\",\n \"shapeOutside\",\n \"shapePadding\",\n \"shapeRendering\",\n \"shapeSubtract\",\n \"sliderOrientation\",\n \"spatialNavigationAction\",\n \"spatialNavigationContain\",\n \"spatialNavigationFunction\",\n \"speak\",\n \"speakAs\",\n \"stopColor\",\n \"stopOpacity\",\n \"stringSet\",\n \"stroke\",\n \"strokeAlign\",\n \"strokeAlignment\",\n \"strokeBreak\",\n \"strokeColor\",\n \"strokeDashCorner\",\n \"strokeDashJustify\",\n \"strokeDashadjust\",\n \"strokeDasharray\",\n \"strokeDashcorner\",\n \"strokeDashoffset\",\n \"strokeImage\",\n \"strokeLinecap\",\n \"strokeLinejoin\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeOrigin\",\n \"strokePosition\",\n \"strokeRepeat\",\n \"strokeSize\",\n \"strokeWidth\",\n \"tabSize\",\n \"tableLayout\",\n \"textAlign\",\n \"textAlignAll\",\n \"textAlignLast\",\n \"textAnchor\",\n \"textAutospace\",\n \"textBox\",\n \"textBoxEdge\",\n \"textBoxTrim\",\n \"textCombineUpright\",\n \"textDecoration\",\n \"textDecorationColor\",\n \"textDecorationInset\",\n \"textDecorationLine\",\n \"textDecorationSkip\",\n \"textDecorationSkipBox\",\n \"textDecorationSkipInk\",\n \"textDecorationSkipSelf\",\n \"textDecorationSkipSpaces\",\n \"textDecorationStyle\",\n \"textDecorationThickness\",\n \"textEmphasis\",\n \"textEmphasisColor\",\n \"textEmphasisPosition\",\n \"textEmphasisSkip\",\n \"textEmphasisStyle\",\n \"textGroupAlign\",\n \"textIndent\",\n \"textJustify\",\n \"textOrientation\",\n \"textOverflow\",\n \"textRendering\",\n \"textShadow\",\n \"textSizeAdjust\",\n \"textSpacing\",\n \"textSpacingTrim\",\n \"textTransform\",\n \"textUnderlineOffset\",\n \"textUnderlinePosition\",\n \"textWrap\",\n \"textWrapMode\",\n \"textWrapStyle\",\n \"timelineScope\",\n \"timelineTrigger\",\n \"timelineTriggerExitRange\",\n \"timelineTriggerExitRangeEnd\",\n \"timelineTriggerExitRangeStart\",\n \"timelineTriggerName\",\n \"timelineTriggerRange\",\n \"timelineTriggerRangeEnd\",\n \"timelineTriggerRangeStart\",\n \"timelineTriggerSource\",\n \"top\",\n \"touchAction\",\n \"transform\",\n \"transformBox\",\n \"transformOrigin\",\n \"transformStyle\",\n \"transition\",\n \"transitionBehavior\",\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\",\n \"translate\",\n \"triggerScope\",\n \"unicodeBidi\",\n \"userSelect\",\n \"vectorEffect\",\n \"verticalAlign\",\n \"viewTimeline\",\n \"viewTimelineAxis\",\n \"viewTimelineInset\",\n \"viewTimelineName\",\n \"viewTransitionClass\",\n \"viewTransitionGroup\",\n \"viewTransitionName\",\n \"viewTransitionScope\",\n \"visibility\",\n \"voiceBalance\",\n \"voiceDuration\",\n \"voiceFamily\",\n \"voicePitch\",\n \"voiceRange\",\n \"voiceRate\",\n \"voiceStress\",\n \"voiceVolume\",\n \"whiteSpace\",\n \"whiteSpaceCollapse\",\n \"whiteSpaceTrim\",\n \"widows\",\n \"width\",\n \"willChange\",\n \"wordBreak\",\n \"wordSpaceTransform\",\n \"wordSpacing\",\n \"wordWrap\",\n \"wrapAfter\",\n \"wrapBefore\",\n \"wrapFlow\",\n \"wrapInside\",\n \"wrapThrough\",\n \"writingMode\",\n \"x\",\n \"y\",\n \"zIndex\",\n \"zoom\",\n])\n","/**\n * CSS property handling and type definitions.\n * Provides type-safe mappings from JavaScript objects to CSS properties,\n * with automatic unit conversion and value formatting.\n * @module props\n */\n\nimport { Properties, ObsoleteProperties } from \"csstype\"\nimport { CssLike, CssVar } from \"@/values\"\nimport { propertyUnits, type PropertyWithUnit } from \"./propertyUnits.generated\"\nimport { knownPropertyNames } from \"./knownProperties.generated\"\n\n/** All non-obsolete CSS properties from csstype */\ntype Props = Required<Omit<Properties, keyof ObsoleteProperties>>\n\n/** Properties that have default units and are valid CSS properties */\ntype PropsWithUnit = PropertyWithUnit & keyof Props\n\n/**\n * Converts a kebab-case string to camelCase.\n */\nexport function kebabToCamel(str: string): string {\n return str.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())\n}\n\n/**\n * Converts a camelCase string to kebab-case.\n */\nexport function camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase())\n}\n\nfunction getUnitForProperty(propertyName: string): string | undefined {\n return propertyName in propertyUnits ? propertyUnits[propertyName as PropertyWithUnit] : undefined\n}\n\n/**\n * Converts a CSS-like value to its string representation.\n * For properties with known units, numbers are automatically suffixed.\n */\nfunction formatValue(value: CssLike<string | number>, propertyName: string, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") {\n const unit = getUnitForProperty(propertyName)\n if (unit === \"%\") return `${value * 100}${unit}`\n if (value === 0) return \"0\"\n return unit ? `${value}${unit}` : value.toString()\n }\n return formatValue(value.value, propertyName, maxDepth - 1)\n}\n\n/**\n * Checks if a property name is a CSS custom property (variable).\n */\nexport function isCssVariableName(key: string): key is CssVar {\n return key.startsWith(\"--\")\n}\n\n/**\n * Converts a CSS-like value to a string for use as a CSS variable value.\n * @param value - The value to convert (string, number, or wrapped value)\n * @param maxDepth - Maximum recursion depth for evaluating the value\n * @returns The string representation\n */\nexport function asVar(value: CssLike<string | number>, maxDepth = 10): string {\n if (maxDepth <= 0) return \"\"\n switch (typeof value) {\n case \"string\":\n return value\n case \"number\":\n return value.toString()\n default:\n return asVar(value.value, maxDepth - 1)\n }\n}\n\n/**\n * Checks if a property name is a known CSS property.\n */\nexport function isKnownPropertyName(key: string): key is keyof Props {\n return knownPropertyNames.has(key)\n}\n\n/**\n * Converts a value to a CSS property string.\n * Automatically appends units to numeric values for properties that require them.\n * @param value - The value to convert\n * @param key - The CSS property name\n * @returns The formatted CSS value string\n */\nexport function asKnownProp(value: unknown, key: keyof Props): string {\n return formatValue(value as CssLike<string | number>, key)\n}\n\n/**\n * Checks if a key represents a nested CSS selector.\n */\n//TODO: make better validation, provide human readable errors\nexport function isNestedSelector(key: string): key is NestedCssSelector {\n return key.includes(\"&\")\n}\n\n/** Known at-rule prefixes that mochi-css recognizes */\nconst AT_RULE_PREFIXES = [\"@media \", \"@container \", \"@supports \", \"@layer \"] as const\n\n/**\n * Checks if a key represents a CSS at-rule (media, container, supports, layer).\n */\nexport function isAtRuleKey(key: string): key is AtRuleKey {\n return AT_RULE_PREFIXES.some((p) => key.startsWith(p))\n}\n\n/** A nested CSS selector pattern containing the parent reference `&` */\nexport type NestedCssSelector = `${string}&${string}`\n\n/** A CSS at-rule key for media, container, supports, or layer queries */\nexport type AtRuleKey = `@media ${string}` | `@container ${string}` | `@supports ${string}` | `@layer ${string}`\n\ntype NestedStyleKeys = AtRuleKey | NestedCssSelector\n\n/**\n * Style properties without nesting support.\n * Includes all standard CSS properties with type-safe value converters,\n * plus CSS custom properties (variables).\n *\n * Properties with known units (e.g., width, height, padding) accept numbers\n * that are automatically converted with their default unit (e.g., px, ms).\n */\nexport type SimpleStyleProps = { [K in PropsWithUnit]?: CssLike<number | Props[K]> } & {\n [K in Exclude<keyof Props, PropsWithUnit>]?: CssLike<Props[K]>\n}\n\n/**\n * Full style properties type with support for nested selectors and media queries.\n * Extends SimpleStyleProps to allow recursive style definitions.\n *\n * @example\n * const styles: StyleProps = {\n * color: 'blue',\n * padding: 16,\n * '&:hover': { color: 'red' },\n * '@media (min-width: 768px)': { padding: 24 }\n * }\n */\nexport type StyleProps = SimpleStyleProps & { [K in NestedStyleKeys]?: StyleProps | CssLike<string | number> } & Record<\n string,\n unknown\n >\n\n/**\n * Converts a SimpleStyleProps object to a CSS properties record.\n * Transforms camelCase property names to kebab-case and applies value converters.\n * @param props - The style properties object\n * @returns A record of CSS property names (kebab-case) to string values\n * @example\n * cssFromProps({ backgroundColor: 'blue', padding: 16 })\n * // { 'background-color': 'blue', 'padding': '16px' }\n */\nexport function cssFromProps(\n props: SimpleStyleProps & Partial<Record<CssVar, CssLike<number | string>>>,\n): Record<string, string> {\n return Object.fromEntries(\n Object.entries(props)\n .map(([key, value]): [string, string] | undefined => {\n if (value === undefined) return undefined\n // transform variable\n if (isCssVariableName(key)) return [key, asVar(value as CssLike<string | number>)]\n // transform CSS prop\n if (isKnownPropertyName(key)) return [camelToKebab(key), asKnownProp(value, key)]\n return undefined\n })\n .filter((v) => v !== undefined),\n )\n}\n","/**\n * CSS selector building and manipulation utilities.\n * Handles nested selectors (using `&` placeholder) and CSS at-rules.\n * @module selector\n */\n\nimport { isAtRuleKey, isNestedSelector } from \"@/props\"\n\n/**\n * Immutable CSS selector builder that handles nested selectors and CSS at-rules.\n * Uses the `&` character as a placeholder for parent selector substitution.\n *\n * @example\n * const selector = new MochiSelector(['.button'])\n * selector.extend('&:hover').cssSelector // '.button:hover'\n * selector.wrap('@media (min-width: 768px)').atRules // ['@media (min-width: 768px)']\n */\nexport class MochiSelector {\n /**\n * Creates a new MochiSelector instance.\n * @param cssSelectors - Array of CSS selectors (may contain `&` placeholders)\n * @param atRules - Array of full CSS at-rule strings e.g. `\"@media (min-width: 768px)\"`\n */\n constructor(\n private readonly cssSelectors: string[] = [],\n public readonly atRules: string[] = [],\n ) {}\n\n /**\n * Gets the combined CSS selector string.\n * Multiple selectors are joined with commas.\n * @returns The CSS selector, or \"*\" if no selectors are defined\n */\n get cssSelector(): string {\n if (this.cssSelectors.length === 0) return \"*\"\n return this.cssSelectors.join(\", \")\n }\n\n /**\n * Substitutes all `&` placeholders with the given root selector.\n * @param root - The selector to replace `&` with\n * @returns A new MochiSelector with substituted selectors\n */\n substitute(root: string): MochiSelector {\n return new MochiSelector(\n this.cssSelectors.map((selector) => selector.replace(/&/g, root)),\n this.atRules,\n )\n }\n\n /**\n * Extends this selector by nesting a child selector.\n * The `&` in the child selector is replaced with each parent selector.\n * @param child - The child selector pattern (must contain `&`)\n * @returns A new MochiSelector with the extended selectors\n * @example\n * new MochiSelector(['.btn']).extend('&:hover') // '.btn:hover'\n * new MochiSelector(['.btn']).extend('& .icon') // '.btn .icon'\n */\n extend(child: string): MochiSelector {\n if (!isNestedSelector(child)) return this\n const children = MochiSelector.split(child)\n const selectors = this.cssSelectors.flatMap((parentSelector) =>\n children.map((childSelector) => {\n return childSelector.replace(/&/g, parentSelector)\n }),\n )\n return new MochiSelector(selectors, this.atRules)\n }\n\n /**\n * Wraps this selector with a CSS at-rule.\n * @param atRule - The full at-rule string (e.g. `\"@media (min-width: 768px)\"`)\n * @returns A new MochiSelector with the added at-rule, or unchanged if not a known at-rule\n * @example\n * selector.wrap('@media (min-width: 768px)') // Adds media query\n * selector.wrap('@container sidebar (min-width: 300px)') // Adds container query\n */\n wrap(atRule: string): MochiSelector {\n if (!isAtRuleKey(atRule)) return this\n return new MochiSelector(this.cssSelectors, [...this.atRules, atRule])\n }\n\n /**\n * Splits a comma-separated selector string into individual selectors.\n * @param selector - The selector string to split\n * @returns Array of individual selector strings\n */\n private static split(selector: string): string[] {\n return [selector]\n }\n}\n","/**\n * Hashing utilities for generating short, deterministic class names.\n * Uses djb2 algorithm for fast string hashing.\n * @module hash\n */\n\n/** Characters used for base-62 encoding (css-name safe variant of base-64) */\nconst hashBase = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\"\nconst base = hashBase.length\n\n/**\n * Converts a number to a base-62 string representation.\n * @param num - The number to convert\n * @param maxLength - Optional maximum length of the output string\n * @returns Base-62 encoded string representation of the number\n */\nexport function numberToBase62(num: number, maxLength?: number): string {\n let out = \"\"\n while (num > 0 && out.length < (maxLength ?? Infinity)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n out = hashBase[num % base]! + out\n num = Math.floor(num / base)\n }\n return out.length > 0 ? out : \"0\"\n}\n\n/**\n * Generates a short hash string from input using the djb2 algorithm.\n * Used to create unique, deterministic CSS class names from style content.\n * @param input - The string to hash\n * @param length - Maximum length of the hash output (default: 8)\n * @returns A short, css-safe hash string\n * @example\n * shortHash(\"color: red;\") // Returns something like \"A1b2C3d4\"\n */\nexport function shortHash(input: string, length = 8): string {\n // fast 32-bit integer hash (djb2 variant)\n let h = 5381\n for (let i = 0; i < input.length; i++) {\n h = (h * 33) ^ input.charCodeAt(i)\n }\n // force unsigned\n h >>>= 0\n\n return numberToBase62(h, length)\n}\n","/**\n * String comparison utilities for deterministic sorting.\n * Used internally to ensure consistent CSS output order.\n * @module compare\n */\n\n/**\n * Compares two strings lexicographically.\n */\nexport function compareString<T extends string>(a: T, b: T) {\n return a < b ? -1 : a === b ? 0 : 1\n}\n\n/**\n * Compares two tuples by their first element (string key).\n * Useful for sorting Object.entries() results.\n */\nexport function compareStringKey<T extends [string, unknown]>(a: T, b: T) {\n return compareString(a[0], b[0])\n}\n\n/**\n * Creates a comparator function for objects with a specific string property.\n * @param name - The property name to compare by\n * @returns A comparator function that compares objects by the specified property\n * @example\n * const items = [{ key: 'b' }, { key: 'a' }]\n * items.sort(stringPropComparator('key')) // [{ key: 'a' }, { key: 'b' }]\n */\nexport function stringPropComparator<N extends string>(name: N) {\n return <T extends Record<N, string>>(a: T, b: T) => compareString(a[name], b[name])\n}\n","/**\n * CSS object model for representing and serializing styles.\n * Converts JavaScript style objects into CSS blocks with proper\n * selector handling, nesting support, and deterministic output.\n * @module cssObject\n */\n\nimport {\n asKnownProp,\n asVar,\n camelToKebab,\n isCssVariableName,\n isKnownPropertyName,\n isAtRuleKey,\n isNestedSelector,\n StyleProps,\n} from \"@/props\"\nimport { shortHash } from \"@/hash\"\nimport { MochiSelector } from \"@/selector\"\nimport { compareStringKey, stringPropComparator } from \"@/compare\"\nimport { CssLike } from \"@/values\"\n\n/**\n * Represents a single CSS rule block with properties and a selector.\n * Handles conversion to CSS string format and hash generation.\n */\nexport class CssObjectSubBlock {\n /**\n * Creates a new CSS sub-block.\n * @param cssProps - Map of CSS property names (kebab-case) to values\n * @param selector - The selector this block applies to\n */\n constructor(\n public readonly cssProps: Record<string, string>,\n public readonly selector: MochiSelector,\n ) {}\n\n /**\n * Computes a deterministic hash of this block's CSS content.\n * Used for generating unique class names.\n */\n get hash(): string {\n const str = this.asCssString(\"&\")\n return shortHash(str)\n }\n\n /**\n * Converts this block to a CSS string.\n * Handles at-rule wrapping (media, container, supports, layer) if present.\n * Multiple at-rules are nested in order.\n * @param root - The root selector to substitute for `&`\n * @returns Formatted CSS string\n */\n asCssString(root: string): string {\n const selector = this.selector.substitute(root)\n const atRules = selector.atRules\n const innerIndent = \" \".repeat(atRules.length)\n\n const props = Object.entries(this.cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => `${innerIndent} ${k}: ${v};\\n`)\n .join(\"\")\n\n let result = `${innerIndent}${selector.cssSelector} {\\n${props}${innerIndent}}`\n\n for (let i = atRules.length - 1; i >= 0; i--) {\n const outerIndent = \" \".repeat(i)\n result = `${outerIndent}${atRules[i]} {\\n${result}\\n${outerIndent}}`\n }\n\n return result\n }\n\n /**\n * Parses StyleProps into an array of CSS sub-blocks.\n * Recursively processes nested selectors and media queries.\n * Output order is deterministic for consistent hash generation.\n *\n * @param props - The style properties to parse\n * @param selector - The parent selector context (defaults to `&`)\n * @returns Non-empty array of sub-blocks (main block first, then nested)\n */\n static fromProps(props: StyleProps, selector?: MochiSelector): [CssObjectSubBlock, ...CssObjectSubBlock[]] {\n selector ??= new MochiSelector([\"&\"])\n\n const cssProps: Record<string, string> = {}\n const propsToProcess: { key: string; selector: MochiSelector; props: StyleProps }[] = []\n\n for (const [key, value] of Object.entries(props)) {\n // skip undefined value\n if (value === undefined) continue\n\n // transform variable\n if (isCssVariableName(key)) {\n cssProps[key] = asVar(value as CssLike<string | number>)\n continue\n }\n\n // transform known CSS prop\n if (isKnownPropertyName(key)) {\n cssProps[camelToKebab(key)] = asKnownProp(value, key)\n continue\n }\n\n // transform nested and media selectors\n if (isNestedSelector(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.extend(key),\n })\n continue\n }\n\n // transform at-rule selector (media, container, supports, layer)\n if (isAtRuleKey(key)) {\n propsToProcess.push({\n key,\n props: value as StyleProps,\n selector: selector.wrap(key),\n })\n continue\n }\n\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n console.warn(`[mochi-css] Unknown style property \"${key}\" will be ignored`)\n }\n }\n\n return [\n new CssObjectSubBlock(cssProps, selector),\n ...propsToProcess\n .toSorted(stringPropComparator(\"key\"))\n .flatMap(({ props, selector }) => CssObjectSubBlock.fromProps(props, selector)),\n ] as const\n }\n}\n\n/**\n * Represents an abstract CSS block definition.\n * Contains one or more sub-blocks for nested selectors and media queries.\n */\nexport class CssObjectBlock {\n /** The generated unique class name for this block */\n public readonly className: string\n /** All sub-blocks (main styles and nested/media rules) */\n public readonly subBlocks: CssObjectSubBlock[] = []\n\n /**\n * Creates a new CSS block from style properties.\n * Generates a unique class name based on the content hash.\n * @param styles - The style properties to compile\n */\n constructor(styles: StyleProps) {\n const blocks = CssObjectSubBlock.fromProps(styles)\n\n this.className = \"c\" + shortHash(blocks.map((b) => b.hash).join(\"+\"))\n this.subBlocks = blocks\n }\n\n /**\n * Gets the CSS class selector for this block.\n */\n get selector(): string {\n return `.${this.className}`\n }\n\n /**\n * Converts style block to a CSS string.\n * @param root - The root selector to scope styles to\n * @returns Complete CSS string for this block\n */\n asCssString(root: string): string {\n return this.subBlocks\n .map((b) => b.asCssString(new MochiSelector([root]).extend(`&.${this.className}`).cssSelector))\n .join(\"\\n\\n\")\n }\n}\n\nexport type AllVariants = Record<string, Record<string, StyleProps>>\nexport type DefaultVariants = Record<never, Record<string, StyleProps>>\n\n/**\n * A compound variant entry that applies styles when multiple variant conditions match.\n * Each entry specifies a set of variant conditions and a `css` property with styles\n * that apply only when all conditions are satisfied simultaneously.\n *\n * @template V - The variant definitions type\n *\n * @example\n * { color: 'red', size: 'large', css: { fontWeight: 'bold' } }\n */\nexport type CompoundVariant<V extends AllVariants> = {\n [K in keyof V]?: keyof V[K]\n} & { css: StyleProps }\n\n/**\n * Refines string literal types to their proper runtime types.\n * Converts \"true\"/\"false\" strings to boolean literals.\n */\ntype RefineVariantType<T extends string> = T extends \"true\"\n ? true\n : T extends \"false\"\n ? false\n : T extends string\n ? T\n : string\n\n/**\n * Props for defining variants in a style object.\n * @template V - The variant definitions type\n */\nexport type VariantProps<V extends AllVariants> = {\n /** Variant definitions mapping names to options to styles */\n variants?: V\n /** Default variant selections for when not explicitly provided */\n defaultVariants?: { [K in keyof V]?: keyof V[K] extends string ? RefineVariantType<keyof V[K] & string> : never }\n /** Compound variant definitions that apply when multiple variant conditions match */\n compoundVariants?: CompoundVariant<V>[]\n}\n\n/** Combined type for style props with optional variants */\nexport type MochiCSSProps<V extends AllVariants> = Omit<\n StyleProps,\n \"variants\" | \"compoundVariants\" | \"defaultVariants\"\n> &\n VariantProps<V>\n\n/** Utility type to override properties of A with properties of B */\ntype Override<A extends object, B extends object> = B & Omit<A, keyof B>\n\n/** Recursively merges variant types from a tuple, with later types overriding earlier */\nexport type MergeCSSVariants<V extends AllVariants[]> = V extends [\n infer V1 extends AllVariants,\n ...infer VRest extends AllVariants[],\n]\n ? Override<V1, MergeCSSVariants<VRest>>\n : DefaultVariants\n\n/** Refines all values in a string record to their proper variant types */\ntype RefineVariantTypes<V extends Record<string, string>> = { [K in keyof V]: RefineVariantType<V[K]> }\n\n/** Extracts and refines variant option types from a DefaultVariants definition */\nexport type RefineVariants<T extends AllVariants> = RefineVariantTypes<{ [K in keyof T]: keyof T[K] & string }>\n\n/**\n * Complete CSS object representation with main and variant styles.\n *\n * @template V - The variant definitions type\n *\n * @example\n * const obj = new CSSObject({\n * color: 'blue',\n * variants: {\n * size: {\n * small: { fontSize: 12 },\n * large: { fontSize: 18 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * obj.asCssString() // Returns complete CSS with all variants\n */\nexport class CSSObject<V extends AllVariants = DefaultVariants> {\n /** The main style block (non-variant styles) */\n public readonly mainBlock: CssObjectBlock\n /** Compiled blocks for each variant option */\n public readonly variantBlocks: { [K in keyof V & string]: Record<keyof V[K] & string, CssObjectBlock> }\n /** Default variant selections */\n public readonly variantDefaults: Partial<RefineVariants<V>>\n /** Compound variant conditions and their parsed sub-blocks */\n public readonly compoundVariants: { conditions: Record<string, string>; subBlocks: CssObjectSubBlock[] }[]\n\n /**\n * Creates a new CSSObject from style props.\n * Compiles main styles and all variant options into CSS blocks.\n */\n public constructor({ variants, defaultVariants, compoundVariants, ...props }: MochiCSSProps<V>) {\n this.mainBlock = new CssObjectBlock(props as StyleProps)\n this.variantBlocks = {} as typeof this.variantBlocks\n this.variantDefaults = defaultVariants ?? {}\n this.compoundVariants = []\n\n if (variants) {\n for (const variantGroupName in variants) {\n this.variantBlocks[variantGroupName] =\n {} as (typeof this.variantBlocks)[keyof typeof this.variantBlocks]\n const variantGroup = variants[variantGroupName]\n for (const variantItemName in variantGroup) {\n this.variantBlocks[variantGroupName][variantItemName] = new CssObjectBlock(\n variantGroup[variantItemName] ?? {},\n )\n }\n }\n }\n\n if (compoundVariants) {\n for (const compound of compoundVariants) {\n const { css: styles, ...conditions } = compound\n this.compoundVariants.push({\n conditions: conditions as Record<string, string>,\n subBlocks: CssObjectSubBlock.fromProps(styles),\n })\n }\n }\n }\n\n /**\n * Serializes the entire CSS object to a CSS string.\n * Outputs main block first, then all variant blocks in sorted order.\n * @returns Complete CSS string ready for injection into a stylesheet\n */\n public asCssString(): string {\n return [\n this.mainBlock.asCssString(this.mainBlock.selector),\n ...Object.entries(this.variantBlocks)\n .toSorted(compareStringKey)\n .flatMap(([_, b]) => Object.entries(b).toSorted(compareStringKey))\n .map(([_, b]) => b.asCssString(this.mainBlock.selector)),\n ...this.compoundVariants.flatMap(({ conditions, subBlocks }) => {\n const selectorParts: string[] = []\n for (const [variantName, optionName] of Object.entries(conditions).toSorted(compareStringKey)) {\n const selector = this.variantBlocks[variantName]?.[optionName]?.selector\n if (selector === undefined) return []\n selectorParts.push(selector)\n }\n const combinedSelector = `${this.mainBlock.selector}${selectorParts.join(\"\")}`\n return subBlocks.map((b) => b.asCssString(combinedSelector))\n }),\n ].join(\"\\n\\n\")\n }\n}\n","/**\n * Core CSS-in-JS runtime for generating and applying styles.\n * Provides the main `css` function and `MochiCSS` class for style management.\n * @module css\n */\n\nimport clsx from \"clsx\"\nimport { CSSObject, AllVariants, DefaultVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/**\n * Runtime representation of a CSS style definition with variant support.\n * Holds generated class names and provides methods to compute the final\n * className string based on selected variants.\n *\n * @template V - The variant definitions type mapping variant names to their options\n *\n * @example\n * const styles = MochiCSS.from(new CSSObject({\n * color: 'blue',\n * variants: { size: { small: { fontSize: 12 }, large: { fontSize: 18 } } }\n * }))\n * styles.variant({ size: 'large' }) // Returns combined class names\n */\nconst MOCHI_CSS_TYPEOF = Symbol.for(\"mochi-css.MochiCSS\")\n\nexport function isMochiCSS(value: unknown): value is MochiCSS {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<string, unknown>)[\"$$typeof\"] === MOCHI_CSS_TYPEOF\n )\n}\n\nexport class MochiCSS<V extends AllVariants = DefaultVariants> {\n readonly $$typeof = MOCHI_CSS_TYPEOF\n\n /**\n * Creates a new MochiCSS instance.\n * @param classNames - Base class names to always include\n * @param variantClassNames - Mapping of variant names to option class names\n * @param defaultVariants - Default variant selections when not specified\n */\n constructor(\n public readonly classNames: string[],\n public readonly variantClassNames: { [K in keyof V]: { [P in keyof V[K]]: string } },\n public readonly defaultVariants: Partial<RefineVariants<V>>,\n ) {}\n\n /**\n * Computes the final className string based on variant selections.\n * Compound variants are handled purely via CSS combined selectors,\n * so no runtime matching is needed here.\n * @param props - Variant selections\n * @returns Combined className string for use in components\n */\n variant(props: Partial<RefineVariants<V>>): string {\n const keys = new Set<keyof V & string>(\n [...Object.keys(props), ...Object.keys(this.defaultVariants)].filter((k) => k in this.variantClassNames),\n )\n\n return clsx(\n this.classNames,\n ...keys.values().map((k) => {\n const variantGroup = this.variantClassNames[k]\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!variantGroup) return false\n\n const variantKey = ((k in props ? props[k] : undefined) ?? this.defaultVariants[k])?.toString()\n if (variantKey == null) return false\n\n const selectedClassname = variantGroup[variantKey]\n if (selectedClassname !== undefined) return selectedClassname\n\n const defaultKey = this.defaultVariants[k]\n if (defaultKey == null) return false\n\n return variantGroup[defaultKey.toString()]\n }),\n )\n }\n\n /**\n * Creates a MochiCSS instance from a CSSObject.\n * Extracts class names from the compiled CSS blocks.\n * @template V - The variant definitions type\n * @param object - The compiled CSSObject to extract from\n * @returns A new MochiCSS instance with the extracted class names\n */\n static from<V extends AllVariants = DefaultVariants>(object: CSSObject<V>): MochiCSS<V> {\n return new MochiCSS<V>(\n [object.mainBlock.className],\n Object.fromEntries(\n Object.entries(object.variantBlocks).map(([key, variantOptions]) => {\n return [\n key,\n Object.fromEntries(\n Object.entries(variantOptions).map(([optionKey, block]) => {\n return [optionKey, block.className]\n }),\n ),\n ]\n }),\n ) as { [K in keyof V]: { [P in keyof V[K]]: string } },\n object.variantDefaults,\n )\n }\n}\n\n/**\n * Creates a CSS style definition.\n * The primary API for defining styles in Mochi-CSS.\n *\n * @template V - Tuple of variant definition types\n * @param props - One or more style objects or existing MochiCSS instances to merge\n * @returns A MochiCSS instance with all styles and variants combined\n *\n * @example\n * // Simple usage\n * const button = css({ padding: 8, borderRadius: 4 })\n *\n * @example\n * // With variants\n * const button = css({\n * padding: 8,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * }\n * },\n * defaultVariants: { size: 'small' }\n * })\n * button.variant({ size: 'large' }) // Get class names for large size\n *\n * @example\n * // Merging multiple styles\n * const combined = css(baseStyles, additionalStyles)\n */\nconst emptyMochiCSS = new MochiCSS<AllVariants>([], {}, {})\n\n/**\n * Merges multiple MochiCSS instances into a single one, combining their\n * class names, variant class names, and default variants.\n * @param instances - The MochiCSS instances to merge\n * @returns A new MochiCSS instance with all styles combined\n */\nexport function mergeMochiCss<V extends AllVariants[]>(\n instances: MochiCSS<AllVariants>[],\n): MochiCSS<MergeCSSVariants<V>> {\n if (instances.length === 0) return emptyMochiCSS as MochiCSS<MergeCSSVariants<V>>\n\n return new MochiCSS<AllVariants>(\n instances.flatMap((c) => c.classNames),\n instances.reduce((a, b) => Object.assign(a, b.variantClassNames), {}),\n instances.reduce((a, b) => Object.assign(a, b.defaultVariants), {}),\n ) as MochiCSS<MergeCSSVariants<V>>\n}\n\nexport function css<V extends AllVariants[]>(\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> | MochiCSS }\n): MochiCSS<MergeCSSVariants<V>> {\n const cssToMerge: MochiCSS<AllVariants>[] = []\n for (const p of props) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (p == null || typeof p !== \"object\") continue\n if (p instanceof MochiCSS) {\n cssToMerge.push(p)\n } else {\n cssToMerge.push(MochiCSS.from(new CSSObject<AllVariants>(p)))\n }\n }\n\n return mergeMochiCss(cssToMerge)\n}\n","/**\n * React styled component utilities.\n * Creates styled components with CSS-in-JS support and variant props.\n * @module styled\n */\n\nimport { ComponentProps, ComponentType, createElement, FC, HTMLElementType } from \"react\"\nimport { css } from \"@/css\"\nimport clsx from \"clsx\"\nimport { AllVariants, MergeCSSVariants, MochiCSSProps, RefineVariants } from \"@/cssObject\"\n\n/** Props added by MochiCSS to styled components */\ntype MochiProps<V extends AllVariants[]> = {\n className?: string\n} & Partial<RefineVariants<MergeCSSVariants<V>>>\n\n/** Minimal interface for components that accept className */\ntype Cls = { className?: string }\n\n/**\n * Creates a styled React component with CSS-in-JS support and variant props.\n * Similar to styled-components or Stitches, but with zero runtime overhead.\n *\n * @template T - The base element type or component type\n * @template V - The variant definitions tuple type\n * @param target - The HTML element tag name or React component to style\n * @param props - One or more style objects with optional variants\n * @returns A React functional component with merged props and variant support\n *\n * @example\n * const Button = styled('button', {\n * padding: 8,\n * borderRadius: 4,\n * variants: {\n * size: {\n * small: { padding: 4 },\n * large: { padding: 16 }\n * },\n * variant: {\n * primary: { backgroundColor: 'blue' },\n * secondary: { backgroundColor: 'gray' }\n * }\n * }\n * })\n *\n * // Usage: <Button size=\"large\" variant=\"primary\">Click me</Button>\n */\n//TODO: Move to dedicated \"styled\" package\nexport function styled<T extends HTMLElementType | ComponentType<Cls>, V extends AllVariants[]>(\n target: T,\n ...props: { [K in keyof V]: MochiCSSProps<V[K]> }\n): FC<Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>> {\n const styles = css<V>(...props)\n return ({ className, ...p }: Omit<ComponentProps<T>, keyof MochiProps<V>> & MochiProps<V>) =>\n //TODO: pick only variant props from p\n //TODO: omit variant props in p\n createElement(target, {\n className: clsx(styles.variant(p as unknown as Parameters<typeof styles.variant>[0]), className),\n ...p,\n })\n}\n","import { shortHash } from \"@/hash\"\nimport { cssFromProps, SimpleStyleProps } from \"@/props\"\nimport { compareStringKey } from \"@/compare\"\n\nexport type KeyframeStops = Record<string, SimpleStyleProps>\n\nexport class KeyframesObject {\n public readonly name: string\n private readonly body: string\n\n constructor(stops: KeyframeStops) {\n this.body = KeyframesObject.generateBody(stops)\n this.name = \"kf\" + shortHash(this.body)\n }\n\n asCssString(): string {\n return `@keyframes ${this.name} {\\n${this.body}\\n}`\n }\n\n private static generateBody(stops: KeyframeStops): string {\n return Object.entries(stops)\n .toSorted(compareStringKey)\n .map(([stopKey, props]) => {\n const cssProps = cssFromProps(props)\n const propsStr = Object.entries(cssProps)\n .toSorted(compareStringKey)\n .map(([k, v]) => ` ${k}: ${v};`)\n .join(\"\\n\")\n return ` ${stopKey} {\\n${propsStr}\\n }`\n })\n .join(\"\\n\\n\")\n }\n}\n","import { KeyframesObject, type KeyframeStops } from \"@/keyframesObject\"\nexport type { KeyframeStops } from \"@/keyframesObject\"\n\nexport class MochiKeyframes {\n constructor(public readonly name: string) {}\n\n toString(): string {\n return this.name\n }\n\n get value(): string {\n return this.name\n }\n\n static from(object: KeyframesObject): MochiKeyframes {\n return new MochiKeyframes(object.name)\n }\n}\n\nexport function keyframes(stops: KeyframeStops): MochiKeyframes {\n return MochiKeyframes.from(new KeyframesObject(stops))\n}\n","import { CssObjectSubBlock } from \"@/cssObject\"\nimport { compareStringKey } from \"@/compare\"\nimport { StyleProps } from \"@/props\"\n\nexport type GlobalCssStyles = Record<string, StyleProps>\n\n/**\n * CSS object model for global (non-scoped) styles.\n * Accepts a map of CSS selectors to style objects and serializes them\n * as plain CSS rules without class name scoping.\n *\n * @example\n * const obj = new GlobalCssObject({\n * body: { margin: 0 },\n * 'h1': { fontSize: 32 },\n * })\n * obj.asCssString() // \"body {\\n margin: 0;\\n}\\n\\nh1 {\\n font-size: 32px;\\n}\"\n */\nexport class GlobalCssObject {\n private readonly rules: { selector: string; subBlocks: CssObjectSubBlock[] }[]\n\n constructor(styles: GlobalCssStyles) {\n this.rules = Object.entries(styles)\n .toSorted(compareStringKey)\n .map(([selector, props]) => ({\n selector,\n subBlocks: [...CssObjectSubBlock.fromProps(props)],\n }))\n }\n\n asCssString(): string {\n return this.rules\n .flatMap(({ selector, subBlocks }) => subBlocks.map((b) => b.asCssString(selector)))\n .join(\"\\n\\n\")\n }\n}\n","import type { GlobalCssStyles } from \"@/globalCssObject\"\nexport type { GlobalCssStyles } from \"@/globalCssObject\"\n\n/**\n * Creates a global CSS definition.\n * Styles are not scoped to any class — they apply to all matching elements.\n *\n * @param styles - Map of CSS selectors to style objects\n *\n * @example\n * globalCss({\n * 'body': { margin: 0, padding: 0 },\n * '*, *::before, *::after': { boxSizing: 'border-box' },\n * })\n */\nexport function globalCss(styles: GlobalCssStyles): void {\n void styles // mark as used\n}\n","/**\n * Helper builders for CSS at-rule keys.\n * Provides a typed, ergonomic API for constructing @media, @container, and @supports rules.\n * @module query\n */\n\nimport type { AtRuleKey } from \"@/props\"\n\n/**\n * Wraps a condition in parentheses if not already wrapped.\n */\nfunction wrapParens(condition: string): string {\n const trimmed = condition.trim()\n if (trimmed.startsWith(\"(\") && trimmed.endsWith(\")\")) return trimmed\n return `(${trimmed})`\n}\n\n// ─── @media ──────────────────────────────────────────────────────────────────\n\ninterface MediaHelper {\n /** `@media (condition)` */\n (condition: string): AtRuleKey & `@media ${string}`\n /** `@media (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (a), (b), …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: dark)` */\n readonly dark: AtRuleKey & `@media ${string}`\n /** `@media (prefers-color-scheme: light)` */\n readonly light: AtRuleKey & `@media ${string}`\n /** `@media (prefers-reduced-motion: no-preference)` */\n readonly motion: AtRuleKey & `@media ${string}`\n /** `@media print` */\n readonly print: AtRuleKey & `@media ${string}`\n}\n\nfunction mediaFn(condition: string): AtRuleKey & `@media ${string}` {\n return `@media ${wrapParens(condition)}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@media ${string}`\n}\n\nmediaFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@media ${string}` {\n return `@media ${conditions.map(wrapParens).join(\", \")}` as AtRuleKey & `@media ${string}`\n}\n\nObject.defineProperties(mediaFn, {\n dark: { get: () => \"@media (prefers-color-scheme: dark)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n light: { get: () => \"@media (prefers-color-scheme: light)\" as AtRuleKey & `@media ${string}`, enumerable: true },\n motion: {\n get: () => \"@media (prefers-reduced-motion: no-preference)\" as AtRuleKey & `@media ${string}`,\n enumerable: true,\n },\n print: { get: () => \"@media print\" as AtRuleKey & `@media ${string}`, enumerable: true },\n})\n\n/** Helper for constructing `@media` at-rule keys. */\nexport const media = mediaFn as MediaHelper\n\n// ─── @container ──────────────────────────────────────────────────────────────\n\ninterface ContainerHelper {\n /** `@container (condition)` — anonymous container */\n (condition: string): AtRuleKey & `@container ${string}`\n /** `@container name (condition)` — named container */\n named(name: string, condition: string): AtRuleKey & `@container ${string}`\n}\n\nfunction containerFn(condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\ncontainerFn.named = function (name: string, condition: string): AtRuleKey & `@container ${string}` {\n return `@container ${name} ${wrapParens(condition)}` as AtRuleKey & `@container ${string}`\n}\n\n/** Helper for constructing `@container` at-rule keys. */\nexport const container = containerFn as ContainerHelper\n\n// ─── @supports ───────────────────────────────────────────────────────────────\n\ninterface SupportsHelper {\n /** `@supports (declaration)` */\n (condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports not (declaration)` */\n not(condition: string): AtRuleKey & `@supports ${string}`\n /** `@supports (a) and (b) and …` */\n and(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n /** `@supports (a) or (b) or …` */\n or(...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}`\n}\n\nfunction supportsFn(condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.not = function (condition: string): AtRuleKey & `@supports ${string}` {\n return `@supports not ${wrapParens(condition)}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.and = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" and \")}` as AtRuleKey & `@supports ${string}`\n}\n\nsupportsFn.or = function (...conditions: [string, string, ...string[]]): AtRuleKey & `@supports ${string}` {\n return `@supports ${conditions.map(wrapParens).join(\" or \")}` as AtRuleKey & `@supports ${string}`\n}\n\n/** Helper for constructing `@supports` at-rule keys. */\nexport const supports = supportsFn as SupportsHelper\n"],"mappings":"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f,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,SAAS;CACT,gBAAgB;CAChB,qBAAqB;CACrB,yBAAyB;CACzB,YAAY;CACZ,YAAY;CACZ,gBAAgB;CAChB,qBAAqB;CACrB,iBAAiB;CACjB,0BAA0B;CAC1B,6BAA6B;CAC7B,+BAA+B;CAC/B,sBAAsB;CACtB,yBAAyB;CACzB,2BAA2B;CAC3B,KAAK;CACL,iBAAiB;CACjB,YAAY;CACZ,iBAAiB;CACjB,oBAAoB;CACpB,WAAW;CACX,eAAe;CACf,cAAc;CACd,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,OAAO;CACP,aAAa;CACb,GAAG;CACH,GAAG;CACH,MAAM;CACT;;;;ACnUD,MAAaC,qBAA0C,IAAI,IAAI;CAC3D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH,CAAC;;;;;;;AC/sBF,SAAgB,aAAa,KAAqB;AAC9C,QAAO,IAAI,QAAQ,WAAW,MAAM,MAAM,EAAE,aAAa,CAAC;;AAG9D,SAAS,mBAAmB,cAA0C;AAClE,QAAO,gBAAgB,gBAAgB,cAAc,gBAAoC;;;;;;AAO7F,SAAS,YAAY,OAAiC,cAAsB,WAAW,IAAY;AAC/F,KAAI,YAAY,EAAG,QAAO;AAC1B,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,UAAU;EAC3B,MAAM,OAAO,mBAAmB,aAAa;AAC7C,MAAI,SAAS,IAAK,QAAO,GAAG,QAAQ,MAAM;AAC1C,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,OAAO,GAAG,QAAQ,SAAS,MAAM,UAAU;;AAEtD,QAAO,YAAY,MAAM,OAAO,cAAc,WAAW,EAAE;;;;;AAM/D,SAAgB,kBAAkB,KAA4B;AAC1D,QAAO,IAAI,WAAW,KAAK;;;;;;;;AAS/B,SAAgB,MAAM,OAAiC,WAAW,IAAY;AAC1E,KAAI,YAAY,EAAG,QAAO;AAC1B,SAAQ,OAAO,OAAf;EACI,KAAK,SACD,QAAO;EACX,KAAK,SACD,QAAO,MAAM,UAAU;EAC3B,QACI,QAAO,MAAM,MAAM,OAAO,WAAW,EAAE;;;;;;AAOnD,SAAgB,oBAAoB,KAAiC;AACjE,QAAO,mBAAmB,IAAI,IAAI;;;;;;;;;AAUtC,SAAgB,YAAY,OAAgB,KAA0B;AAClE,QAAO,YAAY,OAAmC,IAAI;;;;;AAO9D,SAAgB,iBAAiB,KAAuC;AACpE,QAAO,IAAI,SAAS,IAAI;;;AAI5B,MAAM,mBAAmB;CAAC;CAAW;CAAe;CAAc;CAAU;;;;AAK5E,SAAgB,YAAY,KAA+B;AACvD,QAAO,iBAAiB,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;;;;;;;;;;;AAiD1D,SAAgB,aACZ,OACsB;AACtB,QAAO,OAAO,YACV,OAAO,QAAQ,MAAM,CAChB,KAAK,CAAC,KAAK,WAAyC;AACjD,MAAI,UAAU,OAAW,QAAO;AAEhC,MAAI,kBAAkB,IAAI,CAAE,QAAO,CAAC,KAAK,MAAM,MAAkC,CAAC;AAElF,MAAI,oBAAoB,IAAI,CAAE,QAAO,CAAC,aAAa,IAAI,EAAE,YAAY,OAAO,IAAI,CAAC;GAEnF,CACD,QAAQ,MAAM,MAAM,OAAU,CACtC;;;;;;;;;;;;;;AC5JL,IAAa,gBAAb,MAAa,cAAc;;;;;;CAMvB,YACI,AAAiBC,eAAyB,EAAE,EAC5C,AAAgBC,UAAoB,EAAE,EACxC;EAFmB;EACD;;;;;;;CAQpB,IAAI,cAAsB;AACtB,MAAI,KAAK,aAAa,WAAW,EAAG,QAAO;AAC3C,SAAO,KAAK,aAAa,KAAK,KAAK;;;;;;;CAQvC,WAAW,MAA6B;AACpC,SAAO,IAAI,cACP,KAAK,aAAa,KAAK,aAAa,SAAS,QAAQ,MAAM,KAAK,CAAC,EACjE,KAAK,QACR;;;;;;;;;;;CAYL,OAAO,OAA8B;AACjC,MAAI,CAAC,iBAAiB,MAAM,CAAE,QAAO;EACrC,MAAM,WAAW,cAAc,MAAM,MAAM;AAM3C,SAAO,IAAI,cALO,KAAK,aAAa,SAAS,mBACzC,SAAS,KAAK,kBAAkB;AAC5B,UAAO,cAAc,QAAQ,MAAM,eAAe;IACpD,CACL,EACmC,KAAK,QAAQ;;;;;;;;;;CAWrD,KAAK,QAA+B;AAChC,MAAI,CAAC,YAAY,OAAO,CAAE,QAAO;AACjC,SAAO,IAAI,cAAc,KAAK,cAAc,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;;;;;;;CAQ1E,OAAe,MAAM,UAA4B;AAC7C,SAAO,CAAC,SAAS;;;;;;;;;;;;AClFzB,MAAM,WAAW;AACjB,MAAM,OAAO;;;;;;;AAQb,SAAgB,eAAe,KAAa,WAA4B;CACpE,IAAI,MAAM;AACV,QAAO,MAAM,KAAK,IAAI,UAAU,aAAa,WAAW;AAEpD,QAAM,SAAS,MAAM,QAAS;AAC9B,QAAM,KAAK,MAAM,MAAM,KAAK;;AAEhC,QAAO,IAAI,SAAS,IAAI,MAAM;;;;;;;;;;;AAYlC,SAAgB,UAAU,OAAe,SAAS,GAAW;CAEzD,IAAI,IAAI;AACR,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAC9B,KAAK,IAAI,KAAM,MAAM,WAAW,EAAE;AAGtC,QAAO;AAEP,QAAO,eAAe,GAAG,OAAO;;;;;;;;;;;;;ACnCpC,SAAgB,cAAgC,GAAM,GAAM;AACxD,QAAO,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI;;;;;;AAOtC,SAAgB,iBAA8C,GAAM,GAAM;AACtE,QAAO,cAAc,EAAE,IAAI,EAAE,GAAG;;;;;;;;;;AAWpC,SAAgB,qBAAuC,MAAS;AAC5D,SAAqC,GAAM,MAAS,cAAc,EAAE,OAAO,EAAE,MAAM;;;;;;;;;ACJvF,IAAa,oBAAb,MAAa,kBAAkB;;;;;;CAM3B,YACI,AAAgBC,UAChB,AAAgBC,UAClB;EAFkB;EACA;;;;;;CAOpB,IAAI,OAAe;AAEf,SAAO,UADK,KAAK,YAAY,IAAI,CACZ;;;;;;;;;CAUzB,YAAY,MAAsB;EAC9B,MAAM,WAAW,KAAK,SAAS,WAAW,KAAK;EAC/C,MAAM,UAAU,SAAS;EACzB,MAAM,cAAc,OAAO,OAAO,QAAQ,OAAO;EAEjD,MAAM,QAAQ,OAAO,QAAQ,KAAK,SAAS,CACtC,SAAS,iBAAiB,CAC1B,KAAK,CAAC,GAAG,OAAO,GAAG,YAAY,MAAM,EAAE,IAAI,EAAE,KAAK,CAClD,KAAK,GAAG;EAEb,IAAI,SAAS,GAAG,cAAc,SAAS,YAAY,MAAM,QAAQ,YAAY;AAE7E,OAAK,IAAI,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;GAC1C,MAAM,cAAc,OAAO,OAAO,EAAE;AACpC,YAAS,GAAG,cAAc,QAAQ,GAAG,MAAM,OAAO,IAAI,YAAY;;AAGtE,SAAO;;;;;;;;;;;CAYX,OAAO,UAAU,OAAmB,UAAuE;AACvG,eAAa,IAAI,cAAc,CAAC,IAAI,CAAC;EAErC,MAAMD,WAAmC,EAAE;EAC3C,MAAME,iBAAgF,EAAE;AAExF,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE;AAE9C,OAAI,UAAU,OAAW;AAGzB,OAAI,kBAAkB,IAAI,EAAE;AACxB,aAAS,OAAO,MAAM,MAAkC;AACxD;;AAIJ,OAAI,oBAAoB,IAAI,EAAE;AAC1B,aAAS,aAAa,IAAI,IAAI,YAAY,OAAO,IAAI;AACrD;;AAIJ,OAAI,iBAAiB,IAAI,EAAE;AACvB,mBAAe,KAAK;KAChB;KACA,OAAO;KACP,UAAU,SAAS,OAAO,IAAI;KACjC,CAAC;AACF;;AAIJ,OAAI,YAAY,IAAI,EAAE;AAClB,mBAAe,KAAK;KAChB;KACA,OAAO;KACP,UAAU,SAAS,KAAK,IAAI;KAC/B,CAAC;AACF;;AAGJ,OAAI,QAAQ,IAAI,gBAAgB,aAC5B,SAAQ,KAAK,uCAAuC,IAAI,mBAAmB;;AAInF,SAAO,CACH,IAAI,kBAAkB,UAAU,SAAS,EACzC,GAAG,eACE,SAAS,qBAAqB,MAAM,CAAC,CACrC,SAAS,EAAE,gBAAO,2BAAe,kBAAkB,UAAUC,SAAOC,WAAS,CAAC,CACtF;;;;;;;AAQT,IAAa,iBAAb,MAA4B;;CAExB,AAAgB;;CAEhB,AAAgB,YAAiC,EAAE;;;;;;CAOnD,YAAY,QAAoB;EAC5B,MAAM,SAAS,kBAAkB,UAAU,OAAO;AAElD,OAAK,YAAY,MAAM,UAAU,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;AACrE,OAAK,YAAY;;;;;CAMrB,IAAI,WAAmB;AACnB,SAAO,IAAI,KAAK;;;;;;;CAQpB,YAAY,MAAsB;AAC9B,SAAO,KAAK,UACP,KAAK,MAAM,EAAE,YAAY,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,CAC9F,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;AAwFzB,IAAa,YAAb,MAAgE;;CAE5D,AAAgB;;CAEhB,AAAgB;;CAEhB,AAAgB;;CAEhB,AAAgB;;;;;CAMhB,AAAO,YAAY,EAAE,UAAU,iBAAiB,iBAAkB,GAAG,SAA2B;AAC5F,OAAK,YAAY,IAAI,eAAe,MAAoB;AACxD,OAAK,gBAAgB,EAAE;AACvB,OAAK,kBAAkB,mBAAmB,EAAE;AAC5C,OAAK,mBAAmB,EAAE;AAE1B,MAAI,SACA,MAAK,MAAM,oBAAoB,UAAU;AACrC,QAAK,cAAc,oBACf,EAAE;GACN,MAAM,eAAe,SAAS;AAC9B,QAAK,MAAM,mBAAmB,aAC1B,MAAK,cAAc,kBAAkB,mBAAmB,IAAI,eACxD,aAAa,oBAAoB,EAAE,CACtC;;AAKb,MAAI,iBACA,MAAK,MAAM,YAAY,kBAAkB;GACrC,MAAM,EAAE,KAAK,OAAQ,GAAG,eAAe;AACvC,QAAK,iBAAiB,KAAK;IACX;IACZ,WAAW,kBAAkB,UAAU,OAAO;IACjD,CAAC;;;;;;;;CAUd,AAAO,cAAsB;AACzB,SAAO;GACH,KAAK,UAAU,YAAY,KAAK,UAAU,SAAS;GACnD,GAAG,OAAO,QAAQ,KAAK,cAAc,CAChC,SAAS,iBAAiB,CAC1B,SAAS,CAAC,GAAG,OAAO,OAAO,QAAQ,EAAE,CAAC,SAAS,iBAAiB,CAAC,CACjE,KAAK,CAAC,GAAG,OAAO,EAAE,YAAY,KAAK,UAAU,SAAS,CAAC;GAC5D,GAAG,KAAK,iBAAiB,SAAS,EAAE,YAAY,gBAAgB;IAC5D,MAAMC,gBAA0B,EAAE;AAClC,SAAK,MAAM,CAAC,aAAa,eAAe,OAAO,QAAQ,WAAW,CAAC,SAAS,iBAAiB,EAAE;KAC3F,MAAM,WAAW,KAAK,cAAc,eAAe,aAAa;AAChE,SAAI,aAAa,OAAW,QAAO,EAAE;AACrC,mBAAc,KAAK,SAAS;;IAEhC,MAAM,mBAAmB,GAAG,KAAK,UAAU,WAAW,cAAc,KAAK,GAAG;AAC5E,WAAO,UAAU,KAAK,MAAM,EAAE,YAAY,iBAAiB,CAAC;KAC9D;GACL,CAAC,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;AClTtB,MAAM,mBAAmB,OAAO,IAAI,qBAAqB;AAEzD,SAAgB,WAAW,OAAmC;AAC1D,QACI,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,gBAAgB;;AAI3D,IAAa,WAAb,MAAa,SAAkD;CAC3D,AAAS,WAAW;;;;;;;CAQpB,YACI,AAAgBC,YAChB,AAAgBC,mBAChB,AAAgBC,iBAClB;EAHkB;EACA;EACA;;;;;;;;;CAUpB,QAAQ,OAA2C;EAC/C,MAAM,OAAO,IAAI,IACb,CAAC,GAAG,OAAO,KAAK,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,gBAAgB,CAAC,CAAC,QAAQ,MAAM,KAAK,KAAK,kBAAkB,CAC3G;AAED,SAAO,KACH,KAAK,YACL,GAAG,KAAK,QAAQ,CAAC,KAAK,MAAM;GACxB,MAAM,eAAe,KAAK,kBAAkB;AAE5C,OAAI,CAAC,aAAc,QAAO;GAE1B,MAAM,eAAe,KAAK,QAAQ,MAAM,KAAK,WAAc,KAAK,gBAAgB,KAAK,UAAU;AAC/F,OAAI,cAAc,KAAM,QAAO;GAE/B,MAAM,oBAAoB,aAAa;AACvC,OAAI,sBAAsB,OAAW,QAAO;GAE5C,MAAM,aAAa,KAAK,gBAAgB;AACxC,OAAI,cAAc,KAAM,QAAO;AAE/B,UAAO,aAAa,WAAW,UAAU;IAC3C,CACL;;;;;;;;;CAUL,OAAO,KAA8C,QAAmC;AACpF,SAAO,IAAI,SACP,CAAC,OAAO,UAAU,UAAU,EAC5B,OAAO,YACH,OAAO,QAAQ,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,oBAAoB;AAChE,UAAO,CACH,KACA,OAAO,YACH,OAAO,QAAQ,eAAe,CAAC,KAAK,CAAC,WAAW,WAAW;AACvD,WAAO,CAAC,WAAW,MAAM,UAAU;KACrC,CACL,CACJ;IACH,CACL,EACD,OAAO,gBACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,MAAM,gBAAgB,IAAI,SAAsB,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;;;;;;;AAQ3D,SAAgB,cACZ,WAC6B;AAC7B,KAAI,UAAU,WAAW,EAAG,QAAO;AAEnC,QAAO,IAAI,SACP,UAAU,SAAS,MAAM,EAAE,WAAW,EACtC,UAAU,QAAQ,GAAG,MAAM,OAAO,OAAO,GAAG,EAAE,kBAAkB,EAAE,EAAE,CAAC,EACrE,UAAU,QAAQ,GAAG,MAAM,OAAO,OAAO,GAAG,EAAE,gBAAgB,EAAE,EAAE,CAAC,CACtE;;AAGL,SAAgB,IACZ,GAAG,OAC0B;CAC7B,MAAMC,aAAsC,EAAE;AAC9C,MAAK,MAAM,KAAK,OAAO;AAEnB,MAAI,KAAK,QAAQ,OAAO,MAAM,SAAU;AACxC,MAAI,aAAa,SACb,YAAW,KAAK,EAAE;MAElB,YAAW,KAAK,SAAS,KAAK,IAAI,UAAuB,EAAE,CAAC,CAAC;;AAIrE,QAAO,cAAc,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HpC,SAAgB,OACZ,QACA,GAAG,OAC6D;CAChE,MAAM,SAAS,IAAO,GAAG,MAAM;AAC/B,SAAQ,EAAE,UAAW,GAAG,QAGpB,cAAc,QAAQ;EAClB,WAAW,KAAK,OAAO,QAAQ,EAAqD,EAAE,UAAU;EAChG,GAAG;EACN,CAAC;;;;;ACrDV,IAAa,kBAAb,MAAa,gBAAgB;CACzB,AAAgB;CAChB,AAAiB;CAEjB,YAAY,OAAsB;AAC9B,OAAK,OAAO,gBAAgB,aAAa,MAAM;AAC/C,OAAK,OAAO,OAAO,UAAU,KAAK,KAAK;;CAG3C,cAAsB;AAClB,SAAO,cAAc,KAAK,KAAK,MAAM,KAAK,KAAK;;CAGnD,OAAe,aAAa,OAA8B;AACtD,SAAO,OAAO,QAAQ,MAAM,CACvB,SAAS,iBAAiB,CAC1B,KAAK,CAAC,SAAS,WAAW;GACvB,MAAM,WAAW,aAAa,MAAM;AAKpC,UAAO,OAAO,QAAQ,MAJL,OAAO,QAAQ,SAAS,CACpC,SAAS,iBAAiB,CAC1B,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE,IAAI,EAAE,GAAG,CACtC,KAAK,KAAK,CACsB;IACvC,CACD,KAAK,OAAO;;;;;;AC3BzB,IAAa,iBAAb,MAAa,eAAe;CACxB,YAAY,AAAgBC,MAAc;EAAd;;CAE5B,WAAmB;AACf,SAAO,KAAK;;CAGhB,IAAI,QAAgB;AAChB,SAAO,KAAK;;CAGhB,OAAO,KAAK,QAAyC;AACjD,SAAO,IAAI,eAAe,OAAO,KAAK;;;AAI9C,SAAgB,UAAU,OAAsC;AAC5D,QAAO,eAAe,KAAK,IAAI,gBAAgB,MAAM,CAAC;;;;;;;;;;;;;;;;;ACF1D,IAAa,kBAAb,MAA6B;CACzB,AAAiB;CAEjB,YAAY,QAAyB;AACjC,OAAK,QAAQ,OAAO,QAAQ,OAAO,CAC9B,SAAS,iBAAiB,CAC1B,KAAK,CAAC,UAAU,YAAY;GACzB;GACA,WAAW,CAAC,GAAG,kBAAkB,UAAU,MAAM,CAAC;GACrD,EAAE;;CAGX,cAAsB;AAClB,SAAO,KAAK,MACP,SAAS,EAAE,UAAU,gBAAgB,UAAU,KAAK,MAAM,EAAE,YAAY,SAAS,CAAC,CAAC,CACnF,KAAK,OAAO;;;;;;;;;;;;;;;;;;AClBzB,SAAgB,UAAU,QAA+B;;;;;;;ACJzD,SAAS,WAAW,WAA2B;CAC3C,MAAM,UAAU,UAAU,MAAM;AAChC,KAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,IAAI,CAAE,QAAO;AAC7D,QAAO,IAAI,QAAQ;;AAsBvB,SAAS,QAAQ,WAAmD;AAChE,QAAO,UAAU,WAAW,UAAU;;AAG1C,QAAQ,MAAM,SAAU,GAAG,YAA2E;AAClG,QAAO,UAAU,WAAW,IAAI,WAAW,CAAC,KAAK,QAAQ;;AAG7D,QAAQ,KAAK,SAAU,GAAG,YAA2E;AACjG,QAAO,UAAU,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK;;AAG1D,OAAO,iBAAiB,SAAS;CAC7B,MAAM;EAAE,WAAW;EAAyE,YAAY;EAAM;CAC9G,OAAO;EAAE,WAAW;EAA0E,YAAY;EAAM;CAChH,QAAQ;EACJ,WAAW;EACX,YAAY;EACf;CACD,OAAO;EAAE,WAAW;EAAkD,YAAY;EAAM;CAC3F,CAAC;;AAGF,MAAa,QAAQ;AAWrB,SAAS,YAAY,WAAuD;AACxE,QAAO,cAAc,WAAW,UAAU;;AAG9C,YAAY,QAAQ,SAAU,MAAc,WAAuD;AAC/F,QAAO,cAAc,KAAK,GAAG,WAAW,UAAU;;;AAItD,MAAa,YAAY;AAezB,SAAS,WAAW,WAAsD;AACtE,QAAO,aAAa,WAAW,UAAU;;AAG7C,WAAW,MAAM,SAAU,WAAsD;AAC7E,QAAO,iBAAiB,WAAW,UAAU;;AAGjD,WAAW,MAAM,SAAU,GAAG,YAA8E;AACxG,QAAO,aAAa,WAAW,IAAI,WAAW,CAAC,KAAK,QAAQ;;AAGhE,WAAW,KAAK,SAAU,GAAG,YAA8E;AACvG,QAAO,aAAa,WAAW,IAAI,WAAW,CAAC,KAAK,OAAO;;;AAI/D,MAAa,WAAW"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mochi-css/vanilla",
3
3
  "repository": "git@github.com:Niikelion/mochi-css.git",
4
- "version": "2.0.1",
4
+ "version": "2.1.0",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "css-in-js",